summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordmcmahill <dmcmahill@pkgsrc.org>2002-08-12 01:53:34 +0000
committerdmcmahill <dmcmahill@pkgsrc.org>2002-08-12 01:53:34 +0000
commit7d47e28417b3b648718acabc9baa9d8a276138b7 (patch)
treecee44d04fb7872ba6b2f40c5793ca4fbeb5eea32
parentd47d70a623c3e5ee16f3080f727b329283c29e2d (diff)
downloadpkgsrc-7d47e28417b3b648718acabc9baa9d8a276138b7.tar.gz
pull in most recent patches to gcc-2.95.3 from the netbsd-1-6
branch. Includes fixes for sparc, alpha, and others. Should help in keeping pkgsrc running on 1.5.* systems. The patches which mirror those in the main netbsd source tree have been all put into a single distribution patch file. This makes it much easier to maintain and easier to easily see which patches are specific to pkgsrc.
-rw-r--r--lang/gcc/Makefile5
-rw-r--r--lang/gcc/distinfo73
-rw-r--r--lang/gcc/files/UPDATE.txt35
-rw-r--r--lang/gcc/patches/patch-aa12
-rw-r--r--lang/gcc/patches/patch-ab14
-rw-r--r--lang/gcc/patches/patch-ac23
-rw-r--r--lang/gcc/patches/patch-ad31
-rw-r--r--lang/gcc/patches/patch-ae555
-rw-r--r--lang/gcc/patches/patch-af114
-rw-r--r--lang/gcc/patches/patch-ag106
-rw-r--r--lang/gcc/patches/patch-ah46
-rw-r--r--lang/gcc/patches/patch-ai72
-rw-r--r--lang/gcc/patches/patch-aj86
-rw-r--r--lang/gcc/patches/patch-ak13
-rw-r--r--lang/gcc/patches/patch-al53
-rw-r--r--lang/gcc/patches/patch-am13
-rw-r--r--lang/gcc/patches/patch-an14
-rw-r--r--lang/gcc/patches/patch-ao19
-rw-r--r--lang/gcc/patches/patch-ap42
-rw-r--r--lang/gcc/patches/patch-aq384
-rw-r--r--lang/gcc/patches/patch-ar12
-rw-r--r--lang/gcc/patches/patch-as15
-rw-r--r--lang/gcc/patches/patch-at24
-rw-r--r--lang/gcc/patches/patch-au32
-rw-r--r--lang/gcc/patches/patch-av29
-rw-r--r--lang/gcc/patches/patch-aw280
-rw-r--r--lang/gcc/patches/patch-ax306
-rw-r--r--lang/gcc/patches/patch-ay1396
-rw-r--r--lang/gcc/patches/patch-az34
-rw-r--r--lang/gcc/patches/patch-ba83
-rw-r--r--lang/gcc/patches/patch-bb674
-rw-r--r--lang/gcc/patches/patch-bc568
-rw-r--r--lang/gcc/patches/patch-bd1214
-rw-r--r--lang/gcc/patches/patch-be59
-rw-r--r--lang/gcc/patches/patch-bf230
-rw-r--r--lang/gcc/patches/patch-bg20
-rw-r--r--lang/gcc/patches/patch-bh13
-rw-r--r--lang/gcc/patches/patch-bi18
-rw-r--r--lang/gcc/patches/patch-bj443
-rw-r--r--lang/gcc/patches/patch-bk64
-rw-r--r--lang/gcc/patches/patch-bl189
-rw-r--r--lang/gcc/patches/patch-bm44
-rw-r--r--lang/gcc/patches/patch-bn15
-rw-r--r--lang/gcc/patches/patch-bo443
-rw-r--r--lang/gcc/patches/patch-bp128
-rw-r--r--lang/gcc/patches/patch-bq126
-rw-r--r--lang/gcc/patches/patch-br12
-rw-r--r--lang/gcc/patches/patch-bs1005
-rw-r--r--lang/gcc/patches/patch-bt247
-rw-r--r--lang/gcc/patches/patch-bu16
-rw-r--r--lang/gcc/patches/patch-bv12
-rw-r--r--lang/gcc/patches/patch-bw20
-rw-r--r--lang/gcc/patches/patch-bx23
-rw-r--r--lang/gcc/patches/patch-by81
-rw-r--r--lang/gcc/patches/patch-bz12
-rw-r--r--lang/gcc/patches/patch-ca21
-rw-r--r--lang/gcc/patches/patch-cb13
-rw-r--r--lang/gcc/patches/patch-cc20
-rw-r--r--lang/gcc/patches/patch-cd14
-rw-r--r--lang/gcc/patches/patch-ce7
-rw-r--r--lang/gcc/patches/patch-cf12
-rw-r--r--lang/gcc/patches/patch-cg13
-rw-r--r--lang/gcc/patches/patch-ch13
-rw-r--r--lang/gcc/patches/patch-ci12
-rw-r--r--lang/gcc/patches/patch-cj15
-rw-r--r--lang/gcc/patches/patch-ck17
-rw-r--r--lang/gcc/patches/patch-cl13
-rw-r--r--lang/gcc/patches/patch-cm13
-rw-r--r--lang/gcc/patches/patch-cn35
-rw-r--r--lang/gcc/patches/patch-co24
-rw-r--r--lang/gcc/patches/patch-cp5093
71 files changed, 43 insertions, 14889 deletions
diff --git a/lang/gcc/Makefile b/lang/gcc/Makefile
index 4586ed5c54d..deec630490b 100644
--- a/lang/gcc/Makefile
+++ b/lang/gcc/Makefile
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.43 2002/08/06 23:44:36 kristerw Exp $
+# $NetBSD: Makefile,v 1.44 2002/08/12 01:53:34 dmcmahill Exp $
# Make sure that the version number in "Makefile.gcc" matches this.
DISTNAME= gcc-2.95.3
@@ -13,6 +13,9 @@ MAINTAINER= packages@netbsd.org
HOMEPAGE= http://www.gnu.org/software/gcc/gcc.html
COMMENT= GNU Compiler Collection
+PATCH_SITES= ${MASTER_SITE_LOCAL}
+PATCHFILES= gcc-2.95.3-diff-2002-08-11.gz
+
BUILD_DEPENDS+= bison-[0-9]*:../../devel/bison
USE_GMAKE= YES
diff --git a/lang/gcc/distinfo b/lang/gcc/distinfo
index 66f46b47284..e320cdcc3b7 100644
--- a/lang/gcc/distinfo
+++ b/lang/gcc/distinfo
@@ -1,72 +1,7 @@
-$NetBSD: distinfo,v 1.11 2002/03/31 08:05:51 jmc Exp $
+$NetBSD: distinfo,v 1.12 2002/08/12 01:53:35 dmcmahill Exp $
SHA1 (gcc-2.95.3.tar.gz) = 535d27038d161c0e7c2662702e11a48aa97ef622
Size (gcc-2.95.3.tar.gz) = 12911721 bytes
-SHA1 (patch-aa) = 92e1f8ee1bd0873417fe3768d25b0a3d5f97cb23
-SHA1 (patch-ab) = 06bf6155ace97794578a827f1ed66afed75aa8e9
-SHA1 (patch-ac) = aa4b7d81ac28b47a9f25ad8bae40c8e0c6184c97
-SHA1 (patch-ad) = 9eb1a304e432515ba62a1fc7e80920e89c30aa3d
-SHA1 (patch-ae) = 59035f3c62300e6190cfffb49a49b28e90939f41
-SHA1 (patch-af) = 85bd1eeffb2a84bff06be8b3cb73091b1d50bc60
-SHA1 (patch-ag) = 0c76dd4e1f83ef0e3109986df851df832a73f068
-SHA1 (patch-ah) = 664c351a65ee004c2d616e067f150e6c42db630c
-SHA1 (patch-ai) = 59dde4be91730982a3dac34dc9199db83f519831
-SHA1 (patch-aj) = 8e57bc177d850bb69546db9bd9527b64bd265ef7
-SHA1 (patch-ak) = 673a5abe55a56897f24d5c306805317cdd83baaa
-SHA1 (patch-al) = 58e6d8fa40e39acca85f1a2b00f3a36180fa14f4
-SHA1 (patch-am) = bc595b708d54d4d694fab4972b8596ca06f26039
-SHA1 (patch-an) = 75baa5521a5a775efc7ac633953996cd09d044e1
-SHA1 (patch-ao) = 9fbce4eaf53e943d040f41c8569d754af46f50f0
-SHA1 (patch-ap) = 5adcf97fd2c45c825ac7b3835aed61ef87f5255c
-SHA1 (patch-aq) = 6a377322b24ad69cb9c30bf879f2a9481907ce98
-SHA1 (patch-ar) = 4af86f853521e77bf5ce7ec0e2f840a676595330
-SHA1 (patch-as) = f0ad0f4f0b60630f414548a1dbcc5e149a5abba2
-SHA1 (patch-at) = 0711ee4a4f865861c8e2ed13681ed75077b0ca9f
-SHA1 (patch-au) = e5be9a72bc5d0b4014dae0e63c22b60608a8b56c
-SHA1 (patch-av) = f12c80d882e0e5e22fe75c53a777cdcd6d3e60be
-SHA1 (patch-aw) = 30110bd9bfc53b1c20b32f1eda7e2d4244a9627c
-SHA1 (patch-ax) = 565e0f8d6231f064113efdb7931073abdb71abc0
-SHA1 (patch-ay) = 44d40f544507c965cb2e53262eb30ed0adbf2c8c
-SHA1 (patch-az) = 13b5a91a888c071ac05dfcbb168a12264bb85d26
-SHA1 (patch-ba) = fef61bbe4735f14987e8b565daecd95550328c76
-SHA1 (patch-bb) = 01316d1ccbd33b3a4c0c2e3c98d1f3d5d4022174
-SHA1 (patch-bc) = 936862fd5bc747003f65af42f2194e2850b064f5
-SHA1 (patch-bd) = 20fe2401fe134e504660f448851489e063661cc8
-SHA1 (patch-be) = e259c828b049a06e0a2729baec9a518615863b69
-SHA1 (patch-bf) = 857f94b5f2373bd6d7e0fad322c182394819d654
-SHA1 (patch-bg) = b096fe9a643242a26e9f213e2642bc99f5361888
-SHA1 (patch-bh) = a3ede3d8c5265d7b95329aa78497b3f70c13c517
-SHA1 (patch-bi) = d8e59c50b2893cf54c784881cbafcc646c660501
-SHA1 (patch-bj) = 430907594c739b0ed548bf84d6c0c3f134b00f12
-SHA1 (patch-bk) = ef3283a97cdd6d7429ca3e36b1daf8836129d5b6
-SHA1 (patch-bl) = b484a8e3045fd8ea7442dc54e8eee19461227235
-SHA1 (patch-bm) = 5ae49b04315daf26c2c853f26086c1d079599c29
-SHA1 (patch-bn) = 24982be2cdf0d70f859187306516e7490ec97a9e
-SHA1 (patch-bo) = 024594521de09703eaf75c147af84497983f4917
-SHA1 (patch-bp) = 60e79611db9967d5e4c2cd9434ec88867ddd9383
-SHA1 (patch-bq) = 099b41d33ff6d7b064610a4557fd06d878ac08c5
-SHA1 (patch-br) = 6f468ef729144be9f528d85d1bb4c8b0ba6fd45f
-SHA1 (patch-bs) = ee00b9f0e6ca3479c05547408c59d15680ab7ea6
-SHA1 (patch-bt) = 47cd4493c6ce07087f06bc9abb6f3de1333ad56d
-SHA1 (patch-bu) = 3238d309d728407a179ac174d7f66c27a104f442
-SHA1 (patch-bv) = c509c821be24fce6df47a96f18b3ace9ded8246a
-SHA1 (patch-bw) = 88ef21fbf274e61a4b1b75b823ff545fd7ed741b
-SHA1 (patch-bx) = 8811e5739502c061d79449dc65c27dfe8ef1c03d
-SHA1 (patch-by) = 5ed0de9c7d0d519b7d904f9a0e7bb04061d9e77f
-SHA1 (patch-bz) = ea60fee95ca6d04f0e4f221a4910efc73796d255
-SHA1 (patch-ca) = 6b999fdf1d50db4224c1f14588c0bbf904d00201
-SHA1 (patch-cb) = 7ff947303bf03f5efe06e695718fbbabcbdcee7f
-SHA1 (patch-cc) = ceeb0982a1246c3b51645e95663e823b2a67b61f
-SHA1 (patch-cd) = b425d5a28e4a3a970b9ca69583017bf851f091c5
-SHA1 (patch-ce) = 0209d8bcc7066cbcbc3f6fd7155d59a8407a002e
-SHA1 (patch-cf) = 52d2f13f465e1884a7e8ce885bc748d2cb9d1132
-SHA1 (patch-cg) = 8d14dbb401a6810a140aa57f428b3b80b34d1c3b
-SHA1 (patch-ch) = 08dc43f3785ea08df9ced153e48849b683c2aabf
-SHA1 (patch-ci) = cb1c37fa20f08ed3d9baa275e2ef31fe122d9b7d
-SHA1 (patch-cj) = ba5783189ddd37d6a5a25c588e65550bc7ffe5e7
-SHA1 (patch-ck) = 8ac32470e091dc95b3d2e78ba35658dffa54f057
-SHA1 (patch-cl) = 10065e0f5b61441d60e8354fb03dbc910dfe02fd
-SHA1 (patch-cm) = 186726168753fa23de3220421d2ddf91b08c4884
-SHA1 (patch-cn) = 355ea10eaa1eb590fc64cd535595f171af2be271
-SHA1 (patch-co) = 32f5d4b2ae185518ca4768fb03785c3e7782196f
-SHA1 (patch-cp) = d0367e27fa22a63cfc573a4fb4a801b688b213c1
+SHA1 (gcc-2.95.3-diff-2002-08-11.gz) = 0d587df7cf552f1ae92131e6e0e5b37d543f2b05
+Size (gcc-2.95.3-diff-2002-08-11.gz) = 80435 bytes
+SHA1 (patch-aa) = 1f6daca7e6abe4c29987f1360d2c77e4c344b6d1
diff --git a/lang/gcc/files/UPDATE.txt b/lang/gcc/files/UPDATE.txt
new file mode 100644
index 00000000000..e35764abc9b
--- /dev/null
+++ b/lang/gcc/files/UPDATE.txt
@@ -0,0 +1,35 @@
+# $NetBSD: UPDATE.txt,v 1.1 2002/08/12 01:53:37 dmcmahill Exp $
+
+This file documents the steps taken to update this package.
+
+=) Extract sources
+
+ make clean && make extract
+
+=) Copy to .orig directory
+ mkdir -p /some/tmp/dir/gcc-2.95.3.orig
+ mv work/gcc-2.95.3 /some/tmp/dir/gcc-2.95.3.orig/gcc
+
+=) Update in-tree gcc sources
+
+ cd /usr/src/gnu/dist/toolchain && cvs update
+
+=) Copy over the new sources excluding CVS directories
+
+ mkdir /some/tmp/dir/gcc-2.95.3
+ tar --exclude CVS -cvf - gcc | ( cd /some/tmp/dir/gcc-2.95.3 ; tar -xf - )
+
+=) Create patch file
+
+ mkdir /some/tmp/dir/foo
+ cd /some/tmp/dir/foo && diff -u2 -r -N ../gcc-2.95.3.orig/gcc ../gcc-2.95.3/gcc > gcc-2.95.3-diff-`date '+%Y-%m-%d'`
+ gzip gcc-2.95.3-diff-`date '+%Y-%m-%d'`
+
+=) copy the patch file to your distfiles directory, and 'make makesum'. Now proceed with
+ creating any pkgsrc specific patches for gcc, placing them in patches/ as usual.
+
+=) when its all tested and working, upload the patchfile
+ to ftp.netbsd.org:/pub/NetBSD/packages/distfiles/LOCAL_PORTS/
+
+Hopefully this procedure will make maintaining this package a little easier.
+
diff --git a/lang/gcc/patches/patch-aa b/lang/gcc/patches/patch-aa
deleted file mode 100644
index bd9f78bb138..00000000000
--- a/lang/gcc/patches/patch-aa
+++ /dev/null
@@ -1,12 +0,0 @@
-$NetBSD: patch-aa,v 1.3 2002/03/28 10:11:52 jmc Exp $
-
---- ../gcc-2.95.3/gcc/f/g77.1.orig 2000/07/26 00:17:58 1.1.1.1
-+++ ../gcc-2.95.3/gcc/f/g77.1 2001/01/31 15:26:42 1.2
-@@ -8,6 +8,7 @@
- \(**
- ..
- .SH NAME
-+f77, fort77,
- g77 \- GNU project Fortran Compiler (v0.5.24)
- .SH SYNOPSIS
- .RB g77 " [" \c
diff --git a/lang/gcc/patches/patch-ab b/lang/gcc/patches/patch-ab
deleted file mode 100644
index 86bdb624165..00000000000
--- a/lang/gcc/patches/patch-ab
+++ /dev/null
@@ -1,14 +0,0 @@
-$NetBSD: patch-ab,v 1.4 2002/03/28 10:11:52 jmc Exp $
-
---- ../gcc-2.95.3/gcc/f/proj.h.orig 2000/07/26 00:18:01 1.1.1.1
-+++ ../gcc-2.95.3/gcc/f/proj.h 2002/03/27 04:09:03 1.3
-@@ -66,7 +66,9 @@
- Doggone_Trailing_Comma_Dont_Work = 1
- } bool;
-
-+#ifndef ARRAY_SIZE
- #define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
-+#endif
-
- #ifndef UNUSED /* Compile with -DUNUSED= if cc doesn't support this. */
- #if BUILT_WITH_270
diff --git a/lang/gcc/patches/patch-ac b/lang/gcc/patches/patch-ac
deleted file mode 100644
index b5533c72489..00000000000
--- a/lang/gcc/patches/patch-ac
+++ /dev/null
@@ -1,23 +0,0 @@
-$NetBSD: patch-ac,v 1.3 2002/03/28 10:11:52 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/alpha/alpha.c.orig 2000/07/26 00:18:10 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/alpha/alpha.c 2001/06/18 16:10:27 1.2
-@@ -275,7 +275,7 @@
- static int const cache_latency[][4] =
- {
- { 3, 30, -1 }, /* ev4 -- Bcache is a guess */
-- { 2, 12, 38 }, /* ev5 -- Bcache from PC164 LMbench numbers */
-+ { 3, 12, 38 }, /* ev5 -- Bcache from PC164 LMbench numbers */
- { 3, 13, -1 }, /* ev6 -- Ho hum, doesn't exist yet */
- };
-
-@@ -3375,7 +3375,8 @@
- /* Write a version stamp. Don't write anything if we are running as a
- cross-compiler. Otherwise, use the versions in /usr/include/stamp.h. */
-
--#ifdef HAVE_STAMP_H
-+#if !defined(CROSS_COMPILE) && !defined(_WIN32) && !defined(__linux__) && \
-+ !defined(VMS) && !defined(__NetBSD__)
- #include <stamp.h>
- #endif
-
diff --git a/lang/gcc/patches/patch-ad b/lang/gcc/patches/patch-ad
deleted file mode 100644
index 33d6cc48222..00000000000
--- a/lang/gcc/patches/patch-ad
+++ /dev/null
@@ -1,31 +0,0 @@
-$NetBSD: patch-ad,v 1.4 2002/03/28 10:11:52 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/alpha/alpha.h.orig 2000/07/26 00:18:11 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/alpha/alpha.h 2001/06/18 16:10:28 1.2
-@@ -49,9 +49,6 @@
- || !strcmp (STR, "iwithprefix") || !strcmp (STR, "iwithprefixbefore") \
- || !strcmp (STR, "isystem"))
-
--/* Print subsidiary information on the compiler version in use. */
--#define TARGET_VERSION
--
- /* Run-time compilation parameters selecting different hardware subsets. */
-
- /* Which processor to schedule for. The cpu attribute defines a list that
-@@ -493,14 +490,14 @@
- a bug in DEC's assembler. */
-
- #define LOOP_ALIGN(LABEL) \
-- (optimize > 0 && write_symbols != SDB_DEBUG ? 4 : 0)
-+ (!optimize_size && optimize > 0 && write_symbols != SDB_DEBUG ? 4 : 0)
-
- /* This is how to align an instruction for optimal branching. On
- Alpha we'll get better performance by aligning on an octaword
- boundary. */
-
- #define LABEL_ALIGN_AFTER_BARRIER(FILE) \
-- (optimize > 0 && write_symbols != SDB_DEBUG ? 4 : 0)
-+ (!optimize_size && optimize > 0 && write_symbols != SDB_DEBUG ? 4 : 0)
-
- /* No data type wants to be aligned rounder than this. */
- #define BIGGEST_ALIGNMENT 64
diff --git a/lang/gcc/patches/patch-ae b/lang/gcc/patches/patch-ae
deleted file mode 100644
index 9a4b6651595..00000000000
--- a/lang/gcc/patches/patch-ae
+++ /dev/null
@@ -1,555 +0,0 @@
-$NetBSD: patch-ae,v 1.5 2002/03/31 08:05:52 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/alpha/netbsd.h.orig 2000/07/26 00:18:12 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/alpha/netbsd.h 2002/01/22 02:09:39 1.8
-@@ -19,17 +19,84 @@
- the Free Software Foundation, 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-+/* This is used on Alpha platforms that use the ELF format.
-+ This was taken from the Linux configuration, and modified
-+ for NetBSD/alpha by Jason R. Thorpe <thorpej@netbsd.org> */
-+
-+/* Get generic Alpha definitions. */
-+
-+#include <alpha/alpha.h>
-+
-+/* Get generic NetBSD ELF definitions. We will override these if necessary. */
-+
-+#define NETBSD_ELF
-+#include <netbsd.h>
-+
-+#undef OBJECT_FORMAT_COFF
-+#undef EXTENDED_COFF
-+#define OBJECT_FORMAT_ELF
-+
-+/* This is BSD, so it wants DBX format. */
-+
-+#define DBX_DEBUGGING_INFO
-+
-+/* This is the char to use for continuation (in case we need to turn
-+ continuation back on). */
-+
-+#define DBX_CONTIN_CHAR '?'
-+
-+#undef ASM_FINAL_SPEC
-+
-+#undef CC1_SPEC
-+#define CC1_SPEC "%{G*}"
-+
-+#undef ASM_SPEC
-+#define ASM_SPEC "%{G*} %{relax:-relax} %{gdwarf*:-no-mdebug}"
-+
-+/* Provide a LINK_SPEC appropriate for a NetBSD/alpha ELF target. Only
-+ the linker emulation and -O options are Alpha-specific. The rest are
-+ common to all ELF targets, except for the name of the start function. */
-+
-+#undef LINK_SPEC
-+#define LINK_SPEC \
-+ "-m elf64alpha \
-+ -e __start \
-+ %{O*:-O3} %{!O*:-O1} \
-+ %{assert*} %{R*} \
-+ %{shared:-shared} \
-+ %{!shared: \
-+ -dc -dp \
-+ %{!nostdlib:%{!r*:%{!e*:-e __start}}} \
-+ %{!static: \
-+ %{rdynamic:-export-dynamic} \
-+ %{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}} \
-+ %{static:-static}}"
-+
-+/* Names to predefine in the preprocessor for this target machine.
-+ XXX NetBSD, by convention, shouldn't do __alpha, but lots of applications
-+ expect it because that's what OSF/1 does. */
-+
-+/* NetBSD Extension to GNU C: __KPRINTF_ATTRIBUTE__ */
-+
- #undef TARGET_DEFAULT
- #define TARGET_DEFAULT (MASK_FP | MASK_FPREGS | MASK_GAS)
-
- #undef CPP_PREDEFINES
--#define CPP_PREDEFINES "-D_LONGLONG -Dnetbsd -Dunix " SUB_CPP_PREDEFINES
-+#define CPP_PREDEFINES "\
-+-D__alpha__ -D__alpha -D__NetBSD__ -D__ELF__ -D__KPRINTF_ATTRIBUTE__ \
-+-Asystem(unix) -Asystem(NetBSD) -Acpu(alpha) -Amachine(alpha)"
-+
-+/* Make gcc agree with <machine/ansi.h> */
-+
-+#undef WCHAR_TYPE
-+#define WCHAR_TYPE "int"
-
--#undef LIB_SPEC
--#define LIB_SPEC "%{pg:-lgmon} %{pg:-lc_p} %{!pg:-lc}"
-+#undef WCHAR_TYPE_SIZE
-+#define WCHAR_TYPE_SIZE 32
-
--/* Generate calls to memcpy, etc., not bcopy, etc. */
--#define TARGET_MEM_FUNCTIONS
-+/* Output assembler code to FILE to increment profiler label # LABELNO
-+ for profiling a function entry. Under NetBSD/Alpha, the assembler does
-+ nothing special with -pg. */
-
- #undef FUNCTION_PROFILER
- #define FUNCTION_PROFILER(FILE, LABELNO) \
-@@ -37,3 +104,460 @@
-
- /* Show that we need a GP when profiling. */
- #define TARGET_PROFILING_NEEDS_GP
-+
-+#define bsd4_4
-+#undef HAS_INIT_SECTION
-+
-+#undef DEFAULT_VTABLE_THUNKS
-+#define DEFAULT_VTABLE_THUNKS 1
-+
-+/* Output at beginning of assembler file. */
-+
-+#undef ASM_FILE_START
-+#define ASM_FILE_START(FILE) \
-+do { \
-+ if (write_symbols != DWARF2_DEBUG) \
-+ { \
-+ alpha_write_verstamp (FILE); \
-+ output_file_directive (FILE, main_input_filename); \
-+ } \
-+ fprintf (FILE, "\t.set noat\n"); \
-+ fprintf (FILE, "\t.set noreorder\n"); \
-+ if (TARGET_BWX | TARGET_MAX | TARGET_FIX | TARGET_CIX) \
-+ { \
-+ fprintf (FILE, "\t.arch %s\n", \
-+ (alpha_cpu == PROCESSOR_EV6 ? "ev6" \
-+ : TARGET_MAX ? "pca56" : "ev56")); \
-+ } \
-+} while (0)
-+
-+#define ASM_OUTPUT_SOURCE_LINE(STREAM, LINE) \
-+ alpha_output_lineno (STREAM, LINE)
-+extern void alpha_output_lineno ();
-+
-+extern void output_file_directive ();
-+
-+/* Attach a special .ident directive to the end of the file to identify
-+ the version of GCC which compiled this code. The format of the
-+ .ident string is patterned after the ones produced by native svr4
-+ C compilers. */
-+
-+#define IDENT_ASM_OP ".ident"
-+
-+#ifdef IDENTIFY_WITH_IDENT
-+#define ASM_IDENTIFY_GCC(FILE) /* nothing */
-+#define ASM_IDENTIFY_LANGUAGE(FILE) \
-+ fprintf(FILE, "\t%s \"GCC (%s) %s\"\n", IDENT_ASM_OP, \
-+ lang_identify(), version_string)
-+#else
-+#define ASM_FILE_END(FILE) \
-+do { \
-+ if (!flag_no_ident) \
-+ fprintf ((FILE), "\t%s\t\"GCC: (GNU) %s\"\n", \
-+ IDENT_ASM_OP, version_string); \
-+ } while (0)
-+#endif
-+
-+/* Allow #sccs in preprocessor. */
-+
-+#define SCCS_DIRECTIVE
-+
-+/* Output #ident as a .ident. */
-+
-+#define ASM_OUTPUT_IDENT(FILE, NAME) \
-+ fprintf (FILE, "\t%s\t\"%s\"\n", IDENT_ASM_OP, NAME);
-+
-+/* This is how to allocate empty space in some section. The .zero
-+ pseudo-op is used for this on most svr4 assemblers. */
-+
-+#define SKIP_ASM_OP ".zero"
-+
-+#undef ASM_OUTPUT_SKIP
-+#define ASM_OUTPUT_SKIP(FILE,SIZE) \
-+ fprintf (FILE, "\t%s\t%u\n", SKIP_ASM_OP, (SIZE))
-+
-+/* Output the label which precedes a jumptable. Note that for all svr4
-+ systems where we actually generate jumptables (which is to say every
-+ svr4 target except i386, where we use casesi instead) we put the jump-
-+ tables into the .rodata section and since other stuff could have been
-+ put into the .rodata section prior to any given jumptable, we have to
-+ make sure that the location counter for the .rodata section gets pro-
-+ perly re-aligned prior to the actual beginning of the jump table. */
-+
-+#define ALIGN_ASM_OP ".align"
-+
-+#ifndef ASM_OUTPUT_BEFORE_CASE_LABEL
-+#define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE,PREFIX,NUM,TABLE) \
-+ ASM_OUTPUT_ALIGN ((FILE), 2);
-+#endif
-+
-+#undef ASM_OUTPUT_CASE_LABEL
-+#define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,JUMPTABLE) \
-+ do { \
-+ ASM_OUTPUT_BEFORE_CASE_LABEL (FILE, PREFIX, NUM, JUMPTABLE) \
-+ ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM); \
-+ } while (0)
-+
-+/* The standard SVR4 assembler seems to require that certain builtin
-+ library routines (e.g. .udiv) be explicitly declared as .globl
-+ in each assembly file where they are referenced. */
-+
-+#define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \
-+ ASM_GLOBALIZE_LABEL (FILE, XSTR (FUN, 0))
-+
-+/* This says how to output assembler code to declare an
-+ uninitialized external linkage data object. Under SVR4,
-+ the linker seems to want the alignment of data objects
-+ to depend on their types. We do exactly that here. */
-+
-+#define COMMON_ASM_OP ".comm"
-+
-+#undef ASM_OUTPUT_ALIGNED_COMMON
-+#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \
-+do { \
-+ fprintf ((FILE), "\t%s\t", COMMON_ASM_OP); \
-+ assemble_name ((FILE), (NAME)); \
-+ fprintf ((FILE), ",%u,%u\n", (SIZE), (ALIGN) / BITS_PER_UNIT); \
-+} while (0)
-+
-+/* This says how to output assembler code to declare an
-+ uninitialized internal linkage data object. Under SVR4,
-+ the linker seems to want the alignment of data objects
-+ to depend on their types. We do exactly that here. */
-+
-+#undef ASM_OUTPUT_ALIGNED_LOCAL
-+#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \
-+do { \
-+ if ((SIZE) <= g_switch_value) \
-+ sbss_section(); \
-+ else \
-+ bss_section(); \
-+ fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \
-+ assemble_name (FILE, NAME); \
-+ putc (',', FILE); \
-+ fprintf (FILE, TYPE_OPERAND_FMT, "object"); \
-+ putc ('\n', FILE); \
-+ if (!flag_inhibit_size_directive) \
-+ { \
-+ fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
-+ assemble_name (FILE, NAME); \
-+ fprintf (FILE, ",%d\n", (SIZE)); \
-+ } \
-+ ASM_OUTPUT_ALIGN ((FILE), exact_log2((ALIGN) / BITS_PER_UNIT)); \
-+ ASM_OUTPUT_LABEL(FILE, NAME); \
-+ ASM_OUTPUT_SKIP((FILE), (SIZE)); \
-+} while (0)
-+
-+/* This is the pseudo-op used to generate a 64-bit word of data with a
-+ specific value in some section. */
-+
-+#define INT_ASM_OP ".quad"
-+
-+/* Biggest alignment supported by the object file format of this
-+ machine. Use this macro to limit the alignment which can be
-+ specified using the `__attribute__ ((aligned (N)))' construct. If
-+ not defined, the default value is `BIGGEST_ALIGNMENT'.
-+
-+ This value is really 2^63. Since gcc figures the alignment in bits,
-+ we could only potentially get to 2^60 on suitible hosts. Due to other
-+ considerations in varasm, we must restrict this to what fits in an int. */
-+
-+#define MAX_OFILE_ALIGNMENT \
-+ (1 << (HOST_BITS_PER_INT < 64 ? HOST_BITS_PER_INT - 2 : 62))
-+
-+/* This is the pseudo-op used to generate a contiguous sequence of byte
-+ values from a double-quoted string WITHOUT HAVING A TERMINATING NUL
-+ AUTOMATICALLY APPENDED. This is the same for most svr4 assemblers. */
-+
-+#undef ASCII_DATA_ASM_OP
-+#define ASCII_DATA_ASM_OP ".ascii"
-+
-+/* Support const sections and the ctors and dtors sections for g++.
-+ Note that there appears to be two different ways to support const
-+ sections at the moment. You can either #define the symbol
-+ READONLY_DATA_SECTION (giving it some code which switches to the
-+ readonly data section) or else you can #define the symbols
-+ EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS, SELECT_SECTION, and
-+ SELECT_RTX_SECTION. We do both here just to be on the safe side. */
-+
-+#define USE_CONST_SECTION 1
-+
-+#define CONST_SECTION_ASM_OP ".section\t.rodata"
-+
-+/* Define the pseudo-ops used to switch to the .ctors and .dtors sections.
-+
-+ Note that we want to give these sections the SHF_WRITE attribute
-+ because these sections will actually contain data (i.e. tables of
-+ addresses of functions in the current root executable or shared library
-+ file) and, in the case of a shared library, the relocatable addresses
-+ will have to be properly resolved/relocated (and then written into) by
-+ the dynamic linker when it actually attaches the given shared library
-+ to the executing process. (Note that on SVR4, you may wish to use the
-+ `-z text' option to the ELF linker, when building a shared library, as
-+ an additional check that you are doing everything right. But if you do
-+ use the `-z text' option when building a shared library, you will get
-+ errors unless the .ctors and .dtors sections are marked as writable
-+ via the SHF_WRITE attribute.) */
-+
-+#define CTORS_SECTION_ASM_OP ".section\t.ctors,\"aw\""
-+#define DTORS_SECTION_ASM_OP ".section\t.dtors,\"aw\""
-+
-+/* Handle the small data sections. */
-+#define BSS_SECTION_ASM_OP ".section\t.bss"
-+#define SBSS_SECTION_ASM_OP ".section\t.sbss,\"aw\""
-+#define SDATA_SECTION_ASM_OP ".section\t.sdata,\"aw\""
-+
-+/* On svr4, we *do* have support for the .init and .fini sections, and we
-+ can put stuff in there to be executed before and after `main'. We let
-+ crtstuff.c and other files know this by defining the following symbols.
-+ The definitions say how to change sections to the .init and .fini
-+ sections. This is the same for all known svr4 assemblers. */
-+
-+#define INIT_SECTION_ASM_OP ".section\t.init"
-+#define FINI_SECTION_ASM_OP ".section\t.fini"
-+
-+/* A default list of other sections which we might be "in" at any given
-+ time. For targets that use additional sections (e.g. .tdesc) you
-+ should override this definition in the target-specific file which
-+ includes this file. */
-+
-+#undef EXTRA_SECTIONS
-+#define EXTRA_SECTIONS in_const, in_ctors, in_dtors, in_sbss, in_sdata
-+
-+/* A default list of extra section function definitions. For targets
-+ that use additional sections (e.g. .tdesc) you should override this
-+ definition in the target-specific file which includes this file. */
-+
-+#undef EXTRA_SECTION_FUNCTIONS
-+#define EXTRA_SECTION_FUNCTIONS \
-+ CONST_SECTION_FUNCTION \
-+ SECTION_FUNCTION_TEMPLATE(ctors_section, in_ctors, CTORS_SECTION_ASM_OP) \
-+ SECTION_FUNCTION_TEMPLATE(dtors_section, in_dtors, DTORS_SECTION_ASM_OP) \
-+ SECTION_FUNCTION_TEMPLATE(sbss_section, in_sbss, SBSS_SECTION_ASM_OP) \
-+ SECTION_FUNCTION_TEMPLATE(sdata_section, in_sdata, SDATA_SECTION_ASM_OP)
-+
-+#undef READONLY_DATA_SECTION
-+#define READONLY_DATA_SECTION() const_section ()
-+
-+extern void text_section ();
-+
-+#define CONST_SECTION_FUNCTION \
-+void \
-+const_section () \
-+{ \
-+ if (!USE_CONST_SECTION) \
-+ text_section(); \
-+ else if (in_section != in_const) \
-+ { \
-+ fprintf (asm_out_file, "%s\n", CONST_SECTION_ASM_OP); \
-+ in_section = in_const; \
-+ } \
-+}
-+
-+#define SECTION_FUNCTION_TEMPLATE(FN, ENUM, OP) \
-+void FN () \
-+{ \
-+ if (in_section != ENUM) \
-+ { \
-+ fprintf (asm_out_file, "%s\n", OP); \
-+ in_section = ENUM; \
-+ } \
-+}
-+
-+
-+/* Switch into a generic section.
-+ This is currently only used to support section attributes.
-+
-+ We make the section read-only and executable for a function decl,
-+ read-only for a const data decl, and writable for a non-const data decl. */
-+#define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME, RELOC) \
-+ fprintf (FILE, ".section\t%s,\"%s\",@progbits\n", NAME, \
-+ (DECL) && TREE_CODE (DECL) == FUNCTION_DECL ? "ax" : \
-+ (DECL) && DECL_READONLY_SECTION (DECL, RELOC) ? "a" : "aw")
-+
-+
-+/* A C statement (sans semicolon) to output an element in the table of
-+ global constructors. */
-+#define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \
-+ do { \
-+ ctors_section (); \
-+ fprintf (FILE, "\t%s\t ", INT_ASM_OP); \
-+ assemble_name (FILE, NAME); \
-+ fprintf (FILE, "\n"); \
-+ } while (0)
-+
-+/* A C statement (sans semicolon) to output an element in the table of
-+ global destructors. */
-+#define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \
-+ do { \
-+ dtors_section (); \
-+ fprintf (FILE, "\t%s\t ", INT_ASM_OP); \
-+ assemble_name (FILE, NAME); \
-+ fprintf (FILE, "\n"); \
-+ } while (0)
-+
-+/* A C statement or statements to switch to the appropriate
-+ section for output of DECL. DECL is either a `VAR_DECL' node
-+ or a constant of some sort. RELOC indicates whether forming
-+ the initial value of DECL requires link-time relocations. */
-+
-+#define SELECT_SECTION(DECL,RELOC) \
-+{ \
-+ if (TREE_CODE (DECL) == STRING_CST) \
-+ { \
-+ if (! flag_writable_strings) \
-+ const_section (); \
-+ else \
-+ data_section (); \
-+ } \
-+ else if (TREE_CODE (DECL) == VAR_DECL) \
-+ { \
-+ if ((flag_pic && RELOC) \
-+ || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL) \
-+ || !DECL_INITIAL (DECL) \
-+ || (DECL_INITIAL (DECL) != error_mark_node \
-+ && !TREE_CONSTANT (DECL_INITIAL (DECL)))) \
-+ { \
-+ int size = int_size_in_bytes (TREE_TYPE (DECL)); \
-+ if (size >= 0 && size <= g_switch_value) \
-+ sdata_section (); \
-+ else \
-+ data_section (); \
-+ } \
-+ else \
-+ const_section (); \
-+ } \
-+ else \
-+ const_section (); \
-+}
-+
-+/* A C statement or statements to switch to the appropriate
-+ section for output of RTX in mode MODE. RTX is some kind
-+ of constant in RTL. The argument MODE is redundant except
-+ in the case of a `const_int' rtx. Currently, these always
-+ go into the const section. */
-+
-+#undef SELECT_RTX_SECTION
-+#define SELECT_RTX_SECTION(MODE,RTX) const_section()
-+
-+/* Define the strings used for the special svr4 .type and .size directives.
-+ These strings generally do not vary from one system running svr4 to
-+ another, but if a given system (e.g. m88k running svr) needs to use
-+ different pseudo-op names for these, they may be overridden in the
-+ file which includes this one. */
-+
-+#undef TYPE_ASM_OP
-+#undef SIZE_ASM_OP
-+#undef SET_ASM_OP /* no equivalent */
-+#define TYPE_ASM_OP ".type"
-+#define SIZE_ASM_OP ".size"
-+
-+/* This is how we tell the assembler that two symbols have the same value. */
-+
-+#define ASM_OUTPUT_DEF(FILE,NAME1,NAME2) \
-+ do { assemble_name(FILE, NAME1); \
-+ fputs(" = ", FILE); \
-+ assemble_name(FILE, NAME2); \
-+ fputc('\n', FILE); } while (0)
-+
-+/* These macros generate the special .type and .size directives which
-+ are used to set the corresponding fields of the linker symbol table
-+ entries in an ELF object file under SVR4. These macros also output
-+ the starting labels for the relevant functions/objects. */
-+
-+/* Write the extra assembler code needed to declare an object properly. */
-+
-+#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \
-+ do { \
-+ fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \
-+ assemble_name (FILE, NAME); \
-+ putc (',', FILE); \
-+ fprintf (FILE, TYPE_OPERAND_FMT, "object"); \
-+ putc ('\n', FILE); \
-+ size_directive_output = 0; \
-+ if (!flag_inhibit_size_directive && DECL_SIZE (DECL)) \
-+ { \
-+ size_directive_output = 1; \
-+ fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
-+ assemble_name (FILE, NAME); \
-+ fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \
-+ } \
-+ ASM_OUTPUT_LABEL(FILE, NAME); \
-+ } while (0)
-+
-+/* Output the size directive for a decl in rest_of_decl_compilation
-+ in the case where we did not do so before the initializer.
-+ Once we find the error_mark_node, we know that the value of
-+ size_directive_output was set
-+ by ASM_DECLARE_OBJECT_NAME when it was run for the same decl. */
-+
-+#define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END) \
-+do { \
-+ char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \
-+ if (!flag_inhibit_size_directive && DECL_SIZE (DECL) \
-+ && ! AT_END && TOP_LEVEL \
-+ && DECL_INITIAL (DECL) == error_mark_node \
-+ && !size_directive_output) \
-+ { \
-+ size_directive_output = 1; \
-+ fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
-+ assemble_name (FILE, name); \
-+ putc (',', FILE); \
-+ fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, \
-+ int_size_in_bytes (TREE_TYPE (DECL))); \
-+ putc ('\n', FILE); \
-+ } \
-+} while (0)
-+
-+/* A table of bytes codes used by the ASM_OUTPUT_ASCII and
-+ ASM_OUTPUT_LIMITED_STRING macros. Each byte in the table
-+ corresponds to a particular byte value [0..255]. For any
-+ given byte value, if the value in the corresponding table
-+ position is zero, the given character can be output directly.
-+ If the table value is 1, the byte must be output as a \ooo
-+ octal escape. If the tables value is anything else, then the
-+ byte value should be output as a \ followed by the value
-+ in the table. Note that we can use standard UN*X escape
-+ sequences for many control characters, but we don't use
-+ \a to represent BEL because some svr4 assemblers (e.g. on
-+ the i386) don't know about that. Also, we don't use \v
-+ since some versions of gas, such as 2.2 did not accept it. */
-+
-+#define ESCAPES \
-+"\1\1\1\1\1\1\1\1btn\1fr\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
-+\0\0\"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\
-+\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\\0\0\0\
-+\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\
-+\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
-+\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
-+\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
-+\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1"
-+
-+/* Some svr4 assemblers have a limit on the number of characters which
-+ can appear in the operand of a .string directive. If your assembler
-+ has such a limitation, you should define STRING_LIMIT to reflect that
-+ limit. Note that at least some svr4 assemblers have a limit on the
-+ actual number of bytes in the double-quoted string, and that they
-+ count each character in an escape sequence as one byte. Thus, an
-+ escape sequence like \377 would count as four bytes.
-+
-+ If your target assembler doesn't support the .string directive, you
-+ should define this to zero.
-+*/
-+
-+#define STRING_LIMIT ((unsigned) 256)
-+
-+#define STRING_ASM_OP ".string"
-+
-+/* GAS is the only Alpha/ELF assembler. */
-+#undef TARGET_GAS
-+#define TARGET_GAS (1)
-+
-+#undef PREFERRED_DEBUGGING_TYPE
-+#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
-+
-+/* Undo the auto-alignment stuff from alpha.h. ELF has unaligned data
-+ pseudos natively. */
-+#undef UNALIGNED_SHORT_ASM_OP
-+#undef UNALIGNED_INT_ASM_OP
-+#undef UNALIGNED_DOUBLE_INT_ASM_OP
diff --git a/lang/gcc/patches/patch-af b/lang/gcc/patches/patch-af
deleted file mode 100644
index 562a740e00c..00000000000
--- a/lang/gcc/patches/patch-af
+++ /dev/null
@@ -1,114 +0,0 @@
-$NetBSD: patch-af,v 1.4 2002/03/28 10:11:52 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/arm/arm.c.orig 2001/04/23 11:59:30 1.1.1.2
-+++ ../gcc-2.95.3/gcc/config/arm/arm.c 2001/12/19 23:14:50 1.4
-@@ -281,7 +281,7 @@
-
- if (ptr->string != NULL && ptr->string[0] != '\0')
- {
-- struct processors * sel;
-+ const struct processors * sel;
-
- for (sel = ptr->processors; sel->name != NULL; sel ++)
- if (streq (ptr->string, sel->name))
-@@ -566,7 +566,7 @@
- if (!reload_completed
- || current_function_pretend_args_size
- || current_function_anonymous_args
-- || ((get_frame_size () + current_function_outgoing_args_size != 0)
-+ || ((arm_get_frame_size () + current_function_outgoing_args_size != 0)
- && !(TARGET_APCS && frame_pointer_needed)))
- return 0;
-
-@@ -5397,6 +5397,18 @@
- return "";
- }
-
-+/* Generate a sequence of insns that will generate the correct return
-+ address mask depending on the physical architecture that the program
-+ is running on. */
-+rtx
-+arm_gen_return_addr_mask ()
-+{
-+ rtx reg = gen_reg_rtx (Pmode);
-+
-+ emit_insn (gen_return_addr_mask (reg));
-+ return reg;
-+}
-+
- /* Return nonzero if optimizing and the current function is volatile.
- Such functions never return, and many memory cycles can be saved
- by not storing register values that will never be needed again.
-@@ -5828,11 +5840,71 @@
- emit_insn (par);
- }
-
-+/* Calculate the size of the stack frame, taking into account any
-+ padding that is required to ensure stack-alignment. */
-+int arm_get_frame_size ()
-+{
-+ int regno;
-+
-+ int base_size = (get_frame_size () + 3) & ~3;
-+ int entry_size = 0;
-+ int live_regs_mask = 0;
-+ int volatile_func = (optimize > 0
-+ && TREE_THIS_VOLATILE (current_function_decl));
-+
-+ if (! TARGET_ATPCS_STACK_ALIGN)
-+ return base_size;
-+
-+ /* We know that SP will be word aligned on entry, and we must
-+ preserve that condition at any subroutine call. But those are
-+ the only constraints. */
-+
-+ /* Space for variadic functions. */
-+ if (current_function_pretend_args_size)
-+ entry_size += current_function_pretend_args_size;
-+
-+ if (! volatile_func)
-+ {
-+ for (regno = 0; regno <= 10; regno++)
-+ if (regs_ever_live[regno] && ! call_used_regs[regno])
-+ live_regs_mask |= 1 << regno;
-+
-+ if (flag_pic && regs_ever_live[PIC_OFFSET_TABLE_REGNUM])
-+ live_regs_mask |= 1 << PIC_OFFSET_TABLE_REGNUM;
-+
-+ if (regs_ever_live[14])
-+ live_regs_mask |= 0x4000;
-+ }
-+
-+ if (frame_pointer_needed)
-+ live_regs_mask |= 0xD800;
-+
-+ /* If we have to push any registers, we must also push lr as well. */
-+ if (live_regs_mask)
-+ live_regs_mask |= 0x4000;
-+
-+ for (regno = 0; regno < 16; regno++)
-+ if (live_regs_mask & (1 << regno))
-+ entry_size += 4;
-+
-+ if (! volatile_func)
-+ {
-+ for (regno = 23; regno > 15; regno--)
-+ if (regs_ever_live[regno] && ! call_used_regs[regno])
-+ entry_size += 12;
-+ }
-+
-+ if ((entry_size + base_size + current_function_outgoing_args_size) & 7)
-+ base_size += 4;
-+
-+ return base_size;
-+}
-+
- void
- arm_expand_prologue ()
- {
- int reg;
-- rtx amount = GEN_INT (-(get_frame_size ()
-+ rtx amount = GEN_INT (-(arm_get_frame_size ()
- + current_function_outgoing_args_size));
- int live_regs_mask = 0;
- int store_arg_regs = 0;
diff --git a/lang/gcc/patches/patch-ag b/lang/gcc/patches/patch-ag
deleted file mode 100644
index c4d2f6579e3..00000000000
--- a/lang/gcc/patches/patch-ag
+++ /dev/null
@@ -1,106 +0,0 @@
-$NetBSD: patch-ag,v 1.3 2002/03/28 10:11:52 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/arm/arm.h.orig 2001/04/23 11:59:31 1.1.1.2
-+++ ../gcc-2.95.3/gcc/config/arm/arm.h 2001/12/19 23:14:50 1.4
-@@ -199,7 +199,9 @@
- "
-
- /* Default is hard float, which doesn't define anything */
-+#ifndef CPP_FLOAT_DEFAULT_SPEC
- #define CPP_FLOAT_DEFAULT_SPEC ""
-+#endif
-
- #define CPP_ENDIAN_SPEC "\
- %{mbig-endian: \
-@@ -210,7 +212,9 @@
- "
-
- /* Default is little endian, which doesn't define anything. */
-+#ifndef CPP_ENDIAN_DEFAULT_SPEC
- #define CPP_ENDIAN_DEFAULT_SPEC ""
-+#endif
-
- #define CC1_SPEC ""
-
-@@ -310,6 +314,10 @@
- function tries to return. */
- #define ARM_FLAG_ABORT_NORETURN (0x8000)
-
-+/* Nonzero if the stack should be 64-bit aligned at function boundaries,
-+ as mandated by the ATPCS. */
-+#define ARM_FLAG_ATPCS_STACK_ALIGN (0x10000)
-+
- #define TARGET_APCS (target_flags & ARM_FLAG_APCS_FRAME)
- #define TARGET_POKE_FUNCTION_NAME (target_flags & ARM_FLAG_POKE)
- #define TARGET_FPE (target_flags & ARM_FLAG_FPE)
-@@ -332,6 +340,7 @@
- #define TARGET_LITTLE_WORDS (target_flags & ARM_FLAG_LITTLE_WORDS)
- #define TARGET_NO_SCHED_PRO (target_flags & ARM_FLAG_NO_SCHED_PRO)
- #define TARGET_ABORT_NORETURN (target_flags & ARM_FLAG_ABORT_NORETURN)
-+#define TARGET_ATPCS_STACK_ALIGN (target_flags & ARM_FLAG_ATPCS_STACK_ALIGN)
-
- /* SUBTARGET_SWITCHES is used to add flags on a per-config basis.
- Bit 31 is reserved. See riscix.h. */
-@@ -590,6 +599,8 @@
-
- #define STACK_BOUNDARY 32
-
-+#define PREFERRED_STACK_BOUNDARY (TARGET_ATPCS_STACK_ALIGN ? 64 : 32)
-+
- #define FUNCTION_BOUNDARY 32
-
- #define EMPTY_FIELD_BOUNDARY 32
-@@ -1252,7 +1263,7 @@
- else if ((FROM) == FRAME_POINTER_REGNUM \
- && (TO) == STACK_POINTER_REGNUM) \
- (OFFSET) = (current_function_outgoing_args_size \
-- + ((get_frame_size () + 3) & ~3)); \
-+ + arm_get_frame_size ()); \
- else \
- { \
- int regno; \
-@@ -1281,7 +1292,7 @@
- && (regs_ever_live[14] || saved_hard_reg)) \
- offset += 4; \
- offset += current_function_outgoing_args_size; \
-- (OFFSET) = ((get_frame_size () + 3) & ~3) + offset; \
-+ (OFFSET) = arm_get_frame_size () + offset; \
- } \
- } \
- }
-@@ -2113,12 +2124,16 @@
-
- /* Used to mask out junk bits from the return address, such as
- processor state, interrupt status, condition codes and the like. */
--#define MASK_RETURN_ADDR \
-+#define MASK_RETURN_ADDR \
- /* If we are generating code for an ARM2/ARM3 machine or for an ARM6 \
- in 26 bit mode, the condition codes must be masked out of the \
- return address. This does not apply to ARM6 and later processors \
-- when running in 32 bit mode. */ \
-- ((!TARGET_APCS_32) ? (GEN_INT (0x03fffffc)) : (GEN_INT (0xffffffff)))
-+ when running in 32 bit mode, but if we are not targeting archv4 \
-+ or later, assume this may be ARM2/3 running in 32-bit compatible \
-+ code mode. */ \
-+ ((!TARGET_APCS_32) ? (GEN_INT (0x03fffffc)) \
-+ : arm_arch4 ? (GEN_INT (0xffffffff)) \
-+ : arm_gen_return_addr_mask ())
-
- /* The remainder of this file is only needed for building the compiler
- itself, not for the collateral. */
-@@ -2217,6 +2232,7 @@
- Rtx gen_rotated_half_load PROTO ((Rtx));
- Mmode arm_select_cc_mode RTX_CODE_PROTO ((Rcode, Rtx, Rtx));
- Rtx gen_compare_reg RTX_CODE_PROTO ((Rcode, Rtx, Rtx, int));
-+Rtx arm_gen_return_addr_mask PROTO ((void));
- void arm_reload_in_hi PROTO ((Rtx *));
- void arm_reload_out_hi PROTO ((Rtx *));
- void arm_reorg PROTO ((Rtx));
-@@ -2239,6 +2255,7 @@
- void arm_poke_function_name STDIO_PROTO ((FILE *, char *));
- void output_func_prologue STDIO_PROTO ((FILE *, int));
- void output_func_epilogue STDIO_PROTO ((FILE *, int));
-+int arm_get_frame_size PROTO ((void));
- void arm_expand_prologue PROTO ((void));
- void arm_print_operand STDIO_PROTO ((FILE *, Rtx, int));
- void arm_final_prescan_insn PROTO ((Rtx));
diff --git a/lang/gcc/patches/patch-ah b/lang/gcc/patches/patch-ah
deleted file mode 100644
index 8ca2312fda9..00000000000
--- a/lang/gcc/patches/patch-ah
+++ /dev/null
@@ -1,46 +0,0 @@
-$NetBSD: patch-ah,v 1.3 2002/03/28 10:11:52 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/arm/arm.md.orig 2001/04/23 11:59:31 1.1.1.2
-+++ ../gcc-2.95.3/gcc/config/arm/arm.md 2001/11/08 20:47:56 1.3
-@@ -1682,9 +1682,9 @@
- (match_operand:SI 3 "arm_rhs_operand" "rI,rI")])
- (match_operand:SI 1 "s_register_operand" "0,?r")]))
- (clobber (reg:CC 24))]
-- "GET_CODE (operands[1]) != REG
-+ "0 && (GET_CODE (operands[1]) != REG
- || (REGNO(operands[1]) != FRAME_POINTER_REGNUM
-- && REGNO(operands[1]) != ARG_POINTER_REGNUM)"
-+ && REGNO(operands[1]) != ARG_POINTER_REGNUM))"
- "*
- {
- enum rtx_code code = GET_CODE (operands[4]);
-@@ -4322,6 +4322,29 @@
- }"
- [(set_attr "conds" "use")
- (set_attr "type" "load")])
-+
-+(define_expand "return_addr_mask"
-+ [(set (match_dup 1)
-+ (compare:CC_NOOV (unspec [(const_int 0)] 4)
-+ (const_int 0)))
-+ (set (match_operand:SI 0 "s_register_operand" "")
-+ (if_then_else:SI (eq (match_dup 1) (const_int 0))
-+ (const_int -1)
-+ (const_int 67108860)))] ; 0x03fffffc
-+ ""
-+ "
-+ operands[1] = gen_rtx_REG (CC_NOOVmode, 24);
-+ ")
-+
-+(define_insn "*check_arch2"
-+ [(set (match_operand:CC_NOOV 0 "cc_register" "")
-+ (compare:CC_NOOV (unspec [(const_int 0)] 4)
-+ (const_int 0)))]
-+ ""
-+ "teq\\t%|r0, %|r0\;teq\\t%|pc, %|pc"
-+ [(set_attr "length" "8")
-+ (set_attr "conds" "set")]
-+)
-
- ;; Call subroutine returning any type.
-
diff --git a/lang/gcc/patches/patch-ai b/lang/gcc/patches/patch-ai
deleted file mode 100644
index ee74dfa277b..00000000000
--- a/lang/gcc/patches/patch-ai
+++ /dev/null
@@ -1,72 +0,0 @@
-$NetBSD: patch-ai,v 1.3 2002/03/28 10:11:52 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/arm/elf.h.orig 2000/07/26 00:18:16 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/arm/elf.h 2001/05/03 18:20:47 1.2
-@@ -163,6 +163,15 @@
- #define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32)
- #endif
-
-+/* Set CPP macros to reflect TARGET_DEFAULT */
-+#ifndef CPP_FLOAT_DEFAULT_SPEC
-+#define CPP_FLOAT_DEFAULT_SPEC "-D__SOFTFP__"
-+#endif
-+
-+#ifndef CPP_APCS_PC_DEFAULT_SPEC
-+#define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__"
-+#endif
-+
- #ifndef MULTILIB_DEFAULTS
- #define MULTILIB_DEFAULTS { "mlittle-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork" }
- #endif
-@@ -350,5 +359,51 @@
- /* Align output to a power of two. */
- #define ASM_OUTPUT_ALIGN(STREAM, POWER) \
- fprintf (STREAM, "\t.align\t%d\n", POWER)
-+
-+/* following ripped from elfos.h */
-+/* Switch into a generic section.
-+ This is currently only used to support section attributes. */
-+
-+#define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME, RELOC) \
-+do { \
-+ static struct section_info \
-+ { \
-+ struct section_info *next; \
-+ char *name; \
-+ enum sect_enum {SECT_RW, SECT_RO, SECT_EXEC} type; \
-+ } *sections; \
-+ struct section_info *s; \
-+ char *mode; \
-+ enum sect_enum type; \
-+ \
-+ for (s = sections; s; s = s->next) \
-+ if (!strcmp (NAME, s->name)) \
-+ break; \
-+ \
-+ if (DECL && TREE_CODE (DECL) == FUNCTION_DECL) \
-+ type = SECT_EXEC, mode = "ax"; \
-+ else if (DECL && DECL_READONLY_SECTION (DECL, RELOC)) \
-+ type = SECT_RO, mode = "a"; \
-+ else \
-+ type = SECT_RW, mode = "aw"; \
-+ \
-+ if (s == 0) \
-+ { \
-+ s = (struct section_info *) xmalloc (sizeof (struct section_info)); \
-+ s->name = xmalloc ((strlen (NAME) + 1) * sizeof (*NAME)); \
-+ strcpy (s->name, NAME); \
-+ s->type = type; \
-+ s->next = sections; \
-+ sections = s; \
-+ fprintf (FILE, ".section\t%s,\"%s\",@progbits\n", NAME, mode); \
-+ } \
-+ else \
-+ { \
-+ if (DECL && s->type != type) \
-+ error_with_decl (DECL, "%s causes a section type conflict"); \
-+ \
-+ fprintf (FILE, ".section\t%s\n", NAME); \
-+ } \
-+} while (0)
-
- #include "arm/aout.h"
diff --git a/lang/gcc/patches/patch-aj b/lang/gcc/patches/patch-aj
deleted file mode 100644
index 6b3f2ce675e..00000000000
--- a/lang/gcc/patches/patch-aj
+++ /dev/null
@@ -1,86 +0,0 @@
-$NetBSD: patch-aj,v 1.3 2002/03/28 10:11:53 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/arm/netbsd.h.orig 2000/07/26 00:18:16 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/arm/netbsd.h 2001/06/18 16:09:21 1.2
-@@ -1,4 +1,4 @@
--/* NetBSD/arm (RiscBSD) version.
-+/* NetBSD/arm32 version.
- Copyright (C) 1993, 1994, 1997, 1998 Free Software Foundation, Inc.
- Contributed by Mark Brinicombe (amb@physig.ph.kcl.ac.uk)
-
-@@ -46,24 +46,28 @@
-
- #include <netbsd.h>
-
-+/* NetBSD uses gas so we want to use .ident */
-+#undef ASM_OUTPUT_IDENT
-+#define ASM_OUTPUT_IDENT(STREAM,STRING) \
-+ fprintf (STREAM,"\t.ident \"%s\"\n",STRING)
-+
-+/* On the ARM `@' introduces a comment, so we must use something else
-+ for .type directives. Most NetBSD platforms use %, but we use #
-+ because of some legacy assemblers. */
-+#undef TYPE_OPERAND_FMT
-+#define TYPE_OPERAND_FMT "#%s"
-+
- /* Until they use ELF or something that handles dwarf2 unwinds
- and initialization stuff better. */
- #undef DWARF2_UNWIND_INFO
-
--/* Some defines for CPP.
-- arm32 is the NetBSD port name, so we always define arm32 and __arm32__. */
-+/* Some defines for CPP. arm32 is the NetBSD port name, so we always (only)
-+ define __arm32__ and __NetBSD__, and add __KPRINTF_ATTRIBUTE__ since
-+ this compiler is hacked with the NetBSD kprintf attribute mods. */
- #undef CPP_PREDEFINES
--#define CPP_PREDEFINES "\
---Dunix -Driscbsd -Darm32 -D__arm32__ -D__arm__ -D__NetBSD__ \
-+#define CPP_PREDEFINES "-D__arm32__ -D__arm__ -D__NetBSD__ -D__KPRINTF_ATTRIBUTE__ \
- -Asystem(unix) -Asystem(NetBSD) -Acpu(arm) -Amachine(arm)"
-
--/* Define _POSIX_SOURCE if necessary. */
--#undef CPP_SPEC
--#define CPP_SPEC "\
--%(cpp_cpu_arch) %(cpp_apcs_pc) %(cpp_float) %(cpp_endian) \
--%{posix:-D_POSIX_SOURCE} \
--"
--
- /* Because TARGET_DEFAULT sets ARM_FLAG_APCS_32 */
- #undef CPP_APCS_PC_DEFAULT_SPEC
- #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__"
-@@ -72,13 +76,6 @@
- #undef CPP_FLOAT_DEFAULT_SPEC
- #define CPP_FLOAT_DEFAULT_SPEC "-D__SOFTFP__"
-
--/* Pass -X to the linker so that it will strip symbols starting with 'L' */
--#undef LINK_SPEC
--#define LINK_SPEC "\
---X %{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{R*} \
--%{static:-Bstatic} %{assert*} \
--"
--
- #undef SIZE_TYPE
- #define SIZE_TYPE "unsigned int"
-
-@@ -94,6 +91,9 @@
- #undef WCHAR_TYPE_SIZE
- #define WCHAR_TYPE_SIZE 32
-
-+#undef MAX_WCHAR_TYPE_SIZE
-+#define MAX_WCHAR_TYPE_SIZE 16
-+
- #define HANDLE_SYSV_PRAGMA
-
- /* We don't have any limit on the length as out debugger is GDB. */
-@@ -111,11 +111,6 @@
- fprintf(STREAM, "\tmov\t%sip, %slr\n", REGISTER_PREFIX, REGISTER_PREFIX); \
- fprintf(STREAM, "\tbl\tmcount\n"); \
- }
--
--/* On the ARM `@' introduces a comment, so we must use something else
-- for .type directives. */
--#undef TYPE_OPERAND_FMT
--#define TYPE_OPERAND_FMT "%%%s"
-
- /* NetBSD uses the old PCC style aggregate returning conventions. */
- #undef DEFAULT_PCC_STRUCT_RETURN
diff --git a/lang/gcc/patches/patch-ak b/lang/gcc/patches/patch-ak
deleted file mode 100644
index 64244706faa..00000000000
--- a/lang/gcc/patches/patch-ak
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD: patch-ak,v 1.3 2002/03/28 10:11:53 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/i386/gas.h.orig 2000/07/26 00:18:22 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/i386/gas.h 2001/05/30 09:04:13 1.2
-@@ -150,7 +150,7 @@
-
- #undef ASM_GENERATE_INTERNAL_LABEL
- #define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) \
-- sprintf ((BUF), ".%s%d", (PREFIX), (NUMBER))
-+ sprintf ((BUF), "*.%s%d", (PREFIX), (NUMBER))
-
- /* This is how to output an internal numbered label where
- PREFIX is the class of label and NUM is the number within the class. */
diff --git a/lang/gcc/patches/patch-al b/lang/gcc/patches/patch-al
deleted file mode 100644
index 31147b85294..00000000000
--- a/lang/gcc/patches/patch-al
+++ /dev/null
@@ -1,53 +0,0 @@
-$NetBSD: patch-al,v 1.6 2002/03/28 10:11:53 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/i386/i386.h.orig 2000/07/26 00:18:23 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/i386/i386.h 2001/06/01 13:31:46 1.2
-@@ -258,15 +258,15 @@
- option if the fixed part matches. The actual option name is made
- by appending `-m' to the specified name. */
- #define TARGET_OPTIONS \
--{ { "cpu=", &ix86_cpu_string, "Schedule code for given CPU"}, \
-- { "arch=", &ix86_arch_string, "Generate code for given CPU"}, \
-- { "reg-alloc=", &i386_reg_alloc_order, "Control allocation order of integer registers" }, \
-- { "regparm=", &i386_regparm_string, "Number of registers used to pass integer arguments" }, \
-- { "align-loops=", &i386_align_loops_string, "Loop code aligned to this power of 2" }, \
-- { "align-jumps=", &i386_align_jumps_string, "Jump targets are aligned to this power of 2" }, \
-- { "align-functions=", &i386_align_funcs_string, "Function starts are aligned to this power of 2" }, \
-- { "preferred-stack-boundary=", &i386_preferred_stack_boundary_string, "Attempt to keep stack aligned to this power of 2" }, \
-- { "branch-cost=", &i386_branch_cost_string, "Branches are this expensive (1-5, arbitrary units)" }, \
-+{ { "cpu=", (const char **)&ix86_cpu_string, "Schedule code for given CPU"}, \
-+ { "arch=", (const char **)&ix86_arch_string, "Generate code for given CPU"}, \
-+ { "reg-alloc=", (const char **)&i386_reg_alloc_order, "Control allocation order of integer registers" }, \
-+ { "regparm=", (const char **)&i386_regparm_string, "Number of registers used to pass integer arguments" }, \
-+ { "align-loops=", (const char **)&i386_align_loops_string, "Loop code aligned to this power of 2" }, \
-+ { "align-jumps=", (const char **)&i386_align_jumps_string, "Jump targets are aligned to this power of 2" }, \
-+ { "align-functions=", (const char **)&i386_align_funcs_string, "Function starts are aligned to this power of 2" }, \
-+ { "preferred-stack-boundary=", (const char **)&i386_preferred_stack_boundary_string, "Attempt to keep stack aligned to this power of 2" }, \
-+ { "branch-cost=", (const char **)&i386_branch_cost_string, "Branches are this expensive (1-5, arbitrary units)" }, \
- SUBTARGET_OPTIONS \
- }
-
-@@ -2773,15 +2773,15 @@
- #endif
-
- /* Variables in i386.c */
--extern char *ix86_cpu_string; /* for -mcpu=<xxx> */
--extern char *ix86_arch_string; /* for -march=<xxx> */
--extern char *i386_reg_alloc_order; /* register allocation order */
--extern char *i386_regparm_string; /* # registers to use to pass args */
--extern char *i386_align_loops_string; /* power of two alignment for loops */
--extern char *i386_align_jumps_string; /* power of two alignment for non-loop jumps */
--extern char *i386_align_funcs_string; /* power of two alignment for functions */
-+extern char *ix86_cpu_string; /* for -mcpu=<xxx> */
-+extern char *ix86_arch_string; /* for -march=<xxx> */
-+extern char *i386_reg_alloc_order; /* register allocation order */
-+extern char *i386_regparm_string; /* # registers to use to pass args */
-+extern char *i386_align_loops_string; /* power of two alignment for loops */
-+extern char *i386_align_jumps_string; /* power of two alignment for non-loop jumps */
-+extern char *i386_align_funcs_string; /* power of two alignment for functions */
- extern char *i386_preferred_stack_boundary_string;/* power of two alignment for stack boundary */
--extern char *i386_branch_cost_string; /* values 1-5: see jump.c */
-+extern char *i386_branch_cost_string; /* values 1-5: see jump.c */
- extern int i386_regparm; /* i386_regparm_string as a number */
- extern int i386_align_loops; /* power of two alignment for loops */
- extern int i386_align_jumps; /* power of two alignment for non-loop jumps */
diff --git a/lang/gcc/patches/patch-am b/lang/gcc/patches/patch-am
deleted file mode 100644
index 0efbea0a4a8..00000000000
--- a/lang/gcc/patches/patch-am
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD: patch-am,v 1.3 2002/03/28 10:11:53 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/i386/netbsd.h.orig 2000/07/26 00:18:24 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/i386/netbsd.h 2001/07/18 13:54:20 1.2
-@@ -15,7 +15,7 @@
- (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_NO_FANCY_MATH_387)
-
- #undef CPP_PREDEFINES
--#define CPP_PREDEFINES "-Dunix -Di386 -D__NetBSD__ -Asystem(unix) -Asystem(NetBSD) -Acpu(i386) -Amachine(i386)"
-+#define CPP_PREDEFINES "-D__NetBSD__ -Asystem(unix) -Asystem(NetBSD) -Acpu(i386) -Amachine(i386)"
-
- #undef SIZE_TYPE
- #define SIZE_TYPE "unsigned int"
diff --git a/lang/gcc/patches/patch-an b/lang/gcc/patches/patch-an
deleted file mode 100644
index 996c58788c5..00000000000
--- a/lang/gcc/patches/patch-an
+++ /dev/null
@@ -1,14 +0,0 @@
-$NetBSD: patch-an,v 1.3 2002/03/28 10:11:53 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/m68k/m68k.c.orig 2000/07/26 00:18:31 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/m68k/m68k.c 2001/12/16 18:28:15 1.2
-@@ -462,7 +462,8 @@
- -cfa_store_offset + n_regs++ * 4);
- }
- }
-- if (flag_pic && current_function_uses_pic_offset_table)
-+ if (flag_pic && current_function_uses_pic_offset_table &&
-+ regs_ever_live[PIC_OFFSET_TABLE_REGNUM])
- {
- #ifdef MOTOROLA
- asm_fprintf (stream, "\t%Olea (%Rpc, %U_GLOBAL_OFFSET_TABLE_@GOTPC), %s\n",
diff --git a/lang/gcc/patches/patch-ao b/lang/gcc/patches/patch-ao
deleted file mode 100644
index 1fb4d115446..00000000000
--- a/lang/gcc/patches/patch-ao
+++ /dev/null
@@ -1,19 +0,0 @@
-$NetBSD: patch-ao,v 1.3 2002/03/28 10:11:53 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/m68k/netbsd.h.orig 2000/07/26 00:18:32 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/m68k/netbsd.h 2001/06/18 16:08:51 1.2
-@@ -17,7 +17,7 @@
-
- /* Names to predefine in the preprocessor for this target machine. */
-
--#define CPP_PREDEFINES "-Dunix -Dm68k -Dmc68000 -Dmc68020 -D__NetBSD__ -Asystem(unix) -Asystem(NetBSD) -Acpu(m68k) -Amachine(m68k)"
-+#define CPP_PREDEFINES "-Dm68k -Dmc68000 -Dmc68020 -D__NetBSD__ -D__KPRINTF_ATTRIBUTE__ -Asystem(unix) -Asystem(NetBSD) -Acpu(m68k) -Amachine(m68k)"
-
- /* Make gcc agree with <machine/ansi.h> */
-
-@@ -61,3 +61,5 @@
- and initialization stuff better. */
- #define DWARF2_UNWIND_INFO 0
-
-+/* NetBSD a.out allows more than 16-bit alignment of elements and data. */
-+#define MAX_OFILE_ALIGNMENT 32
diff --git a/lang/gcc/patches/patch-ap b/lang/gcc/patches/patch-ap
deleted file mode 100644
index cda5a357016..00000000000
--- a/lang/gcc/patches/patch-ap
+++ /dev/null
@@ -1,42 +0,0 @@
-$NetBSD: patch-ap,v 1.3 2002/03/28 10:11:53 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/mips/mips.c.orig 2000/07/26 00:18:38 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/mips/mips.c 2001/07/19 23:41:12 1.3
-@@ -93,7 +93,7 @@
- static void block_move_loop PROTO ((rtx, rtx, int, int,
- rtx, rtx));
- static void block_move_call PROTO ((rtx, rtx, rtx));
--static FILE *make_temp_file PROTO ((void));
-+static FILE *xmake_temp_file PROTO ((void));
- static void save_restore_insns PROTO ((int, rtx,
- long, FILE *));
- static void mips16_output_gp_offset PROTO ((FILE *, rtx));
-@@ -5076,7 +5076,7 @@
- #endif
-
- static FILE *
--make_temp_file ()
-+xmake_temp_file ()
- {
- FILE *stream;
- const char *base = getenv ("TMPDIR");
-@@ -5295,7 +5295,7 @@
- if (TARGET_FILE_SWITCHING && ! TARGET_MIPS16)
- {
- asm_out_data_file = stream;
-- asm_out_text_file = make_temp_file ();
-+ asm_out_text_file = xmake_temp_file ();
- }
-
- else
-@@ -6278,8 +6278,10 @@
- fprintf (file, "\t.cprestore %ld\n", current_frame_info.args_size);
- }
-
-+#ifdef DWARF2_UNWIND_INFO
- if (dwarf2out_do_frame ())
- dwarf2out_def_cfa ("", STACK_POINTER_REGNUM, tsize);
-+#endif
- }
- }
-
diff --git a/lang/gcc/patches/patch-aq b/lang/gcc/patches/patch-aq
deleted file mode 100644
index a97c5a4f4af..00000000000
--- a/lang/gcc/patches/patch-aq
+++ /dev/null
@@ -1,384 +0,0 @@
-$NetBSD: patch-aq,v 1.4 2002/03/28 10:11:53 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/mips/netbsd.h.orig 2000/07/26 00:18:39 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/mips/netbsd.h 2001/11/08 07:21:54 1.6
-@@ -18,210 +18,189 @@
- the Free Software Foundation, 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
--#define DECSTATION
-+/* Define default target values. */
-
--/* Look for the include files in the system-defined places. */
-+#ifdef TARGET_BIG_ENDIAN_DEFAULT
-+#define TARGET_ENDIAN_DEFAULT MASK_BIG_ENDIAN
-+#else
-+#define TARGET_ENDIAN_DEFAULT 0
-+#endif
-
--#ifndef CROSS_COMPILE
--#undef GPLUSPLUS_INCLUDE_DIR
--#define GPLUSPLUS_INCLUDE_DIR "/usr/include/g++"
--
--#undef GCC_INCLUDE_DIR
--#define GCC_INCLUDE_DIR "/usr/include"
--
--#undef INCLUDE_DEFAULTS
--#define INCLUDE_DEFAULTS \
-- { \
-- { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 }, \
-- { GCC_INCLUDE_DIR, "GCC", 0, 0 }, \
-- { 0, 0, 0, 0 } \
-- }
-+#ifndef MACHINE_TYPE
-+#ifdef TARGET_BIG_ENDIAN_DEFAULT
-+#define MACHINE_TYPE "NetBSD ELF/mipseb"
-+#else
-+#define MACHINE_TYPE "NetBSD ELF/mipsel"
-+#endif
-+#endif
-
--/* Under NetBSD, the normal location of the various *crt*.o files is the
-- /usr/lib directory. */
-+#define TARGET_MEM_FUNCTIONS
-
--#undef STANDARD_STARTFILE_PREFIX
--#define STANDARD_STARTFILE_PREFIX "/usr/lib/"
--#endif
-+#define TARGET_DEFAULT (MASK_GAS|MASK_ABICALLS)
-+#undef DWARF2_DEBUGGING_INFO
-+#define DBX_DEBUGGING_INFO
-+#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
-
--/* Provide a LINK_SPEC appropriate for NetBSD. Here we provide support
-- for the special GCC options -static, -assert, and -nostdlib. */
-+/* Include the generic MIPS ELF configuration. */
-+#include <mips/elf.h>
-
--#undef LINK_SPEC
--#define LINK_SPEC \
-- "%{G*} %{EB} %{EL} %{mips1} %{mips2} %{mips3} \
-- %{!nostartfiles:%{!r*:%{!e*:-e __start}}} -dc -dp %{static:-Bstatic} %{assert*}"
-+/* Now clean up after it. */
-+#undef OBJECT_FORMAT_COFF
-+#undef INVOKE__main
-+#undef NAME__MAIN
-+#undef SYMBOL__MAIN
-+#undef CTOR_LIST_BEGIN
-+#undef CTOR_LIST_END
-+#undef DTOR_LIST_BEGIN
-+#undef DTOR_LIST_END
-
--/* We have atexit(3). */
-+/* Get generic NetBSD definitions. */
-
--#define HAVE_ATEXIT
-+#define NETBSD_ELF
-+#include <netbsd.h>
-
- /* Implicit library calls should use memcpy, not bcopy, etc. */
-
--#define TARGET_MEM_FUNCTIONS
--
- /* Define mips-specific netbsd predefines... */
--#ifndef CPP_PREDEFINES
--#define CPP_PREDEFINES "-D__ANSI_COMPAT \
---DMIPSEL -DR3000 -DSYSTYPE_BSD -D_SYSTYPE_BSD -D__NetBSD__ -Dmips \
---D__NO_LEADING_UNDERSCORES__ -D__GP_SUPPORT__ \
---Dunix -D_R3000 \
---Asystem(unix) -Asystem(NetBSD) -Amachine(mips)"
--#endif
--
--#ifndef SUBTARGET_CPP_SPEC
--#define SUBTARGET_CPP_SPEC "%{posix:-D_POSIX_SOURCE}"
--#endif
-
--#define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}"
--#define STARTFILE_SPEC ""
--
--#ifndef MACHINE_TYPE
--#define MACHINE_TYPE "NetBSD/pmax"
-+#undef CPP_PREDEFINES
-+#ifdef TARGET_BIG_ENDIAN_DEFAULT
-+#define CPP_PREDEFINES \
-+ "-D__ANSI_COMPAT -DMIPSEB -DR3000 -DSYSTYPE_BSD -D_SYSTYPE_BSD \
-+ -D__NetBSD__ -D__ELF__ -Dmips -D__NO_LEADING_UNDERSCORES__ -D__GP_SUPPORT__ \
-+ -D_R3000 -Asystem(unix) -Asystem(NetBSD) -Amachine(mips)"
-+#else
-+#define CPP_PREDEFINES \
-+ "-D__ANSI_COMPAT -DMIPSEL -DR3000 -DSYSTYPE_BSD -D_SYSTYPE_BSD \
-+ -D__NetBSD__ -D__ELF__ -Dmips -D__NO_LEADING_UNDERSCORES__ -D__GP_SUPPORT__ \
-+ -D_R3000 -Asystem(unix) -Asystem(NetBSD) -Amachine(mips)"
- #endif
-
--#define TARGET_DEFAULT MASK_GAS
--#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
--
--#include "mips/mips.h"
-+#undef ASM_SPEC
-+#define ASM_SPEC \
-+ "%{G*} %{EB} %{EL} %{mips1} %{mips2} %{mips3} %{v} \
-+ %{noasmopt:-O0} \
-+ %{!noasmopt:%{O:-O2} %{O1:-O2} %{O2:-O2} %{O3:-O3}} \
-+ %{g} %{g0} %{g1} %{g2} %{g3} \
-+ %{ggdb:-g} %{ggdb0:-g0} %{ggdb1:-g1} %{ggdb2:-g2} %{ggdb3:-g3} \
-+ %{gstabs:-g} %{gstabs0:-g0} %{gstabs1:-g1} %{gstabs2:-g2} %{gstabs3:-g3} \
-+ %{gstabs+:-g} %{gstabs+0:-g0} %{gstabs+1:-g1} %{gstabs+2:-g2} %{gstabs+3:-g3} \
-+ %{gcoff:-g} %{gcoff0:-g0} %{gcoff1:-g1} %{gcoff2:-g2} %{gcoff3:-g3} \
-+ %{membedded-pic} %{fpic:-k} %{fPIC:-k -K}"
-
--/*
-- * Some imports from svr4.h in support of shared libraries.
-- * Currently, we need the DECLARE_OBJECT_SIZE stuff.
-- */
--
--/* Define the strings used for the special svr4 .type and .size directives.
-- These strings generally do not vary from one system running svr4 to
-- another, but if a given system (e.g. m88k running svr) needs to use
-- different pseudo-op names for these, they may be overridden in the
-- file which includes this one. */
--
--#undef TYPE_ASM_OP
--#undef SIZE_ASM_OP
--#undef WEAK_ASM_OP
--#define TYPE_ASM_OP ".type"
--#define SIZE_ASM_OP ".size"
--#define WEAK_ASM_OP ".weak"
--
--/* The following macro defines the format used to output the second
-- operand of the .type assembler directive. Different svr4 assemblers
-- expect various different forms for this operand. The one given here
-- is just a default. You may need to override it in your machine-
-- specific tm.h file (depending upon the particulars of your assembler). */
--
--#undef TYPE_OPERAND_FMT
--#define TYPE_OPERAND_FMT "@%s"
--
--/* Write the extra assembler code needed to declare a function's result.
-- Most svr4 assemblers don't require any special declaration of the
-- result value, but there are exceptions. */
-+/* Provide a LINK_SPEC appropriate for a NetBSD ELF target. */
-
--#ifndef ASM_DECLARE_RESULT
--#define ASM_DECLARE_RESULT(FILE, RESULT)
--#endif
--
--/* These macros generate the special .type and .size directives which
-- are used to set the corresponding fields of the linker symbol table
-- entries in an ELF object file under SVR4. These macros also output
-- the starting labels for the relevant functions/objects. */
--
--/* Write the extra assembler code needed to declare a function properly.
-- Some svr4 assemblers need to also have something extra said about the
-- function's return value. We allow for that here. */
--
--#undef ASM_DECLARE_FUNCTION_NAME
--#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
-- do { \
-- fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \
-- assemble_name (FILE, NAME); \
-- putc (',', FILE); \
-- fprintf (FILE, TYPE_OPERAND_FMT, "function"); \
-- putc ('\n', FILE); \
-- ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \
-- } while (0)
--
--/* Write the extra assembler code needed to declare an object properly. */
--
--#undef ASM_DECLARE_OBJECT_NAME
--#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \
-- do { \
-- fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \
-- assemble_name (FILE, NAME); \
-- putc (',', FILE); \
-- fprintf (FILE, TYPE_OPERAND_FMT, "object"); \
-- putc ('\n', FILE); \
-- size_directive_output = 0; \
-- if (!flag_inhibit_size_directive && DECL_SIZE (DECL)) \
-- { \
-- size_directive_output = 1; \
-- fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
-- assemble_name (FILE, NAME); \
-- fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \
-- } \
-- ASM_OUTPUT_LABEL(FILE, NAME); \
-- } while (0)
--
--/* Output the size directive for a decl in rest_of_decl_compilation
-- in the case where we did not do so before the initializer.
-- Once we find the error_mark_node, we know that the value of
-- size_directive_output was set
-- by ASM_DECLARE_OBJECT_NAME when it was run for the same decl. */
--
--#undef ASM_FINISH_DECLARE_OBJECT
--#define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END) \
--do { \
-- char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \
-- if (!flag_inhibit_size_directive && DECL_SIZE (DECL) \
-- && ! AT_END && TOP_LEVEL \
-- && DECL_INITIAL (DECL) == error_mark_node \
-- && !size_directive_output) \
-- { \
-- size_directive_output = 1; \
-- fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
-- assemble_name (FILE, name); \
-- fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \
-- } \
-- } while (0)
--
--/* This is how to declare the size of a function. */
--
--#undef ASM_DECLARE_FUNCTION_SIZE
--#define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \
-- do { \
-- if (!flag_inhibit_size_directive) \
-- { \
-- char label[256]; \
-- static int labelno; \
-- labelno++; \
-- ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno); \
-- ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno); \
-- fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
-- assemble_name (FILE, (FNAME)); \
-- fprintf (FILE, ","); \
-- assemble_name (FILE, label); \
-- fprintf (FILE, "-"); \
-- assemble_name (FILE, (FNAME)); \
-- putc ('\n', FILE); \
-- } \
-- } while (0)
--
--/*
-- A C statement to output something to the assembler file to switch to section
-- NAME for object DECL which is either a FUNCTION_DECL, a VAR_DECL or
-- NULL_TREE. Some target formats do not support arbitrary sections. Do not
-- define this macro in such cases.
--*/
--#define ASM_OUTPUT_SECTION_NAME(F, DECL, NAME, RELOC) \
--do { \
-- extern FILE *asm_out_text_file; \
-- if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL) \
-- fprintf (asm_out_text_file, "\t.section %s,\"ax\",@progbits\n", (NAME)); \
-- else if ((DECL) && DECL_READONLY_SECTION (DECL, RELOC)) \
-- fprintf (F, "\t.section %s,\"a\",@progbits\n", (NAME)); \
-- else \
-- fprintf (F, "\t.section %s,\"aw\",@progbits\n", (NAME)); \
--} while (0)
--
--/* Since gas and gld are standard on NetBSD, we don't need these */
--#undef ASM_FINAL_SPEC
--#undef STARTFILE_SPEC
-+#undef LINK_SPEC
-+#define LINK_SPEC \
-+ "%{assert*} \
-+ %{EL:-m elf32lmip} \
-+ %{EB:-m elf32bmip} \
-+ %{R*} %{G*} %{EB} %{EL} %{mips1} %{mips2} %{mips3} \
-+ %{shared} %{v} \
-+ %{bestGnum} %{call_shared} %{no_archive} %{exact_version} \
-+ %{!shared: \
-+ -dc -dp \
-+ %{!nostdlib:%{!r*:%{!e*:-e __start}}} \
-+ %{!static: \
-+ %{rdynamic:-export-dynamic} \
-+ %{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}} \
-+ %{static:-static}}"
-+
-+/* Provide CC1_SPEC appropriate for NetBSD/mips ELF platforms */
-+
-+#undef CC1_SPEC
-+#define CC1_SPEC \
-+ "%{gline:%{!g:%{!g0:%{!g1:%{!g2: -g1}}}}} \
-+ %{mips1:-mfp32 -mgp32}%{mips2:-mfp32 -mgp32}\
-+ %{mips3:%{!msingle-float:%{!m4650:-mfp64}} -mgp64} \
-+ %{mips4:%{!msingle-float:%{!m4650:-mfp64}} -mgp64} \
-+ %{mfp64:%{msingle-float:%emay not use both -mfp64 and -msingle-float}} \
-+ %{mfp64:%{m4650:%emay not use both -mfp64 and -m4650}} \
-+ %{m4650:-mcpu=r4650} \
-+ %{G*} %{EB:-meb} %{EL:-mel} %{EB:%{EL:%emay not use both -EB and -EL}} \
-+ %{pic-none: -mno-half-pic} \
-+ %{pic-lib: -mhalf-pic} \
-+ %{pic-extern: -mhalf-pic} \
-+ %{pic-calls: -mhalf-pic} \
-+ %{save-temps: }"
-+
-+#undef CPP_SPEC
-+#define CPP_SPEC \
-+ "%{posix:-D_POSIX_SOURCE} \
-+ %{mlong64:-D__SIZE_TYPE__=long\\ unsigned\\ int -D__PTRDIFF_TYPE__=long\\ int} \
-+ %{!mlong64:-D__SIZE_TYPE__=unsigned\\ int -D__PTRDIFF_TYPE__=int} \
-+ %{mips3:-U__mips -D__mips=3 -D__mips64} \
-+ %{mgp32:-U__mips64} %{mgp64:-D__mips64}"
-+
-+/* Trampoline code for closures should call _cacheflush()
-+ to ensure I-cache consistency after writing trampoline code. */
-+
-+#define MIPS_CACHEFLUSH_FUNC "_cacheflush"
-+
-+/* Use sjlj exceptions. */
-+#define DWARF2_UNWIND_INFO 0
-+
-+/* Turn off special section processing by default. */
-+#undef MIPS_DEFAULT_GVALUE
-+#define MIPS_DEFAULT_GVALUE 0
-+
-+/* This defines which switch letters take arguments. -G is a mips special. */
-+#undef SWITCH_TAKES_ARG
-+#define SWITCH_TAKES_ARG(CHAR) \
-+ (DEFAULT_SWITCH_TAKES_ARG(CHAR) || (CHAR) == 'R' || (CHAR) == 'G')
-+
-+/* Support const sections and the ctors and dtors sections for g++.
-+ Note that there appears to be two different ways to support const
-+ sections at the moment. You can either #define the symbol
-+ READONLY_DATA_SECTION (giving it some code which switches to the
-+ readonly data section) or else you can #define the symbols
-+ EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS, SELECT_SECTION, and
-+ SELECT_RTX_SECTION. We do both here just to be on the safe side. */
-+
-+#define CONST_SECTION_ASM_OP ".section\t.rodata"
-+
-+/* On svr4, we *do* have support for the .init and .fini sections, and we
-+ can put stuff in there to be executed before and after `main'. We let
-+ crtstuff.c and other files know this by defining the following symbols.
-+ The definitions say how to change sections to the .init and .fini
-+ sections. This is the same for all known svr4 assemblers. */
-+
-+#define INIT_SECTION_ASM_OP ".section\t.init"
-+#define FINI_SECTION_ASM_OP ".section\t.fini"
-+
-+/* A default list of other sections which we might be "in" at any given
-+ time. For targets that use additional sections (e.g. .tdesc) you
-+ should override this definition in the target-specific file which
-+ includes this file. */
-+/* Note that this is to be like the generic ELF EXTRA_SECTIONS, with the
-+ MIPS specific in_sdata and in_rdata added. */
-+
-+#undef EXTRA_SECTIONS
-+#define EXTRA_SECTIONS in_const, in_ctors, in_dtors, in_sdata, in_rdata
-+
-+/* A default list of extra section function definitions. For targets
-+ that use additional sections (e.g. .tdesc) you should override this
-+ definition in the target-specific file which includes this file. */
-+
-+#undef EXTRA_SECTION_FUNCTIONS
-+#define EXTRA_SECTION_FUNCTIONS \
-+ SECTION_FUNCTION_TEMPLATE(const_section, in_const, CONST_SECTION_ASM_OP) \
-+ SECTION_FUNCTION_TEMPLATE(ctors_section, in_ctors, CTORS_SECTION_ASM_OP) \
-+ SECTION_FUNCTION_TEMPLATE(dtors_section, in_dtors, DTORS_SECTION_ASM_OP) \
-+ SECTION_FUNCTION_TEMPLATE(sdata_section, in_sdata, SDATA_SECTION_ASM_OP) \
-+ SECTION_FUNCTION_TEMPLATE(rdata_section, in_rdata, RDATA_SECTION_ASM_OP)
-+
-+#undef READONLY_DATA_SECTION
-+#define READONLY_DATA_SECTION() const_section ()
-+
-+#undef SECTION_FUNCTION_TEMPLATE
-+#define SECTION_FUNCTION_TEMPLATE(FN, ENUM, OP) \
-+void \
-+FN () \
-+{ \
-+ if (in_section != ENUM) \
-+ { \
-+ fprintf (asm_out_file, "%s\n", OP); \
-+ in_section = ENUM; \
-+ } \
-+}
diff --git a/lang/gcc/patches/patch-ar b/lang/gcc/patches/patch-ar
deleted file mode 100644
index 5d58735ae98..00000000000
--- a/lang/gcc/patches/patch-ar
+++ /dev/null
@@ -1,12 +0,0 @@
-$NetBSD: patch-ar,v 1.4 2002/03/28 10:11:53 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/ns32k/xm-ns32k.h.orig 2000/07/26 00:18:44 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/ns32k/xm-ns32k.h 2001/09/23 13:42:39 1.2
-@@ -36,7 +36,3 @@
- /* Arguments to use with `exit'. */
- #define SUCCESS_EXIT_CODE 0
- #define FATAL_EXIT_CODE 33
--
--#define memcpy(src,dst,len) bcopy ((dst),(src),(len))
--#define memset gcc_memset
--#define memcmp(left,right,len) bcmp ((left),(right),(len))
diff --git a/lang/gcc/patches/patch-as b/lang/gcc/patches/patch-as
deleted file mode 100644
index 195726c6a50..00000000000
--- a/lang/gcc/patches/patch-as
+++ /dev/null
@@ -1,15 +0,0 @@
-$NetBSD: patch-as,v 1.3 2002/03/28 10:11:53 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/rs6000/rs6000.c.orig 2001/04/23 12:00:34 1.1.1.2
-+++ ../gcc-2.95.3/gcc/config/rs6000/rs6000.c 2001/10/26 03:14:55 1.2
-@@ -1004,8 +1004,9 @@
- && CONST_DOUBLE_HIGH (op) == 0
- && (CONST_DOUBLE_LOW (op) & (~ (HOST_WIDE_INT) 0xffff)) != 0
- && (CONST_DOUBLE_LOW (op)
-- & (~ (unsigned HOST_WIDE_INT) 0xffff0000u)) != 0));
-+ & (~ (unsigned HOST_WIDE_INT) 0xffff0000u)) != 0)
- #endif
-+ );
- }
-
- /* Return 1 if C is a constant that can be encoded in a 32-bit mask on the
diff --git a/lang/gcc/patches/patch-at b/lang/gcc/patches/patch-at
deleted file mode 100644
index c2253453bf0..00000000000
--- a/lang/gcc/patches/patch-at
+++ /dev/null
@@ -1,24 +0,0 @@
-$NetBSD: patch-at,v 1.3 2002/03/28 10:11:53 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/sh/sh.c.orig 2000/07/26 00:18:49 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/sh/sh.c 2001/12/16 18:47:47 1.3
-@@ -515,6 +515,7 @@
- if ((code != EQ && code != NE
- && (sh_compare_op1 != const0_rtx
- || code == GTU || code == GEU || code == LTU || code == LEU))
-+ || (mode == DImode && sh_compare_op1 != const0_rtx)
- || TARGET_SH3E && GET_MODE_CLASS (mode) == MODE_FLOAT)
- sh_compare_op1 = force_reg (mode, sh_compare_op1);
-
-@@ -823,9 +824,9 @@
-
- char *
- output_ieee_ccmpeq (insn, operands)
-- rtx insn, operands;
-+ rtx insn, *operands;
- {
-- output_branchy_insn (NE, "bt\t%l9\\;fcmp/eq\t%1,%0", insn, operands);
-+ return output_branchy_insn (NE, "bt\t%l9\\;fcmp/eq\t%1,%0", insn, operands);
- }
-
- /* Output to FILE the start of the assembler file. */
diff --git a/lang/gcc/patches/patch-au b/lang/gcc/patches/patch-au
deleted file mode 100644
index 6a6cbd9f3c3..00000000000
--- a/lang/gcc/patches/patch-au
+++ /dev/null
@@ -1,32 +0,0 @@
-$NetBSD: patch-au,v 1.3 2002/03/28 10:11:53 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/sh/sh.h.orig 2000/07/26 00:18:49 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/sh/sh.h 2001/12/16 18:56:45 1.4
-@@ -1681,7 +1681,7 @@
- it uses this information. Hence, the general register <-> floating point
- register information here is not used for SFmode. */
- #define REGISTER_MOVE_COST(SRCCLASS, DSTCLASS) \
-- ((((DSTCLASS) == T_REGS) || ((DSTCLASS) == PR_REG)) ? 10 \
-+ ((((DSTCLASS) == T_REGS) || ((DSTCLASS) == PR_REGS)) ? 10 \
- : ((((DSTCLASS) == FP0_REGS || (DSTCLASS) == FP_REGS || (DSTCLASS) == DF_REGS) \
- && ((SRCCLASS) == GENERAL_REGS || (SRCCLASS) == R0_REGS)) \
- || (((DSTCLASS) == GENERAL_REGS || (DSTCLASS) == R0_REGS) \
-@@ -1796,10 +1796,10 @@
- }
-
- #define ASM_OUTPUT_REG_PUSH(file, v) \
-- fprintf ((file), "\tmov.l\tr%s,-@r15\n", (v));
-+ fprintf ((file), "\tmov.l\tr%d,@-r15\n", (v));
-
- #define ASM_OUTPUT_REG_POP(file, v) \
-- fprintf ((file), "\tmov.l\t@r15+,r%s\n", (v));
-+ fprintf ((file), "\tmov.l\t@r15+,r%d\n", (v));
-
- /* The assembler's names for the registers. RFP need not always be used as
- the Real framepointer; it can also be used as a normal general register.
-@@ -2214,3 +2214,5 @@
-
- #define SH_DYNAMIC_SHIFT_COST \
- (TARGET_HARD_SH4 ? 1 : TARGET_SH3 ? (TARGET_SMALLCODE ? 1 : 2) : 20)
-+
-+#define DWARF_LINE_MIN_INSTR_LENGTH 2
diff --git a/lang/gcc/patches/patch-av b/lang/gcc/patches/patch-av
deleted file mode 100644
index 70faad59e89..00000000000
--- a/lang/gcc/patches/patch-av
+++ /dev/null
@@ -1,29 +0,0 @@
-$NetBSD: patch-av,v 1.3 2002/03/28 10:11:53 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/sparc/netbsd.h.orig 2000/07/26 00:18:50 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/sparc/netbsd.h 2001/05/30 18:47:25 1.2
-@@ -7,15 +7,15 @@
- /* Names to predefine in the preprocessor for this target machine. */
-
- #undef CPP_PREDEFINES
--#define CPP_PREDEFINES "-Dunix -Dsparc -D__NetBSD__ -Asystem(unix) -Asystem(NetBSD) -Acpu(sparc) -Amachine(sparc)"
-+#define CPP_PREDEFINES "-Dsparc -D__NetBSD__ -D__KPRINTF_ATTRIBUTE__ -Asystem(unix) -Asystem(NetBSD) -Acpu(sparc) -Amachine(sparc)"
-
- /* Make gcc agree with <machine/ansi.h> */
-
- #undef SIZE_TYPE
--#define SIZE_TYPE "unsigned int"
-+#define SIZE_TYPE "long unsigned int"
-
- #undef PTRDIFF_TYPE
--#define PTRDIFF_TYPE "int"
-+#define PTRDIFF_TYPE "long int"
-
- #undef WCHAR_TYPE
- #define WCHAR_TYPE "int"
-@@ -44,3 +44,5 @@
- and initialization stuff better. */
- #define DWARF2_UNWIND_INFO 0
-
-+/* Name the default cpu target */
-+#define TARGET_CPU_DEFAULT TARGET_CPU_sparc
diff --git a/lang/gcc/patches/patch-aw b/lang/gcc/patches/patch-aw
deleted file mode 100644
index 0fb74fdae6c..00000000000
--- a/lang/gcc/patches/patch-aw
+++ /dev/null
@@ -1,280 +0,0 @@
-$NetBSD: patch-aw,v 1.3 2002/03/28 10:11:53 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/sparc/sparc.c.orig 2001/04/23 12:00:42 1.1.1.2
-+++ ../gcc-2.95.3/gcc/config/sparc/sparc.c 2002/03/28 08:14:56 1.5
-@@ -142,6 +142,8 @@
- int sparc_align_jumps;
- int sparc_align_funcs;
-
-+char sparc_hard_reg_printed[8];
-+
- struct sparc_cpu_select sparc_select[] =
- {
- /* switch name, tune arch */
-@@ -213,8 +215,11 @@
- /* TEMIC sparclet */
- { "tsc701", PROCESSOR_TSC701, MASK_ISA, MASK_SPARCLET },
- { "v9", PROCESSOR_V9, MASK_ISA, MASK_V9 },
-- /* TI ultrasparc */
-- { "ultrasparc", PROCESSOR_ULTRASPARC, MASK_ISA, MASK_V9 },
-+ /* TI ultrasparc I, II, IIi */
-+ { "ultrasparc", PROCESSOR_ULTRASPARC, MASK_ISA, MASK_V9
-+ /* Although insns using %y are deprecated, it is a clear win on current
-+ ultrasparcs. */
-+ |MASK_DEPRECATED_V8_INSNS },
- { 0, 0, 0, 0 }
- };
- struct cpu_table *cpu;
-@@ -368,7 +373,7 @@
- sparc_init_modes ();
-
- if ((profile_flag || profile_block_flag)
-- && sparc_cmodel != CM_MEDLOW)
-+ && sparc_cmodel != CM_32 && sparc_cmodel != CM_MEDLOW)
- {
- error ("profiling does not support code models other than medlow");
- }
-@@ -3108,6 +3113,32 @@
- }
- }
-
-+/* Output any necessary .register pseudo-ops. */
-+void
-+sparc_output_scratch_registers (file)
-+ FILE *file;
-+{
-+#ifdef HAVE_AS_REGISTER_PSEUDO_OP
-+ int i;
-+
-+ if (TARGET_ARCH32)
-+ return;
-+
-+ /* Check if %g[2367] were used without
-+ .register being printed for them already. */
-+ for (i = 2; i < 8; i++)
-+ {
-+ if (regs_ever_live [i]
-+ && ! sparc_hard_reg_printed [i])
-+ {
-+ sparc_hard_reg_printed [i] = 1;
-+ fprintf (file, "\t.register\t%%g%d, #scratch\n", i);
-+ }
-+ if (i == 3) i = 5;
-+ }
-+#endif
-+}
-+
- /* Output code for the function prologue. */
-
- void
-@@ -3116,6 +3147,8 @@
- int size;
- int leaf_function;
- {
-+ sparc_output_scratch_registers (file);
-+
- /* Need to use actual_fsize, since we are also allocating
- space for our callee (and our own register save area). */
- actual_fsize = compute_frame_size (size, leaf_function);
-@@ -3753,6 +3786,14 @@
- while (intslots > 0);
- }
-
-+/* A subroutine of function_arg_record_value. Traverse the structure
-+ recusively and determine how many registers will be required. */
-+
-+/* A subroutine of function_arg_record_value. Traverse the structure
-+ recursively and assign bits to floating point registers. Track which
-+ bits in between need integer registers; invoke function_arg_record_value_3
-+ to make that happen. */
-+
- static void
- function_arg_record_value_2 (type, startbitpos, parms)
- tree type;
-@@ -3812,6 +3853,9 @@
- }
- }
-
-+/* Used by function_arg and function_value to implement the complex
-+ Sparc64 structure calling conventions. */
-+
- static rtx
- function_arg_record_value (type, mode, slotno, named, regbase)
- tree type;
-@@ -3834,10 +3878,12 @@
-
- if (parms.intoffset != -1)
- {
-+ unsigned int startbit, endbit;
- int intslots, this_slotno;
-
-- intslots = (typesize*BITS_PER_UNIT - parms.intoffset + BITS_PER_WORD - 1)
-- / BITS_PER_WORD;
-+ startbit = parms.intoffset & -BITS_PER_WORD;
-+ endbit = (typesize*BITS_PER_UNIT + BITS_PER_WORD - 1) & -BITS_PER_WORD;
-+ intslots = (endbit - startbit) / BITS_PER_WORD;
- this_slotno = slotno + parms.intoffset / BITS_PER_WORD;
-
- intslots = MIN (intslots, SPARC_INT_ARG_MAX - this_slotno);
-@@ -4532,6 +4578,152 @@
- return string;
- }
-
-+/* Emit a library call comparison between floating point X and Y.
-+ COMPARISON is the rtl operator to compare with (EQ, NE, GT, etc.).
-+ TARGET_ARCH64 uses _Qp_* functions, which use pointers to TFmode
-+ values as arguments instead of the TFmode registers themselves,
-+ that's why we cannot call emit_float_lib_cmp. */
-+void
-+sparc_emit_float_lib_cmp (x, y, comparison)
-+ rtx x, y;
-+ enum rtx_code comparison;
-+{
-+ char *qpfunc;
-+ rtx slot0, slot1, result, tem, tem2;
-+ enum machine_mode mode;
-+
-+ switch (comparison)
-+ {
-+ case EQ:
-+ qpfunc = (TARGET_ARCH64) ? "_Qp_feq" : "_Q_feq";
-+ break;
-+
-+ case NE:
-+ qpfunc = (TARGET_ARCH64) ? "_Qp_fne" : "_Q_fne";
-+ break;
-+
-+ case GT:
-+ qpfunc = (TARGET_ARCH64) ? "_Qp_fgt" : "_Q_fgt";
-+ break;
-+
-+ case GE:
-+ qpfunc = (TARGET_ARCH64) ? "_Qp_fge" : "_Q_fge";
-+ break;
-+
-+ case LT:
-+ qpfunc = (TARGET_ARCH64) ? "_Qp_flt" : "_Q_flt";
-+ break;
-+
-+ case LE:
-+ qpfunc = (TARGET_ARCH64) ? "_Qp_fle" : "_Q_fle";
-+ break;
-+
-+ /* case UNORDERED:
-+ case UNGT:
-+ case UNLT:
-+ case UNEQ:
-+ case UNGE:
-+ case UNLE:
-+ case LTGT:
-+ qpfunc = (TARGET_ARCH64) ? "_Qp_cmp" : "_Q_cmp";
-+ break;
-+ */
-+ default:
-+ abort();
-+ break;
-+ }
-+
-+ if (TARGET_ARCH64)
-+ {
-+ if (GET_CODE (x) != MEM)
-+ {
-+ slot0 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ emit_insn (gen_rtx_SET (VOIDmode, slot0, x));
-+ }
-+ else
-+ slot0 = x;
-+
-+ if (GET_CODE (y) != MEM)
-+ {
-+ slot1 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ emit_insn (gen_rtx_SET (VOIDmode, slot1, y));
-+ }
-+ else
-+ slot1 = y;
-+
-+ emit_library_call (gen_rtx_SYMBOL_REF (Pmode, qpfunc), 1,
-+ DImode, 2,
-+ XEXP (slot0, 0), Pmode,
-+ XEXP (slot1, 0), Pmode);
-+
-+ mode = DImode;
-+ }
-+ else
-+ {
-+ emit_library_call (gen_rtx_SYMBOL_REF (Pmode, qpfunc), 1,
-+ SImode, 2,
-+ x, TFmode, y, TFmode);
-+
-+ mode = SImode;
-+ }
-+
-+
-+ /* Immediately move the result of the libcall into a pseudo
-+ register so reload doesn't clobber the value if it needs
-+ the return register for a spill reg. */
-+ result = gen_reg_rtx (mode);
-+ emit_move_insn (result, hard_libcall_value (mode));
-+
-+ switch (comparison)
-+ {
-+ default:
-+ emit_cmp_insn (result, const0_rtx, NE,
-+ NULL_RTX, mode, 0, 0);
-+ break;
-+ /* case ORDERED:
-+ case UNORDERED:
-+ emit_cmp_insn (result, GEN_INT(3),
-+ (comparison == UNORDERED) ? EQ : NE,
-+ NULL_RTX, mode, 0, 0);
-+ break;
-+ case UNGT:
-+ case UNGE:
-+ emit_cmp_insn (result, const1_rtx,
-+ (comparison == UNGT) ? GT : NE,
-+ NULL_RTX, mode, 0, 0);
-+ break;
-+ case UNLE:
-+ emit_cmp_insn (result, const2_rtx, NE,
-+ NULL_RTX, mode, 0, 0);
-+ break;
-+ case UNLT:
-+ tem = gen_reg_rtx (mode);
-+ if (TARGET_ARCH32)
-+ emit_insn (gen_andsi3 (tem, result, const1_rtx));
-+ else
-+ emit_insn (gen_anddi3 (tem, result, const1_rtx));
-+ emit_cmp_insn (tem, const0_rtx, NE,
-+ NULL_RTX, mode, 0, 0);
-+ break;
-+ case UNEQ:
-+ case LTGT:
-+ tem = gen_reg_rtx (mode);
-+ if (TARGET_ARCH32)
-+ emit_insn (gen_addsi3 (tem, result, const1_rtx));
-+ else
-+ emit_insn (gen_adddi3 (tem, result, const1_rtx));
-+ tem2 = gen_reg_rtx (mode);
-+ if (TARGET_ARCH32)
-+ emit_insn (gen_andsi3 (tem2, tem, const2_rtx));
-+ else
-+ emit_insn (gen_anddi3 (tem2, tem, const2_rtx));
-+ emit_cmp_insn (tem2, const0_rtx,
-+ (comparison == UNEQ) ? EQ : NE,
-+ NULL_RTX, mode, 0, 0);
-+ break;*/
-+ }
-+}
-+
- /* Return the string to output a conditional branch to LABEL, testing
- register REG. LABEL is the operand number of the label; REG is the
- operand number of the reg. OP is the conditional expression. The mode
-@@ -5850,6 +6042,8 @@
- {
- char *sp_str = reg_names[STACK_POINTER_REGNUM];
- unsigned long gmask = current_frame_info.gmask;
-+
-+ sparc_output_scratch_registers (file);
-
- /* This is only for the human reader. */
- fprintf (file, "\t%s#PROLOGUE# 0\n", ASM_COMMENT_START);
diff --git a/lang/gcc/patches/patch-ax b/lang/gcc/patches/patch-ax
deleted file mode 100644
index f7e246d27d4..00000000000
--- a/lang/gcc/patches/patch-ax
+++ /dev/null
@@ -1,306 +0,0 @@
-$NetBSD: patch-ax,v 1.3 2002/03/28 10:11:53 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/sparc/sparc.h.orig 2000/07/26 00:18:51 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/sparc/sparc.h 2002/03/28 08:14:56 1.3
-@@ -50,11 +50,11 @@
-
- /* Code model selection.
- -mcmodel is used to select the v9 code model.
-- Different code models aren't supported for v8 code.
-+ Different code models aren't supported for v7/8 code.
-
- TARGET_CM_32: 32 bit address space, top 32 bits = 0,
- pointers are 32 bits. Note that this isn't intended
-- to imply a v8 abi.
-+ to imply a v7/8 abi.
-
- TARGET_CM_MEDLOW: 32 bit address space, top 32 bits = 0,
- avoid generating %uhi and %ulo terms,
-@@ -173,8 +173,8 @@
- #endif
-
- #if TARGET_CPU_DEFAULT == TARGET_CPU_sparclite86x
--#define CPP_CPU32_DEFAULT_SPEC "-D__sparclite86x__ -D__sparc_v8__"
--#define ASM_CPU32_DEFAULT_SPEC "-Av8"
-+#define CPP_CPU32_DEFAULT_SPEC "-D__sparclite86x__"
-+#define ASM_CPU32_DEFAULT_SPEC "-Asparclite"
- #endif
-
- #endif
-@@ -233,7 +233,7 @@
- %{mcpu=v8:-D__sparc_v8__} \
- %{mcpu=supersparc:-D__supersparc__ -D__sparc_v8__} \
- %{mcpu=hypersparc:-D__hypersparc__ -D__sparc_v8__} \
--%{mcpu=sparclite86x:-D__sparclite86x__ -D__sparc_v8__} \
-+%{mcpu=sparclite86x:-D__sparclite86x__} \
- %{mcpu=v9:-D__sparc_v9__} \
- %{mcpu=ultrasparc:-D__sparc_v9__} \
- %{!mcpu*:%{!mcypress:%{!msparclite:%{!mf930:%{!mf934:%{!mv8:%{!msupersparc:%(cpp_cpu_default)}}}}}}} \
-@@ -297,6 +297,7 @@
- %{msparclite:-Asparclite} \
- %{mf930:-Asparclite} %{mf934:-Asparclite} \
- %{mcpu=sparclite:-Asparclite} \
-+%{mcpu=sparclite86x:-Asparclite} \
- %{mcpu=f930:-Asparclite} %{mcpu=f934:-Asparclite} \
- %{mv8plus:-Av8plus} \
- %{mcpu=v9:-Av9} \
-@@ -542,9 +543,8 @@
- #define TARGET_VIS (target_flags & MASK_VIS)
-
- /* Compile for Solaris V8+. 32 bit Solaris preserves the high bits of
-- the current out and global registers. Linux saves the high bits on
-- context switches but not signals. */
--#define MASK_V8PLUS 0x2000000
-+ the current out and global registers and Linux 2.2+ as well. */
-+#define MASK_V8PLUS 0x2000000
- #define TARGET_V8PLUS (target_flags & MASK_V8PLUS)
-
- /* TARGET_HARD_MUL: Use hardware multiply instructions but not %y.
-@@ -555,7 +555,7 @@
- #define TARGET_HARD_MUL32 \
- ((TARGET_V8 || TARGET_SPARCLITE \
- || TARGET_SPARCLET || TARGET_DEPRECATED_V8_INSNS) \
-- && ! TARGET_V8PLUS)
-+ && ! TARGET_V8PLUS && TARGET_ARCH32)
-
- #define TARGET_HARD_MUL \
- (TARGET_V8 || TARGET_SPARCLITE || TARGET_SPARCLET \
-@@ -1822,6 +1822,31 @@
- ASM_OUTPUT_LABEL (FILE, NAME); \
- } while (0)
-
-+/* Output the special assembly code needed to tell the assembler some
-+ register is used as global register variable. */
-+
-+#ifdef HAVE_AS_REGISTER_PSEUDO_OP
-+#define ASM_DECLARE_REGISTER_GLOBAL(FILE, DECL, REGNO, NAME) \
-+do { \
-+ if (TARGET_ARCH64) \
-+ { \
-+ int __end = HARD_REGNO_NREGS ((REGNO), DECL_MODE (decl)) + (REGNO); \
-+ int __reg; \
-+ extern char sparc_hard_reg_printed[8]; \
-+ for (__reg = (REGNO); __reg < 8 && __reg < __end; __reg++) \
-+ if ((__reg & ~1) == 2 || (__reg & ~1) == 6) \
-+ { \
-+ if (__reg == (REGNO)) \
-+ fprintf ((FILE), "\t.register\t%%g%d, %s\n", __reg, (NAME)); \
-+ else \
-+ fprintf ((FILE), "\t.register\t%%g%d, .gnu.part%d.%s\n", \
-+ __reg, __reg - (REGNO), (NAME)); \
-+ sparc_hard_reg_printed[__reg] = 1; \
-+ } \
-+ } \
-+} while (0)
-+#endif
-+
- /* This macro generates the assembly code for function entry.
- FILE is a stdio stream to output the code to.
- SIZE is an int: how many units of temporary storage to allocate.
-@@ -2234,6 +2259,14 @@
- : 0))
- #endif
-
-+/* Should gcc use [%reg+%lo(xx)+offset] addresses? */
-+
-+#ifdef HAVE_AS_OFFSETABLE_LO10
-+#define USE_AS_OFFSETABLE_LO10 1
-+#else
-+#define USE_AS_OFFSETABLE_LO10 0
-+#endif
-+
- /* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression
- that is a valid memory address for an instruction.
- The MODE argument is the machine mode for the MEM expression
-@@ -2258,6 +2291,9 @@
-
- #define RTX_OK_FOR_OFFSET_P(X) \
- (GET_CODE (X) == CONST_INT && INTVAL (X) >= -0x1000 && INTVAL (X) < 0x1000)
-+
-+#define RTX_OK_FOR_OLO10_P(X) \
-+ (GET_CODE (X) == CONST_INT && INTVAL (X) >= -0x1000 && INTVAL (X) < 0xc00 - 8)
-
- #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
- { if (RTX_OK_FOR_BASE_P (X)) \
-@@ -2309,6 +2345,30 @@
- || RTX_OK_FOR_OFFSET_P (op0)) \
- goto ADDR; \
- } \
-+ else if (USE_AS_OFFSETABLE_LO10 \
-+ && GET_CODE (op0) == LO_SUM \
-+ && TARGET_ARCH64 \
-+ && ! TARGET_CM_MEDMID \
-+ && RTX_OK_FOR_OLO10_P (op1)) \
-+ { \
-+ register rtx op00 = XEXP (op0, 0); \
-+ register rtx op01 = XEXP (op0, 1); \
-+ if (RTX_OK_FOR_BASE_P (op00) \
-+ && CONSTANT_P (op01)) \
-+ goto ADDR; \
-+ } \
-+ else if (USE_AS_OFFSETABLE_LO10 \
-+ && GET_CODE (op1) == LO_SUM \
-+ && TARGET_ARCH64 \
-+ && ! TARGET_CM_MEDMID \
-+ && RTX_OK_FOR_OLO10_P (op0)) \
-+ { \
-+ register rtx op10 = XEXP (op1, 0); \
-+ register rtx op11 = XEXP (op1, 1); \
-+ if (RTX_OK_FOR_BASE_P (op10) \
-+ && CONSTANT_P (op11)) \
-+ goto ADDR; \
-+ } \
- } \
- else if (GET_CODE (X) == LO_SUM) \
- { \
-@@ -2565,26 +2625,25 @@
- #define MULSI3_LIBCALL "*.umul"
-
- /* Define library calls for quad FP operations. These are all part of the
-- SPARC ABI.
-- ??? ARCH64 still does not work as the _Qp_* routines take pointers. */
--#define ADDTF3_LIBCALL (TARGET_ARCH64 ? "_Qp_add" : "_Q_add")
--#define SUBTF3_LIBCALL (TARGET_ARCH64 ? "_Qp_sub" : "_Q_sub")
--#define NEGTF2_LIBCALL (TARGET_ARCH64 ? "_Qp_neg" : "_Q_neg")
--#define MULTF3_LIBCALL (TARGET_ARCH64 ? "_Qp_mul" : "_Q_mul")
--#define DIVTF3_LIBCALL (TARGET_ARCH64 ? "_Qp_div" : "_Q_div")
--#define FLOATSITF2_LIBCALL (TARGET_ARCH64 ? "_Qp_itoq" : "_Q_itoq")
--#define FIX_TRUNCTFSI2_LIBCALL (TARGET_ARCH64 ? "_Qp_qtoi" : "_Q_qtoi")
--#define FIXUNS_TRUNCTFSI2_LIBCALL (TARGET_ARCH64 ? "_Qp_qtoui" : "_Q_qtou")
--#define EXTENDSFTF2_LIBCALL (TARGET_ARCH64 ? "_Qp_stoq" : "_Q_stoq")
--#define TRUNCTFSF2_LIBCALL (TARGET_ARCH64 ? "_Qp_qtos" : "_Q_qtos")
--#define EXTENDDFTF2_LIBCALL (TARGET_ARCH64 ? "_Qp_dtoq" : "_Q_dtoq")
--#define TRUNCTFDF2_LIBCALL (TARGET_ARCH64 ? "_Qp_qtod" : "_Q_qtod")
--#define EQTF2_LIBCALL (TARGET_ARCH64 ? "_Qp_feq" : "_Q_feq")
--#define NETF2_LIBCALL (TARGET_ARCH64 ? "_Qp_fne" : "_Q_fne")
--#define GTTF2_LIBCALL (TARGET_ARCH64 ? "_Qp_fgt" : "_Q_fgt")
--#define GETF2_LIBCALL (TARGET_ARCH64 ? "_Qp_fge" : "_Q_fge")
--#define LTTF2_LIBCALL (TARGET_ARCH64 ? "_Qp_flt" : "_Q_flt")
--#define LETF2_LIBCALL (TARGET_ARCH64 ? "_Qp_fle" : "_Q_fle")
-+ SPARC 32bit ABI. */
-+#define ADDTF3_LIBCALL "_Q_add"
-+#define SUBTF3_LIBCALL "_Q_sub"
-+#define NEGTF2_LIBCALL "_Q_neg"
-+#define MULTF3_LIBCALL "_Q_mul"
-+#define DIVTF3_LIBCALL "_Q_div"
-+#define FLOATSITF2_LIBCALL "_Q_itoq"
-+#define FIX_TRUNCTFSI2_LIBCALL "_Q_qtoi"
-+#define FIXUNS_TRUNCTFSI2_LIBCALL "_Q_qtou"
-+#define EXTENDSFTF2_LIBCALL "_Q_stoq"
-+#define TRUNCTFSF2_LIBCALL "_Q_qtos"
-+#define EXTENDDFTF2_LIBCALL "_Q_dtoq"
-+#define TRUNCTFDF2_LIBCALL "_Q_qtod"
-+#define EQTF2_LIBCALL "_Q_feq"
-+#define NETF2_LIBCALL "_Q_fne"
-+#define GTTF2_LIBCALL "_Q_fgt"
-+#define GETF2_LIBCALL "_Q_fge"
-+#define LTTF2_LIBCALL "_Q_flt"
-+#define LETF2_LIBCALL "_Q_fle"
-
- /* We can define the TFmode sqrt optab only if TARGET_FPU. This is because
- with soft-float, the SFmode and DFmode sqrt instructions will be absent,
-@@ -2592,34 +2651,37 @@
- for calls to the builtin function sqrt, but this fails. */
- #define INIT_TARGET_OPTABS \
- do { \
-- add_optab->handlers[(int) TFmode].libfunc \
-- = gen_rtx_SYMBOL_REF (Pmode, ADDTF3_LIBCALL); \
-- sub_optab->handlers[(int) TFmode].libfunc \
-- = gen_rtx_SYMBOL_REF (Pmode, SUBTF3_LIBCALL); \
-- neg_optab->handlers[(int) TFmode].libfunc \
-- = gen_rtx_SYMBOL_REF (Pmode, NEGTF2_LIBCALL); \
-- smul_optab->handlers[(int) TFmode].libfunc \
-- = gen_rtx_SYMBOL_REF (Pmode, MULTF3_LIBCALL); \
-- flodiv_optab->handlers[(int) TFmode].libfunc \
-- = gen_rtx_SYMBOL_REF (Pmode, DIVTF3_LIBCALL); \
-- eqtf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, EQTF2_LIBCALL); \
-- netf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, NETF2_LIBCALL); \
-- gttf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, GTTF2_LIBCALL); \
-- getf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, GETF2_LIBCALL); \
-- lttf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, LTTF2_LIBCALL); \
-- letf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, LETF2_LIBCALL); \
-- trunctfsf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, TRUNCTFSF2_LIBCALL); \
-- trunctfdf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, TRUNCTFDF2_LIBCALL); \
-- extendsftf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, EXTENDSFTF2_LIBCALL); \
-- extenddftf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, EXTENDDFTF2_LIBCALL); \
-- floatsitf_libfunc = gen_rtx_SYMBOL_REF (Pmode, FLOATSITF2_LIBCALL); \
-- fixtfsi_libfunc = gen_rtx_SYMBOL_REF (Pmode, FIX_TRUNCTFSI2_LIBCALL); \
-- fixunstfsi_libfunc \
-- = gen_rtx_SYMBOL_REF (Pmode, FIXUNS_TRUNCTFSI2_LIBCALL); \
-- if (TARGET_FPU) \
-- sqrt_optab->handlers[(int) TFmode].libfunc \
-- = gen_rtx_SYMBOL_REF (Pmode, "_Q_sqrt"); \
-- INIT_SUBTARGET_OPTABS; \
-+ if (TARGET_ARCH32) \
-+ { \
-+ add_optab->handlers[(int) TFmode].libfunc \
-+ = gen_rtx_SYMBOL_REF (Pmode, ADDTF3_LIBCALL); \
-+ sub_optab->handlers[(int) TFmode].libfunc \
-+ = gen_rtx_SYMBOL_REF (Pmode, SUBTF3_LIBCALL); \
-+ neg_optab->handlers[(int) TFmode].libfunc \
-+ = gen_rtx_SYMBOL_REF (Pmode, NEGTF2_LIBCALL); \
-+ smul_optab->handlers[(int) TFmode].libfunc \
-+ = gen_rtx_SYMBOL_REF (Pmode, MULTF3_LIBCALL); \
-+ flodiv_optab->handlers[(int) TFmode].libfunc \
-+ = gen_rtx_SYMBOL_REF (Pmode, DIVTF3_LIBCALL); \
-+ eqtf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, EQTF2_LIBCALL); \
-+ netf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, NETF2_LIBCALL); \
-+ gttf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, GTTF2_LIBCALL); \
-+ getf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, GETF2_LIBCALL); \
-+ lttf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, LTTF2_LIBCALL); \
-+ letf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, LETF2_LIBCALL); \
-+ trunctfsf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, TRUNCTFSF2_LIBCALL); \
-+ trunctfdf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, TRUNCTFDF2_LIBCALL); \
-+ extendsftf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, EXTENDSFTF2_LIBCALL);\
-+ extenddftf2_libfunc = gen_rtx_SYMBOL_REF (Pmode, EXTENDDFTF2_LIBCALL);\
-+ floatsitf_libfunc = gen_rtx_SYMBOL_REF (Pmode, FLOATSITF2_LIBCALL); \
-+ fixtfsi_libfunc = gen_rtx_SYMBOL_REF (Pmode, FIX_TRUNCTFSI2_LIBCALL); \
-+ fixunstfsi_libfunc \
-+ = gen_rtx_SYMBOL_REF (Pmode, FIXUNS_TRUNCTFSI2_LIBCALL); \
-+ if (TARGET_FPU) \
-+ sqrt_optab->handlers[(int) TFmode].libfunc \
-+ = gen_rtx_SYMBOL_REF (Pmode, "_Q_sqrt"); \
-+ } \
-+ INIT_SUBTARGET_OPTABS; \
- } while (0)
-
- /* This is meant to be redefined in the host dependent files */
-@@ -3109,15 +3171,29 @@
- offset = INTVAL (XEXP (addr, 1)), base = XEXP (addr, 0);\
- else \
- base = XEXP (addr, 0), index = XEXP (addr, 1); \
-- fputs (reg_names[REGNO (base)], FILE); \
-- if (index == 0) \
-- fprintf (FILE, "%+d", offset); \
-- else if (GET_CODE (index) == REG) \
-- fprintf (FILE, "+%s", reg_names[REGNO (index)]); \
-- else if (GET_CODE (index) == SYMBOL_REF \
-- || GET_CODE (index) == CONST) \
-- fputc ('+', FILE), output_addr_const (FILE, index); \
-- else abort (); \
-+ if (GET_CODE (base) == LO_SUM) \
-+ { \
-+ if (! USE_AS_OFFSETABLE_LO10 \
-+ || TARGET_ARCH32 \
-+ || TARGET_CM_MEDMID) \
-+ abort (); \
-+ output_operand (XEXP (base, 0), 0); \
-+ fputs ("+%lo(", FILE); \
-+ output_address (XEXP (base, 1)); \
-+ fprintf (FILE, ")+%d", offset); \
-+ } \
-+ else \
-+ { \
-+ fputs (reg_names[REGNO (base)], FILE); \
-+ if (index == 0) \
-+ fprintf (FILE, "%+d", offset); \
-+ else if (GET_CODE (index) == REG) \
-+ fprintf (FILE, "+%s", reg_names[REGNO (index)]); \
-+ else if (GET_CODE (index) == SYMBOL_REF \
-+ || GET_CODE (index) == CONST) \
-+ fputc ('+', FILE), output_addr_const (FILE, index); \
-+ else abort (); \
-+ } \
- } \
- else if (GET_CODE (addr) == MINUS \
- && GET_CODE (XEXP (addr, 1)) == LABEL_REF) \
diff --git a/lang/gcc/patches/patch-ay b/lang/gcc/patches/patch-ay
deleted file mode 100644
index 69a3b5af483..00000000000
--- a/lang/gcc/patches/patch-ay
+++ /dev/null
@@ -1,1396 +0,0 @@
-$NetBSD: patch-ay,v 1.3 2002/03/28 10:11:53 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/sparc/sparc.md.orig 2001/04/23 12:00:43 1.1.1.2
-+++ ../gcc-2.95.3/gcc/config/sparc/sparc.md 2002/03/28 08:14:56 1.5
-@@ -837,7 +837,7 @@
- }
- else if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD)
- {
-- emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, EQ);
-+ sparc_emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, EQ);
- emit_insn (gen_sne (operands[0]));
- DONE;
- }
-@@ -890,7 +890,7 @@
- }
- else if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD)
- {
-- emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, NE);
-+ sparc_emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, NE);
- emit_insn (gen_sne (operands[0]));
- DONE;
- }
-@@ -911,7 +911,7 @@
- {
- if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD)
- {
-- emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, GT);
-+ sparc_emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, GT);
- emit_insn (gen_sne (operands[0]));
- DONE;
- }
-@@ -932,7 +932,7 @@
- {
- if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD)
- {
-- emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, LT);
-+ sparc_emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, LT);
- emit_insn (gen_sne (operands[0]));
- DONE;
- }
-@@ -953,7 +953,7 @@
- {
- if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD)
- {
-- emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, GE);
-+ sparc_emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, GE);
- emit_insn (gen_sne (operands[0]));
- DONE;
- }
-@@ -974,7 +974,7 @@
- {
- if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD)
- {
-- emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, LE);
-+ sparc_emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, LE);
- emit_insn (gen_sne (operands[0]));
- DONE;
- }
-@@ -1608,7 +1608,7 @@
- }
- else if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD)
- {
-- emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, EQ);
-+ sparc_emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, EQ);
- emit_jump_insn (gen_bne (operands[0]));
- DONE;
- }
-@@ -1632,7 +1632,7 @@
- }
- else if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD)
- {
-- emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, NE);
-+ sparc_emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, NE);
- emit_jump_insn (gen_bne (operands[0]));
- DONE;
- }
-@@ -1656,7 +1656,7 @@
- }
- else if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD)
- {
-- emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, GT);
-+ sparc_emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, GT);
- emit_jump_insn (gen_bne (operands[0]));
- DONE;
- }
-@@ -1690,7 +1690,7 @@
- }
- else if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD)
- {
-- emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, LT);
-+ sparc_emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, LT);
- emit_jump_insn (gen_bne (operands[0]));
- DONE;
- }
-@@ -1724,7 +1724,7 @@
- }
- else if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD)
- {
-- emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, GE);
-+ sparc_emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, GE);
- emit_jump_insn (gen_bne (operands[0]));
- DONE;
- }
-@@ -1758,7 +1758,7 @@
- }
- else if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD)
- {
-- emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, LE);
-+ sparc_emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, LE);
- emit_jump_insn (gen_bne (operands[0]));
- DONE;
- }
-@@ -1774,6 +1774,145 @@
- "
- { operands[1] = gen_compare_reg (LEU, sparc_compare_op0, sparc_compare_op1);
- }")
-+
-+;;(define_expand "bunordered"
-+;; [(set (pc)
-+;; (if_then_else (unordered (match_dup 1) (const_int 0))
-+;; (label_ref (match_operand 0 "" ""))
-+;; (pc)))]
-+;; ""
-+;; "
-+;;{
-+;; if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD)
-+;; {
-+;; sparc_emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1,
-+;; UNORDERED);
-+;; emit_jump_insn (gen_beq (operands[0]));
-+;; DONE;
-+;; }
-+;; operands[1] = gen_compare_reg (UNORDERED, sparc_compare_op0,
-+;; sparc_compare_op1);
-+;;}")
-+
-+;;(define_expand "bordered"
-+;; [(set (pc)
-+;; (if_then_else (ordered (match_dup 1) (const_int 0))
-+;; (label_ref (match_operand 0 "" ""))
-+;; (pc)))]
-+;; ""
-+;; "
-+;;{
-+;; if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD)
-+;; {
-+;; sparc_emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, ORDERED);
-+;; emit_jump_insn (gen_bne (operands[0]));
-+;; DONE;
-+;; }
-+;; operands[1] = gen_compare_reg (ORDERED, sparc_compare_op0,
-+;; sparc_compare_op1);
-+;;}")
-+;;
-+;;(define_expand "bungt"
-+;; [(set (pc)
-+;; (if_then_else (ungt (match_dup 1) (const_int 0))
-+;; (label_ref (match_operand 0 "" ""))
-+;; (pc)))]
-+;; ""
-+;; "
-+;;{
-+;; if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD)
-+;; {
-+;; sparc_emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, UNGT);
-+;; emit_jump_insn (gen_bgt (operands[0]));
-+;; DONE;
-+;; }
-+;; operands[1] = gen_compare_reg (UNGT, sparc_compare_op0, sparc_compare_op1);
-+;;}")
-+;;
-+;;(define_expand "bunlt"
-+;; [(set (pc)
-+;; (if_then_else (unlt (match_dup 1) (const_int 0))
-+;; (label_ref (match_operand 0 "" ""))
-+;; (pc)))]
-+;; ""
-+;; "
-+;;{
-+;; if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD)
-+;; {
-+;; sparc_emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, UNLT);
-+;; emit_jump_insn (gen_bne (operands[0]));
-+;; DONE;
-+;; }
-+;; operands[1] = gen_compare_reg (UNLT, sparc_compare_op0, sparc_compare_op1);
-+;;}")
-+;;
-+;;(define_expand "buneq"
-+;; [(set (pc)
-+;; (if_then_else (uneq (match_dup 1) (const_int 0))
-+;; (label_ref (match_operand 0 "" ""))
-+;; (pc)))]
-+;; ""
-+;; "
-+;;{
-+;; if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD)
-+;; {
-+;; sparc_emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, UNEQ);
-+;; emit_jump_insn (gen_beq (operands[0]));
-+;; DONE;
-+;; }
-+;; operands[1] = gen_compare_reg (UNEQ, sparc_compare_op0, sparc_compare_op1);
-+;;}")
-+;;
-+;;(define_expand "bunge"
-+;; [(set (pc)
-+;; (if_then_else (unge (match_dup 1) (const_int 0))
-+;; (label_ref (match_operand 0 "" ""))
-+;; (pc)))]
-+;; ""
-+;; "
-+;;{
-+;; if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD)
-+;; {
-+;; sparc_emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, UNGE);
-+;; emit_jump_insn (gen_bne (operands[0]));
-+;; DONE;
-+;; }
-+;; operands[1] = gen_compare_reg (UNGE, sparc_compare_op0, sparc_compare_op1);
-+;;}")
-+;;
-+;;(define_expand "bunle"
-+;; [(set (pc)
-+;; (if_then_else (unle (match_dup 1) (const_int 0))
-+;; (label_ref (match_operand 0 "" ""))
-+;; (pc)))]
-+;; ""
-+;; "
-+;;{
-+;; if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD)
-+;; {
-+;; sparc_emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, UNLE);
-+;; emit_jump_insn (gen_bne (operands[0]));
-+;; DONE;
-+;; }
-+;; operands[1] = gen_compare_reg (UNLE, sparc_compare_op0, sparc_compare_op1);
-+;;}")
-+;;
-+;;(define_expand "bltgt"
-+;; [(set (pc)
-+;; (if_then_else (ltgt (match_dup 1) (const_int 0))
-+;; (label_ref (match_operand 0 "" ""))
-+;; (pc)))]
-+;; ""
-+;; "
-+;;{
-+;; if (GET_MODE (sparc_compare_op0) == TFmode && ! TARGET_HARD_QUAD)
-+;; {
-+;; sparc_emit_float_lib_cmp (sparc_compare_op0, sparc_compare_op1, LTGT);
-+;; emit_jump_insn (gen_bne (operands[0]));
-+;; DONE;
-+;; }
-+;; operands[1] = gen_compare_reg (LTGT, sparc_compare_op0, sparc_compare_op1);
-+;;}")
-
- ;; Now match both normal and inverted jump.
-
-@@ -2496,7 +2635,7 @@
- [(set (match_operand:DI 0 "register_operand" "=r")
- (high:DI (match_operand:DI 1 "sp64_medium_pic_operand" "")))]
- "(TARGET_CM_MEDLOW || TARGET_CM_EMBMEDANY) && check_pic (1)"
-- "sethi\\t%%lo(%a1), %0"
-+ "sethi\\t%%hi(%a1), %0"
- [(set_attr "type" "move")
- (set_attr "length" "1")])
-
-@@ -3473,10 +3612,7 @@
- (define_split
- [(set (match_operand:TF 0 "register_operand" "")
- (match_operand:TF 1 "register_operand" ""))]
-- "reload_completed
-- && (! TARGET_ARCH64
-- || (TARGET_FPU
-- && ! TARGET_HARD_QUAD))"
-+ "reload_completed"
- [(clobber (const_int 0))]
- "
- {
-@@ -4521,16 +4657,70 @@
- [(set_attr "type" "fp")
- (set_attr "length" "1")])
-
--(define_insn "extendsftf2"
-+(define_expand "extendsftf2"
- [(set (match_operand:TF 0 "register_operand" "=e")
- (float_extend:TF
- (match_operand:SF 1 "register_operand" "f")))]
-+ "TARGET_FPU && (TARGET_HARD_QUAD || TARGET_ARCH64)"
-+ "
-+{
-+ if (! TARGET_HARD_QUAD)
-+ {
-+ rtx slot0;
-+
-+ if (GET_CODE (operands[0]) != MEM)
-+ slot0 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ else
-+ slot0 = operands[0];
-+
-+ emit_library_call (gen_rtx (SYMBOL_REF, Pmode, \"_Qp_stoq\"), 0,
-+ VOIDmode, 2,
-+ XEXP (slot0, 0), Pmode,
-+ operands[1], SFmode);
-+
-+ if (GET_CODE (operands[0]) != MEM)
-+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], slot0));
-+ DONE;
-+ }
-+}")
-+
-+(define_insn "*extendsftf2_hq"
-+ [(set (match_operand:TF 0 "register_operand" "=e")
-+ (float_extend:TF
-+ (match_operand:SF 1 "register_operand" "f")))]
- "TARGET_FPU && TARGET_HARD_QUAD"
- "fstoq\\t%1, %0"
- [(set_attr "type" "fp")
- (set_attr "length" "1")])
-+
-+(define_expand "extenddftf2"
-+ [(set (match_operand:TF 0 "register_operand" "=e")
-+ (float_extend:TF
-+ (match_operand:DF 1 "register_operand" "e")))]
-+ "TARGET_FPU && (TARGET_HARD_QUAD || TARGET_ARCH64)"
-+ "
-+{
-+ if (! TARGET_HARD_QUAD)
-+ {
-+ rtx slot0;
-+
-+ if (GET_CODE (operands[0]) != MEM)
-+ slot0 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ else
-+ slot0 = operands[0];
-+
-+ emit_library_call (gen_rtx (SYMBOL_REF, Pmode, \"_Qp_dtoq\"), 0,
-+ VOIDmode, 2,
-+ XEXP (slot0, 0), Pmode,
-+ operands[1], DFmode);
-+
-+ if (GET_CODE (operands[0]) != MEM)
-+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], slot0));
-+ DONE;
-+ }
-+}")
-
--(define_insn "extenddftf2"
-+(define_insn "*extenddftf2_hq"
- [(set (match_operand:TF 0 "register_operand" "=e")
- (float_extend:TF
- (match_operand:DF 1 "register_operand" "e")))]
-@@ -4547,8 +4737,34 @@
- "fdtos\\t%1, %0"
- [(set_attr "type" "fp")
- (set_attr "length" "1")])
-+
-+(define_expand "trunctfsf2"
-+ [(set (match_operand:SF 0 "register_operand" "=f")
-+ (float_truncate:SF
-+ (match_operand:TF 1 "register_operand" "e")))]
-+ "TARGET_FPU && (TARGET_HARD_QUAD || TARGET_ARCH64)"
-+ "
-+{
-+ if (! TARGET_HARD_QUAD)
-+ {
-+ rtx slot0;
-+
-+ if (GET_CODE (operands[1]) != MEM)
-+ {
-+ slot0 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ emit_insn (gen_rtx_SET (VOIDmode, slot0, operands[1]));
-+ }
-+ else
-+ slot0 = operands[1];
-+
-+ emit_library_call_value (gen_rtx (SYMBOL_REF, Pmode, \"_Qp_qtos\"),
-+ operands[0], 0, SFmode, 1,
-+ XEXP (slot0, 0), Pmode);
-+ DONE;
-+ }
-+}")
-
--(define_insn "trunctfsf2"
-+(define_insn "*trunctfsf2_hq"
- [(set (match_operand:SF 0 "register_operand" "=f")
- (float_truncate:SF
- (match_operand:TF 1 "register_operand" "e")))]
-@@ -4557,7 +4773,33 @@
- [(set_attr "type" "fp")
- (set_attr "length" "1")])
-
--(define_insn "trunctfdf2"
-+(define_expand "trunctfdf2"
-+ [(set (match_operand:DF 0 "register_operand" "=f")
-+ (float_truncate:DF
-+ (match_operand:TF 1 "register_operand" "e")))]
-+ "TARGET_FPU && (TARGET_HARD_QUAD || TARGET_ARCH64)"
-+ "
-+{
-+ if (! TARGET_HARD_QUAD)
-+ {
-+ rtx slot0;
-+
-+ if (GET_CODE (operands[1]) != MEM)
-+ {
-+ slot0 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ emit_insn (gen_rtx_SET (VOIDmode, slot0, operands[1]));
-+ }
-+ else
-+ slot0 = operands[1];
-+
-+ emit_library_call_value (gen_rtx (SYMBOL_REF, Pmode, \"_Qp_qtod\"),
-+ operands[0], 0, DFmode, 1,
-+ XEXP (slot0, 0), Pmode);
-+ DONE;
-+ }
-+}")
-+
-+(define_insn "*trunctfdf2_hq"
- [(set (match_operand:DF 0 "register_operand" "=e")
- (float_truncate:DF
- (match_operand:TF 1 "register_operand" "e")))]
-@@ -4583,8 +4825,34 @@
- "fitod\\t%1, %0"
- [(set_attr "type" "fp")
- (set_attr "length" "1")])
-+
-+(define_expand "floatsitf2"
-+ [(set (match_operand:TF 0 "register_operand" "=e")
-+ (float:TF (match_operand:SI 1 "register_operand" "f")))]
-+ "TARGET_FPU && (TARGET_HARD_QUAD || TARGET_ARCH64)"
-+ "
-+{
-+ if (! TARGET_HARD_QUAD)
-+ {
-+ rtx slot0;
-+
-+ if (GET_CODE (operands[1]) != MEM)
-+ slot0 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ else
-+ slot0 = operands[1];
-+
-+ emit_library_call (gen_rtx (SYMBOL_REF, Pmode, \"_Qp_itoq\"), 0,
-+ VOIDmode, 2,
-+ XEXP (slot0, 0), Pmode,
-+ operands[1], SImode);
-+
-+ if (GET_CODE (operands[0]) != MEM)
-+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], slot0));
-+ DONE;
-+ }
-+}")
-
--(define_insn "floatsitf2"
-+(define_insn "*floatsitf2_hq"
- [(set (match_operand:TF 0 "register_operand" "=e")
- (float:TF (match_operand:SI 1 "register_operand" "f")))]
- "TARGET_FPU && TARGET_HARD_QUAD"
-@@ -4592,6 +4860,29 @@
- [(set_attr "type" "fp")
- (set_attr "length" "1")])
-
-+(define_expand "floatunssitf2"
-+ [(set (match_operand:TF 0 "register_operand" "=e")
-+ (unsigned_float:TF (match_operand:SI 1 "register_operand" "e")))]
-+ "TARGET_FPU && TARGET_ARCH64 && ! TARGET_HARD_QUAD"
-+ "
-+{
-+ rtx slot0;
-+
-+ if (GET_CODE (operands[1]) != MEM)
-+ slot0 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ else
-+ slot0 = operands[1];
-+
-+ emit_library_call (gen_rtx (SYMBOL_REF, Pmode, \"_Qp_uitoq\"), 0,
-+ VOIDmode, 2,
-+ XEXP (slot0, 0), Pmode,
-+ operands[1], SImode);
-+
-+ if (GET_CODE (operands[0]) != MEM)
-+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], slot0));
-+ DONE;
-+}")
-+
- ;; Now the same for 64 bit sources.
-
- (define_insn "floatdisf2"
-@@ -4610,14 +4901,63 @@
- [(set_attr "type" "fp")
- (set_attr "length" "1")])
-
--(define_insn "floatditf2"
-+(define_expand "floatditf2"
- [(set (match_operand:TF 0 "register_operand" "=e")
-+ (float:TF (match_operand:DI 1 "register_operand" "e")))]
-+ "TARGET_FPU && TARGET_V9 && (TARGET_HARD_QUAD || TARGET_ARCH64)"
-+ "
-+{
-+ if (! TARGET_HARD_QUAD)
-+ {
-+ rtx slot0;
-+
-+ if (GET_CODE (operands[1]) != MEM)
-+ slot0 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ else
-+ slot0 = operands[1];
-+
-+ emit_library_call (gen_rtx (SYMBOL_REF, Pmode, \"_Qp_xtoq\"), 0,
-+ VOIDmode, 2,
-+ XEXP (slot0, 0), Pmode,
-+ operands[1], DImode);
-+
-+ if (GET_CODE (operands[0]) != MEM)
-+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], slot0));
-+ DONE;
-+ }
-+}")
-+
-+(define_insn "*floatditf2_hq"
-+ [(set (match_operand:TF 0 "register_operand" "=e")
- (float:TF (match_operand:DI 1 "register_operand" "e")))]
- "TARGET_V9 && TARGET_FPU && TARGET_HARD_QUAD"
- "fxtoq\\t%1, %0"
- [(set_attr "type" "fp")
- (set_attr "length" "1")])
-
-+(define_expand "floatunsditf2"
-+ [(set (match_operand:TF 0 "register_operand" "=e")
-+ (unsigned_float:TF (match_operand:DI 1 "register_operand" "e")))]
-+ "TARGET_FPU && TARGET_ARCH64 && ! TARGET_HARD_QUAD"
-+ "
-+{
-+ rtx slot0;
-+
-+ if (GET_CODE (operands[1]) != MEM)
-+ slot0 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ else
-+ slot0 = operands[1];
-+
-+ emit_library_call (gen_rtx (SYMBOL_REF, Pmode, \"_Qp_uxtoq\"), 0,
-+ VOIDmode, 2,
-+ XEXP (slot0, 0), Pmode,
-+ operands[1], DImode);
-+
-+ if (GET_CODE (operands[0]) != MEM)
-+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], slot0));
-+ DONE;
-+}")
-+
- ;; Convert a float to an actual integer.
- ;; Truncation is performed as part of the conversion.
-
-@@ -4636,8 +4976,33 @@
- "fdtoi\\t%1, %0"
- [(set_attr "type" "fp")
- (set_attr "length" "1")])
-+
-+(define_expand "fix_trunctfsi2"
-+ [(set (match_operand:SI 0 "register_operand" "=f")
-+ (fix:SI (fix:TF (match_operand:TF 1 "register_operand" "e"))))]
-+ "TARGET_FPU && (TARGET_HARD_QUAD || TARGET_ARCH64)"
-+ "
-+{
-+ if (! TARGET_HARD_QUAD)
-+ {
-+ rtx slot0;
-+
-+ if (GET_CODE (operands[1]) != MEM)
-+ {
-+ slot0 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ emit_insn (gen_rtx_SET (VOIDmode, slot0, operands[1]));
-+ }
-+ else
-+ slot0 = operands[1];
-+
-+ emit_library_call_value (gen_rtx (SYMBOL_REF, Pmode, \"_Qp_qtoi\"),
-+ operands[0], 0, SImode, 1,
-+ XEXP (slot0, 0), Pmode);
-+ DONE;
-+ }
-+}")
-
--(define_insn "fix_trunctfsi2"
-+(define_insn "*fix_trunctfsi2_hq"
- [(set (match_operand:SI 0 "register_operand" "=f")
- (fix:SI (fix:TF (match_operand:TF 1 "register_operand" "e"))))]
- "TARGET_FPU && TARGET_HARD_QUAD"
-@@ -4645,6 +5010,28 @@
- [(set_attr "type" "fp")
- (set_attr "length" "1")])
-
-+(define_expand "fixuns_trunctfsi2"
-+ [(set (match_operand:SI 0 "register_operand" "=f")
-+ (unsigned_fix:SI (fix:TF (match_operand:TF 1 "register_operand" "e"))))]
-+ "TARGET_FPU && TARGET_ARCH64 && ! TARGET_HARD_QUAD"
-+ "
-+{
-+ rtx slot0;
-+
-+ if (GET_CODE (operands[1]) != MEM)
-+ {
-+ slot0 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ emit_insn (gen_rtx_SET (VOIDmode, slot0, operands[1]));
-+ }
-+ else
-+ slot0 = operands[1];
-+
-+ emit_library_call_value (gen_rtx (SYMBOL_REF, Pmode, \"_Qp_qtoui\"),
-+ operands[0], 0, SImode, 1,
-+ XEXP (slot0, 0), Pmode);
-+ DONE;
-+}")
-+
- ;; Now the same, for V9 targets
-
- (define_insn "fix_truncsfdi2"
-@@ -4663,13 +5050,61 @@
- [(set_attr "type" "fp")
- (set_attr "length" "1")])
-
--(define_insn "fix_trunctfdi2"
-+(define_expand "fix_trunctfdi2"
- [(set (match_operand:DI 0 "register_operand" "=e")
-+ (fix:DI (fix:TF (match_operand:TF 1 "register_operand" "e"))))]
-+ "TARGET_V9 && TARGET_FPU && (TARGET_HARD_QUAD || TARGET_ARCH64)"
-+ "
-+{
-+ if (! TARGET_HARD_QUAD)
-+ {
-+ rtx slot0;
-+
-+ if (GET_CODE (operands[1]) != MEM)
-+ {
-+ slot0 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ emit_insn (gen_rtx_SET (VOIDmode, slot0, operands[1]));
-+ }
-+ else
-+ slot0 = operands[1];
-+
-+ emit_library_call_value (gen_rtx (SYMBOL_REF, Pmode, \"_Qp_qtox\"),
-+ operands[0], 0, DImode, 1,
-+ XEXP (slot0, 0), Pmode);
-+ DONE;
-+ }
-+}")
-+
-+(define_insn "*fix_trunctfdi2_hq"
-+ [(set (match_operand:DI 0 "register_operand" "=e")
- (fix:DI (fix:TF (match_operand:TF 1 "register_operand" "e"))))]
- "TARGET_V9 && TARGET_FPU && TARGET_HARD_QUAD"
- "fqtox\\t%1, %0"
- [(set_attr "type" "fp")
- (set_attr "length" "1")])
-+
-+(define_expand "fixuns_trunctfdi2"
-+ [(set (match_operand:DI 0 "register_operand" "=f")
-+ (unsigned_fix:DI (fix:TF (match_operand:TF 1 "register_operand" "e"))))]
-+ "TARGET_FPU && TARGET_ARCH64 && ! TARGET_HARD_QUAD"
-+ "
-+{
-+ rtx slot0;
-+
-+ if (GET_CODE (operands[1]) != MEM)
-+ {
-+ slot0 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ emit_insn (gen_rtx_SET (VOIDmode, slot0, operands[1]));
-+ }
-+ else
-+ slot0 = operands[1];
-+
-+ emit_library_call_value (gen_rtx (SYMBOL_REF, Pmode, \"_Qp_qtoux\"),
-+ operands[0], 0, DImode, 1,
-+ XEXP (slot0, 0), Pmode);
-+ DONE;
-+}")
-+
-
- ;;- arithmetic instructions
-
-@@ -5170,9 +5605,8 @@
-
- ;; Integer Multiply/Divide.
-
--;; The 32 bit multiply/divide instructions are deprecated on v9 and shouldn't
--;; we used. We still use them in 32 bit v9 compilers.
--;; The 64 bit v9 compiler will (/should) widen the args and use muldi3.
-+;; The 32 bit multiply/divide instructions are deprecated on v9, but at
-+;; least in UltraSPARC I, II and IIi it is a win tick-wise.
-
- (define_insn "mulsi3"
- [(set (match_operand:SI 0 "register_operand" "=r")
-@@ -5230,15 +5664,13 @@
- }"
- [(set_attr "length" "9,8")])
-
--;; It is not known whether this will match.
--
- (define_insn "*cmp_mul_set"
-- [(set (match_operand:SI 0 "register_operand" "=r")
-- (mult:SI (match_operand:SI 1 "arith_operand" "%r")
-- (match_operand:SI 2 "arith_operand" "rI")))
-- (set (reg:CC_NOOV 100)
-- (compare:CC_NOOV (mult:SI (match_dup 1) (match_dup 2))
-- (const_int 0)))]
-+ [(set (reg:CC 100)
-+ (compare:CC (mult:SI (match_operand:SI 1 "arith_operand" "%r")
-+ (match_operand:SI 2 "arith_operand" "rI"))
-+ (const_int 0)))
-+ (set (match_operand:SI 0 "register_operand" "=r")
-+ (mult:SI (match_dup 1) (match_dup 2)))]
- "TARGET_V8 || TARGET_SPARCLITE || TARGET_DEPRECATED_V8_INSNS"
- "smulcc\\t%1, %2, %0"
- [(set_attr "type" "imul")
-@@ -5254,12 +5686,11 @@
- if (CONSTANT_P (operands[2]))
- {
- if (TARGET_V8PLUS)
-- {
-- emit_insn (gen_const_mulsidi3_v8plus (operands[0], operands[1],
-- operands[2]));
-- DONE;
-- }
-- emit_insn (gen_const_mulsidi3 (operands[0], operands[1], operands[2]));
-+ emit_insn (gen_const_mulsidi3_v8plus (operands[0], operands[1],
-+ operands[2]));
-+ else
-+ emit_insn (gen_const_mulsidi3_sp32 (operands[0], operands[1],
-+ operands[2]));
- DONE;
- }
- if (TARGET_V8PLUS)
-@@ -5309,14 +5740,22 @@
- (if_then_else (eq_attr "isa" "sparclet")
- (const_int 1) (const_int 2)))])
-
-+(define_insn "*mulsidi3_sp64"
-+ [(set (match_operand:DI 0 "register_operand" "=r")
-+ (mult:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "r"))
-+ (sign_extend:DI (match_operand:SI 2 "register_operand" "r"))))]
-+ "TARGET_DEPRECATED_V8_INSNS && TARGET_ARCH64"
-+ "smul\\t%1, %2, %0"
-+ [(set_attr "length" "1")])
-+
- ;; Extra pattern, because sign_extend of a constant isn't valid.
-
- ;; XXX
--(define_insn "const_mulsidi3"
-+(define_insn "const_mulsidi3_sp32"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (mult:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "r"))
- (match_operand:SI 2 "small_int" "I")))]
-- "TARGET_HARD_MUL"
-+ "TARGET_HARD_MUL32"
- "*
- {
- return TARGET_SPARCLET ? \"smuld\\t%1, %2, %L0\" : \"smul\\t%1, %2, %L0\\n\\trd\\t%%y, %H0\";
-@@ -5325,13 +5764,21 @@
- (if_then_else (eq_attr "isa" "sparclet")
- (const_int 1) (const_int 2)))])
-
-+(define_insn "const_mulsidi3_sp64"
-+ [(set (match_operand:DI 0 "register_operand" "=r")
-+ (mult:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "r"))
-+ (match_operand:SI 2 "small_int" "I")))]
-+ "TARGET_DEPRECATED_V8_INSNS && TARGET_ARCH64"
-+ "smul\\t%1, %2, %0"
-+ [(set_attr "length" "1")])
-+
- (define_expand "smulsi3_highpart"
- [(set (match_operand:SI 0 "register_operand" "")
- (truncate:SI
- (lshiftrt:DI (mult:DI (sign_extend:DI (match_operand:SI 1 "register_operand" ""))
- (sign_extend:DI (match_operand:SI 2 "arith_operand" "")))
- (const_int 32))))]
-- "TARGET_HARD_MUL"
-+ "TARGET_HARD_MUL && TARGET_ARCH32"
- "
- {
- if (CONSTANT_P (operands[2]))
-@@ -5407,8 +5854,7 @@
- (lshiftrt:DI (mult:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "r"))
- (sign_extend:DI (match_operand:SI 2 "register_operand" "r")))
- (const_int 32))))]
-- "TARGET_HARD_MUL32
-- && ! TARGET_LIVE_G0"
-+ "TARGET_HARD_MUL32 && ! TARGET_LIVE_G0"
- "smul\\t%1, %2, %%g0\\n\\trd\\t%%y, %0"
- [(set_attr "length" "2")])
-
-@@ -5419,8 +5865,7 @@
- (lshiftrt:DI (mult:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "r"))
- (match_operand:SI 2 "register_operand" "r"))
- (const_int 32))))]
-- "TARGET_HARD_MUL32
-- && ! TARGET_LIVE_G0"
-+ "TARGET_HARD_MUL32 && ! TARGET_LIVE_G0"
- "smul\\t%1, %2, %%g0\\n\\trd\\t%%y, %0"
- [(set_attr "length" "2")])
-
-@@ -5434,12 +5879,11 @@
- if (CONSTANT_P (operands[2]))
- {
- if (TARGET_V8PLUS)
-- {
-- emit_insn (gen_const_umulsidi3_v8plus (operands[0], operands[1],
-- operands[2]));
-- DONE;
-- }
-- emit_insn (gen_const_umulsidi3 (operands[0], operands[1], operands[2]));
-+ emit_insn (gen_const_umulsidi3_v8plus (operands[0], operands[1],
-+ operands[2]));
-+ else
-+ emit_insn (gen_const_umulsidi3_sp32 (operands[0], operands[1],
-+ operands[2]));
- DONE;
- }
- if (TARGET_V8PLUS)
-@@ -5475,10 +5919,18 @@
- (if_then_else (eq_attr "isa" "sparclet")
- (const_int 1) (const_int 2)))])
-
-+(define_insn "*umulsidi3_sp64"
-+ [(set (match_operand:DI 0 "register_operand" "=r")
-+ (mult:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "r"))
-+ (zero_extend:DI (match_operand:SI 2 "register_operand" "r"))))]
-+ "TARGET_DEPRECATED_V8_INSNS && TARGET_ARCH64"
-+ "umul\\t%1, %2, %0"
-+ [(set_attr "length" "1")])
-+
- ;; Extra pattern, because sign_extend of a constant isn't valid.
-
- ;; XXX
--(define_insn "const_umulsidi3"
-+(define_insn "const_umulsidi3_sp32"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (mult:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "r"))
- (match_operand:SI 2 "uns_small_int" "")))]
-@@ -5491,6 +5943,14 @@
- (if_then_else (eq_attr "isa" "sparclet")
- (const_int 1) (const_int 2)))])
-
-+(define_insn "const_umulsidi3_sp64"
-+ [(set (match_operand:DI 0 "register_operand" "=r")
-+ (mult:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "r"))
-+ (match_operand:SI 2 "uns_small_int" "")))]
-+ "TARGET_DEPRECATED_V8_INSNS && TARGET_ARCH64"
-+ "umul\\t%1, %2, %0"
-+ [(set_attr "length" "1")])
-+
- ;; XXX
- (define_insn "const_umulsidi3_v8plus"
- [(set (match_operand:DI 0 "register_operand" "=h,r")
-@@ -5509,7 +5969,7 @@
- (lshiftrt:DI (mult:DI (zero_extend:DI (match_operand:SI 1 "register_operand" ""))
- (zero_extend:DI (match_operand:SI 2 "uns_arith_operand" "")))
- (const_int 32))))]
-- "TARGET_HARD_MUL"
-+ "TARGET_HARD_MUL && TARGET_ARCH32"
- "
- {
- if (CONSTANT_P (operands[2]))
-@@ -5568,8 +6028,7 @@
- (lshiftrt:DI (mult:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "r"))
- (zero_extend:DI (match_operand:SI 2 "register_operand" "r")))
- (const_int 32))))]
-- "TARGET_HARD_MUL32
-- && ! TARGET_LIVE_G0"
-+ "TARGET_HARD_MUL32 && ! TARGET_LIVE_G0"
- "umul\\t%1, %2, %%g0\\n\\trd\\t%%y, %0"
- [(set_attr "length" "2")])
-
-@@ -5580,40 +6039,64 @@
- (lshiftrt:DI (mult:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "r"))
- (match_operand:SI 2 "uns_small_int" ""))
- (const_int 32))))]
-- "TARGET_HARD_MUL32
-- && ! TARGET_LIVE_G0"
-+ "TARGET_HARD_MUL32 && ! TARGET_LIVE_G0"
- "umul\\t%1, %2, %%g0\\n\\trd\\t%%y, %0"
- [(set_attr "length" "2")])
-
- ;; The v8 architecture specifies that there must be 3 instructions between
- ;; a y register write and a use of it for correct results.
-+
-+(define_expand "divsi3"
-+ [(parallel [(set (match_operand:SI 0 "register_operand" "=r,r")
-+ (div:SI (match_operand:SI 1 "register_operand" "r,r")
-+ (match_operand:SI 2 "input_operand" "rI,m")))
-+ (clobber (match_scratch:SI 3 "=&r,&r"))])]
-+ "TARGET_V8 || TARGET_DEPRECATED_V8_INSNS"
-+ "
-+{
-+ if (TARGET_ARCH64)
-+ {
-+ operands[3] = gen_reg_rtx(SImode);
-+ emit_insn (gen_ashrsi3 (operands[3], operands[1], GEN_INT (31)));
-+ emit_insn (gen_divsi3_sp64 (operands[0], operands[1], operands[2],
-+ operands[3]));
-+ DONE;
-+ }
-+}")
-
--;; XXX SHEESH
--(define_insn "divsi3"
-+(define_insn "divsi3_sp32"
- [(set (match_operand:SI 0 "register_operand" "=r,r")
- (div:SI (match_operand:SI 1 "register_operand" "r,r")
- (match_operand:SI 2 "input_operand" "rI,m")))
- (clobber (match_scratch:SI 3 "=&r,&r"))]
-- "(TARGET_V8
-- || TARGET_DEPRECATED_V8_INSNS)
-- && ! TARGET_LIVE_G0"
-+ "(TARGET_V8 || TARGET_DEPRECATED_V8_INSNS)
-+ && TARGET_ARCH32"
- "*
- {
- if (which_alternative == 0)
-- if (TARGET_V9)
-- return \"sra\\t%1, 31, %3\\n\\twr\\t%%g0, %3, %%y\\n\\tsdiv\\t%1, %2, %0\";
-- else
-- return \"sra\\t%1, 31, %3\\n\\twr\\t%%g0, %3, %%y\\n\\tnop\\n\\tnop\\n\\tnop\\n\\tsdiv\\t%1, %2, %0\";
-+ if (TARGET_V9)
-+ return \"sra\\t%1, 31, %3\\n\\twr\\t%3, 0, %%y\\n\\tsdiv\\t%1, %2, %0\";
-+ else
-+ return \"sra\\t%1, 31, %3\\n\\twr\\t%3, 0, %%y\\n\\tnop\\n\\tnop\\n\\tnop\\n\\tsdiv\\t%1, %2, %0\";
- else
- if (TARGET_V9)
-- return \"sra\\t%1, 31, %3\\n\\twr\\t%%g0, %3, %%y\\n\\tld\\t%2, %3\\n\\tsdiv\\t%1, %3, %0\";
-+ return \"sra\\t%1, 31, %3\\n\\twr\\t%3, 0, %%y\\n\\tld\\t%2, %3\\n\\tsdiv\\t%1, %3, %0\";
- else
-- return \"sra\\t%1, 31, %3\\n\\twr\\t%%g0, %3, %%y\\n\\tld\\t%2, %3\\n\\tnop\\n\\tnop\\n\\tsdiv\\t%1, %3, %0\";
-+ return \"sra\\t%1, 31, %3\\n\\twr\\t%3, 0, %%y\\n\\tld\\t%2, %3\\n\\tnop\\n\\tnop\\n\\tsdiv\\t%1, %3, %0\";
- }"
- [(set (attr "length")
- (if_then_else (eq_attr "isa" "v9")
- (const_int 4) (const_int 7)))])
-
-+(define_insn "divsi3_sp64"
-+ [(set (match_operand:SI 0 "register_operand" "=r")
-+ (div:SI (match_operand:SI 1 "register_operand" "r")
-+ (match_operand:SI 2 "input_operand" "rI")))
-+ (use (match_operand:SI 3 "register_operand" "r"))]
-+ "TARGET_DEPRECATED_V8_INSNS && TARGET_ARCH64"
-+ "wr\\t%%g0, %3, %%y\\n\\tsdiv\\t%1, %2, %0"
-+ [(set_attr "length" "2")])
-+
- (define_insn "divdi3"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (div:DI (match_operand:DI 1 "register_operand" "r")
-@@ -5621,47 +6104,47 @@
- "TARGET_ARCH64"
- "sdivx\\t%1, %2, %0")
-
--;; It is not known whether this will match.
--
--;; XXX I hope it doesn't fucking match...
- (define_insn "*cmp_sdiv_cc_set"
-- [(set (match_operand:SI 0 "register_operand" "=r")
-- (div:SI (match_operand:SI 1 "register_operand" "r")
-- (match_operand:SI 2 "arith_operand" "rI")))
-- (set (reg:CC 100)
-- (compare:CC (div:SI (match_dup 1) (match_dup 2))
-+ [(set (reg:CC 100)
-+ (compare:CC (div:SI (match_operand:SI 1 "register_operand" "r")
-+ (match_operand:SI 2 "arith_operand" "rI"))
- (const_int 0)))
-+ (set (match_operand:SI 0 "register_operand" "=r")
-+ (div:SI (match_dup 1) (match_dup 2)))
- (clobber (match_scratch:SI 3 "=&r"))]
-- "(TARGET_V8
-- || TARGET_DEPRECATED_V8_INSNS)
-- && ! TARGET_LIVE_G0"
-+ "TARGET_V8 || TARGET_DEPRECATED_V8_INSNS"
- "*
- {
- if (TARGET_V9)
-- return \"sra\\t%1, 31, %3\\n\\twr\\t%%g0, %3, %%y\\n\\tsdivcc\\t%1, %2, %0\";
-+ return \"sra\\t%1, 31, %3\\n\\twr\\t%3, 0, %%y\\n\\tsdivcc\\t%1, %2, %0\";
- else
-- return \"sra\\t%1, 31, %3\\n\\twr\\t%%g0, %3, %%y\\n\\tnop\\n\\tnop\\n\\tnop\\n\\tsdivcc\\t%1, %2, %0\";
-+ return \"sra\\t%1, 31, %3\\n\\twr\\t%3, 0, %%y\\n\\tnop\\n\\tnop\\n\\tnop\\n\\tsdivcc\\t%1, %2, %0\";
- }"
- [(set (attr "length")
- (if_then_else (eq_attr "isa" "v9")
- (const_int 3) (const_int 6)))])
-
- ;; XXX
--(define_insn "udivsi3"
-+(define_expand "udivsi3"
-+ [(set (match_operand:SI 0 "register_operand" "")
-+ (udiv:SI (match_operand:SI 1 "reg_or_nonsymb_mem_operand" "")
-+ (match_operand:SI 2 "input_operand" "")))]
-+ "(TARGET_V8 || TARGET_DEPRECATED_V8_INSNS) && ! TARGET_LIVE_G0"
-+ "")
-+
-+(define_insn "udivsi3_sp32"
- [(set (match_operand:SI 0 "register_operand" "=r,&r,&r")
- (udiv:SI (match_operand:SI 1 "reg_or_nonsymb_mem_operand" "r,r,m")
- (match_operand:SI 2 "input_operand" "rI,m,r")))]
- "(TARGET_V8
- || TARGET_DEPRECATED_V8_INSNS)
-- && ! TARGET_LIVE_G0"
-+ && TARGET_ARCH32 && ! TARGET_LIVE_G0"
- "*
- {
- output_asm_insn (\"wr\\t%%g0, %%g0, %%y\", operands);
- switch (which_alternative)
- {
- default:
-- if (TARGET_V9)
-- return \"udiv\\t%1, %2, %0\";
- return \"nop\\n\\tnop\\n\\tnop\\n\\tudiv\\t%1, %2, %0\";
- case 1:
- return \"ld\\t%2, %0\\n\\tnop\\n\\tnop\\n\\tudiv\\t%1, %0, %0\";
-@@ -5669,11 +6152,16 @@
- return \"ld\\t%1, %0\\n\\tnop\\n\\tnop\\n\\tudiv\\t%0, %2, %0\";
- }
- }"
-- [(set (attr "length")
-- (if_then_else (and (eq_attr "isa" "v9")
-- (eq_attr "alternative" "0"))
-- (const_int 2) (const_int 5)))])
-+ [(set_attr "length" "5")])
-
-+(define_insn "udivsi3_sp64"
-+ [(set (match_operand:SI 0 "register_operand" "=r")
-+ (udiv:SI (match_operand:SI 1 "reg_or_nonsymb_mem_operand" "r")
-+ (match_operand:SI 2 "input_operand" "rI")))]
-+ "TARGET_DEPRECATED_V8_INSNS && TARGET_ARCH64"
-+ "wr\\t%%g0, 0, %%y\\n\\tudiv\\t%1, %2, %0"
-+ [(set_attr "length" "2")])
-+
- (define_insn "udivdi3"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (udiv:DI (match_operand:DI 1 "register_operand" "r")
-@@ -5681,16 +6169,13 @@
- "TARGET_ARCH64"
- "udivx\\t%1, %2, %0")
-
--;; It is not known whether this will match.
--
--;; XXX I hope it doesn't fucking match...
- (define_insn "*cmp_udiv_cc_set"
-- [(set (match_operand:SI 0 "register_operand" "=r")
-- (udiv:SI (match_operand:SI 1 "register_operand" "r")
-- (match_operand:SI 2 "arith_operand" "rI")))
-- (set (reg:CC 100)
-- (compare:CC (udiv:SI (match_dup 1) (match_dup 2))
-- (const_int 0)))]
-+ [(set (reg:CC 100)
-+ (compare:CC (udiv:SI (match_operand:SI 1 "register_operand" "r")
-+ (match_operand:SI 2 "arith_operand" "rI"))
-+ (const_int 0)))
-+ (set (match_operand:SI 0 "register_operand" "=r")
-+ (udiv:SI (match_dup 1) (match_dup 2)))]
- "(TARGET_V8
- || TARGET_DEPRECATED_V8_INSNS)
- && ! TARGET_LIVE_G0"
-@@ -6544,8 +7029,50 @@
- (set_attr "length" "1")])
-
- ;; Floating point arithmetic instructions.
-+
-+(define_expand "addtf3"
-+ [(set (match_operand:TF 0 "nonimmediate_operand" "")
-+ (plus:TF (match_operand:TF 1 "general_operand" "")
-+ (match_operand:TF 2 "general_operand" "")))]
-+ "TARGET_FPU && (TARGET_HARD_QUAD || TARGET_ARCH64)"
-+ "
-+{
-+ if (! TARGET_HARD_QUAD)
-+ {
-+ rtx slot0, slot1, slot2;
-+
-+ if (GET_CODE (operands[0]) != MEM)
-+ slot0 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ else
-+ slot0 = operands[0];
-+ if (GET_CODE (operands[1]) != MEM)
-+ {
-+ slot1 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ emit_insn (gen_rtx_SET (VOIDmode, slot1, operands[1]));
-+ }
-+ else
-+ slot1 = operands[1];
-+ if (GET_CODE (operands[2]) != MEM)
-+ {
-+ slot2 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ emit_insn (gen_rtx_SET (VOIDmode, slot2, operands[2]));
-+ }
-+ else
-+ slot2 = operands[2];
-+
-+ emit_library_call (gen_rtx (SYMBOL_REF, Pmode, \"_Qp_add\"), 0,
-+ VOIDmode, 3,
-+ XEXP (slot0, 0), Pmode,
-+ XEXP (slot1, 0), Pmode,
-+ XEXP (slot2, 0), Pmode);
-+
-+ if (GET_CODE (operands[0]) != MEM)
-+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], slot0));
-+ DONE;
-+ }
-+}")
-
--(define_insn "addtf3"
-+(define_insn "*addtf3_hq"
- [(set (match_operand:TF 0 "register_operand" "=e")
- (plus:TF (match_operand:TF 1 "register_operand" "e")
- (match_operand:TF 2 "register_operand" "e")))]
-@@ -6571,8 +7098,50 @@
- "fadds\\t%1, %2, %0"
- [(set_attr "type" "fp")
- (set_attr "length" "1")])
-+
-+(define_expand "subtf3"
-+ [(set (match_operand:TF 0 "nonimmediate_operand" "")
-+ (minus:TF (match_operand:TF 1 "general_operand" "")
-+ (match_operand:TF 2 "general_operand" "")))]
-+ "TARGET_FPU && (TARGET_HARD_QUAD || TARGET_ARCH64)"
-+ "
-+{
-+ if (! TARGET_HARD_QUAD)
-+ {
-+ rtx slot0, slot1, slot2;
-
--(define_insn "subtf3"
-+ if (GET_CODE (operands[0]) != MEM)
-+ slot0 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ else
-+ slot0 = operands[0];
-+ if (GET_CODE (operands[1]) != MEM)
-+ {
-+ slot1 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ emit_insn (gen_rtx_SET (VOIDmode, slot1, operands[1]));
-+ }
-+ else
-+ slot1 = operands[1];
-+ if (GET_CODE (operands[2]) != MEM)
-+ {
-+ slot2 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ emit_insn (gen_rtx_SET (VOIDmode, slot2, operands[2]));
-+ }
-+ else
-+ slot2 = operands[2];
-+
-+ emit_library_call (gen_rtx (SYMBOL_REF, Pmode, \"_Qp_sub\"), 0,
-+ VOIDmode, 3,
-+ XEXP (slot0, 0), Pmode,
-+ XEXP (slot1, 0), Pmode,
-+ XEXP (slot2, 0), Pmode);
-+
-+ if (GET_CODE (operands[0]) != MEM)
-+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], slot0));
-+ DONE;
-+ }
-+}")
-+
-+(define_insn "*subtf3_hq"
- [(set (match_operand:TF 0 "register_operand" "=e")
- (minus:TF (match_operand:TF 1 "register_operand" "e")
- (match_operand:TF 2 "register_operand" "e")))]
-@@ -6598,8 +7167,50 @@
- "fsubs\\t%1, %2, %0"
- [(set_attr "type" "fp")
- (set_attr "length" "1")])
-+
-+(define_expand "multf3"
-+ [(set (match_operand:TF 0 "nonimmediate_operand" "")
-+ (mult:TF (match_operand:TF 1 "general_operand" "")
-+ (match_operand:TF 2 "general_operand" "")))]
-+ "TARGET_FPU && (TARGET_HARD_QUAD || TARGET_ARCH64)"
-+ "
-+{
-+ if (! TARGET_HARD_QUAD)
-+ {
-+ rtx slot0, slot1, slot2;
-+
-+ if (GET_CODE (operands[0]) != MEM)
-+ slot0 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ else
-+ slot0 = operands[0];
-+ if (GET_CODE (operands[1]) != MEM)
-+ {
-+ slot1 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ emit_insn (gen_rtx_SET (VOIDmode, slot1, operands[1]));
-+ }
-+ else
-+ slot1 = operands[1];
-+ if (GET_CODE (operands[2]) != MEM)
-+ {
-+ slot2 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ emit_insn (gen_rtx_SET (VOIDmode, slot2, operands[2]));
-+ }
-+ else
-+ slot2 = operands[2];
-+
-+ emit_library_call (gen_rtx (SYMBOL_REF, Pmode, \"_Qp_mul\"), 0,
-+ VOIDmode, 3,
-+ XEXP (slot0, 0), Pmode,
-+ XEXP (slot1, 0), Pmode,
-+ XEXP (slot2, 0), Pmode);
-+
-+ if (GET_CODE (operands[0]) != MEM)
-+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], slot0));
-+ DONE;
-+ }
-+}")
-
--(define_insn "multf3"
-+(define_insn "*multf3_hq"
- [(set (match_operand:TF 0 "register_operand" "=e")
- (mult:TF (match_operand:TF 1 "register_operand" "e")
- (match_operand:TF 2 "register_operand" "e")))]
-@@ -6644,8 +7255,50 @@
- [(set_attr "type" "fpmul")
- (set_attr "length" "1")])
-
-+(define_expand "divtf3"
-+ [(set (match_operand:TF 0 "nonimmediate_operand" "")
-+ (div:TF (match_operand:TF 1 "general_operand" "")
-+ (match_operand:TF 2 "general_operand" "")))]
-+ "TARGET_FPU && (TARGET_HARD_QUAD || TARGET_ARCH64)"
-+ "
-+{
-+ if (! TARGET_HARD_QUAD)
-+ {
-+ rtx slot0, slot1, slot2;
-+
-+ if (GET_CODE (operands[0]) != MEM)
-+ slot0 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ else
-+ slot0 = operands[0];
-+ if (GET_CODE (operands[1]) != MEM)
-+ {
-+ slot1 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ emit_insn (gen_rtx_SET (VOIDmode, slot1, operands[1]));
-+ }
-+ else
-+ slot1 = operands[1];
-+ if (GET_CODE (operands[2]) != MEM)
-+ {
-+ slot2 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ emit_insn (gen_rtx_SET (VOIDmode, slot2, operands[2]));
-+ }
-+ else
-+ slot2 = operands[2];
-+
-+ emit_library_call (gen_rtx (SYMBOL_REF, Pmode, \"_Qp_div\"), 0,
-+ VOIDmode, 3,
-+ XEXP (slot0, 0), Pmode,
-+ XEXP (slot1, 0), Pmode,
-+ XEXP (slot2, 0), Pmode);
-+
-+ if (GET_CODE (operands[0]) != MEM)
-+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], slot0));
-+ DONE;
-+ }
-+}")
-+
- ;; don't have timing for quad-prec. divide.
--(define_insn "divtf3"
-+(define_insn "*divtf3_hq"
- [(set (match_operand:TF 0 "register_operand" "=e")
- (div:TF (match_operand:TF 1 "register_operand" "e")
- (match_operand:TF 2 "register_operand" "e")))]
-@@ -6916,8 +7569,41 @@
- [(set_attr "type" "fpmove")
- (set_attr "length" "1")])
-
--(define_insn "sqrttf2"
-+(define_expand "sqrttf2"
- [(set (match_operand:TF 0 "register_operand" "=e")
-+ (sqrt:TF (match_operand:TF 1 "register_operand" "e")))]
-+ "TARGET_FPU && (TARGET_HARD_QUAD || TARGET_ARCH64)"
-+ "
-+{
-+ if (! TARGET_HARD_QUAD)
-+ {
-+ rtx slot0, slot1;
-+
-+ if (GET_CODE (operands[0]) != MEM)
-+ slot0 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ else
-+ slot0 = operands[0];
-+ if (GET_CODE (operands[1]) != MEM)
-+ {
-+ slot1 = assign_stack_temp (TFmode, GET_MODE_SIZE(TFmode), 0);
-+ emit_insn (gen_rtx_SET (VOIDmode, slot1, operands[1]));
-+ }
-+ else
-+ slot1 = operands[1];
-+
-+ emit_library_call (gen_rtx (SYMBOL_REF, Pmode, \"_Qp_sqrt\"), 0,
-+ VOIDmode, 2,
-+ XEXP (slot0, 0), Pmode,
-+ XEXP (slot1, 0), Pmode);
-+
-+ if (GET_CODE (operands[0]) != MEM)
-+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], slot0));
-+ DONE;
-+ }
-+}")
-+
-+(define_insn "*sqrttf2_hq"
-+ [(set (match_operand:TF 0 "register_operand" "=e")
- (sqrt:TF (match_operand:TF 1 "register_operand" "e")))]
- "TARGET_FPU && TARGET_HARD_QUAD"
- "fsqrtq\\t%1, %0"
-@@ -7252,6 +7938,84 @@
- "TARGET_V8PLUS"
- "*return sparc_v8plus_shift (operands, insn, \"srlx\");"
- [(set_attr "length" "5,5,6")])
-+
-+(define_insn ""
-+ [(set (match_operand:SI 0 "register_operand" "=r")
-+ (ashiftrt:SI (subreg:SI (lshiftrt:DI (match_operand:DI 1 "register_operand" "r")
-+ (const_int 32)) 0)
-+ (match_operand:SI 2 "small_int_or_double" "n")))]
-+ "TARGET_ARCH64
-+ && ((GET_CODE (operands[2]) == CONST_INT
-+ && (unsigned HOST_WIDE_INT) INTVAL (operands[2]) < 32)
-+ || (GET_CODE (operands[2]) == CONST_DOUBLE
-+ && !CONST_DOUBLE_HIGH (operands[2])
-+ && (unsigned HOST_WIDE_INT) CONST_DOUBLE_LOW (operands[2]) < 32))"
-+ "*
-+{
-+ operands[2] = GEN_INT (INTVAL (operands[2]) + 32);
-+
-+ return \"srax\\t%1, %2, %0\";
-+}"
-+ [(set_attr "type" "shift")
-+ (set_attr "length" "1")])
-+
-+(define_insn ""
-+ [(set (match_operand:SI 0 "register_operand" "=r")
-+ (lshiftrt:SI (subreg:SI (ashiftrt:DI (match_operand:DI 1 "register_operand" "r")
-+ (const_int 32)) 0)
-+ (match_operand:SI 2 "small_int_or_double" "n")))]
-+ "TARGET_ARCH64
-+ && ((GET_CODE (operands[2]) == CONST_INT
-+ && (unsigned HOST_WIDE_INT) INTVAL (operands[2]) < 32)
-+ || (GET_CODE (operands[2]) == CONST_DOUBLE
-+ && !CONST_DOUBLE_HIGH (operands[2])
-+ && (unsigned HOST_WIDE_INT) CONST_DOUBLE_LOW (operands[2]) < 32))"
-+ "*
-+{
-+ operands[2] = GEN_INT (INTVAL (operands[2]) + 32);
-+
-+ return \"srlx\\t%1, %2, %0\";
-+}"
-+ [(set_attr "type" "shift")
-+ (set_attr "length" "1")])
-+
-+(define_insn ""
-+ [(set (match_operand:SI 0 "register_operand" "=r")
-+ (ashiftrt:SI (subreg:SI (ashiftrt:DI (match_operand:DI 1 "register_operand" "r")
-+ (match_operand:SI 2 "small_int_or_double" "n")) 0)
-+ (match_operand:SI 3 "small_int_or_double" "n")))]
-+ "TARGET_ARCH64
-+ && GET_CODE (operands[2]) == CONST_INT && GET_CODE (operands[3]) == CONST_INT
-+ && (unsigned HOST_WIDE_INT) INTVAL (operands[2]) >= 32
-+ && (unsigned HOST_WIDE_INT) INTVAL (operands[3]) < 32
-+ && (unsigned HOST_WIDE_INT) (INTVAL (operands[2]) + INTVAL (operands[3])) < 64"
-+ "*
-+{
-+ operands[2] = GEN_INT (INTVAL (operands[2]) + INTVAL (operands[3]));
-+
-+ return \"srax\\t%1, %2, %0\";
-+}"
-+ [(set_attr "type" "shift")
-+ (set_attr "length" "1")])
-+
-+(define_insn ""
-+ [(set (match_operand:SI 0 "register_operand" "=r")
-+ (lshiftrt:SI (subreg:SI (lshiftrt:DI (match_operand:DI 1 "register_operand" "r")
-+ (match_operand:SI 2 "small_int_or_double" "n")) 0)
-+ (match_operand:SI 3 "small_int_or_double" "n")))]
-+ "TARGET_ARCH64
-+ && GET_CODE (operands[2]) == CONST_INT && GET_CODE (operands[3]) == CONST_INT
-+ && (unsigned HOST_WIDE_INT) INTVAL (operands[2]) >= 32
-+ && (unsigned HOST_WIDE_INT) INTVAL (operands[3]) < 32
-+ && (unsigned HOST_WIDE_INT) (INTVAL (operands[2]) + INTVAL (operands[3])) < 64"
-+ "*
-+{
-+ operands[2] = GEN_INT (INTVAL (operands[2]) + INTVAL (operands[3]));
-+
-+ return \"srlx\\t%1, %2, %0\";
-+}"
-+ [(set_attr "type" "shift")
-+ (set_attr "length" "1")])
-
- ;; Unconditional and other jump instructions
- ;; On the Sparc, by setting the annul bit on an unconditional branch, the
diff --git a/lang/gcc/patches/patch-az b/lang/gcc/patches/patch-az
deleted file mode 100644
index b69ee007bc7..00000000000
--- a/lang/gcc/patches/patch-az
+++ /dev/null
@@ -1,34 +0,0 @@
-$NetBSD: patch-az,v 1.3 2002/03/28 10:11:53 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/sparc/sysv4.h.orig 2000/07/26 00:18:52 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/sparc/sysv4.h 2000/08/11 03:31:41 1.3
-@@ -210,6 +210,29 @@
- #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
- asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN)
-
-+/* A C statement (sans semicolon) to output an element in the table of
-+ global constructors. */
-+#undef ASM_OUTPUT_CONSTRUCTOR
-+#define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \
-+ do { \
-+ ctors_section (); \
-+ fprintf (FILE, "\t%s\t ", TARGET_ARCH64 ? ASM_LONGLONG : INT_ASM_OP); \
-+ assemble_name (FILE, NAME); \
-+ fprintf (FILE, "\n"); \
-+ } while (0)
-+
-+/* A C statement (sans semicolon) to output an element in the table of
-+ global destructors. */
-+#undef ASM_OUTPUT_DESTRUCTOR
-+#define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \
-+ do { \
-+ dtors_section (); \
-+ fprintf (FILE, "\t%s\t ", TARGET_ARCH64 ? ASM_LONGLONG : INT_ASM_OP); \
-+ assemble_name (FILE, NAME); \
-+ fprintf (FILE, "\n"); \
-+ } while (0)
-+
-+
- /* Override the name of the mcount profiling function. */
-
- #undef MCOUNT_FUNCTION
diff --git a/lang/gcc/patches/patch-ba b/lang/gcc/patches/patch-ba
deleted file mode 100644
index 9e0d7f288bd..00000000000
--- a/lang/gcc/patches/patch-ba
+++ /dev/null
@@ -1,83 +0,0 @@
-$NetBSD: patch-ba,v 1.3 2002/03/28 10:11:53 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/vax/netbsd.h.orig 2000/07/26 00:18:55 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/vax/netbsd.h 2002/02/11 00:02:12 1.6
-@@ -1,5 +1,22 @@
-+#include <vax/vax.h>
-+#ifdef NETBSD_ELF
-+#include <elfos.h>
-+#endif
-+#include <netbsd.h>
-+
- #undef CPP_PREDEFINES
--#define CPP_PREDEFINES "-Dunix -Dvax -D__NetBSD__ -Asystem(unix) -Asystem(NetBSD) -Acpu(vax) -Amachine(vax)"
-+#define CPP_PREDEFINES "-D__vax__ -D__NetBSD__ -Asystem(unix) -Asystem(NetBSD) -Acpu(vax) -Amachine(vax)"
-+
-+#undef CC1_SPEC
-+#define CC1_SPEC "\
-+ %{!fno-pic: \
-+ %{!mno-pic: %{!fpic: %{!fPIC:-fPIC}}} \
-+ %{!mindirect: %{!mno-indirect:-mno-indirect}}} \
-+ %{mno-pic: -fno-pic -mindirect} \
-+ %{fno-pic: \
-+ %{!mindirect: %{!mno-indirect:-mindirect}}}"
-+
-+#define CC1PLUS_SPEC CC1_SPEC
-
- /* Make gcc agree with <machine/ansi.h> */
-
-@@ -21,4 +38,54 @@
- /* Until they use ELF or something that handles dwarf2 unwinds
- and initialization stuff better. */
- #undef DWARF2_UNWIND_INFO
-+
-+#undef TARGET_DEFAULT
-+#define TARGET_DEFAULT 0
-+
-+/* Function CSE screws up PLT .vs. GOT usage.
-+ */
-+#define NO_FUNCTION_CSE
-+
-+/* This makes use of a hook in varasm.c to mark all external functions
-+ for us. We use this to make sure that external functions are correctly
-+ referenced from the PLT. */
-+
-+#define NO_EXTERNAL_INDIRECT_ADDRESS
-+
-+/* Define this macro if references to a symbol must be treated
-+ differently depending on something about the variable or
-+ function named by the symbol (such as what section it is in).
-+
-+ On the VAX, if using PIC, mark a SYMBOL_REF for a non-global
-+ symbol so that we may use indirect accesses with it. */
-+
-+#define ENCODE_SECTION_INFO(DECL) \
-+do \
-+ { \
-+ if (flag_pic) \
-+ { \
-+ rtx rtl = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd' \
-+ ? TREE_CST_RTL (DECL) : DECL_RTL (DECL)); \
-+ \
-+ if (GET_CODE (rtl) == MEM) \
-+ { \
-+ SYMBOL_REF_FLAG (XEXP (rtl, 0)) \
-+ = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd' \
-+ || ! TREE_PUBLIC (DECL)); \
-+ } \
-+ } \
-+ } \
-+while (0)
-+
-+/* Put relocations in the constant pool in the writable data section. */
-+#undef SELECT_RTX_SECTION
-+#define SELECT_RTX_SECTION(MODE,RTX) \
-+{ \
-+ if (flag_pic && vax_symbolic_operand ((RTX), (MODE))) \
-+ data_section (); \
-+ else \
-+ readonly_data_section (); \
-+}
-+
-+/* Use sjlj exceptions. */
-
diff --git a/lang/gcc/patches/patch-bb b/lang/gcc/patches/patch-bb
deleted file mode 100644
index 95b3108e54a..00000000000
--- a/lang/gcc/patches/patch-bb
+++ /dev/null
@@ -1,674 +0,0 @@
-$NetBSD: patch-bb,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/vax/vax.c.orig 2000/07/26 00:18:55 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/vax/vax.c 2002/02/23 21:02:50 1.11
-@@ -19,19 +19,24 @@
- Boston, MA 02111-1307, USA. */
-
- #include "config.h"
--#include <stdio.h>
-+#include "system.h"
- #include "rtl.h"
- #include "regs.h"
- #include "hard-reg-set.h"
- #include "real.h"
- #include "insn-config.h"
-+#include "insn-codes.h"
- #include "conditions.h"
- #include "insn-flags.h"
-+/*#include "function.h"*/
- #include "output.h"
- #include "insn-attr.h"
- #ifdef VMS_TARGET
- #include "tree.h"
- #endif
-+#include "reload.h"
-+#include "recog.h"
-+/*#include "tm_p.h"*/
-
- /* This is like nonimmediate_operand with a restriction on the type of MEM. */
-
-@@ -43,8 +48,9 @@
- int i;
- /* Split operands. */
-
-- low[0] = low[1] = low[2] = 0;
-- for (i = 0; i < 3; i++)
-+ for (i = 0; i < n; i++)
-+ low[i] = 0;
-+ for (i = 0; i < n; i++)
- {
- if (low[i])
- /* it's already been figured out */;
-@@ -52,7 +58,7 @@
- && (GET_CODE (XEXP (operands[i], 0)) == POST_INC))
- {
- rtx addr = XEXP (operands[i], 0);
-- operands[i] = low[i] = gen_rtx (MEM, SImode, addr);
-+ operands[i] = low[i] = gen_rtx_MEM (SImode, addr);
- if (which_alternative == 0 && i == 0)
- {
- addr = XEXP (operands[i], 0);
-@@ -71,9 +77,25 @@
- FILE *file;
- register rtx addr;
- {
-- register rtx reg1, reg2, breg, ireg;
-+ register rtx reg1, breg, ireg;
- rtx offset;
-+ rtx orig_addr = addr;
-
-+#if 0
-+ if (GET_CODE (addr) == PLUS && GET_CODE (XEXP (addr, 1)) == CONST)
-+ debug_rtx (addr);
-+#endif
-+#ifdef NO_EXTERNAL_INDIRECT_ADDRESS
-+ if (flag_pic && GET_CODE (addr) == CONST &&
-+ GET_CODE (XEXP (addr, 0)) == PLUS &&
-+ GET_CODE (XEXP (XEXP (addr, 0), 0)) == SYMBOL_REF &&
-+ !SYMBOL_REF_FLAG (XEXP (XEXP (addr, 0), 0)) &&
-+ GET_CODE (XEXP (XEXP (addr, 0), 1)) == CONST_INT)
-+ {
-+ fatal_insn ("Non-PIC operand escaped:\n", addr);
-+ }
-+#endif
-+
- retry:
- switch (GET_CODE (addr))
- {
-@@ -83,15 +105,20 @@
- goto retry;
-
- case REG:
-- fprintf (file, "(%s)", reg_names[REGNO (addr)]);
-+ if (REGNO (addr) >= 16)
-+ {
-+ debug_rtx (orig_addr);
-+ abort ();
-+ }
-+ fprintf (file, "(%s%s)", REGISTER_PREFIX, reg_names[REGNO (addr)]);
- break;
-
- case PRE_DEC:
-- fprintf (file, "-(%s)", reg_names[REGNO (XEXP (addr, 0))]);
-+ fprintf (file, "-(%s%s)", REGISTER_PREFIX, reg_names[REGNO (XEXP (addr, 0))]);
- break;
-
- case POST_INC:
-- fprintf (file, "(%s)+", reg_names[REGNO (XEXP (addr, 0))]);
-+ fprintf (file, "(%s%s)+", REGISTER_PREFIX, reg_names[REGNO (XEXP (addr, 0))]);
- break;
-
- case PLUS:
-@@ -139,7 +166,10 @@
- addr = XEXP (addr, 1);
- }
- else
-- abort ();
-+ {
-+ debug_rtx (orig_addr);
-+ abort ();
-+ }
-
- if (GET_CODE (addr) == REG)
- {
-@@ -162,7 +192,10 @@
- else if (GET_CODE (XEXP (addr, 0)) == CONST_INT)
- offset = plus_constant (offset, INTVAL (XEXP (addr, 0)));
- else
-- abort ();
-+ {
-+ debug_rtx (orig_addr);
-+ abort ();
-+ }
- }
- offset = XEXP (addr, 0);
- }
-@@ -176,11 +209,17 @@
- else if (GET_CODE (XEXP (addr, 0)) == MULT)
- {
- if (ireg)
-- abort ();
-+ {
-+ debug_rtx (orig_addr);
-+ abort ();
-+ }
- ireg = XEXP (addr, 0);
- }
- else
-- abort ();
-+ {
-+ debug_rtx (orig_addr);
-+ abort ();
-+ }
-
- if (CONSTANT_ADDRESS_P (XEXP (addr, 1))
- || GET_CODE (XEXP (addr, 1)) == MEM)
-@@ -192,7 +231,10 @@
- else if (GET_CODE (XEXP (addr, 1)) == CONST_INT)
- offset = plus_constant (offset, INTVAL (XEXP (addr, 1)));
- else
-- abort ();
-+ {
-+ debug_rtx (orig_addr);
-+ abort ();
-+ }
- }
- offset = XEXP (addr, 1);
- }
-@@ -206,22 +248,49 @@
- else if (GET_CODE (XEXP (addr, 1)) == MULT)
- {
- if (ireg)
-- abort ();
-+ {
-+ debug_rtx (orig_addr);
-+ abort ();
-+ }
- ireg = XEXP (addr, 1);
- }
-+ else if (GET_CODE (addr) == SYMBOL_REF)
-+ {
-+ output_addr_const (file, addr);
-+ if (offset != 0)
-+ {
-+ fputc ('+', file);
-+ output_address (offset);
-+ offset = 0;
-+ }
-+ }
- else
-- abort ();
-+ {
-+ debug_rtx (orig_addr);
-+ abort ();
-+ }
- }
- else
-- abort ();
-+ {
-+ debug_rtx (orig_addr);
-+ abort ();
-+ }
-
- /* If REG1 is non-zero, figure out if it is a base or index register. */
- if (reg1)
- {
-- if (breg != 0 || (offset && GET_CODE (offset) == MEM))
-+ if (breg != 0
-+ || GET_CODE (addr) == SYMBOL_REF
-+ || (offset
-+ && (GET_CODE (offset) == MEM
-+ || GET_CODE (offset) == SYMBOL_REF
-+ || GET_CODE (offset) == CONST)))
- {
- if (ireg)
-- abort ();
-+ {
-+ debug_rtx (orig_addr);
-+ abort ();
-+ }
- ireg = reg1;
- }
- else
-@@ -232,15 +301,25 @@
- output_address (offset);
-
- if (breg != 0)
-- fprintf (file, "(%s)", reg_names[REGNO (breg)]);
-+ {
-+ if (REGNO (breg) >= 16)
-+ {
-+ debug_rtx (orig_addr);
-+ abort ();
-+ }
-+ fprintf (file, "(%s%s)", REGISTER_PREFIX, reg_names[REGNO (breg)]);
-+ }
-
- if (ireg != 0)
- {
- if (GET_CODE (ireg) == MULT)
- ireg = XEXP (ireg, 0);
- if (GET_CODE (ireg) != REG)
-- abort ();
-- fprintf (file, "[%s]", reg_names[REGNO (ireg)]);
-+ {
-+ debug_rtx (orig_addr);
-+ abort ();
-+ }
-+ fprintf (file, "[%s%s]", REGISTER_PREFIX, reg_names[REGNO (ireg)]);
- }
- break;
-
-@@ -249,7 +328,7 @@
- }
- }
-
--char *
-+const char *
- rev_cond_name (op)
- rtx op;
- {
-@@ -286,8 +365,10 @@
- register rtx c;
- {
- register enum machine_mode mode;
-+#if HOST_FLOAT_FORMAT == VAX_FLOAT_FORMAT
- int i;
- union {double d; int i[2];} val;
-+#endif
-
- if (GET_CODE (c) != CONST_DOUBLE)
- return 0;
-@@ -323,7 +404,8 @@
- 2 - indirect */
-
-
--int vax_address_cost(addr)
-+int
-+vax_address_cost (addr)
- register rtx addr;
- {
- int reg = 0, indexed = 0, indir = 0, offset = 0, predec = 0;
-@@ -365,6 +447,8 @@
- indir = 2; /* 3 on VAX 2 */
- addr = XEXP (addr, 0);
- goto restart;
-+ default:
-+ break;
- }
-
- /* Up to 3 things can be added in an address. They are stored in
-@@ -402,7 +486,7 @@
- enum machine_mode mode = GET_MODE (x);
- register int c;
- int i = 0; /* may be modified in switch */
-- char *fmt = GET_RTX_FORMAT (code); /* may be modified in switch */
-+ const char *fmt = GET_RTX_FORMAT (code); /* may be modified in switch */
-
- switch (code)
- {
-@@ -427,6 +511,8 @@
- case QImode:
- c = 10; /* 3-4 on VAX 9000, 20-28 on VAX 2 */
- break;
-+ default:
-+ break;
- }
- break;
- case UDIV:
-@@ -582,7 +668,7 @@
-
- /* Check a `double' value for validity for a particular machine mode. */
-
--static char *float_strings[] =
-+static const char *const float_strings[] =
- {
- "1.70141173319264430e+38", /* 2^127 (2^24 - 1) / 2^24 */
- "-1.70141173319264430e+38",
-@@ -621,7 +707,7 @@
- if ((mode) == SFmode)
- {
- REAL_VALUE_TYPE r;
-- bcopy ((char *) d, (char *) &r, sizeof (REAL_VALUE_TYPE));
-+ memcpy (&r, d, sizeof (REAL_VALUE_TYPE));
- if (REAL_VALUES_LESS (float_values[0], r))
- {
- bcopy ((char *) &float_values[0], (char *) d,
-@@ -651,6 +737,338 @@
- return 0;
- }
-
-+/* Nonzero if X is a hard reg that can be used as an index. */
-+#define XREG_OK_FOR_INDEX_P(X, STRICT) (!(STRICT) || REGNO_OK_FOR_INDEX_P (REGNO (X)))
-+/* Nonzero if X is a hard reg that can be used as a base reg. */
-+#define XREG_OK_FOR_BASE_P(X, STRICT) (!(STRICT) || REGNO_OK_FOR_BASE_P (REGNO (X)))
-+
-+#ifdef NO_EXTERNAL_INDIRECT_ADDRESS
-+
-+/* Re-definition of CONSTANT_ADDRESS_P, which is true only when there
-+ are no SYMBOL_REFs for external symbols present and allow valid
-+ addressing modes. */
-+
-+#define INDIRECTABLE_CONSTANT_ADDRESS_P(X, INDEXED, INDIRECT) \
-+ (GET_CODE (X) == LABEL_REF \
-+ || (!INDEXED && GET_CODE (X) == SYMBOL_REF \
-+ && (!INDIRECT || SYMBOL_REF_FLAG (X))) \
-+ || (!INDEXED && GET_CODE (X) == CONST \
-+ && GET_CODE (XEXP ((X), 0)) == PLUS \
-+ && GET_CODE (XEXP (XEXP ((X), 0), 0)) == SYMBOL_REF \
-+ && ((!INDIRECT && !flag_pic) \
-+ || SYMBOL_REF_FLAG (XEXP (XEXP ((X), 0), 0)))) \
-+ || GET_CODE (X) == CONST_INT)
-+
-+/* Non-zero if X is an address which can be indirected. External symbols
-+ could be in a sharable image library, so we disallow those. */
-+
-+#define INDIRECTABLE_ADDRESS_P(X, STRICT, INDEXED, INDIRECT) \
-+ (INDIRECTABLE_CONSTANT_ADDRESS_P (X, INDEXED, INDIRECT) \
-+ || (GET_CODE (X) == REG && XREG_OK_FOR_BASE_P (X, STRICT)) \
-+ || (GET_CODE (X) == PLUS \
-+ && GET_CODE (XEXP (X, 0)) == REG \
-+ && XREG_OK_FOR_BASE_P (XEXP (X, 0), STRICT) \
-+ && GET_CODE (XEXP (X, 1)) != SYMBOL_REF \
-+ && !(GET_CODE (XEXP (X, 1)) == CONST \
-+ && GET_CODE (XEXP (XEXP (X, 1), 0)) == PLUS \
-+ && GET_CODE (XEXP (XEXP (XEXP (X, 1), 0), 0)) == SYMBOL_REF) \
-+ && INDIRECTABLE_CONSTANT_ADDRESS_P (XEXP (X, 1), INDEXED, INDIRECT)))
-+
-+#else /* not NO_EXTERNAL_INDIRECT_ADDRESS */
-+
-+#define INDIRECTABLE_CONSTANT_ADDRESS_P(X, INDEXED, INDIRECT) \
-+ CONSTANT_ADDRESS_P (X)
-+
-+/* Non-zero if X is an address which can be indirected. */
-+#define INDIRECTABLE_ADDRESS_P(X, STRICT, INDEXED, INDIRECT) \
-+ (INDIRECTABLE_CONSTANT_ADDRESS_P (X, INDEXED, INDIRECT) \
-+ || (GET_CODE (X) == REG && XREG_OK_FOR_BASE_P (X, STRICT)) \
-+ || (GET_CODE (X) == PLUS \
-+ && GET_CODE (XEXP (X, 0)) == REG \
-+ && XREG_OK_FOR_BASE_P (XEXP (X, 0), STRICT) \
-+ && CONSTANT_ADDRESS_P (XEXP (X, 1))))
-+
-+#endif /* not NO_EXTERNAL_INDIRECT_ADDRESS */
-+
-+/* Go to ADDR if X is a valid address not using indexing.
-+ (This much is the easy part.) */
-+#define GO_IF_NONINDEXED_ADDRESS(X, ADDR, STRICT, INDEXED) \
-+{ register rtx xfoob = (X); \
-+ if (GET_CODE (X) == REG) \
-+ { \
-+ extern rtx *reg_equiv_mem; \
-+ if (! reload_in_progress) \
-+ goto ADDR; \
-+ if (!STRICT) \
-+ { \
-+ if ((xfoob = reg_equiv_mem[REGNO (xfoob)]) == 0) \
-+ goto ADDR; \
-+ } \
-+ if (INDIRECTABLE_ADDRESS_P (xfoob, STRICT, INDEXED, 0)) \
-+ goto ADDR; \
-+ } \
-+ if (INDIRECTABLE_CONSTANT_ADDRESS_P (X, INDEXED, 0)) goto ADDR; \
-+ if (INDIRECTABLE_ADDRESS_P (X, STRICT, INDEXED, 0)) goto ADDR; \
-+ xfoob = XEXP (X, 0); \
-+ if (GET_CODE (X) == MEM \
-+ && INDIRECTABLE_ADDRESS_P (xfoob, STRICT, INDEXED, !TARGET_INDIRECT)) \
-+ goto ADDR; \
-+ if ((GET_CODE (X) == PRE_DEC || GET_CODE (X) == POST_INC) \
-+ && GET_CODE (xfoob) == REG \
-+ && XREG_OK_FOR_BASE_P (xfoob, STRICT)) \
-+ goto ADDR; }
-+
-+/* 1 if PROD is either a reg times size of mode MODE
-+ or just a reg, if MODE is just one byte.
-+ This macro's expansion uses the temporary variables xfoo0 and xfoo1
-+ that must be declared in the surrounding context. */
-+#define INDEX_TERM_P(PROD, MODE, STRICT) \
-+(GET_MODE_SIZE (MODE) == 1 \
-+ ? (GET_CODE (PROD) == REG && XREG_OK_FOR_BASE_P (PROD, STRICT)) \
-+ : (GET_CODE (PROD) == MULT \
-+ && \
-+ (xfoo0 = XEXP (PROD, 0), xfoo1 = XEXP (PROD, 1), \
-+ ((GET_CODE (xfoo0) == CONST_INT \
-+ && GET_CODE (xfoo1) == REG \
-+ && INTVAL (xfoo0) == (int)GET_MODE_SIZE (MODE) \
-+ && XREG_OK_FOR_INDEX_P (xfoo1, STRICT)) \
-+ || \
-+ (GET_CODE (xfoo1) == CONST_INT \
-+ && GET_CODE (xfoo0) == REG \
-+ && INTVAL (xfoo1) == (int)GET_MODE_SIZE (MODE) \
-+ && XREG_OK_FOR_INDEX_P (xfoo0, STRICT))))))
-+
-+/* Go to ADDR if X is the sum of a register
-+ and a valid index term for mode MODE. */
-+#define GO_IF_REG_PLUS_INDEX(X, MODE, ADDR, STRICT) \
-+{ register rtx xfooa; \
-+ if (GET_CODE (X) == PLUS) \
-+ { if (GET_CODE (XEXP (X, 0)) == REG \
-+ && XREG_OK_FOR_BASE_P (XEXP (X, 0), STRICT) \
-+ && (xfooa = XEXP (X, 1), \
-+ INDEX_TERM_P (xfooa, MODE, STRICT))) \
-+ goto ADDR; \
-+ if (GET_CODE (XEXP (X, 1)) == REG \
-+ && XREG_OK_FOR_BASE_P (XEXP (X, 1), STRICT) \
-+ && (xfooa = XEXP (X, 0), \
-+ INDEX_TERM_P (xfooa, MODE, STRICT))) \
-+ goto ADDR; } }
-+
-+int
-+legitimate_pic_operand_p(x, strict)
-+ register rtx x;
-+ int strict ATTRIBUTE_UNUSED;
-+{
-+ if (GET_CODE (x) != SYMBOL_REF
-+ && !(GET_CODE (x) == CONST
-+ && GET_CODE (XEXP (x, 0)) == PLUS
-+ && GET_CODE (XEXP (XEXP (x, 0), 0)) == SYMBOL_REF))
-+ {
-+ return 1;
-+ }
-+ return 0;
-+}
-+
-+int
-+legitimate_address_p(mode, xbar, strict)
-+ enum machine_mode mode;
-+ register rtx xbar;
-+ int strict;
-+{
-+ register rtx xfoo, xfoo0, xfoo1;
-+ int from = __LINE__;
-+ GO_IF_NONINDEXED_ADDRESS (xbar, win, strict, 0);
-+ if (GET_CODE (xbar) == PLUS)
-+ {
-+ /* Handle <address>[index] represented with index-sum outermost */
-+ xfoo = XEXP (xbar, 0);
-+ if (INDEX_TERM_P (xfoo, mode, strict))
-+ {
-+ from = __LINE__;
-+ GO_IF_NONINDEXED_ADDRESS (XEXP (xbar, 1), win, strict, 0);
-+ }
-+ xfoo = XEXP (xbar, 1);
-+ if (INDEX_TERM_P (xfoo, mode, strict))
-+ {
-+ from = __LINE__;
-+ GO_IF_NONINDEXED_ADDRESS (XEXP (xbar, 0), win, strict, 0);
-+ }
-+ /* Handle offset(reg)[index] with offset added outermost */
-+ if (INDIRECTABLE_CONSTANT_ADDRESS_P (XEXP (xbar, 0), 1, 0))
-+ {
-+ from = __LINE__;
-+ if (GET_CODE (XEXP (xbar, 1)) == REG
-+ && XREG_OK_FOR_BASE_P (XEXP (xbar, 1), strict))
-+ goto win;
-+ from = __LINE__;
-+ GO_IF_REG_PLUS_INDEX (XEXP (xbar, 1), mode, win, strict);
-+ }
-+ if (INDIRECTABLE_CONSTANT_ADDRESS_P (XEXP (xbar, 1), 1, 0))
-+ {
-+ from = __LINE__;
-+ if (GET_CODE (XEXP (xbar, 0)) == REG
-+ && XREG_OK_FOR_BASE_P (XEXP (xbar, 0), strict))
-+ goto win;
-+ from = __LINE__;
-+ GO_IF_REG_PLUS_INDEX (XEXP (xbar, 0), mode, win, strict);
-+ }
-+ }
-+ return 0;
-+
-+ win:
-+#if 0
-+ if (strict)
-+ {
-+ fprintf(stderr, "line=%d\n", from);
-+ debug_rtx (xbar);
-+ }
-+#endif
-+ if (flag_pic && GET_CODE (xbar) == SYMBOL_REF
-+#ifdef NO_EXTERNAL_INDIRECT_ADDRESS
-+ && !SYMBOL_REF_FLAG (xbar)
-+#endif
-+ && mode == DImode)
-+ return 0;
-+ return 1;
-+}
-+
-+int
-+vax_symbolic_operand (op, mode)
-+ register rtx op;
-+ enum machine_mode mode ATTRIBUTE_UNUSED;
-+{
-+ if (!general_operand(op, mode))
-+ return 0;
-+ if (GET_CODE (op) == SYMBOL_REF
-+ || GET_CODE (op) == LABEL_REF
-+ || (GET_CODE (op) == CONST
-+ && GET_CODE (XEXP (op, 0)) == PLUS
-+ && GET_CODE (XEXP (XEXP (op, 0), 0)) == SYMBOL_REF
-+#ifdef NO_EXTERNAL_INDIRECT_ADDRESS
-+ && (SYMBOL_REF_FLAG (XEXP (XEXP (op, 0), 0)) || !flag_pic)
-+#endif
-+ && GET_CODE (XEXP (XEXP (op, 0), 1)) == CONST_INT)
-+ || (GET_CODE (op) == PLUS
-+ && GET_CODE (XEXP (op, 1)) == SYMBOL_REF
-+#ifdef NO_EXTERNAL_INDIRECT_ADDRESS
-+ && (SYMBOL_REF_FLAG (XEXP (op, 1)) || !flag_pic)
-+#endif
-+ && GET_CODE (XEXP (op, 0)) == CONST_INT)
-+ || (GET_CODE (op) == PLUS
-+ && GET_CODE (XEXP (op, 0)) == SYMBOL_REF
-+#ifdef NO_EXTERNAL_INDIRECT_ADDRESS
-+ && (SYMBOL_REF_FLAG (XEXP (op, 0)) || !flag_pic)
-+#endif
-+ && GET_CODE (XEXP (op, 1)) == CONST_INT))
-+ {
-+ return 1;
-+ }
-+ return 0;
-+}
-+
-+int
-+vax_nonsymbolic_operand (op, mode)
-+ register rtx op;
-+ enum machine_mode mode ATTRIBUTE_UNUSED;
-+{
-+ if (!general_operand(op, mode))
-+ return 0;
-+ if (GET_CODE (op) == SYMBOL_REF
-+ || GET_CODE (op) == LABEL_REF
-+ || (GET_CODE (op) == CONST
-+ && GET_CODE (XEXP (op, 0)) == PLUS
-+ && GET_CODE (XEXP (XEXP (op, 0), 0)) == SYMBOL_REF)
-+ || (GET_CODE (op) == MEM
-+ && GET_CODE (XEXP (op, 0)) == CONST
-+ && GET_CODE (XEXP (XEXP (op, 0), 0)) == PLUS
-+ && GET_CODE (XEXP (XEXP (XEXP (op, 0), 0), 0)) == SYMBOL_REF)
-+ || (GET_CODE (op) == PLUS
-+ && GET_CODE (XEXP (op, 0)) == SYMBOL_REF
-+ && GET_CODE (XEXP (op, 1)) == CONST_INT))
-+ return 0;
-+#if 0
-+ if (GET_CODE (op) == PLUS)
-+ debug_rtx (op);
-+#endif
-+ if (vax_symbolic_operand (op, mode))
-+ return 0;
-+#if 0
-+ if (GET_CODE (op) != CONST_INT && GET_CODE (op) != REG &&
-+ GET_CODE (op) != MEM)
-+ debug_rtx (op);
-+#endif
-+ return 1;
-+}
-+
-+int
-+vax_lvalue_operand(op, mode)
-+ register rtx op;
-+ enum machine_mode mode;
-+{
-+ if (!general_operand(op, mode))
-+ return 0;
-+ return GET_CODE (op) == REG
-+ || GET_CODE (op) == SUBREG
-+ || GET_CODE (op) == MEM
-+ || GET_CODE (op) == CONCAT
-+ || GET_CODE (op) == PARALLEL
-+ || GET_CODE (op) == STRICT_LOW_PART;
-+}
-+
-+int
-+vax_general_operand(op, mode)
-+ register rtx op;
-+ enum machine_mode mode;
-+{
-+ if (!general_operand(op, mode))
-+ return 0;
-+ if (!flag_pic)
-+ return 1;
-+ if ((GET_CODE (op) == CONST
-+ && GET_CODE (XEXP (op, 0)) == PLUS
-+ && GET_CODE (XEXP (XEXP (op, 0), 0)) == SYMBOL_REF
-+#ifdef NO_EXTERNAL_INDIRECT_ADDRESS
-+ && !SYMBOL_REF_FLAG (XEXP (XEXP (op, 0), 0))
-+#endif
-+ ) || (GET_CODE (op) == MEM
-+ && GET_CODE (XEXP (op, 0)) == CONST
-+ && GET_CODE (XEXP (XEXP (op, 0), 0)) == PLUS
-+ && GET_CODE (XEXP (XEXP (XEXP (op, 0), 0), 0)) == SYMBOL_REF
-+#ifdef NO_EXTERNAL_INDIRECT_ADDRESS
-+ && !SYMBOL_REF_FLAG (XEXP (XEXP (op, 0), 0))
-+#endif
-+ ) || (GET_CODE (op) == PLUS
-+ && GET_CODE (XEXP (op, 0)) == SYMBOL_REF
-+ && GET_CODE (XEXP (op, 1)) == CONST_INT
-+#ifdef NO_EXTERNAL_INDIRECT_ADDRESS
-+ && !SYMBOL_REF_FLAG (XEXP (op, 0))
-+#endif
-+ ))
-+ return 0;
-+#if 0
-+ debug_rtx (op);
-+#endif
-+ return 1;
-+}
-+
-+int
-+vax_reg_used_p(operand, reg)
-+ rtx operand;
-+ int reg;
-+{
-+ if (GET_CODE (operand) == REG && REGNO (operand) == reg)
-+ return 1;
-+ if (GET_CODE (operand) == MEM ||
-+ GET_CODE (operand) == PRE_DEC ||
-+ GET_CODE (operand) == POST_DEC)
-+ return vax_reg_used_p (XEXP(operand, 0), reg);
-+ if (GET_CODE (operand) == PLUS ||
-+ GET_CODE (operand) == MULT)
-+ return vax_reg_used_p (XEXP(operand, 0), reg) ||
-+ vax_reg_used_p (XEXP(operand, 1), reg);
-+ return 0;
-+}
-+
- #ifdef VMS_TARGET
- /* Additional support code for VMS target. */
-
-@@ -661,7 +1079,7 @@
- static
- struct extern_list {
- struct extern_list *next; /* next external */
-- char *name; /* name of the external */
-+ const char *name; /* name of the external */
- int size; /* external's actual size */
- int in_const; /* section type flag */
- } *extern_head = 0, *pending_head = 0;
-@@ -672,7 +1090,7 @@
- void
- vms_check_external (decl, name, pending)
- tree decl;
-- char *name;
-+ const char *name;
- int pending;
- {
- register struct extern_list *p, *p0;
diff --git a/lang/gcc/patches/patch-bc b/lang/gcc/patches/patch-bc
deleted file mode 100644
index 85b8fe9cfa0..00000000000
--- a/lang/gcc/patches/patch-bc
+++ /dev/null
@@ -1,568 +0,0 @@
-$NetBSD: patch-bc,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/vax/vax.h.orig 2000/07/26 00:18:55 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/vax/vax.h 2002/02/25 17:33:02 1.14
-@@ -25,7 +25,7 @@
-
- /* If using g-format floating point, alter math.h. */
-
--#define CPP_SPEC "%{mg:-DGFLOAT}"
-+#define CPP_SPEC "%{mg:%{!ansi:-DGFLOAT} -D__GFLOAT}"
-
- /* Choose proper libraries depending on float format.
- Note that there are no profiling libraries for g-format.
-@@ -51,14 +51,21 @@
- /* Macros used in the machine description to test the flags. */
-
- /* Nonzero if compiling code that Unix assembler can assemble. */
--#define TARGET_UNIX_ASM (target_flags & 1)
-+#define MASK_UNIX_ASM 1
-+#define TARGET_UNIX_ASM (target_flags & MASK_UNIX_ASM)
-
- /* Nonzero if compiling with VAX-11 "C" style structure alignment */
--#define TARGET_VAXC_ALIGNMENT (target_flags & 2)
-+#define MASK_VAXC_ALIGNMENT 2
-+#define TARGET_VAXC_ALIGNMENT (target_flags & MASK_VAXC_ALIGNMENT)
-
- /* Nonzero if compiling with `G'-format floating point */
--#define TARGET_G_FLOAT (target_flags & 4)
-+#define MASK_G_FLOAT 4
-+#define TARGET_G_FLOAT (target_flags & MASK_G_FLOAT)
-
-+/* Nonzero if compiling for PIC code */
-+#define MASK_INDIRECT 8
-+#define TARGET_INDIRECT (target_flags & MASK_INDIRECT)
-+
- /* Macro to define tables used to set the flags.
- This is a list in braces of pairs in braces,
- each pair being { "NAME", VALUE }
-@@ -66,26 +73,28 @@
- An empty string NAME is used to identify the default VALUE. */
-
- #define TARGET_SWITCHES \
-- { {"unix", 1}, \
-- {"gnu", -1}, \
-- {"vaxc-alignment", 2}, \
-- {"g", 4}, \
-- {"g-float", 4}, \
-- {"d", -4}, \
-- {"d-float", -4}, \
-- { "", TARGET_DEFAULT}}
-+ { {"unix", MASK_UNIX_ASM, "Generate code for UNIX assembler"}, \
-+ {"gnu", -MASK_UNIX_ASM, "Generate code for GNU assembler (gas)"}, \
-+ {"vaxc-alignment", MASK_VAXC_ALIGNMENT, "Use VAXC structure conventions"}, \
-+ {"g", MASK_G_FLOAT, "Generate GFLOAT double precision code"}, \
-+ {"g-float", MASK_G_FLOAT, "Generate GFLOAT double precision code"}, \
-+ {"d", -MASK_G_FLOAT, "Generate DFLOAT double precision code"}, \
-+ {"d-float", -MASK_G_FLOAT, "Generate DFLOAT double precision code"}, \
-+ {"indirect", MASK_INDIRECT, "Allow indirect memory references in PIC code"}, \
-+ {"no-indirect", -MASK_INDIRECT, "Disallow indirect memory references in PIC code"}, \
-+ { "", TARGET_DEFAULT, 0}}
-
- /* Default target_flags if no switches specified. */
-
- #ifndef TARGET_DEFAULT
--#define TARGET_DEFAULT 1
-+#define TARGET_DEFAULT MASK_UNIX_ASM
- #endif
-
- /* Target machine storage layout */
-
- /* Define for software floating point emulation of VAX format
- when cross compiling from a non-VAX host. */
--/* #define REAL_ARITHMETIC */
-+#define REAL_ARITHMETIC
-
- /* Define this if most significant bit is lowest numbered
- in instructions that operate on numbered bit-fields.
-@@ -258,7 +267,7 @@
- This is an initializer for a vector of HARD_REG_SET
- of length N_REG_CLASSES. */
-
--#define REG_CLASS_CONTENTS {0, 0xffff}
-+#define REG_CLASS_CONTENTS {{0}, {0xffff}}
-
- /* The same information, inverted:
- Return the class number of the smallest class containing
-@@ -276,16 +285,28 @@
-
- #define REG_CLASS_FROM_LETTER(C) NO_REGS
-
--/* The letters I, J, K, L and M in a register constraint string
-+/* The letters I, J, K, L, M, N, and O in a register constraint string
- can be used to stand for particular ranges of immediate operands.
- This macro defines what the ranges are.
- C is the letter, and VALUE is a constant value.
- Return 1 if VALUE is in the range specified by C.
--
-- `I' is the constant zero. */
-
--#define CONST_OK_FOR_LETTER_P(VALUE, C) \
-- ((C) == 'I' ? (VALUE) == 0 \
-+ `I' is the constant zero.
-+ `J' is a value between 0 .. 63 (inclusive) S^#
-+ `K' is a value between -128 and 127 (inclusive) B^
-+ 'L' is a value between -32768 and 32767 (include) W^
-+ `M' is a value between 0 and 255 (inclusive) B^
-+ 'N' is a value between 0 and 65535 (inclusive) W^
-+ `O' is a value between -63 and -1 (inclusive) */
-+
-+#define CONST_OK_FOR_LETTER_P(VALUE, C) \
-+ ( (C) == 'I' ? (VALUE) == 0 \
-+ : (C) == 'J' ? 0 <= (VALUE) && (VALUE) < 64 \
-+ : (C) == 'O' ? -63 <= (VALUE) && (VALUE) < 0 \
-+ : (C) == 'K' ? -128 <= (VALUE) && (VALUE) < 128 \
-+ : (C) == 'M' ? 0 <= (VALUE) && (VALUE) < 256 \
-+ : (C) == 'L' ? -32768 <= (VALUE) && (VALUE) < 32768 \
-+ : (C) == 'N' ? 0 <= (VALUE) && (VALUE) < 65536 \
- : 0)
-
- /* Similar, but for floating constants, and defining letters G and H.
-@@ -347,8 +368,7 @@
- /* Given an rtx for the address of a frame,
- return an rtx for the address of the word in the frame
- that holds the dynamic chain--the previous frame's address. */
--#define DYNAMIC_CHAIN_ADDRESS(frame) \
--gen_rtx (PLUS, Pmode, frame, GEN_INT (12))
-+#define DYNAMIC_CHAIN_ADDRESS(FRAME) plus_constant ((FRAME), 12)
-
- /* If we generate an insn to push BYTES bytes,
- this says how many the stack pointer really advances by.
-@@ -377,14 +397,14 @@
- /* On the Vax the return value is in R0 regardless. */
-
- #define FUNCTION_VALUE(VALTYPE, FUNC) \
-- gen_rtx (REG, TYPE_MODE (VALTYPE), 0)
-+ gen_rtx_REG (TYPE_MODE (VALTYPE), 0)
-
- /* Define how to find the value returned by a library function
- assuming the value has mode MODE. */
-
- /* On the Vax the return value is in R0 regardless. */
-
--#define LIBCALL_VALUE(MODE) gen_rtx (REG, MODE, 0)
-+#define LIBCALL_VALUE(MODE) gen_rtx_REG (MODE, 0)
-
- /* Define this if PCC uses the nonreentrant convention for returning
- structure and union values. */
-@@ -466,8 +486,12 @@
- mask |= 1 << regno; \
- fprintf (FILE, "\t.word 0x%x\n", mask); \
- MAYBE_VMS_FUNCTION_PROLOGUE(FILE) \
-- if ((size) >= 64) fprintf (FILE, "\tmovab %d(sp),sp\n", -size);\
-- else if (size) fprintf (FILE, "\tsubl2 $%d,sp\n", (size)); }
-+ if ((size) >= 64) \
-+ fprintf (FILE, "\tmovab %d(%ssp),%ssp\n", -size, \
-+ REGISTER_PREFIX, REGISTER_PREFIX); \
-+ else if (size) \
-+ fprintf (FILE, "\tsubl2 $%d,%ssp\n", \
-+ (size), REGISTER_PREFIX); }
-
- /* vms.h redefines this. */
- #define MAYBE_VMS_FUNCTION_PROLOGUE(FILE)
-@@ -495,8 +519,9 @@
- */
-
- #define BLOCK_PROFILER(FILE, BLOCKNO) \
-- fprintf (FILE, "\tmovpsl -(sp)\n\tmovw (sp),2(sp)\n\taddl2 $2,sp\n\taddl2 $1,LPBX2+%d\n\tbicpsw $255\n\tbispsw (sp)+\n", \
-- 4 * BLOCKNO)
-+ fprintf (FILE, "\tmovpsl -(%ssp)\n\tmovw (%ssp),2(%ssp)\n\taddl2 $2,%ssp\n\taddl2 $1,LPBX2+%d\n\tbicpsw $255\n\tbispsw (%ssp)+\n", \
-+ 4 * BLOCKNO, REGISTER_PREFIX, REGISTER_PREFIX, REGISTER_PREFIX, \
-+ REGISTER_PREFIX, REGISTER_PREFIX)
-
- /* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
- the stack pointer does not matter. The value is tested only in
-@@ -533,10 +558,10 @@
- #define TRAMPOLINE_TEMPLATE(FILE) \
- { \
- ASM_OUTPUT_SHORT (FILE, const0_rtx); \
-- ASM_OUTPUT_SHORT (FILE, GEN_INT (0x8fd0)); \
-+ ASM_OUTPUT_SHORT (FILE, GEN_INT (0x8fd0)); \
- ASM_OUTPUT_INT (FILE, const0_rtx); \
-- ASM_OUTPUT_BYTE (FILE, 0x50+STATIC_CHAIN_REGNUM); \
-- ASM_OUTPUT_SHORT (FILE, GEN_INT (0x9f17)); \
-+ ASM_OUTPUT_BYTE (FILE, 0x50 + STATIC_CHAIN_REGNUM); \
-+ ASM_OUTPUT_SHORT (FILE, GEN_INT (0x9f17)); \
- ASM_OUTPUT_INT (FILE, const0_rtx); \
- }
-
-@@ -548,16 +573,20 @@
- FNADDR is an RTX for the address of the function's pure code.
- CXT is an RTX for the static chain value for the function. */
-
-+/* This is separated out so register prefixes can be added by a target
-+ if it requires them */
-+#define VAX_ISTREAM_SYNC "movpsl -(sp)\n\tpushal 1(pc)\n\trei"
-+
- /* We copy the register-mask from the function's pure code
- to the start of the trampoline. */
-+
- #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
- { \
-- emit_insn (gen_rtx (ASM_INPUT, VOIDmode, \
-- "movpsl -(sp)\n\tpushal 1(pc)\n\trei")); \
-- emit_move_insn (gen_rtx (MEM, HImode, TRAMP), \
-- gen_rtx (MEM, HImode, FNADDR)); \
-- emit_move_insn (gen_rtx (MEM, SImode, plus_constant (TRAMP, 4)), CXT);\
-- emit_move_insn (gen_rtx (MEM, SImode, plus_constant (TRAMP, 11)), \
-+ emit_insn (gen_rtx_ASM_INPUT (VOIDmode, VAX_ISTREAM_SYNC)); \
-+ emit_move_insn (gen_rtx_MEM (HImode, TRAMP), \
-+ gen_rtx_MEM (HImode, FNADDR)); \
-+ emit_move_insn (gen_rtx_MEM (SImode, plus_constant (TRAMP, 4)), CXT);\
-+ emit_move_insn (gen_rtx_MEM (SImode, plus_constant (TRAMP, 11)), \
- plus_constant (FNADDR, 2)); \
- }
-
-@@ -573,7 +602,7 @@
-
- #define RETURN_ADDR_RTX(COUNT, FRAME) \
- ((COUNT == 0) \
-- ? gen_rtx (MEM, Pmode, plus_constant (FRAME, RETURN_ADDRESS_OFFSET)) \
-+ ? gen_rtx_MEM (Pmode, plus_constant (FRAME, RETURN_ADDRESS_OFFSET)) \
- : (rtx) 0)
-
-
-@@ -635,6 +664,9 @@
- /* Nonzero if X is a hard reg that can be used as a base reg
- or if it is a pseudo reg. */
- #define REG_OK_FOR_BASE_P(X) 1
-+#define LEGITIMATE_PIC_OPERAND_P(X) legitimate_pic_operand_p (X, 0)
-+#define GO_IF_LEGITIMATE_ADDRESS(ZMODE, XOP, LABEL) \
-+ do { if (legitimate_address_p(ZMODE, XOP, 0)) goto LABEL; } while (0)
-
- #else
-
-@@ -642,144 +674,12 @@
- #define REG_OK_FOR_INDEX_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X))
- /* Nonzero if X is a hard reg that can be used as a base reg. */
- #define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
-+#define LEGITIMATE_PIC_OPERAND_P(X) legitimate_pic_operand_p (X, 1)
-+#define GO_IF_LEGITIMATE_ADDRESS(ZMODE, XOP, LABEL) \
-+ do { if (legitimate_address_p(ZMODE, XOP, 1)) goto LABEL; } while (0)
-
- #endif
-
--/* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression
-- that is a valid memory address for an instruction.
-- The MODE argument is the machine mode for the MEM expression
-- that wants to use this address.
--
-- The other macros defined here are used only in GO_IF_LEGITIMATE_ADDRESS,
-- except for CONSTANT_ADDRESS_P which is actually machine-independent. */
--
--#ifdef NO_EXTERNAL_INDIRECT_ADDRESS
--
--/* Zero if this contains a (CONST (PLUS (SYMBOL_REF) (...))) and the
-- symbol in the SYMBOL_REF is an external symbol. */
--
--#define INDIRECTABLE_CONSTANT_P(X) \
-- (! (GET_CODE ((X)) == CONST \
-- && GET_CODE (XEXP ((X), 0)) == PLUS \
-- && GET_CODE (XEXP (XEXP ((X), 0), 0)) == SYMBOL_REF \
-- && SYMBOL_REF_FLAG (XEXP (XEXP ((X), 0), 0))))
--
--/* Re-definition of CONSTANT_ADDRESS_P, which is true only when there
-- are no SYMBOL_REFs for external symbols present. */
--
--#define INDIRECTABLE_CONSTANT_ADDRESS_P(X) \
-- (GET_CODE (X) == LABEL_REF \
-- || (GET_CODE (X) == SYMBOL_REF && !SYMBOL_REF_FLAG (X)) \
-- || (GET_CODE (X) == CONST && INDIRECTABLE_CONSTANT_P(X)) \
-- || GET_CODE (X) == CONST_INT)
--
--
--/* Non-zero if X is an address which can be indirected. External symbols
-- could be in a sharable image library, so we disallow those. */
--
--#define INDIRECTABLE_ADDRESS_P(X) \
-- (INDIRECTABLE_CONSTANT_ADDRESS_P (X) \
-- || (GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X)) \
-- || (GET_CODE (X) == PLUS \
-- && GET_CODE (XEXP (X, 0)) == REG \
-- && REG_OK_FOR_BASE_P (XEXP (X, 0)) \
-- && INDIRECTABLE_CONSTANT_ADDRESS_P (XEXP (X, 1))))
--
--#else /* not NO_EXTERNAL_INDIRECT_ADDRESS */
--
--#define INDIRECTABLE_CONSTANT_ADDRESS_P(X) CONSTANT_ADDRESS_P(X)
--
--/* Non-zero if X is an address which can be indirected. */
--#define INDIRECTABLE_ADDRESS_P(X) \
-- (CONSTANT_ADDRESS_P (X) \
-- || (GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X)) \
-- || (GET_CODE (X) == PLUS \
-- && GET_CODE (XEXP (X, 0)) == REG \
-- && REG_OK_FOR_BASE_P (XEXP (X, 0)) \
-- && CONSTANT_ADDRESS_P (XEXP (X, 1))))
--
--#endif /* not NO_EXTERNAL_INDIRECT_ADDRESS */
--
--/* Go to ADDR if X is a valid address not using indexing.
-- (This much is the easy part.) */
--#define GO_IF_NONINDEXED_ADDRESS(X, ADDR) \
--{ register rtx xfoob = (X); \
-- if (GET_CODE (xfoob) == REG) \
-- { \
-- extern rtx *reg_equiv_mem; \
-- if (! reload_in_progress \
-- || reg_equiv_mem[REGNO (xfoob)] == 0 \
-- || INDIRECTABLE_ADDRESS_P (reg_equiv_mem[REGNO (xfoob)])) \
-- goto ADDR; \
-- } \
-- if (CONSTANT_ADDRESS_P (xfoob)) goto ADDR; \
-- if (INDIRECTABLE_ADDRESS_P (xfoob)) goto ADDR; \
-- xfoob = XEXP (X, 0); \
-- if (GET_CODE (X) == MEM && INDIRECTABLE_ADDRESS_P (xfoob)) \
-- goto ADDR; \
-- if ((GET_CODE (X) == PRE_DEC || GET_CODE (X) == POST_INC) \
-- && GET_CODE (xfoob) == REG && REG_OK_FOR_BASE_P (xfoob)) \
-- goto ADDR; }
--
--/* 1 if PROD is either a reg times size of mode MODE
-- or just a reg, if MODE is just one byte.
-- This macro's expansion uses the temporary variables xfoo0 and xfoo1
-- that must be declared in the surrounding context. */
--#define INDEX_TERM_P(PROD, MODE) \
--(GET_MODE_SIZE (MODE) == 1 \
-- ? (GET_CODE (PROD) == REG && REG_OK_FOR_BASE_P (PROD)) \
-- : (GET_CODE (PROD) == MULT \
-- && \
-- (xfoo0 = XEXP (PROD, 0), xfoo1 = XEXP (PROD, 1), \
-- ((GET_CODE (xfoo0) == CONST_INT \
-- && INTVAL (xfoo0) == GET_MODE_SIZE (MODE) \
-- && GET_CODE (xfoo1) == REG \
-- && REG_OK_FOR_INDEX_P (xfoo1)) \
-- || \
-- (GET_CODE (xfoo1) == CONST_INT \
-- && INTVAL (xfoo1) == GET_MODE_SIZE (MODE) \
-- && GET_CODE (xfoo0) == REG \
-- && REG_OK_FOR_INDEX_P (xfoo0))))))
--
--/* Go to ADDR if X is the sum of a register
-- and a valid index term for mode MODE. */
--#define GO_IF_REG_PLUS_INDEX(X, MODE, ADDR) \
--{ register rtx xfooa; \
-- if (GET_CODE (X) == PLUS) \
-- { if (GET_CODE (XEXP (X, 0)) == REG \
-- && REG_OK_FOR_BASE_P (XEXP (X, 0)) \
-- && (xfooa = XEXP (X, 1), \
-- INDEX_TERM_P (xfooa, MODE))) \
-- goto ADDR; \
-- if (GET_CODE (XEXP (X, 1)) == REG \
-- && REG_OK_FOR_BASE_P (XEXP (X, 1)) \
-- && (xfooa = XEXP (X, 0), \
-- INDEX_TERM_P (xfooa, MODE))) \
-- goto ADDR; } }
--
--#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
--{ register rtx xfoo, xfoo0, xfoo1; \
-- GO_IF_NONINDEXED_ADDRESS (X, ADDR); \
-- if (GET_CODE (X) == PLUS) \
-- { /* Handle <address>[index] represented with index-sum outermost */\
-- xfoo = XEXP (X, 0); \
-- if (INDEX_TERM_P (xfoo, MODE)) \
-- { GO_IF_NONINDEXED_ADDRESS (XEXP (X, 1), ADDR); } \
-- xfoo = XEXP (X, 1); \
-- if (INDEX_TERM_P (xfoo, MODE)) \
-- { GO_IF_NONINDEXED_ADDRESS (XEXP (X, 0), ADDR); } \
-- /* Handle offset(reg)[index] with offset added outermost */ \
-- if (INDIRECTABLE_CONSTANT_ADDRESS_P (XEXP (X, 0))) \
-- { if (GET_CODE (XEXP (X, 1)) == REG \
-- && REG_OK_FOR_BASE_P (XEXP (X, 1))) \
-- goto ADDR; \
-- GO_IF_REG_PLUS_INDEX (XEXP (X, 1), MODE, ADDR); } \
-- if (INDIRECTABLE_CONSTANT_ADDRESS_P (XEXP (X, 1))) \
-- { if (GET_CODE (XEXP (X, 0)) == REG \
-- && REG_OK_FOR_BASE_P (XEXP (X, 0))) \
-- goto ADDR; \
-- GO_IF_REG_PLUS_INDEX (XEXP (X, 0), MODE, ADDR); } } }
--
- /* Try machine-dependent ways of modifying an illegitimate address
- to be legitimate. If we find one, return the new, valid address.
- This macro is used in only one place: `memory_address' in explow.c.
-@@ -808,8 +708,10 @@
- goto LABEL; \
- if (GET_CODE (ADDR) == PLUS) \
- { if (CONSTANT_ADDRESS_P (XEXP (ADDR, 0)) \
-+ && (!flag_pic || GET_CODE (XEXP (ADDR, 0)) != SYMBOL_REF) \
- && GET_CODE (XEXP (ADDR, 1)) == REG); \
- else if (CONSTANT_ADDRESS_P (XEXP (ADDR, 1)) \
-+ && (!flag_pic || GET_CODE (XEXP (ADDR, 1)) != SYMBOL_REF) \
- && GET_CODE (XEXP (ADDR, 0)) == REG); \
- else goto LABEL; }}
-
-@@ -828,6 +730,10 @@
- jumps to the default label instead. */
- #define CASE_DROPS_THROUGH
-
-+/* Indicate that jump tables go in the text section. This is
-+ necessary when compiling PIC code. */
-+#define JUMP_TABLES_IN_TEXT_SECTION 1
-+
- /* Specify the tree operation to be used to convert reals to integers. */
- #define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR
-
-@@ -961,6 +867,36 @@
- #define MIN_G_FLOAT .556268464626800e-308
- */
-
-+/* Optionally define this if you have added predicates to
-+ `MACHINE.c'. This macro is called within an initializer of an
-+ array of structures. The first field in the structure is the
-+ name of a predicate and the second field is an array of rtl
-+ codes. For each predicate, list all rtl codes that can be in
-+ expressions matched by the predicate. The list should have a
-+ trailing comma. Here is an example of two entries in the list
-+ for a typical RISC machine:
-+
-+ #define PREDICATE_CODES \
-+ {"gen_reg_rtx_operand", {SUBREG, REG}}, \
-+ {"reg_or_short_cint_operand", {SUBREG, REG, CONST_INT}},
-+
-+ Defining this macro does not affect the generated code (however,
-+ incorrect definitions that omit an rtl code that may be matched
-+ by the predicate can cause the compiler to malfunction).
-+ Instead, it allows the table built by `genrecog' to be more
-+ compact and efficient, thus speeding up the compiler. The most
-+ important predicates to include in the list specified by this
-+ macro are thoses used in the most insn patterns. */
-+
-+#define PREDICATE_CODES \
-+ {"vax_symbolic_operand", { SYMBOL_REF, LABEL_REF, CONST, PLUS }},\
-+ {"vax_lvalue_operand", { REG, SUBREG, MEM, CONCAT, PARALLEL, \
-+ STRICT_LOW_PART }}, \
-+ {"vax_nonsymbolic_operand", { CONST_INT, CONST_DOUBLE, SUBREG, REG, \
-+ MEM }}, \
-+ {"vax_general_operand", { CONST_INT, CONST_DOUBLE, SUBREG, REG, \
-+ MEM, SYMBOL_REF, LABEL_REF, CONST, PLUS }},
-+
- /* Tell final.c how to eliminate redundant test instructions. */
-
- /* Here we define machine-dependent flags and fields in cc_status
-@@ -975,9 +911,15 @@
- { if (GET_CODE (EXP) == SET) \
- { if (GET_CODE (SET_SRC (EXP)) == CALL) \
- CC_STATUS_INIT; \
-+ else if (GET_CODE (SET_SRC (EXP)) == COMPARE \
-+ || GET_CODE (SET_SRC (EXP)) == PLUS \
-+ || GET_CODE (SET_SRC (EXP)) == MINUS) \
-+ { cc_status.flags = 0; \
-+ cc_status.value1 = SET_DEST (EXP); \
-+ cc_status.value2 = SET_SRC (EXP); } \
- else if (GET_CODE (SET_DEST (EXP)) != ZERO_EXTRACT \
- && GET_CODE (SET_DEST (EXP)) != PC) \
-- { cc_status.flags = 0; \
-+ { cc_status.flags = CC_NO_OVERFLOW; \
- cc_status.value1 = SET_DEST (EXP); \
- cc_status.value2 = SET_SRC (EXP); } } \
- else if (GET_CODE (EXP) == PARALLEL \
-@@ -986,7 +928,7 @@
- if (GET_CODE (SET_SRC (XVECEXP (EXP, 0, 0))) == CALL) \
- CC_STATUS_INIT; \
- else if (GET_CODE (SET_DEST (XVECEXP (EXP, 0, 0))) != PC) \
-- { cc_status.flags = 0; \
-+ { cc_status.flags = CC_NO_OVERFLOW; \
- cc_status.value1 = SET_DEST (XVECEXP (EXP, 0, 0)); \
- cc_status.value2 = SET_SRC (XVECEXP (EXP, 0, 0)); } \
- else \
-@@ -1028,15 +970,18 @@
-
- /* Output before read-only data. */
-
--#define TEXT_SECTION_ASM_OP ".text"
-+#define TEXT_SECTION_ASM_OP "\t.text"
-
- /* Output before writable data. */
-
--#define DATA_SECTION_ASM_OP ".data"
-+#define DATA_SECTION_ASM_OP "\t.data"
-
- /* How to refer to registers in assembler output.
-- This sequence is indexed by compiler's hard-register-number (see above). */
-+ This sequence is indexed by compiler's hard-register-number (see above).
-+ The register names will be prefixed by REGISTER_PREFIX, if any. */
-
-+#define REGISTER_PREFIX ""
-+
- #define REGISTER_NAMES \
- {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", \
- "r9", "r10", "r11", "ap", "fp", "sp", "pc"}
-@@ -1146,25 +1091,45 @@
- It need not be very fast code. */
-
- #define ASM_OUTPUT_REG_PUSH(FILE,REGNO) \
-- fprintf (FILE, "\tpushl %s\n", reg_names[REGNO])
-+ fprintf (FILE, "\tpushl %s%s\n", REGISTER_PREFIX, reg_names[REGNO])
-
- /* This is how to output an insn to pop a register from the stack.
- It need not be very fast code. */
-
- #define ASM_OUTPUT_REG_POP(FILE,REGNO) \
-- fprintf (FILE, "\tmovl (sp)+,%s\n", reg_names[REGNO])
-+ fprintf (FILE, "\tmovl (%ssp)+,%s%s\n", REGISTER_PREFIX, REGISTER_PREFIX, \
-+ reg_names[REGNO])
-
- /* This is how to output an element of a case-vector that is absolute.
- (The Vax does not use such vectors,
- but we must define this macro anyway.) */
-
--#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
-- fprintf (FILE, "\t.long L%d\n", VALUE)
-+#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
-+ do \
-+ { \
-+ char label[256]; \
-+ ASM_GENERATE_INTERNAL_LABEL (label, "L", (VALUE)); \
-+ fprintf (FILE, "\t.long "); \
-+ assemble_name (FILE, label); \
-+ fprintf (FILE, "\n"); \
-+ } \
-+ while (0)
-
- /* This is how to output an element of a case-vector that is relative. */
-
--#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
-- fprintf (FILE, "\t.word L%d-L%d\n", VALUE, REL)
-+#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
-+ do \
-+ { \
-+ char label[256]; \
-+ ASM_GENERATE_INTERNAL_LABEL (label, "L", (VALUE)); \
-+ fprintf (FILE, "\t.word "); \
-+ assemble_name (FILE, label); \
-+ ASM_GENERATE_INTERNAL_LABEL (label, "L", (REL)); \
-+ fprintf (FILE, "-"); \
-+ assemble_name (FILE, label); \
-+ fprintf (FILE, "\n"); \
-+ } \
-+ while (0)
-
- /* This is how to output an assembler line
- that says to advance the location counter
-@@ -1223,7 +1188,7 @@
- #define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
- do { \
- fprintf (FILE, "\t.word 0x0ffc\n"); \
-- fprintf (FILE, "\taddl2 $%d,4(ap)\n", DELTA); \
-+ fprintf (FILE, "\taddl2 $%d,4(%sap)\n", DELTA, REGISTER_PREFIX); \
- fprintf (FILE, "\tjmp "); \
- assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
- fprintf (FILE, "+2\n"); \
-@@ -1271,7 +1236,7 @@
- ((CODE) == '#')
-
- #define PRINT_OPERAND(FILE, X, CODE) \
--{ extern char *rev_cond_name (); \
-+{ extern const char *rev_cond_name (); \
- if (CODE == '#') fputc (ASM_DOUBLE_CHAR, FILE); \
- else if (CODE == 'C') \
- fputs (rev_cond_name (X), FILE); \
-@@ -1295,7 +1260,7 @@
- else if (CODE == 'M' && GET_CODE (X) == CONST_INT) \
- fprintf (FILE, "$%d", ~((1 << INTVAL (x)) - 1)); \
- else if (GET_CODE (X) == REG) \
-- fprintf (FILE, "%s", reg_names[REGNO (X)]); \
-+ fprintf (FILE, "%s%s", REGISTER_PREFIX, reg_names[REGNO (X)]); \
- else if (GET_CODE (X) == MEM) \
- output_address (XEXP (X, 0)); \
- else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == SFmode) \
diff --git a/lang/gcc/patches/patch-bd b/lang/gcc/patches/patch-bd
deleted file mode 100644
index 6cbc216ee17..00000000000
--- a/lang/gcc/patches/patch-bd
+++ /dev/null
@@ -1,1214 +0,0 @@
-$NetBSD: patch-bd,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/vax/vax.md.orig 2000/07/26 00:18:55 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/vax/vax.md 2002/03/28 06:51:36 1.16
-@@ -135,20 +135,20 @@
- ;; patterns need to be recognized.
- ;; -- Ken Raeburn (Raeburn@Watch.COM) 24 August 1991.
-
--(define_insn "sltu"
-- [(set (match_operand:SI 0 "general_operand" "=ro")
-- (ltu (cc0) (const_int 0)))]
-- ""
-- "clrl %0\;adwc $0,%0")
-+;;(define_insn "sltu"
-+;; [(set (match_operand:SI 0 "nonimmediate_operand" "=ro")
-+;; (ltu (cc0) (const_int 0)))]
-+;; ""
-+;; "clrl %0\;adwc $0,%0")
-
--(define_insn "sgeu"
-- [(set (match_operand:SI 0 "general_operand" "=ro")
-- (geu (cc0) (const_int 0)))]
-- ""
-- "movl $1,%0\;sbwc $0,%0")
-+;;(define_insn "sgeu"
-+;; [(set (match_operand:SI 0 "nonimmediate_operand" "=ro")
-+;; (geu (cc0) (const_int 0)))]
-+;; ""
-+;; "movl $1,%0\;sbwc $0,%0")
-
- (define_insn "movdf"
-- [(set (match_operand:DF 0 "general_operand" "=g,g")
-+ [(set (match_operand:DF 0 "nonimmediate_operand" "=g,g")
- (match_operand:DF 1 "general_operand" "G,gF"))]
- ""
- "@
-@@ -156,7 +156,7 @@
- mov%# %1,%0")
-
- (define_insn "movsf"
-- [(set (match_operand:SF 0 "general_operand" "=g,g")
-+ [(set (match_operand:SF 0 "nonimmediate_operand" "=g,g")
- (match_operand:SF 1 "general_operand" "G,gF"))]
- ""
- "@
-@@ -171,7 +171,7 @@
- ;; "movh %1,%0")
-
- (define_insn "movdi"
-- [(set (match_operand:DI 0 "general_operand" "=g,g")
-+ [(set (match_operand:DI 0 "nonimmediate_operand" "=g,g")
- (match_operand:DI 1 "general_operand" "I,g"))]
- ""
- "@
-@@ -194,9 +194,33 @@
-
- ;; Loads of constants between 64 and 128 used to be done with
- ;; "addl3 $63,#,dst" but this is slower than movzbl and takes as much space.
-+
-+(define_expand "movsi"
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "")
-+ (match_operand:SI 1 "general_operand" ""))]
-+ ""
-+ "
-+{
-+ if (GET_CODE (operands[1]) == CONST &&
-+ GET_CODE (XEXP (operands[1], 0)) == PLUS &&
-+ GET_CODE (XEXP (XEXP (operands[1], 0), 0)) == SYMBOL_REF &&
-+#ifdef NO_EXTERNAL_INDIRECT_ADDRESS
-+ (!flag_pic || !SYMBOL_REF_FLAG (XEXP (XEXP (operands[1], 0), 0))) &&
-+#endif
-+ GET_CODE (XEXP (XEXP (operands[1], 0), 1)) == CONST_INT)
-+ {
-+ rtx symbol_ref = XEXP (XEXP (operands[1], 0), 0);
-+ rtx const_int = XEXP (XEXP (operands[1], 0), 1);
-+ rtx temp = gen_reg_rtx (Pmode);
-+ emit_move_insn (temp, symbol_ref);
-+ emit_move_insn (operands[0],
-+ plus_constant_for_output (temp, INTVAL (const_int)));
-+ DONE;
-+ }
-+}")
-
--(define_insn "movsi"
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+(define_insn "movgensi"
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (match_operand:SI 1 "general_operand" "g"))]
- ""
- "*
-@@ -212,14 +236,20 @@
- /* Make sure the reg hasn't been clobbered. */
- && ! reg_set_between_p (operands[0], XEXP (link, 0), insn))
- return \"incl %0\";
-- if (GET_CODE (operands[1]) == SYMBOL_REF || GET_CODE (operands[1]) == CONST)
-+ if (GET_CODE (operands[1]) == SYMBOL_REF
-+ || GET_CODE (operands[1]) == LABEL_REF
-+ || GET_CODE (operands[1]) == CONST)
- {
- if (push_operand (operands[0], SImode))
- return \"pushab %a1\";
- return \"movab %a1,%0\";
- }
- if (operands[1] == const0_rtx)
-- return \"clrl %0\";
-+ {
-+ if (push_operand (operands[0], SImode))
-+ return \"pushl %1\";
-+ return \"clrl %0\";
-+ }
- if (GET_CODE (operands[1]) == CONST_INT
- && (unsigned) INTVAL (operands[1]) >= 64)
- {
-@@ -241,7 +271,7 @@
- }")
-
- (define_insn "movhi"
-- [(set (match_operand:HI 0 "general_operand" "=g")
-+ [(set (match_operand:HI 0 "nonimmediate_operand" "=g")
- (match_operand:HI 1 "general_operand" "g"))]
- ""
- "*
-@@ -274,7 +304,7 @@
- }")
-
- (define_insn "movstricthi"
-- [(set (strict_low_part (match_operand:HI 0 "register_operand" "=g"))
-+ [(set (strict_low_part (match_operand:HI 0 "register_operand" "+g"))
- (match_operand:HI 1 "general_operand" "g"))]
- ""
- "*
-@@ -295,7 +325,7 @@
- }")
-
- (define_insn "movqi"
-- [(set (match_operand:QI 0 "general_operand" "=g")
-+ [(set (match_operand:QI 0 "nonimmediate_operand" "=g")
- (match_operand:QI 1 "general_operand" "g"))]
- ""
- "*
-@@ -324,7 +354,7 @@
- }")
-
- (define_insn "movstrictqi"
-- [(set (strict_low_part (match_operand:QI 0 "register_operand" "=g"))
-+ [(set (strict_low_part (match_operand:QI 0 "register_operand" "+g"))
- (match_operand:QI 1 "general_operand" "g"))]
- ""
- "*
-@@ -358,8 +388,8 @@
- ;; that anything generated as this insn will be recognized as one
- ;; and that it won't successfully combine with anything.
- (define_insn "movstrhi1"
-- [(set (match_operand:BLK 0 "general_operand" "=g")
-- (match_operand:BLK 1 "general_operand" "g"))
-+ [(set (match_operand:BLK 0 "memory_operand" "=m")
-+ (match_operand:BLK 1 "memory_operand" "m"))
- (use (match_operand:HI 2 "general_operand" "g"))
- (clobber (reg:SI 0))
- (clobber (reg:SI 1))
-@@ -373,67 +403,67 @@
- ;; Extension and truncation insns.
-
- (define_insn "truncsiqi2"
-- [(set (match_operand:QI 0 "general_operand" "=g")
-+ [(set (match_operand:QI 0 "nonimmediate_operand" "=g")
- (truncate:QI (match_operand:SI 1 "nonimmediate_operand" "g")))]
- ""
- "cvtlb %1,%0")
-
- (define_insn "truncsihi2"
-- [(set (match_operand:HI 0 "general_operand" "=g")
-+ [(set (match_operand:HI 0 "nonimmediate_operand" "=g")
- (truncate:HI (match_operand:SI 1 "nonimmediate_operand" "g")))]
- ""
- "cvtlw %1,%0")
-
- (define_insn "trunchiqi2"
-- [(set (match_operand:QI 0 "general_operand" "=g")
-+ [(set (match_operand:QI 0 "nonimmediate_operand" "=g")
- (truncate:QI (match_operand:HI 1 "nonimmediate_operand" "g")))]
- ""
- "cvtwb %1,%0")
-
- (define_insn "extendhisi2"
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "g")))]
- ""
- "cvtwl %1,%0")
-
- (define_insn "extendqihi2"
-- [(set (match_operand:HI 0 "general_operand" "=g")
-+ [(set (match_operand:HI 0 "nonimmediate_operand" "=g")
- (sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "g")))]
- ""
- "cvtbw %1,%0")
-
- (define_insn "extendqisi2"
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (sign_extend:SI (match_operand:QI 1 "nonimmediate_operand" "g")))]
- ""
- "cvtbl %1,%0")
-
- (define_insn "extendsfdf2"
-- [(set (match_operand:DF 0 "general_operand" "=g")
-+ [(set (match_operand:DF 0 "nonimmediate_operand" "=g")
- (float_extend:DF (match_operand:SF 1 "general_operand" "gF")))]
- ""
- "cvtf%# %1,%0")
-
- (define_insn "truncdfsf2"
-- [(set (match_operand:SF 0 "general_operand" "=g")
-+ [(set (match_operand:SF 0 "nonimmediate_operand" "=g")
- (float_truncate:SF (match_operand:DF 1 "general_operand" "gF")))]
- ""
- "cvt%#f %1,%0")
-
- (define_insn "zero_extendhisi2"
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "g")))]
- ""
- "movzwl %1,%0")
-
- (define_insn "zero_extendqihi2"
-- [(set (match_operand:HI 0 "general_operand" "=g")
-+ [(set (match_operand:HI 0 "nonimmediate_operand" "=g")
- (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "g")))]
- ""
- "movzbw %1,%0")
-
- (define_insn "zero_extendqisi2"
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "g")))]
- ""
- "movzbl %1,%0")
-@@ -441,37 +471,37 @@
- ;; Fix-to-float conversion insns.
-
- (define_insn "floatsisf2"
-- [(set (match_operand:SF 0 "general_operand" "=g")
-+ [(set (match_operand:SF 0 "nonimmediate_operand" "=g")
- (float:SF (match_operand:SI 1 "nonimmediate_operand" "g")))]
- ""
- "cvtlf %1,%0")
-
- (define_insn "floatsidf2"
-- [(set (match_operand:DF 0 "general_operand" "=g")
-+ [(set (match_operand:DF 0 "nonimmediate_operand" "=g")
- (float:DF (match_operand:SI 1 "nonimmediate_operand" "g")))]
- ""
- "cvtl%# %1,%0")
-
- (define_insn "floathisf2"
-- [(set (match_operand:SF 0 "general_operand" "=g")
-+ [(set (match_operand:SF 0 "nonimmediate_operand" "=g")
- (float:SF (match_operand:HI 1 "nonimmediate_operand" "g")))]
- ""
- "cvtwf %1,%0")
-
- (define_insn "floathidf2"
-- [(set (match_operand:DF 0 "general_operand" "=g")
-+ [(set (match_operand:DF 0 "nonimmediate_operand" "=g")
- (float:DF (match_operand:HI 1 "nonimmediate_operand" "g")))]
- ""
- "cvtw%# %1,%0")
-
- (define_insn "floatqisf2"
-- [(set (match_operand:SF 0 "general_operand" "=g")
-+ [(set (match_operand:SF 0 "nonimmediate_operand" "=g")
- (float:SF (match_operand:QI 1 "nonimmediate_operand" "g")))]
- ""
- "cvtbf %1,%0")
-
- (define_insn "floatqidf2"
-- [(set (match_operand:DF 0 "general_operand" "=g")
-+ [(set (match_operand:DF 0 "nonimmediate_operand" "=g")
- (float:DF (match_operand:QI 1 "nonimmediate_operand" "g")))]
- ""
- "cvtb%# %1,%0")
-@@ -479,37 +509,37 @@
- ;; Float-to-fix conversion insns.
-
- (define_insn "fix_truncsfqi2"
-- [(set (match_operand:QI 0 "general_operand" "=g")
-+ [(set (match_operand:QI 0 "nonimmediate_operand" "=g")
- (fix:QI (fix:SF (match_operand:SF 1 "general_operand" "gF"))))]
- ""
- "cvtfb %1,%0")
-
- (define_insn "fix_truncsfhi2"
-- [(set (match_operand:HI 0 "general_operand" "=g")
-+ [(set (match_operand:HI 0 "nonimmediate_operand" "=g")
- (fix:HI (fix:SF (match_operand:SF 1 "general_operand" "gF"))))]
- ""
- "cvtfw %1,%0")
-
- (define_insn "fix_truncsfsi2"
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (fix:SI (fix:SF (match_operand:SF 1 "general_operand" "gF"))))]
- ""
- "cvtfl %1,%0")
-
- (define_insn "fix_truncdfqi2"
-- [(set (match_operand:QI 0 "general_operand" "=g")
-+ [(set (match_operand:QI 0 "nonimmediate_operand" "=g")
- (fix:QI (fix:DF (match_operand:DF 1 "general_operand" "gF"))))]
- ""
- "cvt%#b %1,%0")
-
- (define_insn "fix_truncdfhi2"
-- [(set (match_operand:HI 0 "general_operand" "=g")
-+ [(set (match_operand:HI 0 "nonimmediate_operand" "=g")
- (fix:HI (fix:DF (match_operand:DF 1 "general_operand" "gF"))))]
- ""
- "cvt%#w %1,%0")
-
- (define_insn "fix_truncdfsi2"
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (fix:SI (fix:DF (match_operand:DF 1 "general_operand" "gF"))))]
- ""
- "cvt%#l %1,%0")
-@@ -517,7 +547,7 @@
- ;;- All kinds of add instructions.
-
- (define_insn "adddf3"
-- [(set (match_operand:DF 0 "general_operand" "=g,g,g")
-+ [(set (match_operand:DF 0 "nonimmediate_operand" "=g,g,g")
- (plus:DF (match_operand:DF 1 "general_operand" "0,gF,gF")
- (match_operand:DF 2 "general_operand" "gF,0,gF")))]
- ""
-@@ -527,7 +557,7 @@
- add%#3 %1,%2,%0")
-
- (define_insn "addsf3"
-- [(set (match_operand:SF 0 "general_operand" "=g,g,g")
-+ [(set (match_operand:SF 0 "nonimmediate_operand" "=g,g,g")
- (plus:SF (match_operand:SF 1 "general_operand" "0,gF,gF")
- (match_operand:SF 2 "general_operand" "gF,0,gF")))]
- ""
-@@ -550,7 +580,7 @@
-
-
- (define_insn "addsi3"
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (plus:SI (match_operand:SI 1 "general_operand" "g")
- (match_operand:SI 2 "general_operand" "g")))]
- ""
-@@ -602,7 +632,7 @@
- }")
-
- (define_insn "addhi3"
-- [(set (match_operand:HI 0 "general_operand" "=g")
-+ [(set (match_operand:HI 0 "nonimmediate_operand" "=g")
- (plus:HI (match_operand:HI 1 "general_operand" "g")
- (match_operand:HI 2 "general_operand" "g")))]
- ""
-@@ -628,7 +658,7 @@
- }")
-
- (define_insn "addqi3"
-- [(set (match_operand:QI 0 "general_operand" "=g")
-+ [(set (match_operand:QI 0 "nonimmediate_operand" "=g")
- (plus:QI (match_operand:QI 1 "general_operand" "g")
- (match_operand:QI 2 "general_operand" "g")))]
- ""
-@@ -655,14 +685,14 @@
-
- ;; The add-with-carry (adwc) instruction only accepts two operands.
- (define_insn "adddi3"
-- [(set (match_operand:DI 0 "general_operand" "=ro>,ro>")
-+ [(set (match_operand:DI 0 "nonimmediate_operand" "=ro>,ro>")
- (plus:DI (match_operand:DI 1 "general_operand" "%0,ro>")
- (match_operand:DI 2 "general_operand" "Fro,F")))]
- ""
- "*
- {
- rtx low[3];
-- char *pattern;
-+ const char *pattern;
- int carry = 1;
-
- split_quadword_operands (operands, low, 3);
-@@ -700,7 +730,7 @@
- ;;- All kinds of subtract instructions.
-
- (define_insn "subdf3"
-- [(set (match_operand:DF 0 "general_operand" "=g,g")
-+ [(set (match_operand:DF 0 "nonimmediate_operand" "=g,g")
- (minus:DF (match_operand:DF 1 "general_operand" "0,gF")
- (match_operand:DF 2 "general_operand" "gF,gF")))]
- ""
-@@ -709,7 +739,7 @@
- sub%#3 %2,%1,%0")
-
- (define_insn "subsf3"
-- [(set (match_operand:SF 0 "general_operand" "=g,g")
-+ [(set (match_operand:SF 0 "nonimmediate_operand" "=g,g")
- (minus:SF (match_operand:SF 1 "general_operand" "0,gF")
- (match_operand:SF 2 "general_operand" "gF,gF")))]
- ""
-@@ -718,7 +748,7 @@
- subf3 %2,%1,%0")
-
- (define_insn "subsi3"
-- [(set (match_operand:SI 0 "general_operand" "=g,g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g,g")
- (minus:SI (match_operand:SI 1 "general_operand" "0,g")
- (match_operand:SI 2 "general_operand" "g,g")))]
- ""
-@@ -727,7 +757,7 @@
- subl3 %2,%1,%0")
-
- (define_insn "subhi3"
-- [(set (match_operand:HI 0 "general_operand" "=g,g")
-+ [(set (match_operand:HI 0 "nonimmediate_operand" "=g,g")
- (minus:HI (match_operand:HI 1 "general_operand" "0,g")
- (match_operand:HI 2 "general_operand" "g,g")))]
- ""
-@@ -736,7 +766,7 @@
- subw3 %2,%1,%0")
-
- (define_insn "subqi3"
-- [(set (match_operand:QI 0 "general_operand" "=g,g")
-+ [(set (match_operand:QI 0 "nonimmediate_operand" "=g,g")
- (minus:QI (match_operand:QI 1 "general_operand" "0,g")
- (match_operand:QI 2 "general_operand" "g,g")))]
- ""
-@@ -746,14 +776,14 @@
-
- ;; The subtract-with-carry (sbwc) instruction only takes two operands.
- (define_insn "subdi3"
-- [(set (match_operand:DI 0 "general_operand" "=or>,or>")
-+ [(set (match_operand:DI 0 "nonimmediate_operand" "=or>,or>")
- (minus:DI (match_operand:DI 1 "general_operand" "0,or>")
- (match_operand:DI 2 "general_operand" "For,F")))]
- ""
- "*
- {
- rtx low[3];
-- char *pattern;
-+ const char *pattern;
- int carry = 1;
-
- split_quadword_operands (operands, low, 3);
-@@ -791,7 +821,7 @@
- ;;- Multiply instructions.
-
- (define_insn "muldf3"
-- [(set (match_operand:DF 0 "general_operand" "=g,g,g")
-+ [(set (match_operand:DF 0 "nonimmediate_operand" "=g,g,g")
- (mult:DF (match_operand:DF 1 "general_operand" "0,gF,gF")
- (match_operand:DF 2 "general_operand" "gF,0,gF")))]
- ""
-@@ -801,7 +831,7 @@
- mul%#3 %1,%2,%0")
-
- (define_insn "mulsf3"
-- [(set (match_operand:SF 0 "general_operand" "=g,g,g")
-+ [(set (match_operand:SF 0 "nonimmediate_operand" "=g,g,g")
- (mult:SF (match_operand:SF 1 "general_operand" "0,gF,gF")
- (match_operand:SF 2 "general_operand" "gF,0,gF")))]
- ""
-@@ -811,7 +841,7 @@
- mulf3 %1,%2,%0")
-
- (define_insn "mulsi3"
-- [(set (match_operand:SI 0 "general_operand" "=g,g,g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g,g,g")
- (mult:SI (match_operand:SI 1 "general_operand" "0,g,g")
- (match_operand:SI 2 "general_operand" "g,0,g")))]
- ""
-@@ -821,7 +851,7 @@
- mull3 %1,%2,%0")
-
- (define_insn "mulhi3"
-- [(set (match_operand:HI 0 "general_operand" "=g,g,")
-+ [(set (match_operand:HI 0 "nonimmediate_operand" "=g,g,")
- (mult:HI (match_operand:HI 1 "general_operand" "0,g,g")
- (match_operand:HI 2 "general_operand" "g,0,g")))]
- ""
-@@ -831,7 +861,7 @@
- mulw3 %1,%2,%0")
-
- (define_insn "mulqi3"
-- [(set (match_operand:QI 0 "general_operand" "=g,g,g")
-+ [(set (match_operand:QI 0 "nonimmediate_operand" "=g,g,g")
- (mult:QI (match_operand:QI 1 "general_operand" "0,g,g")
- (match_operand:QI 2 "general_operand" "g,0,g")))]
- ""
-@@ -841,7 +871,7 @@
- mulb3 %1,%2,%0")
-
- (define_insn "mulsidi3"
-- [(set (match_operand:DI 0 "general_operand" "=g")
-+ [(set (match_operand:DI 0 "nonimmediate_operand" "=g")
- (mult:DI (sign_extend:DI
- (match_operand:SI 1 "nonimmediate_operand" "g"))
- (sign_extend:DI
-@@ -850,7 +880,7 @@
- "emul %1,%2,$0,%0")
-
- (define_insn ""
-- [(set (match_operand:DI 0 "general_operand" "=g")
-+ [(set (match_operand:DI 0 "nonimmediate_operand" "=g")
- (plus:DI
- (mult:DI (sign_extend:DI
- (match_operand:SI 1 "nonimmediate_operand" "g"))
-@@ -862,7 +892,7 @@
-
- ;; 'F' constraint means type CONST_DOUBLE
- (define_insn ""
-- [(set (match_operand:DI 0 "general_operand" "=g")
-+ [(set (match_operand:DI 0 "nonimmediate_operand" "=g")
- (plus:DI
- (mult:DI (sign_extend:DI
- (match_operand:SI 1 "nonimmediate_operand" "g"))
-@@ -881,7 +911,7 @@
- ;;- Divide instructions.
-
- (define_insn "divdf3"
-- [(set (match_operand:DF 0 "general_operand" "=g,g")
-+ [(set (match_operand:DF 0 "nonimmediate_operand" "=g,g")
- (div:DF (match_operand:DF 1 "general_operand" "0,gF")
- (match_operand:DF 2 "general_operand" "gF,gF")))]
- ""
-@@ -890,7 +920,7 @@
- div%#3 %2,%1,%0")
-
- (define_insn "divsf3"
-- [(set (match_operand:SF 0 "general_operand" "=g,g")
-+ [(set (match_operand:SF 0 "nonimmediate_operand" "=g,g")
- (div:SF (match_operand:SF 1 "general_operand" "0,gF")
- (match_operand:SF 2 "general_operand" "gF,gF")))]
- ""
-@@ -899,7 +929,7 @@
- divf3 %2,%1,%0")
-
- (define_insn "divsi3"
-- [(set (match_operand:SI 0 "general_operand" "=g,g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g,g")
- (div:SI (match_operand:SI 1 "general_operand" "0,g")
- (match_operand:SI 2 "general_operand" "g,g")))]
- ""
-@@ -908,7 +938,7 @@
- divl3 %2,%1,%0")
-
- (define_insn "divhi3"
-- [(set (match_operand:HI 0 "general_operand" "=g,g")
-+ [(set (match_operand:HI 0 "nonimmediate_operand" "=g,g")
- (div:HI (match_operand:HI 1 "general_operand" "0,g")
- (match_operand:HI 2 "general_operand" "g,g")))]
- ""
-@@ -917,7 +947,7 @@
- divw3 %2,%1,%0")
-
- (define_insn "divqi3"
-- [(set (match_operand:QI 0 "general_operand" "=g,g")
-+ [(set (match_operand:QI 0 "nonimmediate_operand" "=g,g")
- (div:QI (match_operand:QI 1 "general_operand" "0,g")
- (match_operand:QI 2 "general_operand" "g,g")))]
- ""
-@@ -939,7 +969,7 @@
-
- ;; Bit-and on the vax is done with a clear-bits insn.
- (define_expand "andsi3"
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (and:SI (not:SI (match_operand:SI 1 "general_operand" "g"))
- (match_operand:SI 2 "general_operand" "g")))]
- ""
-@@ -962,7 +992,7 @@
- }")
-
- (define_expand "andhi3"
-- [(set (match_operand:HI 0 "general_operand" "=g")
-+ [(set (match_operand:HI 0 "nonimmediate_operand" "=g")
- (and:HI (not:HI (match_operand:HI 1 "general_operand" "g"))
- (match_operand:HI 2 "general_operand" "g")))]
- ""
-@@ -984,7 +1014,7 @@
- }")
-
- (define_expand "andqi3"
-- [(set (match_operand:QI 0 "general_operand" "=g")
-+ [(set (match_operand:QI 0 "nonimmediate_operand" "=g")
- (and:QI (not:QI (match_operand:QI 1 "general_operand" "g"))
- (match_operand:QI 2 "general_operand" "g")))]
- ""
-@@ -1006,7 +1036,7 @@
- }")
-
- (define_insn ""
-- [(set (match_operand:SI 0 "general_operand" "=g,g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g,g")
- (and:SI (not:SI (match_operand:SI 1 "general_operand" "g,g"))
- (match_operand:SI 2 "general_operand" "0,g")))]
- ""
-@@ -1015,7 +1045,7 @@
- bicl3 %1,%2,%0")
-
- (define_insn ""
-- [(set (match_operand:HI 0 "general_operand" "=g,g")
-+ [(set (match_operand:HI 0 "nonimmediate_operand" "=g,g")
- (and:HI (not:HI (match_operand:HI 1 "general_operand" "g,g"))
- (match_operand:HI 2 "general_operand" "0,g")))]
- ""
-@@ -1024,7 +1054,7 @@
- bicw3 %1,%2,%0")
-
- (define_insn ""
-- [(set (match_operand:QI 0 "general_operand" "=g,g")
-+ [(set (match_operand:QI 0 "nonimmediate_operand" "=g,g")
- (and:QI (not:QI (match_operand:QI 1 "general_operand" "g,g"))
- (match_operand:QI 2 "general_operand" "0,g")))]
- ""
-@@ -1038,7 +1068,7 @@
- ;; opportunities in combine.c.
-
- (define_insn ""
-- [(set (match_operand:SI 0 "general_operand" "=g,g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g,g")
- (and:SI (match_operand:SI 1 "general_operand" "0,g")
- (match_operand:SI 2 "const_int_operand" "n,n")))]
- ""
-@@ -1047,7 +1077,7 @@
- bicl3 %N2,%1,%0")
-
- (define_insn ""
-- [(set (match_operand:HI 0 "general_operand" "=g,g")
-+ [(set (match_operand:HI 0 "nonimmediate_operand" "=g,g")
- (and:HI (match_operand:HI 1 "general_operand" "0,g")
- (match_operand:HI 2 "const_int_operand" "n,n")))]
- ""
-@@ -1056,7 +1086,7 @@
- bicw3 %H2,%1,%0")
-
- (define_insn ""
-- [(set (match_operand:QI 0 "general_operand" "=g,g")
-+ [(set (match_operand:QI 0 "nonimmediate_operand" "=g,g")
- (and:QI (match_operand:QI 1 "general_operand" "0,g")
- (match_operand:QI 2 "const_int_operand" "n,n")))]
- ""
-@@ -1067,7 +1097,7 @@
- ;;- Bit set instructions.
-
- (define_insn "iorsi3"
-- [(set (match_operand:SI 0 "general_operand" "=g,g,g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g,g,g")
- (ior:SI (match_operand:SI 1 "general_operand" "0,g,g")
- (match_operand:SI 2 "general_operand" "g,0,g")))]
- ""
-@@ -1077,7 +1107,7 @@
- bisl3 %2,%1,%0")
-
- (define_insn "iorhi3"
-- [(set (match_operand:HI 0 "general_operand" "=g,g,g")
-+ [(set (match_operand:HI 0 "nonimmediate_operand" "=g,g,g")
- (ior:HI (match_operand:HI 1 "general_operand" "0,g,g")
- (match_operand:HI 2 "general_operand" "g,0,g")))]
- ""
-@@ -1087,7 +1117,7 @@
- bisw3 %2,%1,%0")
-
- (define_insn "iorqi3"
-- [(set (match_operand:QI 0 "general_operand" "=g,g,g")
-+ [(set (match_operand:QI 0 "nonimmediate_operand" "=g,g,g")
- (ior:QI (match_operand:QI 1 "general_operand" "0,g,g")
- (match_operand:QI 2 "general_operand" "g,0,g")))]
- ""
-@@ -1099,7 +1129,7 @@
- ;;- xor instructions.
-
- (define_insn "xorsi3"
-- [(set (match_operand:SI 0 "general_operand" "=g,g,g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g,g,g")
- (xor:SI (match_operand:SI 1 "general_operand" "0,g,g")
- (match_operand:SI 2 "general_operand" "g,0,g")))]
- ""
-@@ -1109,7 +1139,7 @@
- xorl3 %2,%1,%0")
-
- (define_insn "xorhi3"
-- [(set (match_operand:HI 0 "general_operand" "=g,g,g")
-+ [(set (match_operand:HI 0 "nonimmediate_operand" "=g,g,g")
- (xor:HI (match_operand:HI 1 "general_operand" "0,g,g")
- (match_operand:HI 2 "general_operand" "g,0,g")))]
- ""
-@@ -1119,7 +1149,7 @@
- xorw3 %2,%1,%0")
-
- (define_insn "xorqi3"
-- [(set (match_operand:QI 0 "general_operand" "=g,g,g")
-+ [(set (match_operand:QI 0 "nonimmediate_operand" "=g,g,g")
- (xor:QI (match_operand:QI 1 "general_operand" "0,g,g")
- (match_operand:QI 2 "general_operand" "g,0,g")))]
- ""
-@@ -1129,49 +1159,49 @@
- xorb3 %2,%1,%0")
-
- (define_insn "negdf2"
-- [(set (match_operand:DF 0 "general_operand" "=g")
-+ [(set (match_operand:DF 0 "nonimmediate_operand" "=g")
- (neg:DF (match_operand:DF 1 "general_operand" "gF")))]
- ""
- "mneg%# %1,%0")
-
- (define_insn "negsf2"
-- [(set (match_operand:SF 0 "general_operand" "=g")
-+ [(set (match_operand:SF 0 "nonimmediate_operand" "=g")
- (neg:SF (match_operand:SF 1 "general_operand" "gF")))]
- ""
- "mnegf %1,%0")
-
- (define_insn "negsi2"
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (neg:SI (match_operand:SI 1 "general_operand" "g")))]
- ""
- "mnegl %1,%0")
-
- (define_insn "neghi2"
-- [(set (match_operand:HI 0 "general_operand" "=g")
-+ [(set (match_operand:HI 0 "nonimmediate_operand" "=g")
- (neg:HI (match_operand:HI 1 "general_operand" "g")))]
- ""
- "mnegw %1,%0")
-
- (define_insn "negqi2"
-- [(set (match_operand:QI 0 "general_operand" "=g")
-+ [(set (match_operand:QI 0 "nonimmediate_operand" "=g")
- (neg:QI (match_operand:QI 1 "general_operand" "g")))]
- ""
- "mnegb %1,%0")
-
- (define_insn "one_cmplsi2"
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (not:SI (match_operand:SI 1 "general_operand" "g")))]
- ""
- "mcoml %1,%0")
-
- (define_insn "one_cmplhi2"
-- [(set (match_operand:HI 0 "general_operand" "=g")
-+ [(set (match_operand:HI 0 "nonimmediate_operand" "=g")
- (not:HI (match_operand:HI 1 "general_operand" "g")))]
- ""
- "mcomw %1,%0")
-
- (define_insn "one_cmplqi2"
-- [(set (match_operand:QI 0 "general_operand" "=g")
-+ [(set (match_operand:QI 0 "nonimmediate_operand" "=g")
- (not:QI (match_operand:QI 1 "general_operand" "g")))]
- ""
- "mcomb %1,%0")
-@@ -1182,32 +1212,32 @@
- ;; prevents converting shifts to ZERO_EXTRACTs with negative positions,
- ;; which isn't valid.
- (define_expand "ashrsi3"
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (ashiftrt:SI (match_operand:SI 1 "general_operand" "g")
- (match_operand:QI 2 "general_operand" "g")))]
- ""
- "
- {
- if (GET_CODE (operands[2]) != CONST_INT)
-- operands[2] = gen_rtx (NEG, QImode, negate_rtx (QImode, operands[2]));
-+ operands[2] = gen_rtx_NEG (QImode, negate_rtx (QImode, operands[2]));
- }")
-
- (define_insn ""
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (ashiftrt:SI (match_operand:SI 1 "general_operand" "g")
- (match_operand:QI 2 "const_int_operand" "n")))]
- ""
- "ashl $%n2,%1,%0")
-
- (define_insn ""
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (ashiftrt:SI (match_operand:SI 1 "general_operand" "g")
- (neg:QI (match_operand:QI 2 "general_operand" "g"))))]
- ""
- "ashl %2,%1,%0")
-
- (define_insn "ashlsi3"
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (ashift:SI (match_operand:SI 1 "general_operand" "g")
- (match_operand:QI 2 "general_operand" "g")))]
- ""
-@@ -1231,24 +1261,24 @@
-
- ;; Arithmetic right shift on the vax works by negating the shift count.
- (define_expand "ashrdi3"
-- [(set (match_operand:DI 0 "general_operand" "=g")
-+ [(set (match_operand:DI 0 "nonimmediate_operand" "=g")
- (ashiftrt:DI (match_operand:DI 1 "general_operand" "g")
- (match_operand:QI 2 "general_operand" "g")))]
- ""
- "
- {
-- operands[2] = gen_rtx (NEG, QImode, negate_rtx (QImode, operands[2]));
-+ operands[2] = gen_rtx_NEG (QImode, negate_rtx (QImode, operands[2]));
- }")
-
- (define_insn "ashldi3"
-- [(set (match_operand:DI 0 "general_operand" "=g")
-+ [(set (match_operand:DI 0 "nonimmediate_operand" "=g")
- (ashift:DI (match_operand:DI 1 "general_operand" "g")
- (match_operand:QI 2 "general_operand" "g")))]
- ""
- "ashq %2,%1,%0")
-
- (define_insn ""
-- [(set (match_operand:DI 0 "general_operand" "=g")
-+ [(set (match_operand:DI 0 "nonimmediate_operand" "=g")
- (ashiftrt:DI (match_operand:DI 1 "general_operand" "g")
- (neg:QI (match_operand:QI 2 "general_operand" "g"))))]
- ""
-@@ -1263,7 +1293,7 @@
- [(set (match_dup 3)
- (minus:QI (const_int 32)
- (match_dup 4)))
-- (set (match_operand:SI 0 "general_operand" "=g")
-+ (set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (zero_extract:SI (match_operand:SI 1 "register_operand" "r")
- (match_dup 3)
- (match_operand:SI 2 "register_operand" "g")))]
-@@ -1276,32 +1306,32 @@
-
- ;; Rotate right on the vax works by negating the shift count.
- (define_expand "rotrsi3"
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (rotatert:SI (match_operand:SI 1 "general_operand" "g")
- (match_operand:QI 2 "general_operand" "g")))]
- ""
- "
- {
- if (GET_CODE (operands[2]) != CONST_INT)
-- operands[2] = gen_rtx (NEG, QImode, negate_rtx (QImode, operands[2]));
-+ operands[2] = gen_rtx_NEG (QImode, negate_rtx (QImode, operands[2]));
- }")
-
- (define_insn "rotlsi3"
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (rotate:SI (match_operand:SI 1 "general_operand" "g")
- (match_operand:QI 2 "general_operand" "g")))]
- ""
- "rotl %2,%1,%0")
-
- (define_insn ""
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (rotatert:SI (match_operand:SI 1 "general_operand" "g")
- (match_operand:QI 2 "const_int_operand" "n")))]
- ""
- "rotl %R2,%1,%0")
-
- (define_insn ""
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (rotatert:SI (match_operand:SI 1 "general_operand" "g")
- (neg:QI (match_operand:QI 2 "general_operand" "g"))))]
- ""
-@@ -1309,7 +1339,7 @@
-
- ;This insn is probably slower than a multiply and an add.
- ;(define_insn ""
--; [(set (match_operand:SI 0 "general_operand" "=g")
-+; [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- ; (mult:SI (plus:SI (match_operand:SI 1 "general_operand" "g")
- ; (match_operand:SI 2 "general_operand" "g"))
- ; (match_operand:SI 3 "general_operand" "g")))]
-@@ -1348,7 +1378,7 @@
- }")
-
- (define_insn ""
-- [(set (match_operand:SI 0 "general_operand" "=&g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=&g")
- (zero_extract:SI (match_operand:SI 1 "register_operand" "ro")
- (match_operand:QI 2 "const_int_operand" "n")
- (match_operand:SI 3 "const_int_operand" "n")))]
-@@ -1373,7 +1403,7 @@
- }")
-
- (define_insn ""
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (sign_extract:SI (match_operand:SI 1 "register_operand" "ro")
- (match_operand:QI 2 "const_int_operand" "n")
- (match_operand:SI 3 "const_int_operand" "n")))]
-@@ -1425,7 +1455,7 @@
- ;; anyway, we can't allow immediate values for the primary source operand.
-
- (define_insn ""
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (sign_extract:SI (match_operand:SI 1 "register_operand" "ro")
- (match_operand:QI 2 "general_operand" "g")
- (match_operand:SI 3 "general_operand" "g")))]
-@@ -1442,7 +1472,7 @@
- }")
-
- (define_insn ""
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (zero_extract:SI (match_operand:SI 1 "register_operand" "ro")
- (match_operand:QI 2 "general_operand" "g")
- (match_operand:SI 3 "general_operand" "g")))]
-@@ -1488,7 +1518,7 @@
- "cmpzv %2,%1,%0,%3")
-
- (define_insn "extv"
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (sign_extract:SI (match_operand:QI 1 "memory_operand" "m")
- (match_operand:QI 2 "general_operand" "g")
- (match_operand:SI 3 "general_operand" "g")))]
-@@ -1517,7 +1547,7 @@
- "")
-
- (define_insn ""
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (zero_extract:SI (match_operand:QI 1 "memory_operand" "m")
- (match_operand:QI 2 "general_operand" "g")
- (match_operand:SI 3 "general_operand" "g")))]
-@@ -1602,7 +1632,9 @@
- (label_ref (match_operand 0 "" ""))
- (pc)))]
- ""
-- "jgtru %l0")
-+ "*
-+ OUTPUT_JUMP(\"jgtru %l0\", 0, \"jneq %l0\");
-+ ")
-
- (define_insn "blt"
- [(set (pc)
-@@ -1620,7 +1652,9 @@
- (label_ref (match_operand 0 "" ""))
- (pc)))]
- ""
-- "jlssu %l0")
-+ "*
-+ OUTPUT_JUMP(\"jlssu %l0\", 0, 0);
-+ ")
-
- (define_insn "bge"
- [(set (pc)
-@@ -1638,7 +1672,9 @@
- (label_ref (match_operand 0 "" ""))
- (pc)))]
- ""
-- "jgequ %l0")
-+ "*
-+ OUTPUT_JUMP(\"jgequ %l0\", 0, 0);
-+ ")
-
- (define_insn "ble"
- [(set (pc)
-@@ -1656,10 +1692,12 @@
- (label_ref (match_operand 0 "" ""))
- (pc)))]
- ""
-- "jlequ %l0")
-+ "*
-+ OUTPUT_JUMP(\"jlequ %l0\", NULL, \"jeql %l0\");
-+ ")
-
- ;; Recognize reversed jumps.
--(define_insn ""
-+(define_insn "*rbr"
- [(set (pc)
- (if_then_else (match_operator 0 "comparison_operator"
- [(cc0)
-@@ -1667,7 +1705,19 @@
- (pc)
- (label_ref (match_operand 1 "" ""))))]
- ""
-- "j%C0 %l1") ; %C0 negates condition
-+ "*
-+ if ((cc_status.flags & CC_NO_OVERFLOW) != 0)
-+ {
-+ if (GET_CODE (operands[0]) == LTU
-+ || GET_CODE (operands[0]) == GEU)
-+ fatal (\"Cannot reverse branch\");
-+ if (GET_CODE (operands[0]) == GTU)
-+ return \"jeql %l0\";
-+ if (GET_CODE (operands[0]) == LEU)
-+ return \"jneq %l0\";
-+ }
-+ return \"j%C0 %l1\"; /* %C0 negates condition */
-+ ")
-
- ;; Recognize jbs, jlbs, jbc and jlbc instructions. Note that the operand
- ;; of jlbs and jlbc insns are SImode in the hardware. However, if it is
-@@ -1840,63 +1890,66 @@
- ;; It is used in the call instruction as a byte, but in the addl2 as
- ;; a word. Since the only time we actually use it in the call instruction
- ;; is when it is a constant, SImode (for addl2) is the proper mode.
--(define_insn "call_pop"
-+(define_expand "call_pop"
-+ [(parallel [(call (match_operand:QI 0 "memory_operand" "")
-+ (match_operand:SI 1 "const_int_operand" ""))
-+ (set (reg:SI 14)
-+ (plus:SI (reg:SI 14)
-+ (match_operand:SI 3 "immediate_operand" "")))])]
-+ ""
-+ "
-+{
-+ if (INTVAL (operands[1]) > 255 * 4)
-+ abort ();
-+ operands[1] = GEN_INT ((INTVAL (operands[1]) + 3)/ 4);
-+}")
-+
-+(define_insn "*call_pop"
- [(call (match_operand:QI 0 "memory_operand" "m")
- (match_operand:SI 1 "const_int_operand" "n"))
- (set (reg:SI 14) (plus:SI (reg:SI 14)
-- (match_operand:SI 3 "immediate_operand" "i")))]
-+ (match_operand:SI 2 "immediate_operand" "i")))]
- ""
-- "*
-- if (INTVAL (operands[1]) > 255 * 4)
-- /* Vax `calls' really uses only one byte of #args, so pop explicitly. */
-- return \"calls $0,%0\;addl2 %1,sp\";
-- operands[1] = GEN_INT ((INTVAL (operands[1]) + 3)/ 4);
-- return \"calls %1,%0\";
--")
-+ "calls %1,%0")
-
--(define_insn "call_value_pop"
-- [(set (match_operand 0 "" "=g")
-+(define_expand "call_value_pop"
-+ [(parallel [(set (match_operand 0 "" "")
-+ (call (match_operand:QI 1 "memory_operand" "")
-+ (match_operand:SI 2 "const_int_operand" "")))
-+ (set (reg:SI 14)
-+ (plus:SI (reg:SI 14)
-+ (match_operand:SI 4 "immediate_operand" "")))])]
-+ ""
-+ "
-+{
-+ if (INTVAL (operands[2]) > 255 * 4)
-+ abort ();
-+ operands[2] = GEN_INT ((INTVAL (operands[2]) + 3)/ 4);
-+}")
-+
-+(define_insn "*call_value_pop"
-+ [(set (match_operand 0 "" "")
- (call (match_operand:QI 1 "memory_operand" "m")
- (match_operand:SI 2 "const_int_operand" "n")))
- (set (reg:SI 14) (plus:SI (reg:SI 14)
-- (match_operand:SI 4 "immediate_operand" "i")))]
-+ (match_operand:SI 3 "immediate_operand" "i")))]
- ""
-- "*
-- if (INTVAL (operands[2]) > 255 * 4)
-- /* Vax `calls' really uses only one byte of #args, so pop explicitly. */
-- return \"calls $0,%1\;addl2 %2,sp\";
-- operands[2] = GEN_INT ((INTVAL (operands[2]) + 3)/ 4);
-- return \"calls %2,%1\";
--")
-+ "calls %2,%1")
-
--;; Define another set of these for the case of functions with no
--;; operands. In that case, combine may simplify the adjustment of sp.
--(define_insn ""
-+;; Define another set of these for the case of functions with no operands.
-+;; These will allow the optimizers to do a slightly better job.
-+(define_insn "call"
- [(call (match_operand:QI 0 "memory_operand" "m")
-- (match_operand:SI 1 "const_int_operand" "n"))
-- (set (reg:SI 14) (reg:SI 14))]
-+ (const_int 0))]
- ""
-- "*
-- if (INTVAL (operands[1]) > 255 * 4)
-- /* Vax `calls' really uses only one byte of #args, so pop explicitly. */
-- return \"calls $0,%0\;addl2 %1,sp\";
-- operands[1] = GEN_INT ((INTVAL (operands[1]) + 3)/ 4);
-- return \"calls %1,%0\";
--")
-+ "calls $0,%0")
-
--(define_insn ""
-- [(set (match_operand 0 "" "=g")
-+(define_insn "call_value"
-+ [(set (match_operand 0 "" "")
- (call (match_operand:QI 1 "memory_operand" "m")
-- (match_operand:SI 2 "const_int_operand" "n")))
-- (set (reg:SI 14) (reg:SI 14))]
-+ (const_int 0)))]
- ""
-- "*
-- if (INTVAL (operands[2]) > 255 * 4)
-- /* Vax `calls' really uses only one byte of #args, so pop explicitly. */
-- return \"calls $0,%1\;addl2 %2,sp\";
-- operands[2] = GEN_INT ((INTVAL (operands[2]) + 3)/ 4);
-- return \"calls %2,%1\";
--")
-+ "calls $0,%1")
-
- ;; Call subroutine returning any type.
-
-@@ -1949,7 +2002,7 @@
- ;; If you are tempted to try `g', please don't--it's not worth
- ;; the risk we will reopen the same bug.
- (define_insn "indirect_jump"
-- [(set (pc) (match_operand:SI 0 "general_operand" "r"))]
-+ [(set (pc) (match_operand:SI 0 "register_operand" "r"))]
- ""
- "jmp (%0)")
-
-@@ -2003,7 +2056,7 @@
- (mult:SI (minus:SI (match_dup 0)
- (const_int 0))
- (const_int 2)))))
-- (label_ref:SI (match_operand 3 "" "")))
-+ (label_ref:SI (match_operand 2 "" "")))
- (pc)))]
- ""
- "casel %0,$0,%1")
-@@ -2017,7 +2070,7 @@
- ;; because < matches any autodecrement, not just a push.
-
- (define_insn ""
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (match_operand:QI 1 "address_operand" "p"))]
- ""
- "*
-@@ -2029,7 +2082,7 @@
- }")
-
- (define_insn ""
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (match_operand:HI 1 "address_operand" "p"))]
- ""
- "*
-@@ -2041,7 +2094,7 @@
- }")
-
- (define_insn ""
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (match_operand:SI 1 "address_operand" "p"))]
- ""
- "*
-@@ -2053,7 +2106,7 @@
- }")
-
- (define_insn ""
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (match_operand:DI 1 "address_operand" "p"))]
- ""
- "*
-@@ -2065,7 +2118,7 @@
- }")
-
- (define_insn ""
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (match_operand:SF 1 "address_operand" "p"))]
- ""
- "*
-@@ -2077,7 +2130,7 @@
- }")
-
- (define_insn ""
-- [(set (match_operand:SI 0 "general_operand" "=g")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (match_operand:DF 1 "address_operand" "p"))]
- ""
- "*
-@@ -2102,7 +2155,7 @@
- ;; above sequences to before attempting to recognize the new insn.
-
- (define_insn ""
-- [(set (match_operand:SI 0 "general_operand" "=ro")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=ro")
- (and:SI (ashiftrt:SI (match_operand:SI 1 "general_operand" "g")
- (match_operand:QI 2 "const_int_operand" "n"))
- (match_operand:SI 3 "const_int_operand" "n")))]
-@@ -2124,13 +2177,14 @@
- ;; optimized away.
-
- (define_insn ""
-- [(set (match_operand:SI 0 "general_operand" "=ro")
-+ [(set (match_operand:SI 0 "nonimmediate_operand" "=ro")
- (and:SI (ashift:SI (match_operand:SI 1 "general_operand" "g")
- (match_operand:QI 2 "const_int_operand" "n"))
- (match_operand:SI 3 "const_int_operand" "n")))]
- ""
- "*
- {
-- operands[3] = GEN_INT (INTVAL (operands[3]) & ~((1 << INTVAL (operands[2])) - 1));
-+ operands[3]
-+ = GEN_INT (INTVAL (operands[3]) & ~((1 << INTVAL (operands[2])) - 1));
- return \"rotl %2,%1,%0\;bicl2 %N3,%0\";
- }")
diff --git a/lang/gcc/patches/patch-be b/lang/gcc/patches/patch-be
deleted file mode 100644
index ccd21a7f6fd..00000000000
--- a/lang/gcc/patches/patch-be
+++ /dev/null
@@ -1,59 +0,0 @@
-$NetBSD: patch-be,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/elfos.h.orig 2001/04/23 11:59:20 1.1.1.2
-+++ ../gcc-2.95.3/gcc/config/elfos.h 2001/05/03 18:20:47 1.4
-@@ -48,6 +48,7 @@
-
- /* Output #ident as a .ident. */
-
-+#undef ASM_OUTPUT_IDENT
- #define ASM_OUTPUT_IDENT(FILE, NAME) \
- fprintf (FILE, "\t%s\t\"%s\"\n", IDENT_ASM_OP, NAME);
-
-@@ -57,7 +58,9 @@
-
- /* Writing `int' for a bitfield forces int alignment for the structure. */
-
-+#ifndef PCC_BITFIELD_TYPE_MATTERS
- #define PCC_BITFIELD_TYPE_MATTERS 1
-+#endif
-
- /* Implicit library calls should use memcpy, not bcopy, etc. */
-
-@@ -92,6 +95,10 @@
- #undef SET_ASM_OP
- #define SET_ASM_OP ".set"
-
-+/* We want local labels to start with period if made with asm_fprintf. */
-+#undef LOCAL_LABEL_PREFIX
-+#define LOCAL_LABEL_PREFIX "."
-+
- /* This is how to begin an assembly language file. Most svr4 assemblers want
- at least a .file directive to come first, and some want to see a .version
- directive come right after that. Here we just establish a default
-@@ -130,7 +137,7 @@
- #undef ASM_OUTPUT_INTERNAL_LABEL
- #define ASM_OUTPUT_INTERNAL_LABEL(FILE, PREFIX, NUM) \
- do { \
-- fprintf (FILE, ".%s%d:\n", PREFIX, NUM); \
-+ fprintf (FILE, "%s%s%d:\n", LOCAL_LABEL_PREFIX, PREFIX, NUM); \
- } while (0)
-
- /* This is how to store into the string LABEL
-@@ -144,7 +151,7 @@
- #undef ASM_GENERATE_INTERNAL_LABEL
- #define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \
- do { \
-- sprintf (LABEL, "*.%s%d", PREFIX, NUM); \
-+ sprintf (LABEL, "*%s%s%d", LOCAL_LABEL_PREFIX, PREFIX, NUM); \
- } while (0)
-
- /* Output the label which precedes a jumptable. Note that for all svr4
-@@ -462,6 +469,7 @@
-
- /* This is how we tell the assembler that a symbol is weak. */
-
-+#undef ASM_WEAKEN_LABEL
- #define ASM_WEAKEN_LABEL(FILE,NAME) \
- do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \
- fputc ('\n', FILE); } while (0)
diff --git a/lang/gcc/patches/patch-bf b/lang/gcc/patches/patch-bf
deleted file mode 100644
index 7a06ce2dc91..00000000000
--- a/lang/gcc/patches/patch-bf
+++ /dev/null
@@ -1,230 +0,0 @@
-$NetBSD: patch-bf,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/netbsd.h.orig 2000/07/26 00:18:07 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/netbsd.h 2001/12/29 20:24:37 1.13
-@@ -9,22 +9,22 @@
- #undef GPLUSPLUS_INCLUDE_DIR
- #define GPLUSPLUS_INCLUDE_DIR "/usr/include/g++"
-
--#undef GCC_INCLUDE_DIR
--#define GCC_INCLUDE_DIR "/usr/include"
-+#undef STANDARD_INCLUDE_DIR
-+#define STANDARD_INCLUDE_DIR "/usr/include"
-
- #undef INCLUDE_DEFAULTS
- #define INCLUDE_DEFAULTS \
- { \
- { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 }, \
-- { GCC_INCLUDE_DIR, "GCC", 0, 0 }, \
-+ { STANDARD_INCLUDE_DIR, 0, 0, 0 }, \
- { 0, 0, 0, 0 } \
- }
-
- /* Under NetBSD, the normal location of the compiler back ends is the
- /usr/libexec directory. */
-
--#undef STANDARD_EXEC_PREFIX
--#define STANDARD_EXEC_PREFIX "/usr/libexec/"
-+#undef MD_EXEC_PREFIX
-+#define MD_EXEC_PREFIX "/usr/libexec/"
-
- /* Under NetBSD, the normal location of the various *crt*.o files is the
- /usr/lib directory. */
-@@ -32,14 +32,14 @@
- #undef STANDARD_STARTFILE_PREFIX
- #define STANDARD_STARTFILE_PREFIX "/usr/lib/"
-
--#endif
-+#endif /* NETBSD_NATIVE */
-
-
- /* Provide a CPP_SPEC appropriate for NetBSD. Current we just deal with
- the GCC option `-posix'. */
-
- #undef CPP_SPEC
--#define CPP_SPEC "%{posix:-D_POSIX_SOURCE}"
-+#define CPP_SPEC "%(cpp_cpu) %{posix:-D_POSIX_SOURCE}"
-
- /* Provide an ASM_SPEC appropriate for NetBSD. Currently we only deal
- with the options for generating PIC code. */
-@@ -48,17 +48,42 @@
- #define ASM_SPEC " %| %{fpic:-k} %{fPIC:-k -K}"
-
- /* Provide a LIB_SPEC appropriate for NetBSD. Just select the appropriate
-- libc, depending on whether we're doing profiling. */
-+ libc, depending on whether we're doing profiling; if `-posix' is specified,
-+ link against the appropriate libposix first. Don't include libc when
-+ linking a shared library. */
-
- #undef LIB_SPEC
--#define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}"
-+#define LIB_SPEC \
-+ "%{posix:%{!p:%{!pg:-lposix}}%{p:-lposix_p}%{pg:-lposix_p}} \
-+ %{!shared:%{!symbolic:%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}}}"
-+
-+/* Provide a LIBGCC_SPEC appropriate for NetBSD. We also want to exclude
-+ libgcc when -symbolic. */
-+
-+#undef LIBGCC_SPEC
-+#ifdef NETBSD_NATIVE
-+#define LIBGCC_SPEC "%{!symbolic:%{!shared:%{!p:%{!pg:-lgcc}}}%{shared:-lgcc_pic}%{p:-lgcc_p}%{pg:-lgcc_p}}"
-+#else
-+#define LIBGCC_SPEC "%{!shared:%{!symbolic:-lgcc}}"
-+#endif
-+
-+/* #ifdef NETBSD_AOUT */
-+
-+/* Provide a STARTFILE_SPEC appropriate for NetBSD a.out. Here we
-+ provide support for the special GCC option -static. */
-
-+#undef STARTFILE_SPEC
-+#define STARTFILE_SPEC \
-+ "%{!shared:%{pg:gcrt0%O%s}%{!pg:%{p:mcrt0%O%s}%{!p:%{!static:crt0%O%s}%{static:scrt0%O%s}}}} %{shared:c++rt0%O%s}"
-+
- /* Provide a LINK_SPEC appropriate for NetBSD. Here we provide support
- for the special GCC options -static, -assert, and -nostdlib. */
-
- #undef LINK_SPEC
- #define LINK_SPEC \
-- "%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{R*} %{static:-Bstatic} %{assert*}"
-+ "%{nostdlib:-nostdlib} %{!shared:%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{static:-Bstatic}} %{shared:-Bshareable} %{R*} %{assert*}"
-+
-+/* #endif NETBSD_AOUT */
-
- /* This defines which switch letters take arguments. */
- #undef SWITCH_TAKES_ARG
-@@ -121,89 +146,49 @@
- #ifndef ASM_DECLARE_RESULT
- #define ASM_DECLARE_RESULT(FILE, RESULT)
- #endif
-+
-+/* NetBSD ELF support begins here. */
-+
-+#ifdef NETBSD_ELF
-+
-+#undef DWARF_DEBUGGING_INFO /* XXX */
-+#undef DWARF2_DEBUGGING_INFO /* XXX */
-+
-+/* Provide a STARTFILE_SPEC appropriate for NetBSD ELF targets. Here we
-+ provide support for the special GCC option -static. On ELF targets,
-+ we also add the crtbegin.o file which provides part of the support
-+ for getting C++ file-scope static objects constructed before entering
-+ `main'. */
-+
-+#undef STARTFILE_SPEC
-+#define STARTFILE_SPEC \
-+ "%{!shared: \
-+ %{pg:gcrt0%O%s} \
-+ %{!pg: \
-+ %{p:gcrt0%O%s} \
-+ %{!p:crt0%O%s}}} \
-+ %{!shared:crtbegin%O%s} %{shared:crtbeginS%O%s}"
-+
-+/* Provide an ENDFILE_SPEC appropriate for NetBSD ELF targets. Here we
-+ add crtend.o, which provides part of the support for getting C++
-+ file-scope static objects deconstructed after exiting `main'. */
-+
-+#undef ENDFILE_SPEC
-+#define ENDFILE_SPEC \
-+ "%{!shared:crtend%O%s} %{shared:crtendS%O%s}"
-+
-+/* Provide a LINK_SPEC appropriate for a NetBSD ELF target. */
-+
-+#undef LINK_SPEC
-+#define LINK_SPEC \
-+ "%{assert*} \
-+ %{shared:-shared} \
-+ %{!shared: \
-+ -dc -dp \
-+ %{!nostdlib:%{!r*:%{!e*:-e __start}}} \
-+ %{!static: \
-+ %{rdynamic:-export-dynamic} \
-+ %{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}} \
-+ %{static:-static}}"
-
--/* These macros generate the special .type and .size directives which
-- are used to set the corresponding fields of the linker symbol table
-- entries in an ELF object file under SVR4. These macros also output
-- the starting labels for the relevant functions/objects. */
--
--/* Write the extra assembler code needed to declare a function properly.
-- Some svr4 assemblers need to also have something extra said about the
-- function's return value. We allow for that here. */
--
--#undef ASM_DECLARE_FUNCTION_NAME
--#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
-- do { \
-- fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \
-- assemble_name (FILE, NAME); \
-- putc (',', FILE); \
-- fprintf (FILE, TYPE_OPERAND_FMT, "function"); \
-- putc ('\n', FILE); \
-- ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \
-- ASM_OUTPUT_LABEL(FILE, NAME); \
-- } while (0)
--
--/* Write the extra assembler code needed to declare an object properly. */
--
--#undef ASM_DECLARE_OBJECT_NAME
--#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \
-- do { \
-- fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \
-- assemble_name (FILE, NAME); \
-- putc (',', FILE); \
-- fprintf (FILE, TYPE_OPERAND_FMT, "object"); \
-- putc ('\n', FILE); \
-- size_directive_output = 0; \
-- if (!flag_inhibit_size_directive && DECL_SIZE (DECL)) \
-- { \
-- size_directive_output = 1; \
-- fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
-- assemble_name (FILE, NAME); \
-- fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \
-- } \
-- ASM_OUTPUT_LABEL(FILE, NAME); \
-- } while (0)
--
--/* Output the size directive for a decl in rest_of_decl_compilation
-- in the case where we did not do so before the initializer.
-- Once we find the error_mark_node, we know that the value of
-- size_directive_output was set
-- by ASM_DECLARE_OBJECT_NAME when it was run for the same decl. */
--
--#undef ASM_FINISH_DECLARE_OBJECT
--#define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END) \
--do { \
-- char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \
-- if (!flag_inhibit_size_directive && DECL_SIZE (DECL) \
-- && ! AT_END && TOP_LEVEL \
-- && DECL_INITIAL (DECL) == error_mark_node \
-- && !size_directive_output) \
-- { \
-- size_directive_output = 1; \
-- fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
-- assemble_name (FILE, name); \
-- fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \
-- } \
-- } while (0)
--
--/* This is how to declare the size of a function. */
--
--#undef ASM_DECLARE_FUNCTION_SIZE
--#define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \
-- do { \
-- if (!flag_inhibit_size_directive) \
-- { \
-- char label[256]; \
-- static int labelno; \
-- labelno++; \
-- ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno); \
-- ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno); \
-- fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
-- assemble_name (FILE, (FNAME)); \
-- fprintf (FILE, ","); \
-- assemble_name (FILE, label); \
-- fprintf (FILE, "-"); \
-- assemble_name (FILE, (FNAME)); \
-- putc ('\n', FILE); \
-- } \
-- } while (0)
-+#endif /* NETBSD_ELF */
diff --git a/lang/gcc/patches/patch-bg b/lang/gcc/patches/patch-bg
deleted file mode 100644
index ebe9e7a5926..00000000000
--- a/lang/gcc/patches/patch-bg
+++ /dev/null
@@ -1,20 +0,0 @@
-$NetBSD: patch-bg,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/t-netbsd.orig 2000/07/26 00:18:08 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/t-netbsd 2001/05/30 09:02:42 1.3
-@@ -1,9 +1,9 @@
--LIBGCC1=libgcc1.null
--CROSS_LIBGCC1=libgcc1.null
--LIBGCC1_TEST=
--
--# Don't run fixproto
-+# Don't run fixproto.
- STMP_FIXPROTO =
-
--# Don't install "assert.h" in gcc. We use the one in glibc.
-+# Don't install "assert.h" in gcc. We use the one in NetBSD's libc.
- INSTALL_ASSERT_H =
-+
-+# The stdarg, varargs, etc. that comes with NetBSD is already sane.
-+# Don't override these with local versions.
-+USER_H = $(EXTRA_HEADERS) $(LANG_EXTRA_HEADERS)
diff --git a/lang/gcc/patches/patch-bh b/lang/gcc/patches/patch-bh
deleted file mode 100644
index 2c33f05f669..00000000000
--- a/lang/gcc/patches/patch-bh
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD: patch-bh,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/ginclude/va-sparc.h.orig 2000/07/26 00:18:59 1.1.1.1
-+++ ../gcc-2.95.3/gcc/ginclude/va-sparc.h 2001/01/30 22:36:39 1.2
-@@ -5,7 +5,7 @@
-
- #ifndef __GNUC_VA_LIST
- #define __GNUC_VA_LIST
--#if ! defined (__svr4__) && ! defined (__linux__) && ! defined (__arch64__)
-+#if ! defined (__svr4__) && ! defined (__linux__) && (defined(__NetBSD__) || ! defined(__arch64__))
- /* This has to be a char * to be compatible with Sun.
- i.e., we have to pass a `va_list' to vsprintf. */
- typedef char * __gnuc_va_list;
diff --git a/lang/gcc/patches/patch-bi b/lang/gcc/patches/patch-bi
deleted file mode 100644
index 39ea2a8a989..00000000000
--- a/lang/gcc/patches/patch-bi
+++ /dev/null
@@ -1,18 +0,0 @@
-$NetBSD: patch-bi,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/objc/objc-act.c.orig 2000/07/26 00:19:06 1.1.1.1
-+++ ../gcc-2.95.3/gcc/objc/objc-act.c 2000/08/10 21:06:50 1.2
-@@ -8399,8 +8399,11 @@
- pushdecl (decl);
- rest_of_decl_compilation (decl, 0, 0, 0);
-
-- /* Make following constant read-only (why not)? */
-- readonly_data_section ();
-+ /* Make following constant read-only, if not compiling PIC. */
-+ if (flag_pic)
-+ data_section();
-+ else
-+ readonly_data_section ();
-
- exp = build1 (ADDR_EXPR, string_type_node, decl);
-
diff --git a/lang/gcc/patches/patch-bj b/lang/gcc/patches/patch-bj
deleted file mode 100644
index 3d7e8aea59a..00000000000
--- a/lang/gcc/patches/patch-bj
+++ /dev/null
@@ -1,443 +0,0 @@
-$NetBSD: patch-bj,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/objc/objc-parse.c.orig 2000/07/26 00:19:06 1.1.1.1
-+++ ../gcc-2.95.3/gcc/objc/objc-parse.c 2001/03/06 05:21:48 1.2
-@@ -1,69 +1,68 @@
-
- /* A Bison parser, made from objc-parse.y
-- by GNU Bison version 1.25
-- */
-+ by GNU Bison version 1.28 */
-
- #define YYBISON 1 /* Identify Bison output. */
-
--#define IDENTIFIER 258
--#define TYPENAME 259
--#define SCSPEC 260
--#define TYPESPEC 261
--#define TYPE_QUAL 262
--#define CONSTANT 263
--#define STRING 264
--#define ELLIPSIS 265
--#define SIZEOF 266
--#define ENUM 267
--#define STRUCT 268
--#define UNION 269
--#define IF 270
--#define ELSE 271
--#define WHILE 272
--#define DO 273
--#define FOR 274
--#define SWITCH 275
--#define CASE 276
--#define DEFAULT 277
--#define BREAK 278
--#define CONTINUE 279
--#define RETURN 280
--#define GOTO 281
--#define ASM_KEYWORD 282
--#define TYPEOF 283
--#define ALIGNOF 284
--#define ATTRIBUTE 285
--#define EXTENSION 286
--#define LABEL 287
--#define REALPART 288
--#define IMAGPART 289
--#define ASSIGN 290
--#define OROR 291
--#define ANDAND 292
--#define EQCOMPARE 293
--#define ARITHCOMPARE 294
--#define LSHIFT 295
--#define RSHIFT 296
--#define UNARY 297
--#define PLUSPLUS 298
--#define MINUSMINUS 299
--#define HYPERUNARY 300
--#define POINTSAT 301
--#define INTERFACE 302
--#define IMPLEMENTATION 303
--#define END 304
--#define SELECTOR 305
--#define DEFS 306
--#define ENCODE 307
--#define CLASSNAME 308
--#define PUBLIC 309
--#define PRIVATE 310
--#define PROTECTED 311
--#define PROTOCOL 312
--#define OBJECTNAME 313
--#define CLASS 314
--#define ALIAS 315
--#define OBJC_STRING 316
-+#define IDENTIFIER 257
-+#define TYPENAME 258
-+#define SCSPEC 259
-+#define TYPESPEC 260
-+#define TYPE_QUAL 261
-+#define CONSTANT 262
-+#define STRING 263
-+#define ELLIPSIS 264
-+#define SIZEOF 265
-+#define ENUM 266
-+#define STRUCT 267
-+#define UNION 268
-+#define IF 269
-+#define ELSE 270
-+#define WHILE 271
-+#define DO 272
-+#define FOR 273
-+#define SWITCH 274
-+#define CASE 275
-+#define DEFAULT 276
-+#define BREAK 277
-+#define CONTINUE 278
-+#define RETURN 279
-+#define GOTO 280
-+#define ASM_KEYWORD 281
-+#define TYPEOF 282
-+#define ALIGNOF 283
-+#define ATTRIBUTE 284
-+#define EXTENSION 285
-+#define LABEL 286
-+#define REALPART 287
-+#define IMAGPART 288
-+#define ASSIGN 289
-+#define OROR 290
-+#define ANDAND 291
-+#define EQCOMPARE 292
-+#define ARITHCOMPARE 293
-+#define LSHIFT 294
-+#define RSHIFT 295
-+#define UNARY 296
-+#define PLUSPLUS 297
-+#define MINUSMINUS 298
-+#define HYPERUNARY 299
-+#define POINTSAT 300
-+#define INTERFACE 301
-+#define IMPLEMENTATION 302
-+#define END 303
-+#define SELECTOR 304
-+#define DEFS 305
-+#define ENCODE 306
-+#define CLASSNAME 307
-+#define PUBLIC 308
-+#define PRIVATE 309
-+#define PROTECTED 310
-+#define PROTOCOL 311
-+#define OBJECTNAME 312
-+#define CLASS 313
-+#define ALIAS 314
-+#define OBJC_STRING 315
-
- #line 33 "objc-parse.y"
-
-@@ -150,7 +149,7 @@
- #define YYFLAG -32768
- #define YYNTBASE 84
-
--#define YYTRANSLATE(x) ((unsigned)(x) <= 316 ? yytranslate[x] : 311)
-+#define YYTRANSLATE(x) ((unsigned)(x) <= 315 ? yytranslate[x] : 311)
-
- static const char yytranslate[] = { 0,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-@@ -178,13 +177,13 @@
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-- 2, 2, 2, 2, 2, 1, 2, 3, 4, 5,
-- 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
-- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
-- 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
-- 39, 40, 44, 45, 46, 47, 53, 54, 55, 56,
-- 57, 61, 62, 63, 64, 65, 66, 67, 68, 69,
-- 70, 71, 72, 73, 74, 75
-+ 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
-+ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
-+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
-+ 27, 28, 29, 30, 31, 32, 33, 34, 35, 39,
-+ 40, 44, 45, 46, 47, 53, 54, 55, 56, 57,
-+ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
-+ 71, 72, 73, 74, 75
- };
-
- #if YYDEBUG != 0
-@@ -1674,7 +1673,8 @@
- 47, 48, 49, 50, 51, 52
- };
- /* -*-C-*- Note some compilers choke on comments on `#line' lines. */
--#line 3 "/usr/lib/bison.simple"
-+#line 3 "/usr/pkg/share/bison.simple"
-+/* This file comes from bison-1.28. */
-
- /* Skeleton output parser for bison,
- Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
-@@ -1691,46 +1691,66 @@
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
-- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-+ Foundation, Inc., 59 Temple Place - Suite 330,
-+ Boston, MA 02111-1307, USA. */
-
- /* As a special exception, when this file is copied by Bison into a
- Bison output file, you may use that output file without restriction.
- This special exception was added by the Free Software Foundation
- in version 1.24 of Bison. */
-+
-+/* This is the parser code that is written into each bison parser
-+ when the %semantic_parser declaration is not specified in the grammar.
-+ It was written by Richard Stallman by simplifying the hairy parser
-+ used when %semantic_parser is specified. */
-
--#ifndef alloca
-+#ifndef YYSTACK_USE_ALLOCA
-+#ifdef alloca
-+#define YYSTACK_USE_ALLOCA
-+#else /* alloca not defined */
- #ifdef __GNUC__
-+#define YYSTACK_USE_ALLOCA
- #define alloca __builtin_alloca
- #else /* not GNU C. */
--#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
-+#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
-+#define YYSTACK_USE_ALLOCA
- #include <alloca.h>
- #else /* not sparc */
--#if defined (MSDOS) && !defined (__TURBOC__)
-+/* We think this test detects Watcom and Microsoft C. */
-+/* This used to test MSDOS, but that is a bad idea
-+ since that symbol is in the user namespace. */
-+#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
-+#if 0 /* No need for malloc.h, which pollutes the namespace;
-+ instead, just don't use alloca. */
- #include <malloc.h>
-+#endif
- #else /* not MSDOS, or __TURBOC__ */
- #if defined(_AIX)
--#include <malloc.h>
-+/* I don't know what this was needed for, but it pollutes the namespace.
-+ So I turned it off. rms, 2 May 1997. */
-+/* #include <malloc.h> */
- #pragma alloca
--#else /* not MSDOS, __TURBOC__, or _AIX */
--#ifdef __hpux
--#ifdef __cplusplus
--extern "C" {
--void *alloca (unsigned int);
--};
--#else /* not __cplusplus */
--void *alloca ();
--#endif /* not __cplusplus */
-+#define YYSTACK_USE_ALLOCA
-+#else /* not MSDOS, or __TURBOC__, or _AIX */
-+#if 0
-+#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
-+ and on HPUX 10. Eventually we can turn this on. */
-+#define YYSTACK_USE_ALLOCA
-+#define alloca __builtin_alloca
- #endif /* __hpux */
-+#endif
- #endif /* not _AIX */
- #endif /* not MSDOS, or __TURBOC__ */
--#endif /* not sparc. */
--#endif /* not GNU C. */
--#endif /* alloca not defined. */
-+#endif /* not sparc */
-+#endif /* not GNU C */
-+#endif /* alloca not defined */
-+#endif /* YYSTACK_USE_ALLOCA not defined */
-
--/* This is the parser code that is written into each bison parser
-- when the %semantic_parser declaration is not specified in the grammar.
-- It was written by Richard Stallman by simplifying the hairy parser
-- used when %semantic_parser is specified. */
-+#ifdef YYSTACK_USE_ALLOCA
-+#define YYSTACK_ALLOC alloca
-+#else
-+#define YYSTACK_ALLOC malloc
-+#endif
-
- /* Note: there must be only one dollar sign in this file.
- It is replaced by the list of actions, each action
-@@ -1740,8 +1760,8 @@
- #define yyclearin (yychar = YYEMPTY)
- #define YYEMPTY -2
- #define YYEOF 0
--#define YYACCEPT return(0)
--#define YYABORT return(1)
-+#define YYACCEPT goto yyacceptlab
-+#define YYABORT goto yyabortlab
- #define YYERROR goto yyerrlab1
- /* Like YYERROR except do call yyerror.
- This remains here temporarily to ease the
-@@ -1822,12 +1842,12 @@
- #ifndef YYMAXDEPTH
- #define YYMAXDEPTH 10000
- #endif
--
--/* Prevent warning if -Wstrict-prototypes. */
--#ifdef __GNUC__
--int yyparse (void);
--#endif
-
-+/* Define __yy_memcpy. Note that the size argument
-+ should be passed with type unsigned int, because that is what the non-GCC
-+ definitions require. With GCC, __builtin_memcpy takes an arg
-+ of type size_t, but it can handle unsigned int. */
-+
- #if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
- #define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
- #else /* not GNU C or C++ */
-@@ -1839,7 +1859,7 @@
- __yy_memcpy (to, from, count)
- char *to;
- char *from;
-- int count;
-+ unsigned int count;
- {
- register char *f = from;
- register char *t = to;
-@@ -1854,10 +1874,10 @@
- /* This is the most reliable way to avoid incompatibilities
- in available built-in functions on various systems. */
- static void
--__yy_memcpy (char *to, char *from, int count)
-+__yy_memcpy (char *to, char *from, unsigned int count)
- {
-- register char *f = from;
- register char *t = to;
-+ register char *f = from;
- register int i = count;
-
- while (i-- > 0)
-@@ -1867,7 +1887,7 @@
- #endif
- #endif
-
--#line 196 "/usr/lib/bison.simple"
-+#line 217 "/usr/pkg/share/bison.simple"
-
- /* The user can define YYPARSE_PARAM as the name of an argument to be passed
- into yyparse. The argument should have type void *.
-@@ -1888,6 +1908,15 @@
- #define YYPARSE_PARAM_DECL
- #endif /* not YYPARSE_PARAM */
-
-+/* Prevent warning if -Wstrict-prototypes. */
-+#ifdef __GNUC__
-+#ifdef YYPARSE_PARAM
-+int yyparse (void *);
-+#else
-+int yyparse (void);
-+#endif
-+#endif
-+
- int
- yyparse(YYPARSE_PARAM_ARG)
- YYPARSE_PARAM_DECL
-@@ -1916,6 +1945,7 @@
- #endif
-
- int yystacksize = YYINITDEPTH;
-+ int yyfree_stacks = 0;
-
- #ifdef YYPURE
- int yychar;
-@@ -2000,18 +2030,32 @@
- if (yystacksize >= YYMAXDEPTH)
- {
- yyerror("parser stack overflow");
-+ if (yyfree_stacks)
-+ {
-+ free (yyss);
-+ free (yyvs);
-+#ifdef YYLSP_NEEDED
-+ free (yyls);
-+#endif
-+ }
- return 2;
- }
- yystacksize *= 2;
- if (yystacksize > YYMAXDEPTH)
- yystacksize = YYMAXDEPTH;
-- yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
-- __yy_memcpy ((char *)yyss, (char *)yyss1, size * sizeof (*yyssp));
-- yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
-- __yy_memcpy ((char *)yyvs, (char *)yyvs1, size * sizeof (*yyvsp));
-+#ifndef YYSTACK_USE_ALLOCA
-+ yyfree_stacks = 1;
-+#endif
-+ yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
-+ __yy_memcpy ((char *)yyss, (char *)yyss1,
-+ size * (unsigned int) sizeof (*yyssp));
-+ yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
-+ __yy_memcpy ((char *)yyvs, (char *)yyvs1,
-+ size * (unsigned int) sizeof (*yyvsp));
- #ifdef YYLSP_NEEDED
-- yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
-- __yy_memcpy ((char *)yyls, (char *)yyls1, size * sizeof (*yylsp));
-+ yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
-+ __yy_memcpy ((char *)yyls, (char *)yyls1,
-+ size * (unsigned int) sizeof (*yylsp));
- #endif
- #endif /* no yyoverflow */
-
-@@ -4995,7 +5039,7 @@
- break;}
- }
- /* the action file gets copied in in place of this dollarsign */
--#line 498 "/usr/lib/bison.simple"
-+#line 543 "/usr/pkg/share/bison.simple"
-
- yyvsp -= yylen;
- yyssp -= yylen;
-@@ -5067,7 +5111,7 @@
- count = 0;
- /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
- for (x = (yyn < 0 ? -yyn : 0);
-- x < (sizeof(yytname) / sizeof(char *)); x++)
-+ x < (int)(sizeof(yytname) / sizeof(char *)); x++)
- if (yycheck[x + yyn] == x)
- size += strlen(yytname[x]) + 15, count++;
- msg = (char *) malloc(size + 15);
-@@ -5079,7 +5123,7 @@
- {
- count = 0;
- for (x = (yyn < 0 ? -yyn : 0);
-- x < (sizeof(yytname) / sizeof(char *)); x++)
-+ x < (int)(sizeof(yytname) / sizeof(char *)); x++)
- if (yycheck[x + yyn] == x)
- {
- strcat(msg, count == 0 ? ", expecting `" : " or `");
-@@ -5190,6 +5234,30 @@
-
- yystate = yyn;
- goto yynewstate;
-+
-+ yyacceptlab:
-+ /* YYACCEPT comes here. */
-+ if (yyfree_stacks)
-+ {
-+ free (yyss);
-+ free (yyvs);
-+#ifdef YYLSP_NEEDED
-+ free (yyls);
-+#endif
-+ }
-+ return 0;
-+
-+ yyabortlab:
-+ /* YYABORT comes here. */
-+ if (yyfree_stacks)
-+ {
-+ free (yyss);
-+ free (yyvs);
-+#ifdef YYLSP_NEEDED
-+ free (yyls);
-+#endif
-+ }
-+ return 1;
- }
- #line 3003 "objc-parse.y"
-
diff --git a/lang/gcc/patches/patch-bk b/lang/gcc/patches/patch-bk
deleted file mode 100644
index 9cb456baac6..00000000000
--- a/lang/gcc/patches/patch-bk
+++ /dev/null
@@ -1,64 +0,0 @@
-$NetBSD: patch-bk,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/ChangeLog.orig 2001/04/23 11:57:52 1.1.1.2
-+++ ../gcc-2.95.3/gcc/ChangeLog 2001/04/23 12:23:26 1.4
-@@ -1,3 +1,59 @@
-+2001-01-05 matthew green (mrg@eterna.com.au)
-+
-+ 1999/08/02 Jakub Jelinek <jj@ultra.linux.cz>
-+ * config/sparc/sparc.h (ASM_DECLARE_REGISTER_GLOBAL): New macro.
-+ (RTX_OK_FOR_OLO10): Likewise.
-+ (GO_IF_LEGITIMATE_ADDRESS): If assembler supports offsetable
-+ %lo(), allow it in addresses...
-+ (PRINT_OPERAND_ADDRESS): ... and print it appropriately.
-+ * config/sparc/sparc.md (sethi_di_medlow_embmedany_pic): sethi %lo()
-+ does not make sense.
-+ * config/sparc/sparc.c (sparc_hard_reg_printed): New array.
-+ (sparc_output_scratch_registers): New function.
-+ (output_function_prologue, sparc_flat_output_function_prologue): Use
-+ it.
-+ * varasm.c (make_decl_rtl): Use ASM_DECLARE_REGISTER_GLOBAL if
-+ defined.
-+ * tm.texi (ASM_DECLARE_REGISTER_GLOBAL): Document it.
-+
-+2001-01-05 matthew green (mrg@eterna.com.au)
-+
-+ 1999/07/30 Jakub Jelinek <jj@ultra.linux.cz>
-+ * config/sparc/sparc.md (cmp_mul_set, cmp_udiv_cc_set):
-+ Fix patterns so that they actually match.
-+ (cmp_sdiv_cc_set): Ditto, also don't require g0 to be zero.
-+ (mulsidi3_sp64, const_mulsidi3_sp64): New patterns.
-+ (const_mulsidi3_sp32): Renamed from const_mulsidi3, only on
-+ TARGET_HARD_MUL32.
-+ (mulsidi3): Reflect this in the expand.
-+ (smulsi3_highpart): Only on TARGET_ARCH32.
-+ (umulsidi3_sp64, const_umulsidi3_sp64): New patterns.
-+ (const_umulsidi3_sp32): Renamed from const_umulsidi3.
-+ (umulsidi3): Reflect this in the expand.
-+ (umulsi3_highpart): Only on TARGET_ARCH32.
-+ (divsi3_sp32): Renamed from divsi3, only on TARGET_ARCH32,
-+ don't require g0 to be zero.
-+ (udivsi3_sp32): Renamed from udivsi3, only on TARGET_ARCH32.
-+ ({,u}divsi3): New expands.
-+ ({,u}divsi3_sp64): New patterns.
-+ (after lshrdi3_v8plus): Four new patterns to help combiner
-+ optimizing nested mixed mode shifts.
-+
-+ * config/sparc/sparc.c (sparc_override_options): Use deprecated
-+ v8 instructions if optimizing for UltraSPARC I, II, IIi, as it
-+ speed things up. Don't use them by default on plain v9 in 64bit
-+ mode, according to what SPAMv9 sais.
-+
-+ * config/sparc/sparc.h: Fix comments, e.g. Linux already preserves
-+ top 32 bits of %[og][0-7] in signal handlers.
-+ Also, TARGET_HARD_MUL32 now is only true for TARGET_ARCH32.
-+
-+2001-01-03 matthew green (mrg@eterna.com.au)
-+
-+ 1999-12-14 Jakub Jelinek <jakub@redhat.com>
-+ * config/sparc/sparc.c (sparc_override_options): Allow block
-+ profiling with -m32.
-+
- Fri Mar 16 12:46:19 GMT 2001 Bernd Schmidt (bernds@redhat.com)
-
- * gcc-2.95.3 Released.
diff --git a/lang/gcc/patches/patch-bl b/lang/gcc/patches/patch-bl
deleted file mode 100644
index d5a7462c319..00000000000
--- a/lang/gcc/patches/patch-bl
+++ /dev/null
@@ -1,189 +0,0 @@
-$NetBSD: patch-bl,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/Makefile.in.orig 2001/04/23 11:57:55 1.1.1.2
-+++ ../gcc-2.95.3/gcc/Makefile.in 2001/12/02 04:10:11 1.4
-@@ -41,7 +41,7 @@
- # Selection of languages to be made.
- # This is overridden by configure.
- CONFIG_LANGUAGES = @all_languages@
--LANGUAGES = c proto gcov$(exeext) $(CONFIG_LANGUAGES)
-+LANGUAGES = c gcov$(exeext) $(CONFIG_LANGUAGES)
-
- # Languages should create dependencies of $(INTL_TARGETS) on generated
- # sources in Make-lang.in. Example:
-@@ -802,27 +802,6 @@
- LANGUAGES="$(CONFIG_LANGUAGES)" $(SHELL) config.run
- rm -f config.run
-
--$(srcdir)/configure: $(srcdir)/configure.in
-- cd $(srcdir); autoconf
--
--# cstamp-h.in controls rebuilding of config.in.
--# It is named cstamp-h.in and not stamp-h.in so the mostlyclean rule doesn't
--# delete it. A stamp file is needed as autoheader won't update the file if
--# nothing has changed.
--# It remains in the source directory and is part of the distribution.
--# This follows what is done in shellutils, fileutils, etc.
--# "echo timestamp" is used instead of touch to be consistent with other
--# packages that use autoconf (??? perhaps also to avoid problems with patch?).
--# ??? Newer versions have a maintainer mode that may be useful here.
--$(srcdir)/config.in: $(srcdir)/cstamp-h.in
--$(srcdir)/cstamp-h.in: $(srcdir)/configure.in $(srcdir)/acconfig.h
-- cd $(srcdir) && autoheader
-- @rm -f $(srcdir)/cstamp-h.in
-- echo timestamp > $(srcdir)/cstamp-h.in
--auto-host.h: cstamp-h ; @true
--cstamp-h: config.in config.status
-- CONFIG_HEADERS=auto-host.h:config.in LANGUAGES="$(CONFIG_LANGUAGES)" $(SHELL) config.status
--
- # Really, really stupid make features, such as SUN's KEEP_STATE, may force
- # a target to build even if it is up-to-date. So we must verify that
- # config.status does not exist before failing.
-@@ -1185,7 +1164,7 @@
- "$(MULTILIB_MATCHES)" \
- "$(MULTILIB_EXCEPTIONS)" \
- "$(MULTILIB_EXTRA_OPTS)" > tmp-mlib.h
-- $(srcdir)/move-if-change tmp-mlib.h multilib.h
-+ sh $(srcdir)/move-if-change tmp-mlib.h multilib.h
- touch s-mlib
-
- # Build multiple copies of libgcc.a, one for each target switch.
-@@ -1331,12 +1310,12 @@
- sed -e "/^ifobjc$$/,/^end ifobjc$$/d" \
- -e "/^ifc$$/d" -e "/^end ifc$$/d" \
- $(srcdir)/c-parse.in >>tmp-c-parse.y
-- $(srcdir)/move-if-change tmp-c-parse.y $(srcdir)/c-parse.y
-+ sh $(srcdir)/move-if-change tmp-c-parse.y $(srcdir)/c-parse.y
-
- $(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
-- $(srcdir)/move-if-change tmp-gperf.h $(srcdir)/c-gperf.h
-+ sh $(srcdir)/move-if-change tmp-gperf.h $(srcdir)/c-gperf.h
-
- c-decl.o : c-decl.c $(CONFIG_H) system.h $(TREE_H) c-tree.h c-lex.h flags.h \
- output.h toplev.h
-@@ -1396,7 +1375,7 @@
- else \
- echo "int prepends_underscore = 0;" >>tmp-under.c; \
- fi
-- $(srcdir)/move-if-change tmp-under.c underscore.c
-+ sh $(srcdir)/move-if-change tmp-under.c underscore.c
- -rm -f tmp-dum.c tmp-dum.s
- touch s-under
-
-@@ -1425,7 +1404,7 @@
- tree-check.h: s-check ; @true
- s-check : gencheck $(srcdir)/move-if-change
- ./gencheck > tmp-check.h
-- $(srcdir)/move-if-change tmp-check.h tree-check.h
-+ sh $(srcdir)/move-if-change tmp-check.h tree-check.h
- touch s-check
-
- gencheck : gencheck.o $(lang_tree_files) $(HOST_LIBDEPS)
-@@ -1650,19 +1629,19 @@
- insn-config.h: s-config ; @true
- s-config : $(md_file) genconfig $(srcdir)/move-if-change
- ./genconfig $(md_file) > tmp-config.h
-- $(srcdir)/move-if-change tmp-config.h insn-config.h
-+ sh $(srcdir)/move-if-change tmp-config.h insn-config.h
- touch s-config
-
- insn-flags.h: s-flags ; @true
- s-flags : $(md_file) genflags $(srcdir)/move-if-change
- ./genflags $(md_file) > tmp-flags.h
-- $(srcdir)/move-if-change tmp-flags.h insn-flags.h
-+ sh $(srcdir)/move-if-change tmp-flags.h insn-flags.h
- touch s-flags
-
- insn-codes.h: s-codes ; @true
- s-codes : $(md_file) gencodes $(srcdir)/move-if-change
- ./gencodes $(md_file) > tmp-codes.h
-- $(srcdir)/move-if-change tmp-codes.h insn-codes.h
-+ sh $(srcdir)/move-if-change tmp-codes.h insn-codes.h
- touch s-codes
-
- insn-emit.o : insn-emit.c $(CONFIG_H) $(RTL_H) $(EXPR_H) real.h output.h \
-@@ -1672,7 +1651,7 @@
- insn-emit.c: s-emit ; @true
- s-emit : $(md_file) genemit $(srcdir)/move-if-change
- ./genemit $(md_file) > tmp-emit.c
-- $(srcdir)/move-if-change tmp-emit.c insn-emit.c
-+ sh $(srcdir)/move-if-change tmp-emit.c insn-emit.c
- touch s-emit
-
- insn-recog.o : insn-recog.c $(CONFIG_H) $(RTL_H) insn-config.h $(RECOG_H) \
-@@ -1682,7 +1661,7 @@
- insn-recog.c: s-recog ; @true
- s-recog : $(md_file) genrecog $(srcdir)/move-if-change
- ./genrecog $(md_file) > tmp-recog.c
-- $(srcdir)/move-if-change tmp-recog.c insn-recog.c
-+ sh $(srcdir)/move-if-change tmp-recog.c insn-recog.c
- touch s-recog
-
- insn-opinit.o : insn-opinit.c $(CONFIG_H) $(RTL_H) insn-codes.h insn-flags.h \
-@@ -1692,7 +1671,7 @@
- insn-opinit.c: s-opinit ; @true
- s-opinit : $(md_file) genopinit $(srcdir)/move-if-change
- ./genopinit $(md_file) > tmp-opinit.c
-- $(srcdir)/move-if-change tmp-opinit.c insn-opinit.c
-+ sh $(srcdir)/move-if-change tmp-opinit.c insn-opinit.c
- touch s-opinit
-
- insn-extract.o : insn-extract.c $(CONFIG_H) $(RTL_H) system.h toplev.h \
-@@ -1702,7 +1681,7 @@
- insn-extract.c: s-extract ; @true
- s-extract : $(md_file) genextract $(srcdir)/move-if-change
- ./genextract $(md_file) > tmp-extract.c
-- $(srcdir)/move-if-change tmp-extract.c insn-extract.c
-+ sh $(srcdir)/move-if-change tmp-extract.c insn-extract.c
- touch s-extract
-
- insn-peep.o : insn-peep.c $(CONFIG_H) $(RTL_H) $(REGS_H) output.h real.h \
-@@ -1712,7 +1691,7 @@
- insn-peep.c: s-peep ; @true
- s-peep : $(md_file) genpeep $(srcdir)/move-if-change
- ./genpeep $(md_file) > tmp-peep.c
-- $(srcdir)/move-if-change tmp-peep.c insn-peep.c
-+ sh $(srcdir)/move-if-change tmp-peep.c insn-peep.c
- touch s-peep
-
- insn-attrtab.o : insn-attrtab.c $(CONFIG_H) $(RTL_H) $(REGS_H) real.h \
-@@ -1722,7 +1701,7 @@
- insn-attr.h: s-attr ; @true
- s-attr : $(md_file) genattr $(srcdir)/move-if-change
- ./genattr $(md_file) > tmp-attr.h
-- $(srcdir)/move-if-change tmp-attr.h insn-attr.h
-+ sh $(srcdir)/move-if-change tmp-attr.h insn-attr.h
- touch s-attr
-
- insn-attrtab.c: s-attrtab ; @true
-@@ -1734,7 +1713,7 @@
- else \
- ./genattrtab $(md_file) > tmp-attrtab.c; \
- fi
-- $(srcdir)/move-if-change tmp-attrtab.c insn-attrtab.c
-+ sh $(srcdir)/move-if-change tmp-attrtab.c insn-attrtab.c
- touch s-attrtab
-
- insn-output.o : insn-output.c $(CONFIG_H) $(RTL_H) $(REGS_H) real.h conditions.h \
-@@ -1745,7 +1724,7 @@
- insn-output.c: s-output ; @true
- s-output : $(md_file) genoutput $(srcdir)/move-if-change
- ./genoutput $(md_file) > tmp-output.c
-- $(srcdir)/move-if-change tmp-output.c insn-output.c
-+ sh $(srcdir)/move-if-change tmp-output.c insn-output.c
- touch s-output
-
- genrtl.o : genrtl.c $(CONFIG_H) $(RTL_H) system.h
-@@ -1754,8 +1733,8 @@
-
- s-genrtl: gengenrtl $(srcdir)/move-if-change $(RTL_BASE_H)
- ./gengenrtl tmp-genrtl.h tmp-genrtl.c
-- $(srcdir)/move-if-change tmp-genrtl.h genrtl.h
-- $(srcdir)/move-if-change tmp-genrtl.c genrtl.c
-+ sh $(srcdir)/move-if-change tmp-genrtl.h genrtl.h
-+ sh $(srcdir)/move-if-change tmp-genrtl.c genrtl.c
- touch s-genrtl
-
- #
diff --git a/lang/gcc/patches/patch-bm b/lang/gcc/patches/patch-bm
deleted file mode 100644
index 8964bebf24c..00000000000
--- a/lang/gcc/patches/patch-bm
+++ /dev/null
@@ -1,44 +0,0 @@
-$NetBSD: patch-bm,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/c-common.c.orig 2000/07/26 00:17:20 1.1.1.1
-+++ ../gcc-2.95.3/gcc/c-common.c 2001/01/31 19:58:32 1.5
-@@ -1132,7 +1132,7 @@
- { "D", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "2" },
- { "g", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "2O-_0w" },
- { "cx", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "3E" },
-- { "%RTXnrt", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "" },
-+ { "%FRTXnrt", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "" },
- { "P", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "G" },
- { "HIMSUWdemw", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "-_0Ow" },
- { "Vju", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "-_0Oow" },
-@@ -1398,7 +1398,8 @@
-
- if (integer_zerop (format_tree))
- {
-- warning ("null format string");
-+ if (pedantic)
-+ warning ("null format string");
- return;
- }
- if (TREE_CODE (format_tree) != ADDR_EXPR)
-@@ -1432,8 +1433,6 @@
- {
- if (format_chars - TREE_STRING_POINTER (format_tree) != format_length)
- warning ("embedded `\\0' in format");
-- if (info->first_arg_num != 0 && params != 0 && ! has_operand_number)
-- warning ("too many arguments for format");
- return;
- }
- if (*format_chars++ != '%')
-@@ -1722,11 +1721,6 @@
- }
- if (wide && index (fci->flag_chars, 'w') == 0)
- warning ("width used with `%c' format", format_char);
-- if (index (fci->flag_chars, '2') != 0)
-- warning ("`%%%c' yields only last 2 digits of year", format_char);
-- else if (index (fci->flag_chars, '3') != 0)
-- warning ("`%%%c' yields only last 2 digits of year in some locales",
-- format_char);
- if (precise && index (fci->flag_chars, 'p') == 0)
- warning ("precision used with `%c' format", format_char);
- if (aflag && index (fci->flag_chars, 'a') == 0)
diff --git a/lang/gcc/patches/patch-bn b/lang/gcc/patches/patch-bn
deleted file mode 100644
index 5cb4279bcb2..00000000000
--- a/lang/gcc/patches/patch-bn
+++ /dev/null
@@ -1,15 +0,0 @@
-$NetBSD: patch-bn,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/c-decl.c.orig 2001/04/23 11:57:59 1.1.1.2
-+++ ../gcc-2.95.3/gcc/c-decl.c 2001/04/23 12:23:27 1.4
-@@ -811,6 +811,10 @@
- warn_traditional = 0;
- else if (!strcmp (p, "-Wformat"))
- warn_format = 1;
-+ else if (!strcmp (p, "-Wno-format-y2k"))
-+ { /* XXX: NetBSD compatibility until next gcc release */ }
-+ else if (!strcmp (p, "-Wno-format-extra-args"))
-+ { /* XXX: NetBSD compatibility until next gcc release */ }
- else if (!strcmp (p, "-Wno-format"))
- warn_format = 0;
- else if (!strcmp (p, "-Wchar-subscripts"))
diff --git a/lang/gcc/patches/patch-bo b/lang/gcc/patches/patch-bo
deleted file mode 100644
index 1e9605093a7..00000000000
--- a/lang/gcc/patches/patch-bo
+++ /dev/null
@@ -1,443 +0,0 @@
-$NetBSD: patch-bo,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/c-parse.c.orig 2000/07/26 00:17:21 1.1.1.1
-+++ ../gcc-2.95.3/gcc/c-parse.c 2002/01/30 15:16:06 1.4
-@@ -1,69 +1,68 @@
-
- /* A Bison parser, made from c-parse.y
-- by GNU Bison version 1.25
-- */
-+ by GNU Bison version 1.28 */
-
- #define YYBISON 1 /* Identify Bison output. */
-
--#define IDENTIFIER 258
--#define TYPENAME 259
--#define SCSPEC 260
--#define TYPESPEC 261
--#define TYPE_QUAL 262
--#define CONSTANT 263
--#define STRING 264
--#define ELLIPSIS 265
--#define SIZEOF 266
--#define ENUM 267
--#define STRUCT 268
--#define UNION 269
--#define IF 270
--#define ELSE 271
--#define WHILE 272
--#define DO 273
--#define FOR 274
--#define SWITCH 275
--#define CASE 276
--#define DEFAULT 277
--#define BREAK 278
--#define CONTINUE 279
--#define RETURN 280
--#define GOTO 281
--#define ASM_KEYWORD 282
--#define TYPEOF 283
--#define ALIGNOF 284
--#define ATTRIBUTE 285
--#define EXTENSION 286
--#define LABEL 287
--#define REALPART 288
--#define IMAGPART 289
--#define ASSIGN 290
--#define OROR 291
--#define ANDAND 292
--#define EQCOMPARE 293
--#define ARITHCOMPARE 294
--#define LSHIFT 295
--#define RSHIFT 296
--#define UNARY 297
--#define PLUSPLUS 298
--#define MINUSMINUS 299
--#define HYPERUNARY 300
--#define POINTSAT 301
--#define INTERFACE 302
--#define IMPLEMENTATION 303
--#define END 304
--#define SELECTOR 305
--#define DEFS 306
--#define ENCODE 307
--#define CLASSNAME 308
--#define PUBLIC 309
--#define PRIVATE 310
--#define PROTECTED 311
--#define PROTOCOL 312
--#define OBJECTNAME 313
--#define CLASS 314
--#define ALIAS 315
--#define OBJC_STRING 316
-+#define IDENTIFIER 257
-+#define TYPENAME 258
-+#define SCSPEC 259
-+#define TYPESPEC 260
-+#define TYPE_QUAL 261
-+#define CONSTANT 262
-+#define STRING 263
-+#define ELLIPSIS 264
-+#define SIZEOF 265
-+#define ENUM 266
-+#define STRUCT 267
-+#define UNION 268
-+#define IF 269
-+#define ELSE 270
-+#define WHILE 271
-+#define DO 272
-+#define FOR 273
-+#define SWITCH 274
-+#define CASE 275
-+#define DEFAULT 276
-+#define BREAK 277
-+#define CONTINUE 278
-+#define RETURN 279
-+#define GOTO 280
-+#define ASM_KEYWORD 281
-+#define TYPEOF 282
-+#define ALIGNOF 283
-+#define ATTRIBUTE 284
-+#define EXTENSION 285
-+#define LABEL 286
-+#define REALPART 287
-+#define IMAGPART 288
-+#define ASSIGN 289
-+#define OROR 290
-+#define ANDAND 291
-+#define EQCOMPARE 292
-+#define ARITHCOMPARE 293
-+#define LSHIFT 294
-+#define RSHIFT 295
-+#define UNARY 296
-+#define PLUSPLUS 297
-+#define MINUSMINUS 298
-+#define HYPERUNARY 299
-+#define POINTSAT 300
-+#define INTERFACE 301
-+#define IMPLEMENTATION 302
-+#define END 303
-+#define SELECTOR 304
-+#define DEFS 305
-+#define ENCODE 306
-+#define CLASSNAME 307
-+#define PUBLIC 308
-+#define PRIVATE 309
-+#define PROTECTED 310
-+#define PROTOCOL 311
-+#define OBJECTNAME 312
-+#define CLASS 313
-+#define ALIAS 314
-+#define OBJC_STRING 315
-
- #line 56 "c-parse.y"
-
-@@ -138,7 +137,7 @@
- #define YYFLAG -32768
- #define YYNTBASE 84
-
--#define YYTRANSLATE(x) ((unsigned)(x) <= 316 ? yytranslate[x] : 241)
-+#define YYTRANSLATE(x) ((unsigned)(x) <= 315 ? yytranslate[x] : 241)
-
- static const char yytranslate[] = { 0,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-@@ -166,13 +165,13 @@
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-- 2, 2, 2, 2, 2, 1, 2, 3, 4, 5,
-- 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
-- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
-- 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
-- 39, 40, 44, 45, 46, 47, 53, 54, 55, 56,
-- 57, 61, 62, 63, 64, 65, 66, 67, 68, 69,
-- 70, 71, 72, 73, 74, 75
-+ 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
-+ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
-+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
-+ 27, 28, 29, 30, 31, 32, 33, 34, 35, 39,
-+ 40, 44, 45, 46, 47, 53, 54, 55, 56, 57,
-+ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
-+ 71, 72, 73, 74, 75
- };
-
- #if YYDEBUG != 0
-@@ -1205,7 +1204,8 @@
- 50, 51, 52
- };
- /* -*-C-*- Note some compilers choke on comments on `#line' lines. */
--#line 3 "/usr/lib/bison.simple"
-+#line 3 "/usr/pkg/share/bison.simple"
-+/* This file comes from bison-1.28. */
-
- /* Skeleton output parser for bison,
- Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
-@@ -1222,46 +1222,66 @@
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
-- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-+ Foundation, Inc., 59 Temple Place - Suite 330,
-+ Boston, MA 02111-1307, USA. */
-
- /* As a special exception, when this file is copied by Bison into a
- Bison output file, you may use that output file without restriction.
- This special exception was added by the Free Software Foundation
- in version 1.24 of Bison. */
-
--#ifndef alloca
-+/* This is the parser code that is written into each bison parser
-+ when the %semantic_parser declaration is not specified in the grammar.
-+ It was written by Richard Stallman by simplifying the hairy parser
-+ used when %semantic_parser is specified. */
-+
-+#ifndef YYSTACK_USE_ALLOCA
-+#ifdef alloca
-+#define YYSTACK_USE_ALLOCA
-+#else /* alloca not defined */
- #ifdef __GNUC__
-+#define YYSTACK_USE_ALLOCA
- #define alloca __builtin_alloca
- #else /* not GNU C. */
--#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
-+#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
-+#define YYSTACK_USE_ALLOCA
- #include <alloca.h>
- #else /* not sparc */
--#if defined (MSDOS) && !defined (__TURBOC__)
-+/* We think this test detects Watcom and Microsoft C. */
-+/* This used to test MSDOS, but that is a bad idea
-+ since that symbol is in the user namespace. */
-+#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
-+#if 0 /* No need for malloc.h, which pollutes the namespace;
-+ instead, just don't use alloca. */
- #include <malloc.h>
-+#endif
- #else /* not MSDOS, or __TURBOC__ */
- #if defined(_AIX)
--#include <malloc.h>
-+/* I don't know what this was needed for, but it pollutes the namespace.
-+ So I turned it off. rms, 2 May 1997. */
-+/* #include <malloc.h> */
- #pragma alloca
--#else /* not MSDOS, __TURBOC__, or _AIX */
--#ifdef __hpux
--#ifdef __cplusplus
--extern "C" {
--void *alloca (unsigned int);
--};
--#else /* not __cplusplus */
--void *alloca ();
--#endif /* not __cplusplus */
-+#define YYSTACK_USE_ALLOCA
-+#else /* not MSDOS, or __TURBOC__, or _AIX */
-+#if 0
-+#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
-+ and on HPUX 10. Eventually we can turn this on. */
-+#define YYSTACK_USE_ALLOCA
-+#define alloca __builtin_alloca
- #endif /* __hpux */
-+#endif
- #endif /* not _AIX */
- #endif /* not MSDOS, or __TURBOC__ */
--#endif /* not sparc. */
--#endif /* not GNU C. */
--#endif /* alloca not defined. */
-+#endif /* not sparc */
-+#endif /* not GNU C */
-+#endif /* alloca not defined */
-+#endif /* YYSTACK_USE_ALLOCA not defined */
-
--/* This is the parser code that is written into each bison parser
-- when the %semantic_parser declaration is not specified in the grammar.
-- It was written by Richard Stallman by simplifying the hairy parser
-- used when %semantic_parser is specified. */
-+#ifdef YYSTACK_USE_ALLOCA
-+#define YYSTACK_ALLOC alloca
-+#else
-+#define YYSTACK_ALLOC malloc
-+#endif
-
- /* Note: there must be only one dollar sign in this file.
- It is replaced by the list of actions, each action
-@@ -1271,8 +1291,8 @@
- #define yyclearin (yychar = YYEMPTY)
- #define YYEMPTY -2
- #define YYEOF 0
--#define YYACCEPT return(0)
--#define YYABORT return(1)
-+#define YYACCEPT goto yyacceptlab
-+#define YYABORT goto yyabortlab
- #define YYERROR goto yyerrlab1
- /* Like YYERROR except do call yyerror.
- This remains here temporarily to ease the
-@@ -1353,12 +1373,12 @@
- #ifndef YYMAXDEPTH
- #define YYMAXDEPTH 10000
- #endif
--
--/* Prevent warning if -Wstrict-prototypes. */
--#ifdef __GNUC__
--int yyparse (void);
--#endif
-
-+/* Define __yy_memcpy. Note that the size argument
-+ should be passed with type unsigned int, because that is what the non-GCC
-+ definitions require. With GCC, __builtin_memcpy takes an arg
-+ of type size_t, but it can handle unsigned int. */
-+
- #if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
- #define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
- #else /* not GNU C or C++ */
-@@ -1370,7 +1390,7 @@
- __yy_memcpy (to, from, count)
- char *to;
- char *from;
-- int count;
-+ unsigned int count;
- {
- register char *f = from;
- register char *t = to;
-@@ -1385,10 +1405,10 @@
- /* This is the most reliable way to avoid incompatibilities
- in available built-in functions on various systems. */
- static void
--__yy_memcpy (char *to, char *from, int count)
-+__yy_memcpy (char *to, char *from, unsigned int count)
- {
-- register char *f = from;
- register char *t = to;
-+ register char *f = from;
- register int i = count;
-
- while (i-- > 0)
-@@ -1398,7 +1418,7 @@
- #endif
- #endif
-
--#line 196 "/usr/lib/bison.simple"
-+#line 217 "/usr/pkg/share/bison.simple"
-
- /* The user can define YYPARSE_PARAM as the name of an argument to be passed
- into yyparse. The argument should have type void *.
-@@ -1419,6 +1439,15 @@
- #define YYPARSE_PARAM_DECL
- #endif /* not YYPARSE_PARAM */
-
-+/* Prevent warning if -Wstrict-prototypes. */
-+#ifdef __GNUC__
-+#ifdef YYPARSE_PARAM
-+int yyparse (void *);
-+#else
-+int yyparse (void);
-+#endif
-+#endif
-+
- int
- yyparse(YYPARSE_PARAM_ARG)
- YYPARSE_PARAM_DECL
-@@ -1447,6 +1476,7 @@
- #endif
-
- int yystacksize = YYINITDEPTH;
-+ int yyfree_stacks = 0;
-
- #ifdef YYPURE
- int yychar;
-@@ -1531,18 +1561,32 @@
- if (yystacksize >= YYMAXDEPTH)
- {
- yyerror("parser stack overflow");
-+ if (yyfree_stacks)
-+ {
-+ free (yyss);
-+ free (yyvs);
-+#ifdef YYLSP_NEEDED
-+ free (yyls);
-+#endif
-+ }
- return 2;
- }
- yystacksize *= 2;
- if (yystacksize > YYMAXDEPTH)
- yystacksize = YYMAXDEPTH;
-- yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
-- __yy_memcpy ((char *)yyss, (char *)yyss1, size * sizeof (*yyssp));
-- yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
-- __yy_memcpy ((char *)yyvs, (char *)yyvs1, size * sizeof (*yyvsp));
-+#ifndef YYSTACK_USE_ALLOCA
-+ yyfree_stacks = 1;
-+#endif
-+ yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
-+ __yy_memcpy ((char *)yyss, (char *)yyss1,
-+ size * (unsigned int) sizeof (*yyssp));
-+ yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
-+ __yy_memcpy ((char *)yyvs, (char *)yyvs1,
-+ size * (unsigned int) sizeof (*yyvsp));
- #ifdef YYLSP_NEEDED
-- yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
-- __yy_memcpy ((char *)yyls, (char *)yyls1, size * sizeof (*yylsp));
-+ yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
-+ __yy_memcpy ((char *)yyls, (char *)yyls1,
-+ size * (unsigned int) sizeof (*yylsp));
- #endif
- #endif /* no yyoverflow */
-
-@@ -3745,7 +3789,7 @@
- break;}
- }
- /* the action file gets copied in in place of this dollarsign */
--#line 498 "/usr/lib/bison.simple"
-+#line 543 "/usr/pkg/share/bison.simple"
-
- yyvsp -= yylen;
- yyssp -= yylen;
-@@ -3817,7 +3861,7 @@
- count = 0;
- /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
- for (x = (yyn < 0 ? -yyn : 0);
-- x < (sizeof(yytname) / sizeof(char *)); x++)
-+ x < (int)(sizeof(yytname) / sizeof(char *)); x++)
- if (yycheck[x + yyn] == x)
- size += strlen(yytname[x]) + 15, count++;
- msg = (char *) malloc(size + 15);
-@@ -3829,7 +3873,7 @@
- {
- count = 0;
- for (x = (yyn < 0 ? -yyn : 0);
-- x < (sizeof(yytname) / sizeof(char *)); x++)
-+ x < (int)(sizeof(yytname) / sizeof(char *)); x++)
- if (yycheck[x + yyn] == x)
- {
- strcat(msg, count == 0 ? ", expecting `" : " or `");
-@@ -3940,6 +3984,30 @@
-
- yystate = yyn;
- goto yynewstate;
-+
-+ yyacceptlab:
-+ /* YYACCEPT comes here. */
-+ if (yyfree_stacks)
-+ {
-+ free (yyss);
-+ free (yyvs);
-+#ifdef YYLSP_NEEDED
-+ free (yyls);
-+#endif
-+ }
-+ return 0;
-+
-+ yyabortlab:
-+ /* YYABORT comes here. */
-+ if (yyfree_stacks)
-+ {
-+ free (yyss);
-+ free (yyvs);
-+#ifdef YYLSP_NEEDED
-+ free (yyls);
-+#endif
-+ }
-+ return 1;
- }
- #line 2238 "c-parse.y"
-
diff --git a/lang/gcc/patches/patch-bp b/lang/gcc/patches/patch-bp
deleted file mode 100644
index f3befb54bbd..00000000000
--- a/lang/gcc/patches/patch-bp
+++ /dev/null
@@ -1,128 +0,0 @@
-$NetBSD: patch-bp,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/c-parse.h.orig 2000/07/26 00:17:22 1.1.1.1
-+++ ../gcc-2.95.3/gcc/c-parse.h 2002/01/30 15:16:07 1.4
-@@ -1,64 +1,64 @@
- typedef union {long itype; tree ttype; enum tree_code code;
- char *filename; int lineno; int ends_in_label; } YYSTYPE;
--#define IDENTIFIER 258
--#define TYPENAME 259
--#define SCSPEC 260
--#define TYPESPEC 261
--#define TYPE_QUAL 262
--#define CONSTANT 263
--#define STRING 264
--#define ELLIPSIS 265
--#define SIZEOF 266
--#define ENUM 267
--#define STRUCT 268
--#define UNION 269
--#define IF 270
--#define ELSE 271
--#define WHILE 272
--#define DO 273
--#define FOR 274
--#define SWITCH 275
--#define CASE 276
--#define DEFAULT 277
--#define BREAK 278
--#define CONTINUE 279
--#define RETURN 280
--#define GOTO 281
--#define ASM_KEYWORD 282
--#define TYPEOF 283
--#define ALIGNOF 284
--#define ATTRIBUTE 285
--#define EXTENSION 286
--#define LABEL 287
--#define REALPART 288
--#define IMAGPART 289
--#define ASSIGN 290
--#define OROR 291
--#define ANDAND 292
--#define EQCOMPARE 293
--#define ARITHCOMPARE 294
--#define LSHIFT 295
--#define RSHIFT 296
--#define UNARY 297
--#define PLUSPLUS 298
--#define MINUSMINUS 299
--#define HYPERUNARY 300
--#define POINTSAT 301
--#define INTERFACE 302
--#define IMPLEMENTATION 303
--#define END 304
--#define SELECTOR 305
--#define DEFS 306
--#define ENCODE 307
--#define CLASSNAME 308
--#define PUBLIC 309
--#define PRIVATE 310
--#define PROTECTED 311
--#define PROTOCOL 312
--#define OBJECTNAME 313
--#define CLASS 314
--#define ALIAS 315
--#define OBJC_STRING 316
-+#define IDENTIFIER 257
-+#define TYPENAME 258
-+#define SCSPEC 259
-+#define TYPESPEC 260
-+#define TYPE_QUAL 261
-+#define CONSTANT 262
-+#define STRING 263
-+#define ELLIPSIS 264
-+#define SIZEOF 265
-+#define ENUM 266
-+#define STRUCT 267
-+#define UNION 268
-+#define IF 269
-+#define ELSE 270
-+#define WHILE 271
-+#define DO 272
-+#define FOR 273
-+#define SWITCH 274
-+#define CASE 275
-+#define DEFAULT 276
-+#define BREAK 277
-+#define CONTINUE 278
-+#define RETURN 279
-+#define GOTO 280
-+#define ASM_KEYWORD 281
-+#define TYPEOF 282
-+#define ALIGNOF 283
-+#define ATTRIBUTE 284
-+#define EXTENSION 285
-+#define LABEL 286
-+#define REALPART 287
-+#define IMAGPART 288
-+#define ASSIGN 289
-+#define OROR 290
-+#define ANDAND 291
-+#define EQCOMPARE 292
-+#define ARITHCOMPARE 293
-+#define LSHIFT 294
-+#define RSHIFT 295
-+#define UNARY 296
-+#define PLUSPLUS 297
-+#define MINUSMINUS 298
-+#define HYPERUNARY 299
-+#define POINTSAT 300
-+#define INTERFACE 301
-+#define IMPLEMENTATION 302
-+#define END 303
-+#define SELECTOR 304
-+#define DEFS 305
-+#define ENCODE 306
-+#define CLASSNAME 307
-+#define PUBLIC 308
-+#define PRIVATE 309
-+#define PROTECTED 310
-+#define PROTOCOL 311
-+#define OBJECTNAME 312
-+#define CLASS 313
-+#define ALIAS 314
-+#define OBJC_STRING 315
-
-
- extern YYSTYPE yylval;
diff --git a/lang/gcc/patches/patch-bq b/lang/gcc/patches/patch-bq
deleted file mode 100644
index 62301daa3f6..00000000000
--- a/lang/gcc/patches/patch-bq
+++ /dev/null
@@ -1,126 +0,0 @@
-$NetBSD: patch-bq,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/cccp.c.orig 2001/04/23 11:58:03 1.1.1.2
-+++ ../gcc-2.95.3/gcc/cccp.c 2001/08/14 01:13:34 1.2
-@@ -2779,7 +2779,8 @@
- RECACHE;
- continue;
- }
-- if (!traditional) {
-+ if (!(traditional || put_out_comments))
-+ {
- error_with_line (line_for_error (start_line),
- "unterminated string or character constant");
- if (multiline_string_line) {
-@@ -2797,7 +2798,8 @@
- ++op->lineno;
- /* Traditionally, end of line ends a string constant with no error.
- So exit the loop and record the new line. */
-- if (traditional) {
-+ if (traditional || put_out_comments)
-+ {
- beg_of_line = ibp;
- goto while2end;
- }
-@@ -2868,7 +2870,7 @@
- break;
-
- case '/':
-- if (ip->macro != 0)
-+ if (ip->macro != 0 && put_out_comments == 0)
- goto randomchar;
- if (*ibp == '\\' && ibp[1] == '\n')
- newline_fix (ibp);
-@@ -3777,7 +3779,8 @@
- limit = ip->buf + ip->length;
- unterminated = 0;
- already_output = 0;
-- keep_comments = traditional && kt->type == T_DEFINE;
-+ keep_comments = kt->type == T_DEFINE && (traditional ||
-+ put_out_comments);
- /* #import is defined only in Objective C, or when on the NeXT. */
- if (kt->type == T_IMPORT
- && !(objc || lookup ((U_CHAR *) "__NeXT__", -1, -1)))
-@@ -4025,7 +4028,7 @@
- while (xp != ip->bufp)
- *cp++ = *xp++;
- /* Delete or replace the slash. */
-- else if (traditional)
-+ else if (traditional || put_out_comments)
- cp--;
- else
- cp[-1] = ' ';
-@@ -6208,6 +6211,20 @@
- stringify = p;
- }
- break;
-+ case '/':
-+ if (expected_delimiter != '\0') /* No comments inside strings. */
-+ break;
-+ if (*p == '*') {
-+ while (p < limit) {
-+ *exp_p++ = *p++;
-+ if (p[0] == '*' && p[1] == '/') {
-+ *exp_p++ = *p++;
-+ *exp_p++ = *p++;
-+ break;
-+ }
-+ }
-+ }
-+ break;
- }
- } else {
- /* In -traditional mode, recognize arguments inside strings and
-@@ -6240,11 +6257,22 @@
- /* If we find a comment that wasn't removed by handle_directive,
- this must be -traditional. So replace the comment with
- nothing at all. */
-- exp_p--;
-- while (++p < limit) {
-- if (p[0] == '*' && p[1] == '/') {
-- p += 2;
-- break;
-+ if (!put_out_comments) {
-+ exp_p--;
-+ while (++p < limit) {
-+ if (p[0] == '*' && p[1] == '/') {
-+ p += 2;
-+ break;
-+ }
-+ }
-+ } else {
-+ while (p < limit) {
-+ *exp_p++ = *p++;
-+ if (p[0] == '*' && p[1] == '/') {
-+ *exp_p++ = *p++;
-+ *exp_p++ = *p++;
-+ break;
-+ }
- }
- }
- #if 0
-@@ -7243,6 +7271,24 @@
- pcp_inside_if = 0;
- delete_macro (save_defined); /* clean up special symbol */
-
-+ if (put_out_comments) {
-+ char *ptr, *eptr = temp_obuf.buf + temp_obuf.length;
-+
-+ for (ptr = temp_obuf.buf; ptr < eptr; ptr++) {
-+ if (*ptr == '/' && ptr + 1 < eptr && ptr[1] == '*') {
-+ *ptr++ = ' ';
-+ *ptr++ = ' ';
-+ while (ptr < eptr) {
-+ if (*ptr == '*' && ptr + 1 < eptr && ptr[1] == '/') {
-+ *ptr++ = ' ';
-+ *ptr++ = ' ';
-+ break;
-+ } else
-+ *ptr++ = ' ';
-+ }
-+ }
-+ }
-+ }
- temp_obuf.buf[temp_obuf.length] = '\n';
- value = parse_c_expression ((char *) temp_obuf.buf,
- warn_undef && !instack[indepth].system_header_p);
diff --git a/lang/gcc/patches/patch-br b/lang/gcc/patches/patch-br
deleted file mode 100644
index a8b47c7169e..00000000000
--- a/lang/gcc/patches/patch-br
+++ /dev/null
@@ -1,12 +0,0 @@
-$NetBSD: patch-br,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/collect2.c.orig 2001/04/23 11:58:04 1.1.1.2
-+++ ../gcc-2.95.3/gcc/collect2.c 2001/04/23 12:23:27 1.3
-@@ -54,7 +54,6 @@
- #define obstack_chunk_alloc xmalloc
- #define obstack_chunk_free free
-
--extern char *make_temp_file PROTO ((char *));
-
- /* On certain systems, we have code that works by scanning the object file
- directly. But this code uses system-specific header files and library
diff --git a/lang/gcc/patches/patch-bs b/lang/gcc/patches/patch-bs
deleted file mode 100644
index 2752bab74da..00000000000
--- a/lang/gcc/patches/patch-bs
+++ /dev/null
@@ -1,1005 +0,0 @@
-$NetBSD: patch-bs,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/configure.orig 2001/04/23 11:58:06 1.1.1.2
-+++ ../gcc-2.95.3/gcc/configure 2002/03/24 18:05:57 1.18
-@@ -1311,7 +1311,7 @@
- fi
-
- # Find some useful tools
--for ac_prog in gawk mawk nawk awk
-+for ac_prog in mawk gawk nawk awk
- do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
- set dummy $ac_prog; ac_word=$2
-@@ -2932,7 +2932,7 @@
- hppa*-*-*)
- cpu_type=pa
- ;;
-- m68000-*-*)
-+ m680[01]0-*-*)
- cpu_type=m68k
- ;;
- mips*-*-*)
-@@ -2944,6 +2944,9 @@
- pyramid-*-*)
- cpu_type=pyr
- ;;
-+ sh*-*-*)
-+ cpu_type=sh
-+ ;;
- sparc*-*-*)
- cpu_type=sparc
- ;;
-@@ -2952,11 +2955,20 @@
- tm_file=${cpu_type}/${cpu_type}.h
- xm_file=${cpu_type}/xm-${cpu_type}.h
-
-- # Common parts for linux-gnu and openbsd systems
-+ # Common parts for some multiplatform systems
- case $machine in
- *-*-linux-gnu*)
- xm_defines="HAVE_ATEXIT POSIX BSTRING"
- ;;
-+ *-*-netbsd*)
-+ case $machine in
-+ *-*-netbsdelf*) tm_file=${cpu_type}/netbsd-elf.h;;
-+ *) tm_file=${cpu_type}/netbsd.h;;
-+ esac
-+ tmake_file="t-libc-ok t-netbsd"
-+ xm_file="${xm_file} xm-netbsd.h"
-+ xmake_file=none
-+ ;;
- *-*-openbsd*)
- tm_file=${cpu_type}/openbsd.h
- tmake_file="t-libc-ok t-openbsd"
-@@ -3060,20 +3072,15 @@
- fi
- ;;
- alpha*-*-netbsd*)
-- tm_file="${tm_file} alpha/elf.h alpha/netbsd.h alpha/netbsd-elf.h"
- target_cpu_default="MASK_GAS"
-- tmake_file="alpha/t-crtbe alpha/t-ieee"
-- extra_parts="crtbegin.o crtend.o"
-- xmake_file=none
-+ tmake_file="${tmake_file} alpha/t-ieee"
- gas=yes gnu_ld=yes
- ;;
--
- alpha*-*-openbsd*)
- # default x-alpha is only appropriate for dec-osf.
- target_cpu_default="MASK_GAS"
- tmake_file="alpha/t-ieee"
- ;;
--
- alpha*-dec-osf*)
- if test x$stabs = xyes
- then
-@@ -3170,12 +3177,13 @@
- tm_file=arm/semiaof.h
- tmake_file=arm/t-semiaof
- ;;
-- arm*-*-netbsd*)
-- tm_file=arm/netbsd.h
-+ arm*-*-netbsdelf*)
- xm_file="arm/xm-netbsd.h ${xm_file}"
-- tmake_file="t-netbsd arm/t-netbsd"
-- use_collect2=yes
-+ gas=yes gnu_ld=yes
- ;;
-+ arm*-*-netbsd*)
-+ gas=yes
-+ ;;
- arm*-*-linux-gnuaout*) # ARM GNU/Linux with a.out
- cpu_type=arm
- xmake_file=x-linux
-@@ -3568,10 +3576,10 @@
- tm_file=i386/freebsd.h
- tmake_file=t-freebsd
- ;;
-+ i[34567]86-*-netbsdelf*)
-+ gas=yes gnu_ld=yes
-+ ;;
- i[34567]86-*-netbsd*)
-- tm_file=i386/netbsd.h
-- tmake_file=t-netbsd
-- use_collect2=yes
- ;;
- i[34567]86-*-openbsd*)
- # we need collect2 until our bug is fixed...
-@@ -4371,12 +4379,21 @@
- tmake_file=m68k/t-lynx
- extra_headers=math-68881.h
- float_format=m68k
-+ ;;
-+ m68*-*-netbsdelf*)
-+ case $machine in
-+ m68010-*)
-+ target_cpu_default="0"
-+ ;;
-+ *)
-+ target_cpu_default="MASK_68020|MASK_68881|MASK_BITFIELD"
-+ ;;
-+ esac
-+ float_format=m68k
-+ gas=yes gnu_ld=yes
- ;;
-- m68k*-*-netbsd*)
-- tm_file=m68k/netbsd.h
-- tmake_file=t-netbsd
-+ m68*-*-netbsd*)
- float_format=m68k
-- use_collect2=yes
- ;;
- m68k*-*-openbsd*)
- float_format=m68k
-@@ -4691,10 +4708,12 @@
- use_collect2=yes
- fi
- ;;
-- mipsel-*-netbsd* | mips-dec-netbsd*) # Decstation running NetBSD
-- tm_file=mips/netbsd.h
-- # On NetBSD, the headers are already okay, except for math.h.
-- tmake_file=t-netbsd
-+ mipseb*-*-netbsd*)
-+ tmake_file="${tmake_file} mips/t-mipseb"
-+ gas=yes gnu_ld=yes
-+ ;;
-+ mips*-*-netbsd*)
-+ gas=yes gnu_ld=yes
- ;;
- mips*-*-linux*) # Linux MIPS, either endian.
- xmake_file=x-linux
-@@ -5040,11 +5059,6 @@
- use_collect2=yes
- ;;
- ns32k-*-netbsd*)
-- tm_file=ns32k/netbsd.h
-- xm_file="ns32k/xm-netbsd.h ${xm_file}"
-- # On NetBSD, the headers are already okay, except for math.h.
-- tmake_file=t-netbsd
-- use_collect2=yes
- ;;
- pdp11-*-bsd)
- tm_file="${tm_file} pdp11/2bsd.h"
-@@ -5069,6 +5083,10 @@
- romp-*-openbsd*)
- # Nothing special
- ;;
-+ powerpc-*-netbsd*)
-+ tmake_file="${tmake_file} rs6000/t-rs6000"
-+ xm_file="rs6000/xm-sysv4.h xm-netbsd.h"
-+ ;;
- powerpc-*-openbsd*)
- tmake_file="${tmake_file} rs6000/t-rs6000 rs6000/t-openbsd"
- ;;
-@@ -5311,6 +5329,13 @@
- tm_file=sh/elf.h
- float_format=sh
- ;;
-+ sh-*-netbsdelf*)
-+ float_format=sh
-+ ;;
-+ shle-*-netbsdelf*)
-+ tm_file="sh/netbsd-elf.h sh/netbsd-elf-little.h"
-+ float_format=sh;
-+ ;;
- sh-*-rtemself*)
- tmake_file="sh/t-sh t-rtems"
- tm_file=sh/rtemself.h
-@@ -5339,10 +5364,12 @@
- tmake_file=sparc/t-sparcbare
- tm_file="sparc/aout.h libgloss.h"
- ;;
-+ sparc-*-netbsdelf*)
-+ tmake_file="${tmake_file} sparc/t-netbsd"
-+ gas=yes gnu_ld=yes
-+ ;;
- sparc-*-netbsd*)
-- tm_file=sparc/netbsd.h
-- tmake_file=t-netbsd
-- use_collect2=yes
-+ tmake_file="${tmake_file} sparc/t-netbsd"
- ;;
- sparc-*-openbsd*)
- # we need collect2 until our bug is fixed...
-@@ -5532,6 +5559,11 @@
- extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
- gnu_ld=yes
- ;;
-+ sparc64-*-netbsd*)
-+ tm_file=sparc/netbsd64.h
-+ xm_file="sparc/xm-sp64.h xm-netbsd.h"
-+ gas=yes gnu_ld=yes
-+ ;;
- # This hasn't been upgraded to GCC 2.
- # tahoe-harris-*) # Harris tahoe, using COFF.
- # tm_file=tahoe/harris.h
-@@ -5579,10 +5611,8 @@
- float_format=vax
- ;;
- vax-*-netbsd*)
-- tm_file="${tm_file} netbsd.h vax/netbsd.h"
-- tmake_file=t-netbsd
- float_format=vax
-- use_collect2=yes
-+ gas=yes gnu_ld=yes
- ;;
- vax-*-openbsd*)
- tmake_file="${tmake_file} vax/t-openbsd"
-@@ -5873,6 +5903,12 @@
- esac
- fi
-
-+case $target in
-+ alpha*|sparc64*)
-+ build_xm_file="${build_xm_file} xm-target64.h"
-+ host_xm_file="${host_xm_file} xm-target64.h";;
-+esac
-+
- # Handle cpp installation.
- if test x$enable_cpp != xno
- then
-@@ -5959,8 +5995,8 @@
- /*) realsrcdir=${srcdir};;
- *) realsrcdir=../${srcdir};;
- esac
-- CC=${CC_FOR_BUILD} ${realsrcdir}/configure \
-- --target=$target --host=$build --build=$build
-+ CC=${CC_FOR_BUILD} LIBS= ${realsrcdir}/configure \
-+ --target=$target --host=$build --build=$build || exit 1
-
- # We just finished tests for the build machine, so rename
- # the file auto-build.h in the gcc directory.
-@@ -6062,7 +6098,7 @@
-
-
- echo $ac_n "checking for strerror in -lcposix""... $ac_c" 1>&6
--echo "configure:6066: checking for strerror in -lcposix" >&5
-+echo "configure:6102: checking for strerror in -lcposix" >&5
- ac_lib_var=`echo cposix'_'strerror | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-@@ -6070,7 +6106,7 @@
- ac_save_LIBS="$LIBS"
- LIBS="-lcposix $LIBS"
- cat > conftest.$ac_ext <<EOF
--#line 6074 "configure"
-+#line 6110 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
-@@ -6081,7 +6117,7 @@
- strerror()
- ; return 0; }
- EOF
--if { (eval echo configure:6085: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:6121: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
-@@ -6104,12 +6140,12 @@
-
-
- echo $ac_n "checking for working const""... $ac_c" 1>&6
--echo "configure:6108: checking for working const" >&5
-+echo "configure:6144: checking for working const" >&5
- if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
--#line 6113 "configure"
-+#line 6149 "configure"
- #include "confdefs.h"
-
- int main() {
-@@ -6158,7 +6194,7 @@
-
- ; return 0; }
- EOF
--if { (eval echo configure:6162: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:6198: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_c_const=yes
- else
-@@ -6179,21 +6215,21 @@
- fi
-
- echo $ac_n "checking for inline""... $ac_c" 1>&6
--echo "configure:6183: checking for inline" >&5
-+echo "configure:6219: checking for inline" >&5
- if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- ac_cv_c_inline=no
- for ac_kw in inline __inline__ __inline; do
- cat > conftest.$ac_ext <<EOF
--#line 6190 "configure"
-+#line 6226 "configure"
- #include "confdefs.h"
-
- int main() {
- } $ac_kw foo() {
- ; return 0; }
- EOF
--if { (eval echo configure:6197: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:6233: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_c_inline=$ac_kw; break
- else
-@@ -6219,12 +6255,12 @@
- esac
-
- echo $ac_n "checking for off_t""... $ac_c" 1>&6
--echo "configure:6223: checking for off_t" >&5
-+echo "configure:6259: checking for off_t" >&5
- if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
--#line 6228 "configure"
-+#line 6264 "configure"
- #include "confdefs.h"
- #include <sys/types.h>
- #if STDC_HEADERS
-@@ -6252,12 +6288,12 @@
- fi
-
- echo $ac_n "checking for size_t""... $ac_c" 1>&6
--echo "configure:6256: checking for size_t" >&5
-+echo "configure:6292: checking for size_t" >&5
- if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
--#line 6261 "configure"
-+#line 6297 "configure"
- #include "confdefs.h"
- #include <sys/types.h>
- #if STDC_HEADERS
-@@ -6287,19 +6323,19 @@
- # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
- # for constant arguments. Useless!
- echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
--echo "configure:6291: checking for working alloca.h" >&5
-+echo "configure:6327: checking for working alloca.h" >&5
- if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
--#line 6296 "configure"
-+#line 6332 "configure"
- #include "confdefs.h"
- #include <alloca.h>
- int main() {
- char *p = alloca(2 * sizeof(int));
- ; return 0; }
- EOF
--if { (eval echo configure:6303: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:6339: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- ac_cv_header_alloca_h=yes
- else
-@@ -6320,12 +6356,12 @@
- fi
-
- echo $ac_n "checking for alloca""... $ac_c" 1>&6
--echo "configure:6324: checking for alloca" >&5
-+echo "configure:6360: checking for alloca" >&5
- if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
--#line 6329 "configure"
-+#line 6365 "configure"
- #include "confdefs.h"
-
- #ifdef __GNUC__
-@@ -6353,7 +6389,7 @@
- char *p = (char *) alloca(1);
- ; return 0; }
- EOF
--if { (eval echo configure:6357: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:6393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- ac_cv_func_alloca_works=yes
- else
-@@ -6385,12 +6421,12 @@
-
-
- echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
--echo "configure:6389: checking whether alloca needs Cray hooks" >&5
-+echo "configure:6425: checking whether alloca needs Cray hooks" >&5
- if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
--#line 6394 "configure"
-+#line 6430 "configure"
- #include "confdefs.h"
- #if defined(CRAY) && ! defined(CRAY2)
- webecray
-@@ -6415,12 +6451,12 @@
- if test $ac_cv_os_cray = yes; then
- for ac_func in _getb67 GETB67 getb67; do
- echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
--echo "configure:6419: checking for $ac_func" >&5
-+echo "configure:6455: checking for $ac_func" >&5
- if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
--#line 6424 "configure"
-+#line 6460 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-@@ -6443,7 +6479,7 @@
-
- ; return 0; }
- EOF
--if { (eval echo configure:6447: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:6483: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
- else
-@@ -6470,7 +6506,7 @@
- fi
-
- echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
--echo "configure:6474: checking stack direction for C alloca" >&5
-+echo "configure:6510: checking stack direction for C alloca" >&5
- if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -6478,7 +6514,7 @@
- ac_cv_c_stack_direction=0
- else
- cat > conftest.$ac_ext <<EOF
--#line 6482 "configure"
-+#line 6518 "configure"
- #include "confdefs.h"
- find_stack_direction ()
- {
-@@ -6497,7 +6533,7 @@
- exit (find_stack_direction() < 0);
- }
- EOF
--if { (eval echo configure:6501: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-+if { (eval echo configure:6537: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
- ac_cv_c_stack_direction=1
- else
-@@ -6522,17 +6558,17 @@
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
--echo "configure:6526: checking for $ac_hdr" >&5
-+echo "configure:6562: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
--#line 6531 "configure"
-+#line 6567 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:6536: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:6572: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
- rm -rf conftest*
-@@ -6561,12 +6597,12 @@
- for ac_func in getpagesize
- do
- echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
--echo "configure:6565: checking for $ac_func" >&5
-+echo "configure:6601: checking for $ac_func" >&5
- if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
--#line 6570 "configure"
-+#line 6606 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-@@ -6589,7 +6625,7 @@
-
- ; return 0; }
- EOF
--if { (eval echo configure:6593: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:6629: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
- else
-@@ -6614,7 +6650,7 @@
- done
-
- echo $ac_n "checking for working mmap""... $ac_c" 1>&6
--echo "configure:6618: checking for working mmap" >&5
-+echo "configure:6654: checking for working mmap" >&5
- if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -6622,7 +6658,7 @@
- ac_cv_func_mmap_fixed_mapped=no
- else
- cat > conftest.$ac_ext <<EOF
--#line 6626 "configure"
-+#line 6662 "configure"
- #include "confdefs.h"
-
- /* Thanks to Mike Haertel and Jim Avera for this test.
-@@ -6762,7 +6798,7 @@
- }
-
- EOF
--if { (eval echo configure:6766: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-+if { (eval echo configure:6802: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
- ac_cv_func_mmap_fixed_mapped=yes
- else
-@@ -6790,17 +6826,17 @@
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
--echo "configure:6794: checking for $ac_hdr" >&5
-+echo "configure:6830: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
--#line 6799 "configure"
-+#line 6835 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:6804: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:6840: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
- rm -rf conftest*
-@@ -6830,12 +6866,12 @@
- strdup __argz_count __argz_stringify __argz_next
- do
- echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
--echo "configure:6834: checking for $ac_func" >&5
-+echo "configure:6870: checking for $ac_func" >&5
- if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
--#line 6839 "configure"
-+#line 6875 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-@@ -6858,7 +6894,7 @@
-
- ; return 0; }
- EOF
--if { (eval echo configure:6862: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:6898: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
- else
-@@ -6887,12 +6923,12 @@
- for ac_func in stpcpy
- do
- echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
--echo "configure:6891: checking for $ac_func" >&5
-+echo "configure:6927: checking for $ac_func" >&5
- if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
--#line 6896 "configure"
-+#line 6932 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-@@ -6915,7 +6951,7 @@
-
- ; return 0; }
- EOF
--if { (eval echo configure:6919: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:6955: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
- else
-@@ -6949,19 +6985,19 @@
-
- if test $ac_cv_header_locale_h = yes; then
- echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
--echo "configure:6953: checking for LC_MESSAGES" >&5
-+echo "configure:6989: checking for LC_MESSAGES" >&5
- if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
--#line 6958 "configure"
-+#line 6994 "configure"
- #include "confdefs.h"
- #include <locale.h>
- int main() {
- return LC_MESSAGES
- ; return 0; }
- EOF
--if { (eval echo configure:6965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:7001: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- am_cv_val_LC_MESSAGES=yes
- else
-@@ -6982,7 +7018,7 @@
- fi
- fi
- echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6
--echo "configure:6986: checking whether NLS is requested" >&5
-+echo "configure:7022: checking whether NLS is requested" >&5
- # Check whether --enable-nls or --disable-nls was given.
- if test "${enable_nls+set}" = set; then
- enableval="$enable_nls"
-@@ -7002,7 +7038,7 @@
- EOF
-
- echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6
--echo "configure:7006: checking whether included gettext is requested" >&5
-+echo "configure:7042: checking whether included gettext is requested" >&5
- # Check whether --with-included-gettext or --without-included-gettext was given.
- if test "${with_included_gettext+set}" = set; then
- withval="$with_included_gettext"
-@@ -7021,17 +7057,17 @@
-
- ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for libintl.h""... $ac_c" 1>&6
--echo "configure:7025: checking for libintl.h" >&5
-+echo "configure:7061: checking for libintl.h" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
--#line 7030 "configure"
-+#line 7066 "configure"
- #include "confdefs.h"
- #include <libintl.h>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:7035: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:7071: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
- rm -rf conftest*
-@@ -7048,19 +7084,19 @@
- if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- echo $ac_n "checking for gettext in libc""... $ac_c" 1>&6
--echo "configure:7052: checking for gettext in libc" >&5
-+echo "configure:7088: checking for gettext in libc" >&5
- if eval "test \"`echo '$''{'gt_cv_func_gettext_libc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
--#line 7057 "configure"
-+#line 7093 "configure"
- #include "confdefs.h"
- #include <libintl.h>
- int main() {
- return (int) gettext ("")
- ; return 0; }
- EOF
--if { (eval echo configure:7064: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:7100: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- gt_cv_func_gettext_libc=yes
- else
-@@ -7076,7 +7112,7 @@
-
- if test "$gt_cv_func_gettext_libc" != "yes"; then
- echo $ac_n "checking for bindtextdomain in -lintl""... $ac_c" 1>&6
--echo "configure:7080: checking for bindtextdomain in -lintl" >&5
-+echo "configure:7116: checking for bindtextdomain in -lintl" >&5
- ac_lib_var=`echo intl'_'bindtextdomain | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-@@ -7084,7 +7120,7 @@
- ac_save_LIBS="$LIBS"
- LIBS="-lintl $LIBS"
- cat > conftest.$ac_ext <<EOF
--#line 7088 "configure"
-+#line 7124 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
-@@ -7095,7 +7131,7 @@
- bindtextdomain()
- ; return 0; }
- EOF
--if { (eval echo configure:7099: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:7135: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
-@@ -7111,12 +7147,12 @@
- if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- echo $ac_n "checking for gettext in libintl""... $ac_c" 1>&6
--echo "configure:7115: checking for gettext in libintl" >&5
-+echo "configure:7151: checking for gettext in libintl" >&5
- if eval "test \"`echo '$''{'gt_cv_func_gettext_libintl'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- echo $ac_n "checking for gettext in -lintl""... $ac_c" 1>&6
--echo "configure:7120: checking for gettext in -lintl" >&5
-+echo "configure:7156: checking for gettext in -lintl" >&5
- ac_lib_var=`echo intl'_'gettext | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-@@ -7124,7 +7160,7 @@
- ac_save_LIBS="$LIBS"
- LIBS="-lintl $LIBS"
- cat > conftest.$ac_ext <<EOF
--#line 7128 "configure"
-+#line 7164 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error. */
- /* We use char because int might match the return type of a gcc2
-@@ -7135,7 +7171,7 @@
- gettext()
- ; return 0; }
- EOF
--if { (eval echo configure:7139: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:7175: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
-@@ -7174,7 +7210,7 @@
- # Extract the first word of "msgfmt", so it can be a program name with args.
- set dummy msgfmt; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:7178: checking for $ac_word" >&5
-+echo "configure:7214: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -7208,12 +7244,12 @@
- for ac_func in dcgettext
- do
- echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
--echo "configure:7212: checking for $ac_func" >&5
-+echo "configure:7248: checking for $ac_func" >&5
- if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
--#line 7217 "configure"
-+#line 7253 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-@@ -7236,7 +7272,7 @@
-
- ; return 0; }
- EOF
--if { (eval echo configure:7240: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:7276: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
- else
-@@ -7263,7 +7299,7 @@
- # Extract the first word of "gmsgfmt", so it can be a program name with args.
- set dummy gmsgfmt; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:7267: checking for $ac_word" >&5
-+echo "configure:7303: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -7299,7 +7335,7 @@
- # Extract the first word of "xgettext", so it can be a program name with args.
- set dummy xgettext; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:7303: checking for $ac_word" >&5
-+echo "configure:7339: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -7331,7 +7367,7 @@
- fi
-
- cat > conftest.$ac_ext <<EOF
--#line 7335 "configure"
-+#line 7371 "configure"
- #include "confdefs.h"
-
- int main() {
-@@ -7339,7 +7375,7 @@
- return _nl_msg_cat_cntr
- ; return 0; }
- EOF
--if { (eval echo configure:7343: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:7379: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- CATOBJEXT=.gmo
- DATADIRNAME=share
-@@ -7362,7 +7398,7 @@
-
- if test "$CATOBJEXT" = "NONE"; then
- echo $ac_n "checking whether catgets can be used""... $ac_c" 1>&6
--echo "configure:7366: checking whether catgets can be used" >&5
-+echo "configure:7402: checking whether catgets can be used" >&5
- # Check whether --with-catgets or --without-catgets was given.
- if test "${with_catgets+set}" = set; then
- withval="$with_catgets"
-@@ -7375,7 +7411,7 @@
-
- if test "$nls_cv_use_catgets" = "yes"; then
- echo $ac_n "checking for main in -li""... $ac_c" 1>&6
--echo "configure:7379: checking for main in -li" >&5
-+echo "configure:7415: checking for main in -li" >&5
- ac_lib_var=`echo i'_'main | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-@@ -7383,14 +7419,14 @@
- ac_save_LIBS="$LIBS"
- LIBS="-li $LIBS"
- cat > conftest.$ac_ext <<EOF
--#line 7387 "configure"
-+#line 7423 "configure"
- #include "confdefs.h"
-
- int main() {
- main()
- ; return 0; }
- EOF
--if { (eval echo configure:7394: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:7430: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
- else
-@@ -7418,12 +7454,12 @@
- fi
-
- echo $ac_n "checking for catgets""... $ac_c" 1>&6
--echo "configure:7422: checking for catgets" >&5
-+echo "configure:7458: checking for catgets" >&5
- if eval "test \"`echo '$''{'ac_cv_func_catgets'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
--#line 7427 "configure"
-+#line 7463 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char catgets(); below. */
-@@ -7446,7 +7482,7 @@
-
- ; return 0; }
- EOF
--if { (eval echo configure:7450: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:7486: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_catgets=yes"
- else
-@@ -7468,7 +7504,7 @@
- # Extract the first word of "gencat", so it can be a program name with args.
- set dummy gencat; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:7472: checking for $ac_word" >&5
-+echo "configure:7508: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_GENCAT'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -7504,7 +7540,7 @@
- # Extract the first word of "gmsgfmt", so it can be a program name with args.
- set dummy gmsgfmt; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:7508: checking for $ac_word" >&5
-+echo "configure:7544: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -7541,7 +7577,7 @@
- # Extract the first word of "msgfmt", so it can be a program name with args.
- set dummy msgfmt; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:7545: checking for $ac_word" >&5
-+echo "configure:7581: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -7576,7 +7612,7 @@
- # Extract the first word of "xgettext", so it can be a program name with args.
- set dummy xgettext; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:7580: checking for $ac_word" >&5
-+echo "configure:7616: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -7634,7 +7670,7 @@
- # Extract the first word of "msgfmt", so it can be a program name with args.
- set dummy msgfmt; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:7638: checking for $ac_word" >&5
-+echo "configure:7674: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -7668,7 +7704,7 @@
- # Extract the first word of "gmsgfmt", so it can be a program name with args.
- set dummy gmsgfmt; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:7672: checking for $ac_word" >&5
-+echo "configure:7708: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -7704,7 +7740,7 @@
- # Extract the first word of "xgettext", so it can be a program name with args.
- set dummy xgettext; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:7708: checking for $ac_word" >&5
-+echo "configure:7744: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -7797,7 +7833,7 @@
- LINGUAS=
- else
- echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6
--echo "configure:7801: checking for catalogs to be installed" >&5
-+echo "configure:7837: checking for catalogs to be installed" >&5
- NEW_LINGUAS=
- for lang in ${LINGUAS=$ALL_LINGUAS}; do
- case "$ALL_LINGUAS" in
-@@ -7825,17 +7861,17 @@
- if test "$CATOBJEXT" = ".cat"; then
- ac_safe=`echo "linux/version.h" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for linux/version.h""... $ac_c" 1>&6
--echo "configure:7829: checking for linux/version.h" >&5
-+echo "configure:7865: checking for linux/version.h" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
- else
- cat > conftest.$ac_ext <<EOF
--#line 7834 "configure"
-+#line 7870 "configure"
- #include "confdefs.h"
- #include <linux/version.h>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:7839: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:7875: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
- rm -rf conftest*
-@@ -8069,7 +8105,7 @@
-
- # Figure out what assembler alignment features are present.
- echo $ac_n "checking assembler alignment features""... $ac_c" 1>&6
--echo "configure:8073: checking assembler alignment features" >&5
-+echo "configure:8109: checking assembler alignment features" >&5
- gcc_cv_as=
- gcc_cv_as_alignment_features=
- gcc_cv_as_gas_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/gas
-@@ -8190,7 +8226,7 @@
- echo "$ac_t""$gcc_cv_as_alignment_features" 1>&6
-
- echo $ac_n "checking assembler subsection support""... $ac_c" 1>&6
--echo "configure:8194: checking assembler subsection support" >&5
-+echo "configure:8230: checking assembler subsection support" >&5
- gcc_cv_as_subsections=
- if test x$gcc_cv_as != x; then
- # Check if we have .subsection
-@@ -8230,7 +8266,7 @@
- echo "$ac_t""$gcc_cv_as_subsections" 1>&6
-
- echo $ac_n "checking assembler instructions""... $ac_c" 1>&6
--echo "configure:8234: checking assembler instructions" >&5
-+echo "configure:8270: checking assembler instructions" >&5
- gcc_cv_as_instructions=
- if test x$gcc_cv_as != x; then
- set "filds fists" "filds mem; fists mem"
diff --git a/lang/gcc/patches/patch-bt b/lang/gcc/patches/patch-bt
deleted file mode 100644
index 71b4b726551..00000000000
--- a/lang/gcc/patches/patch-bt
+++ /dev/null
@@ -1,247 +0,0 @@
-$NetBSD: patch-bt,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/configure.in.orig 2001/04/23 11:58:07 1.1.1.2
-+++ ../gcc-2.95.3/gcc/configure.in 2002/03/24 18:05:57 1.18
-@@ -498,7 +498,9 @@
- hppa*-*-*)
- cpu_type=pa
- ;;
-- m68000-*-*)
-+changequote(,)dnl
-+ m680[01]0-*-*)
-+changequote([,])dnl
- cpu_type=m68k
- ;;
- mips*-*-*)
-@@ -510,6 +512,9 @@
- pyramid-*-*)
- cpu_type=pyr
- ;;
-+ sh*-*-*)
-+ cpu_type=sh
-+ ;;
- sparc*-*-*)
- cpu_type=sparc
- ;;
-@@ -518,11 +523,20 @@
- tm_file=${cpu_type}/${cpu_type}.h
- xm_file=${cpu_type}/xm-${cpu_type}.h
-
-- # Common parts for linux-gnu and openbsd systems
-+ # Common parts for some multiplatform systems
- case $machine in
- *-*-linux-gnu*)
- xm_defines="HAVE_ATEXIT POSIX BSTRING"
- ;;
-+ *-*-netbsd*)
-+ case $machine in
-+ *-*-netbsdelf*) tm_file=${cpu_type}/netbsd-elf.h;;
-+ *) tm_file=${cpu_type}/netbsd.h;;
-+ esac
-+ tmake_file="t-libc-ok t-netbsd"
-+ xm_file="${xm_file} xm-netbsd.h"
-+ xmake_file=none
-+ ;;
- *-*-openbsd*)
- tm_file=${cpu_type}/openbsd.h
- tmake_file="t-libc-ok t-openbsd"
-@@ -626,20 +640,15 @@
- fi
- ;;
- alpha*-*-netbsd*)
-- tm_file="${tm_file} alpha/elf.h alpha/netbsd.h alpha/netbsd-elf.h"
- target_cpu_default="MASK_GAS"
-- tmake_file="alpha/t-crtbe alpha/t-ieee"
-- extra_parts="crtbegin.o crtend.o"
-- xmake_file=none
-+ tmake_file="${tmake_file} alpha/t-ieee"
- gas=yes gnu_ld=yes
- ;;
--
- alpha*-*-openbsd*)
- # default x-alpha is only appropriate for dec-osf.
- target_cpu_default="MASK_GAS"
- tmake_file="alpha/t-ieee"
- ;;
--
- alpha*-dec-osf*)
- if test x$stabs = xyes
- then
-@@ -742,11 +751,12 @@
- tm_file=arm/semiaof.h
- tmake_file=arm/t-semiaof
- ;;
-- arm*-*-netbsd*)
-- tm_file=arm/netbsd.h
-+ arm*-*-netbsdelf*)
- xm_file="arm/xm-netbsd.h ${xm_file}"
-- tmake_file="t-netbsd arm/t-netbsd"
-- use_collect2=yes
-+ gas=yes gnu_ld=yes
-+ ;;
-+ arm*-*-netbsd*)
-+ gas=yes
- ;;
- arm*-*-linux-gnuaout*) # ARM GNU/Linux with a.out
- cpu_type=arm
-@@ -1171,11 +1181,13 @@
- tmake_file=t-freebsd
- ;;
- changequote(,)dnl
-+ i[34567]86-*-netbsdelf*)
-+changequote([,])dnl
-+ gas=yes gnu_ld=yes
-+ ;;
-+changequote(,)dnl
- i[34567]86-*-netbsd*)
- changequote([,])dnl
-- tm_file=i386/netbsd.h
-- tmake_file=t-netbsd
-- use_collect2=yes
- ;;
- changequote(,)dnl
- i[34567]86-*-openbsd*)
-@@ -2043,12 +2055,21 @@
- tmake_file=m68k/t-lynx
- extra_headers=math-68881.h
- float_format=m68k
-+ ;;
-+ m68*-*-netbsdelf*)
-+ case $machine in
-+ m68010-*)
-+ target_cpu_default="0"
-+ ;;
-+ *)
-+ target_cpu_default="MASK_68020|MASK_68881|MASK_BITFIELD"
-+ ;;
-+ esac
-+ float_format=m68k
-+ gas=yes gnu_ld=yes
- ;;
-- m68k*-*-netbsd*)
-- tm_file=m68k/netbsd.h
-- tmake_file=t-netbsd
-+ m68*-*-netbsd*)
- float_format=m68k
-- use_collect2=yes
- ;;
- m68k*-*-openbsd*)
- float_format=m68k
-@@ -2363,10 +2384,12 @@
- use_collect2=yes
- fi
- ;;
-- mipsel-*-netbsd* | mips-dec-netbsd*) # Decstation running NetBSD
-- tm_file=mips/netbsd.h
-- # On NetBSD, the headers are already okay, except for math.h.
-- tmake_file=t-netbsd
-+ mipseb*-*-netbsd*)
-+ tmake_file="${tmake_file} mips/t-mipseb"
-+ gas=yes gnu_ld=yes
-+ ;;
-+ mips*-*-netbsd*)
-+ gas=yes gnu_ld=yes
- ;;
- mips*-*-linux*) # Linux MIPS, either endian.
- xmake_file=x-linux
-@@ -2724,11 +2747,6 @@
- use_collect2=yes
- ;;
- ns32k-*-netbsd*)
-- tm_file=ns32k/netbsd.h
-- xm_file="ns32k/xm-netbsd.h ${xm_file}"
-- # On NetBSD, the headers are already okay, except for math.h.
-- tmake_file=t-netbsd
-- use_collect2=yes
- ;;
- pdp11-*-bsd)
- tm_file="${tm_file} pdp11/2bsd.h"
-@@ -2753,6 +2771,10 @@
- romp-*-openbsd*)
- # Nothing special
- ;;
-+ powerpc-*-netbsd*)
-+ tmake_file="${tmake_file} rs6000/t-rs6000"
-+ xm_file="rs6000/xm-sysv4.h xm-netbsd.h"
-+ ;;
- powerpc-*-openbsd*)
- tmake_file="${tmake_file} rs6000/t-rs6000 rs6000/t-openbsd"
- ;;
-@@ -3005,6 +3027,13 @@
- tm_file=sh/elf.h
- float_format=sh
- ;;
-+ sh-*-netbsdelf*)
-+ float_format=sh
-+ ;;
-+ shle-*-netbsdelf*)
-+ tm_file="sh/netbsd-elf.h sh/netbsd-elf-little.h"
-+ float_format=sh;
-+ ;;
- sh-*-rtemself*)
- tmake_file="sh/t-sh t-rtems"
- tm_file=sh/rtemself.h
-@@ -3033,10 +3062,12 @@
- tmake_file=sparc/t-sparcbare
- tm_file="sparc/aout.h libgloss.h"
- ;;
-+ sparc-*-netbsdelf*)
-+ tmake_file="${tmake_file} sparc/t-netbsd"
-+ gas=yes gnu_ld=yes
-+ ;;
- sparc-*-netbsd*)
-- tm_file=sparc/netbsd.h
-- tmake_file=t-netbsd
-- use_collect2=yes
-+ tmake_file="${tmake_file} sparc/t-netbsd"
- ;;
- sparc-*-openbsd*)
- # we need collect2 until our bug is fixed...
-@@ -3228,6 +3259,11 @@
- extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
- gnu_ld=yes
- ;;
-+ sparc64-*-netbsd*)
-+ tm_file=sparc/netbsd64.h
-+ xm_file="sparc/xm-sp64.h xm-netbsd.h"
-+ gas=yes gnu_ld=yes
-+ ;;
- # This hasn't been upgraded to GCC 2.
- # tahoe-harris-*) # Harris tahoe, using COFF.
- # tm_file=tahoe/harris.h
-@@ -3275,10 +3311,8 @@
- float_format=vax
- ;;
- vax-*-netbsd*)
-- tm_file="${tm_file} netbsd.h vax/netbsd.h"
-- tmake_file=t-netbsd
- float_format=vax
-- use_collect2=yes
-+ gas=yes gnu_ld=yes
- ;;
- vax-*-openbsd*)
- tmake_file="${tmake_file} vax/t-openbsd"
-@@ -3569,6 +3603,12 @@
- esac
- fi
-
-+case $target in
-+ alpha*|sparc64*)
-+ build_xm_file="${build_xm_file} xm-target64.h"
-+ host_xm_file="${host_xm_file} xm-target64.h";;
-+esac
-+
- # Handle cpp installation.
- if test x$enable_cpp != xno
- then
-@@ -3655,8 +3695,8 @@
- /*) realsrcdir=${srcdir};;
- *) realsrcdir=../${srcdir};;
- esac
-- CC=${CC_FOR_BUILD} ${realsrcdir}/configure \
-- --target=$target --host=$build --build=$build
-+ CC=${CC_FOR_BUILD} LIBS= ${realsrcdir}/configure \
-+ --target=$target --host=$build --build=$build || exit 1
-
- # We just finished tests for the build machine, so rename
- # the file auto-build.h in the gcc directory.
diff --git a/lang/gcc/patches/patch-bu b/lang/gcc/patches/patch-bu
deleted file mode 100644
index 3b8e5432865..00000000000
--- a/lang/gcc/patches/patch-bu
+++ /dev/null
@@ -1,16 +0,0 @@
-$NetBSD: patch-bu,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/cppspec.c.orig 2000/07/26 00:17:25 1.1.1.1
-+++ ../gcc-2.95.3/gcc/cppspec.c 2001/08/14 13:46:14 1.2
-@@ -85,7 +85,11 @@
- int need_E = 1;
-
- /* Do we need to insert -no-gcc? */
-+#if 0
- int need_no_gcc = 1;
-+#endif
-+ /* XXX - For NetBSD backwards compatibility */
-+ int need_no_gcc = 0;
-
- /* Have we seen an input file? */
- int seen_input = 0;
diff --git a/lang/gcc/patches/patch-bv b/lang/gcc/patches/patch-bv
deleted file mode 100644
index 464aa688558..00000000000
--- a/lang/gcc/patches/patch-bv
+++ /dev/null
@@ -1,12 +0,0 @@
-$NetBSD: patch-bv,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/dwarf2out.c.orig 2001/04/23 11:58:11 1.1.1.2
-+++ ../gcc-2.95.3/gcc/dwarf2out.c 2001/12/07 02:40:36 1.2
-@@ -1801,6 +1801,7 @@
- }
- fputc ('\n', asm_out_file);
-
-+ ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
- ASM_OUTPUT_DWARF_ADDR (asm_out_file, "__EXCEPTION_TABLE__");
- if (flag_debug_asm)
- fprintf (asm_out_file, "\t%s pointer to exception region info",
diff --git a/lang/gcc/patches/patch-bw b/lang/gcc/patches/patch-bw
deleted file mode 100644
index 382ea33941e..00000000000
--- a/lang/gcc/patches/patch-bw
+++ /dev/null
@@ -1,20 +0,0 @@
-$NetBSD: patch-bw,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/emit-rtl.c.orig 2001/04/23 11:58:12 1.1.1.2
-+++ ../gcc-2.95.3/gcc/emit-rtl.c 2001/04/23 12:23:27 1.3
-@@ -1382,6 +1382,15 @@
- val = ((val & 0xffffffff) ^ 0x80000000) - 0x80000000;
- return GEN_INT (val);
- }
-+#if HOST_BITS_PER_WIDE_INT >= 64
-+ else if (BITS_PER_WORD >= 64 && i <= 1)
-+ {
-+ val = k[i*2 + ! WORDS_BIG_ENDIAN];
-+ val = (((val & 0xffffffff) ^ 0x80000000) - 0x80000000) << 32;
-+ val |= (HOST_WIDE_INT) k[i*2 + WORDS_BIG_ENDIAN] & 0xffffffff;
-+ return GEN_INT (val);
-+ }
-+#endif
- else
- abort ();
- }
diff --git a/lang/gcc/patches/patch-bx b/lang/gcc/patches/patch-bx
deleted file mode 100644
index ffc60b92977..00000000000
--- a/lang/gcc/patches/patch-bx
+++ /dev/null
@@ -1,23 +0,0 @@
-$NetBSD: patch-bx,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/frame.c.orig 2001/04/23 11:58:18 1.1.1.2
-+++ ../gcc-2.95.3/gcc/frame.c 2001/12/07 02:41:13 1.3
-@@ -40,6 +40,7 @@
- #ifndef inhibit_libc
- /* fixproto guarantees these system headers exist. */
- #include <stdlib.h>
-+#include <string.h>
- #include <unistd.h>
- #endif
-
-@@ -572,6 +573,10 @@
-
- if (strcmp (c->augmentation, "eh") == 0)
- {
-+ /* Handle the blank space > 4 byte alignment may have forced. */
-+ if (sizeof(void *) > 4)
-+ p += (sizeof(void *) - 4);
-+
- c->eh_ptr = read_pointer (p);
- p += sizeof (void *);
- }
diff --git a/lang/gcc/patches/patch-by b/lang/gcc/patches/patch-by
deleted file mode 100644
index c9082935738..00000000000
--- a/lang/gcc/patches/patch-by
+++ /dev/null
@@ -1,81 +0,0 @@
-$NetBSD: patch-by,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/gcc.c.orig 2001/04/23 11:58:19 1.1.1.2
-+++ ../gcc-2.95.3/gcc/gcc.c 2001/08/14 13:36:10 1.2
-@@ -3057,6 +3057,7 @@
- (such as cpp) rather than those of the host system. */
- /* Use 2 as fourth arg meaning try just the machine as a suffix,
- as well as trying the machine and the version. */
-+#ifndef NETBSD_NATIVE
- #ifndef OS2
- add_prefix (&exec_prefixes, standard_exec_prefix, "BINUTILS",
- 0, 2, warn_std_ptr);
-@@ -3108,6 +3109,7 @@
- add_prefix (&startfile_prefixes,
- concat (tooldir_prefix, "lib", dir_separator_str, NULL_PTR),
- "BINUTILS", 0, 0, NULL_PTR);
-+#endif
-
- /* More prefixes are enabled in main, after we read the specs file
- and determine whether this is cross-compilation or not. */
-@@ -4796,9 +4798,11 @@
-
- /* Read specs from a file if there is one. */
-
-+#ifndef NETBSD_NATIVE
- machine_suffix = concat (spec_machine, dir_separator_str,
- spec_version, dir_separator_str, NULL_PTR);
- just_machine_suffix = concat (spec_machine, dir_separator_str, NULL_PTR);
-+#endif
-
- specs_file = find_a_file (&startfile_prefixes, "specs", R_OK);
- /* Read the specs file unless it is a default one. */
-@@ -4807,6 +4811,7 @@
- else
- init_spec ();
-
-+#ifndef NETBSD_NATIVE
- /* We need to check standard_exec_prefix/just_machine_suffix/specs
- for any override of as, ld and libraries. */
- specs_file = (char *) alloca (strlen (standard_exec_prefix)
-@@ -4818,14 +4823,17 @@
- strcat (specs_file, "specs");
- if (access (specs_file, R_OK) == 0)
- read_specs (specs_file, TRUE);
-+#endif
-
- /* If not cross-compiling, look for startfiles in the standard places. */
- if (*cross_compile == '0')
- {
- #ifdef MD_EXEC_PREFIX
- add_prefix (&exec_prefixes, md_exec_prefix, "GCC", 0, 0, NULL_PTR);
-+#ifndef NETBSD_NATIVE
- add_prefix (&startfile_prefixes, md_exec_prefix, "GCC", 0, 0, NULL_PTR);
- #endif
-+#endif
-
- #ifdef MD_STARTFILE_PREFIX
- add_prefix (&startfile_prefixes, md_startfile_prefix, "GCC",
-@@ -4865,10 +4873,12 @@
- NULL_PTR, 0, 0, NULL_PTR);
- }
-
-+#ifndef NETBSD_NATIVE
- add_prefix (&startfile_prefixes, standard_startfile_prefix_1,
- "BINUTILS", 0, 0, NULL_PTR);
- add_prefix (&startfile_prefixes, standard_startfile_prefix_2,
- "BINUTILS", 0, 0, NULL_PTR);
-+#endif
- #if 0 /* Can cause surprises, and one can use -B./ instead. */
- add_prefix (&startfile_prefixes, "./", NULL_PTR, 0, 1, NULL_PTR);
- #endif
-@@ -4923,7 +4933,9 @@
-
- if (print_search_dirs)
- {
-+#ifndef NETBSD_NATIVE
- printf ("install: %s%s\n", standard_exec_prefix, machine_suffix);
-+#endif
- printf ("programs: %s\n", build_search_list (&exec_prefixes, "", 0));
- printf ("libraries: %s\n", build_search_list (&startfile_prefixes, "", 0));
- exit (0);
diff --git a/lang/gcc/patches/patch-bz b/lang/gcc/patches/patch-bz
deleted file mode 100644
index 5e58c32c39e..00000000000
--- a/lang/gcc/patches/patch-bz
+++ /dev/null
@@ -1,12 +0,0 @@
-$NetBSD: patch-bz,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/libgcc2.c.orig 2000/07/26 00:17:35 1.1.1.1
-+++ ../gcc-2.95.3/gcc/libgcc2.c 2001/10/05 07:04:04 1.2
-@@ -39,6 +39,7 @@
- #ifndef inhibit_libc
- /* fixproto guarantees these system headers exist. */
- #include <stdlib.h>
-+#include <string.h>
- #include <unistd.h>
- #endif
-
diff --git a/lang/gcc/patches/patch-ca b/lang/gcc/patches/patch-ca
deleted file mode 100644
index 88697a5cabc..00000000000
--- a/lang/gcc/patches/patch-ca
+++ /dev/null
@@ -1,21 +0,0 @@
-$NetBSD: patch-ca,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/loop.c.orig 2001/04/23 11:58:27 1.1.1.2
-+++ ../gcc-2.95.3/gcc/loop.c 2001/12/06 18:50:34 1.2
-@@ -4103,11 +4103,11 @@
- in-between when biv_toal_increment returns nonzero both times
- but we test it here in case some day some real cfg analysis
- gets used to set always_computable. */
-- && ((loop_insn_first_p (bl2->biv->insn, bl->biv->insn)
-- && no_labels_between_p (bl2->biv->insn, bl->biv->insn))
-- || (! reg_used_between_p (bl->biv->src_reg, bl->biv->insn,
-- bl2->biv->insn)
-- && no_jumps_between_p (bl->biv->insn, bl2->biv->insn)))
-+ && (loop_insn_first_p (bl2->biv->insn, bl->biv->insn)
-+ ? no_labels_between_p (bl2->biv->insn, bl->biv->insn)
-+ : (! reg_used_between_p (bl->biv->src_reg, bl->biv->insn,
-+ bl2->biv->insn)
-+ && no_jumps_between_p (bl->biv->insn, bl2->biv->insn)))
- && validate_change (bl->biv->insn,
- &SET_SRC (single_set (bl->biv->insn)),
- copy_rtx (src), 0))
diff --git a/lang/gcc/patches/patch-cb b/lang/gcc/patches/patch-cb
deleted file mode 100644
index db48d859cb8..00000000000
--- a/lang/gcc/patches/patch-cb
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD: patch-cb,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/reload1.c.orig 2001/04/23 11:58:33 1.1.1.2
-+++ ../gcc-2.95.3/gcc/reload1.c 2001/06/01 02:42:26 1.2
-@@ -1277,7 +1277,7 @@
-
- /* Get the operand values and constraints out of the insn. */
- decode_asm_operands (pat, recog_operand, recog_operand_loc,
-- constraints, operand_mode);
-+ (const char **)constraints, operand_mode);
-
- /* For every operand, see what registers are allowed. */
- for (i = 0; i < noperands; i++)
diff --git a/lang/gcc/patches/patch-cc b/lang/gcc/patches/patch-cc
deleted file mode 100644
index 9ec7529d563..00000000000
--- a/lang/gcc/patches/patch-cc
+++ /dev/null
@@ -1,20 +0,0 @@
-$NetBSD: patch-cc,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/tm.texi.orig 2000/07/26 00:17:43 1.1.1.1
-+++ ../gcc-2.95.3/gcc/tm.texi 2001/03/06 05:21:47 1.2
-@@ -5598,6 +5598,15 @@
- If this macro is not defined, then the variable name is defined in the
- usual manner as a label (by means of @code{ASM_OUTPUT_LABEL}).
-
-+@findex ASM_DECLARE_REGISTER_GLOBAL
-+@item ASM_DECLARE_REGISTER_GLOBAL (@var{stream}, @var{decl}, @var{regno}, @var{name})
-+A C statement (sans semicolon) to output to the stdio stream
-+@var{stream} any text necessary for claiming a register @var{regno}
-+for a global variable @var{decl} with name @var{name}.
-+
-+If you don't define this macro, that is equivalent to defining it to do
-+nothing.
-+
- @findex ASM_FINISH_DECLARE_OBJECT
- @item ASM_FINISH_DECLARE_OBJECT (@var{stream}, @var{decl}, @var{toplevel}, @var{atend})
- A C statement (sans semicolon) to finish up declaring a variable name
diff --git a/lang/gcc/patches/patch-cd b/lang/gcc/patches/patch-cd
deleted file mode 100644
index 0598dede954..00000000000
--- a/lang/gcc/patches/patch-cd
+++ /dev/null
@@ -1,14 +0,0 @@
-$NetBSD: patch-cd,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/varasm.c.orig 2001/04/23 11:58:40 1.1.1.2
-+++ ../gcc-2.95.3/gcc/varasm.c 2001/04/23 12:23:27 1.3
-@@ -706,6 +706,9 @@
- {
- /* Make this register global, so not usable for anything
- else. */
-+#ifdef ASM_DECLARE_REGISTER_GLOBAL
-+ ASM_DECLARE_REGISTER_GLOBAL (asm_out_file, decl, reg_number, name);
-+#endif
- nregs = HARD_REGNO_NREGS (reg_number, DECL_MODE (decl));
- while (nregs > 0)
- globalize_reg (reg_number + --nregs);
diff --git a/lang/gcc/patches/patch-ce b/lang/gcc/patches/patch-ce
deleted file mode 100644
index 7452a2c2a15..00000000000
--- a/lang/gcc/patches/patch-ce
+++ /dev/null
@@ -1,7 +0,0 @@
-$NetBSD: patch-ce,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/gcc/version.c.orig 2001/04/23 11:58:41 1.1.1.2
-+++ ../gcc-2.95.3/gcc/version.c 2001/12/19 21:32:51 1.2
-@@ -1 +1 @@
--char *version_string = "2.95.3 20010315 (release)";
-+char *version_string = "2.95.3 20010315 (release) (NetBSD nb1)";
diff --git a/lang/gcc/patches/patch-cf b/lang/gcc/patches/patch-cf
deleted file mode 100644
index 771a723bf16..00000000000
--- a/lang/gcc/patches/patch-cf
+++ /dev/null
@@ -1,12 +0,0 @@
-$NetBSD: patch-cf,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/libf2c/libU77/hostnm_.c.orig 2000/07/26 00:19:25 1.1.1.1
-+++ ../gcc-2.95.3/libf2c/libU77/hostnm_.c 2001/05/30 07:02:39 1.2
-@@ -36,6 +36,7 @@
-
- #if HAVE_GETHOSTNAME
- ret = gethostname (name, Lname);
-+ name[Lname - 1] = '\0';
- if (ret==0) {
- /* Pad with blanks (assuming gethostname will make an error
- return if it can't fit in the null). */
diff --git a/lang/gcc/patches/patch-cg b/lang/gcc/patches/patch-cg
deleted file mode 100644
index 93fbeb08830..00000000000
--- a/lang/gcc/patches/patch-cg
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD: patch-cg,v 1.2 2002/03/28 10:11:54 jmc Exp $
-
---- ../gcc-2.95.3/libio/Makefile.in.orig 2000/07/26 00:19:30 1.1.1.1
-+++ ../gcc-2.95.3/libio/Makefile.in 2001/12/19 21:32:50 1.2
-@@ -17,7 +17,7 @@
-
- srcdir = .
-
--VERSION = 2.8.0
-+VERSION = 2.8.0nb1
- # The config file (overriden by Linux).
- _G_CONFIG_H=_G_config.h
- tooldir = $(exec_prefix)/$(target)
diff --git a/lang/gcc/patches/patch-ch b/lang/gcc/patches/patch-ch
deleted file mode 100644
index 84151baaf69..00000000000
--- a/lang/gcc/patches/patch-ch
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD: patch-ch,v 1.2 2002/03/28 10:11:55 jmc Exp $
-
---- ../gcc-2.95.3/libio/iopopen.c.orig 2000/07/26 00:19:32 1.1.1.1
-+++ ../gcc-2.95.3/libio/iopopen.c 2001/07/26 17:18:39 1.2
-@@ -31,7 +31,7 @@
- #ifdef __STDC__
- #include <stdlib.h>
- #endif
--#ifdef _LIBC
-+#if defined(_LIBC) || defined(__NetBSD__)
- # include <unistd.h>
- #endif
- #include <sys/types.h>
diff --git a/lang/gcc/patches/patch-ci b/lang/gcc/patches/patch-ci
deleted file mode 100644
index 498894658fc..00000000000
--- a/lang/gcc/patches/patch-ci
+++ /dev/null
@@ -1,12 +0,0 @@
-$NetBSD: patch-ci,v 1.2 2002/03/28 10:11:55 jmc Exp $
-
---- ../gcc-2.95.3/libobjc/objc/runtime.h.orig 2000/07/26 00:19:41 1.1.1.1
-+++ ../gcc-2.95.3/libobjc/objc/runtime.h 2001/01/31 15:22:51 1.2
-@@ -29,6 +29,7 @@
- #include <stdarg.h> /* for varargs and va_list's */
-
- #include <stdio.h>
-+#include <string.h>
- #include <ctype.h>
-
- #include <stddef.h> /* so noone else will get system versions */
diff --git a/lang/gcc/patches/patch-cj b/lang/gcc/patches/patch-cj
deleted file mode 100644
index 5a1cfd9391d..00000000000
--- a/lang/gcc/patches/patch-cj
+++ /dev/null
@@ -1,15 +0,0 @@
-$NetBSD: patch-cj,v 1.2 2002/03/28 10:11:55 jmc Exp $
-
---- ../gcc-2.95.3/libobjc/Object.m.orig 2000/07/26 00:19:39 1.1.1.1
-+++ ../gcc-2.95.3/libobjc/Object.m 2001/10/05 07:38:22 1.2
-@@ -320,9 +320,8 @@
- object_get_class_name(self), sel_get_name(aSel)];
- }
-
--#ifdef __alpha__
-+/* XXX Why not just include <string.h>? */
- extern size_t strlen(const char*);
--#endif
-
- - error:(const char *)aString, ...
- {
diff --git a/lang/gcc/patches/patch-ck b/lang/gcc/patches/patch-ck
deleted file mode 100644
index 1fff201aacf..00000000000
--- a/lang/gcc/patches/patch-ck
+++ /dev/null
@@ -1,17 +0,0 @@
-$NetBSD: patch-ck,v 1.2 2002/03/28 10:11:55 jmc Exp $
-
---- ../gcc-2.95.3/libstdc++/stl/stl_alloc.h.orig 2000/07/26 00:19:47 1.1.1.1
-+++ ../gcc-2.95.3/libstdc++/stl/stl_alloc.h 2001/05/30 10:51:55 1.2
-@@ -1050,6 +1050,12 @@
-
- #undef __PRIVATE
-
-+#ifdef __GNUG__
-+// instantiated in stlinst.cc
-+extern template __malloc_alloc_template<0>;
-+extern template __default_alloc_template<__NODE_ALLOCATOR_THREADS, 0>;
-+#endif
-+
- #endif /* __SGI_STL_INTERNAL_ALLOC_H */
-
- // Local Variables:
diff --git a/lang/gcc/patches/patch-cl b/lang/gcc/patches/patch-cl
deleted file mode 100644
index 18968d2125c..00000000000
--- a/lang/gcc/patches/patch-cl
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD: patch-cl,v 1.2 2002/03/28 10:11:55 jmc Exp $
-
---- ../gcc-2.95.3/libstdc++/Makefile.in.orig 2001/04/23 12:02:01 1.1.1.2
-+++ ../gcc-2.95.3/libstdc++/Makefile.in 2001/12/19 21:32:50 1.2
-@@ -14,7 +14,7 @@
- # along with this library; see the file COPYING. If not, write to the Free
- # Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
--VERSION = 2.10.0
-+VERSION = 2.10.0nb1
- INTERFACE = 3
-
- gxx_include_dir=${includedir}/g++
diff --git a/lang/gcc/patches/patch-cm b/lang/gcc/patches/patch-cm
deleted file mode 100644
index 28eb62f5dee..00000000000
--- a/lang/gcc/patches/patch-cm
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD: patch-cm,v 1.2 2002/03/28 10:11:55 jmc Exp $
-
---- ../gcc-2.95.3/texinfo/configure.orig 2000/07/26 00:19:50 1.1.1.1
-+++ ../gcc-2.95.3/texinfo/configure 2001/12/19 21:32:50 1.2
-@@ -707,7 +707,7 @@
-
- PACKAGE=texinfo
-
--VERSION=3.12
-+VERSION=3.12nb1
-
- if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
- { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
diff --git a/lang/gcc/patches/patch-cn b/lang/gcc/patches/patch-cn
deleted file mode 100644
index f2a5aaede8e..00000000000
--- a/lang/gcc/patches/patch-cn
+++ /dev/null
@@ -1,35 +0,0 @@
-$NetBSD: patch-cn,v 1.3 2002/03/28 10:11:55 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/arm/xm-netbsd.h.orig 2000/07/26 00:18:17 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/arm/xm-netbsd.h 2002/03/24 18:05:58 1.3
-@@ -1,5 +1,27 @@
--/* Configuration for GCC for ARM running NetBSD as host. */
-+/* Configuration for GCC for ARM running NetBSD.
-+ Copyright (C) 2002 Free Software Foundation, Inc.
-+ Contributed by Wasabi Systems, Inc.
-
--#ifndef SYS_SIGLIST_DECLARED
--#define SYS_SIGLIST_DECLARED
-+This file is part of GNU CC.
-+
-+GNU CC is free software; you can redistribute it and/or modify
-+it under the terms of the GNU General Public License as published by
-+the Free Software Foundation; either version 2, or (at your option)
-+any later version.
-+
-+GNU CC is distributed in the hope that it will be useful,
-+but WITHOUT ANY WARRANTY; without even the implied warranty of
-+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+GNU General Public License for more details.
-+
-+You should have received a copy of the GNU General Public License
-+along with GNU CC; see the file COPYING. If not, write to
-+the Free Software Foundation, 59 Temple Place - Suite 330,
-+Boston, MA 02111-1307, USA. */
-+
-+/* ARM ELF uses packed enums, so we need to make sure bitfields
-+ that use them are ints, so that the bitfield doesn't exceed
-+ the width of the type. */
-+#ifndef ONLY_INT_FIELDS
-+#define ONLY_INT_FIELDS
- #endif
diff --git a/lang/gcc/patches/patch-co b/lang/gcc/patches/patch-co
deleted file mode 100644
index 54e74755a95..00000000000
--- a/lang/gcc/patches/patch-co
+++ /dev/null
@@ -1,24 +0,0 @@
-$NetBSD: patch-co,v 1.1 2002/03/28 10:11:55 jmc Exp $
-
---- ../gcc-2.95.3/gcc/config/mips/mips.h.orig 2000/07/26 00:18:38 1.1.1.1
-+++ ../gcc-2.95.3/gcc/config/mips/mips.h 2002/01/04 05:29:39 1.2
-@@ -2606,18 +2606,16 @@
- { \
- if (TARGET_MIPS16) \
- sorry ("mips16 function profiling"); \
-- fprintf (FILE, "\t.set\tnoreorder\n"); \
- fprintf (FILE, "\t.set\tnoat\n"); \
- fprintf (FILE, "\tmove\t%s,%s\t\t# save current return address\n", \
- reg_names[GP_REG_FIRST + 1], reg_names[GP_REG_FIRST + 31]); \
-- fprintf (FILE, "\tjal\t_mcount\n"); \
- fprintf (FILE, \
- "\t%s\t%s,%s,%d\t\t# _mcount pops 2 words from stack\n", \
- TARGET_64BIT ? "dsubu" : "subu", \
- reg_names[STACK_POINTER_REGNUM], \
- reg_names[STACK_POINTER_REGNUM], \
- Pmode == DImode ? 16 : 8); \
-- fprintf (FILE, "\t.set\treorder\n"); \
-+ fprintf (FILE, "\tjal\t_mcount\n"); \
- fprintf (FILE, "\t.set\tat\n"); \
- }
-
diff --git a/lang/gcc/patches/patch-cp b/lang/gcc/patches/patch-cp
deleted file mode 100644
index 647c0ce7170..00000000000
--- a/lang/gcc/patches/patch-cp
+++ /dev/null
@@ -1,5093 +0,0 @@
-$NetBSD$
-
---- ../gcc-2.95.3/texinfo/texinfo.tex.orig 2001/04/23 12:02:20 1.1.1.3
-+++ ../gcc-2.95.3/texinfo/texinfo.tex 2001/08/14 03:01:31 1.1.1.4
-@@ -1,52 +1,72 @@
--%% TeX macros to handle Texinfo files.
--%% $Id: texinfo.tex,v 1.2 1998/03/24 17:58:28 law Exp $
--
--% Copyright (C) 1985, 86, 88, 90, 91, 92, 93,
--% 94, 95, 96, 97 Free Software Foundation, Inc.
--
--%This texinfo.tex file is free software; you can redistribute it and/or
--%modify it under the terms of the GNU General Public License as
--%published by the Free Software Foundation; either version 2, or (at
--%your option) any later version.
--
--%This texinfo.tex file is distributed in the hope that it will be
--%useful, but WITHOUT ANY WARRANTY; without even the implied warranty
--%of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
--%General Public License for more details.
--
--%You should have received a copy of the GNU General Public License
--%along with this texinfo.tex file; see the file COPYING. If not, write
--%to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
--%Boston, MA 02111-1307, USA.
--
--
--%In other words, you are welcome to use, share and improve this program.
--%You are forbidden to forbid anyone else to use, share and improve
--%what you give them. Help stamp out software-hoarding!
--
--
--% Send bug reports to bug-texinfo@prep.ai.mit.edu.
--% Please include a *precise* test case in each bug report.
--
--
--% Make it possible to create a .fmt file just by loading this file:
--% if the underlying format is not loaded, start by loading it now.
--% Added by gildea November 1993.
-+% texinfo.tex -- TeX macros to handle Texinfo files.
-+%
-+% Load plain if necessary, i.e., if running under initex.
- \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
-+%
-+\def\texinfoversion{2000-05-28.15}
-+%
-+% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
-+% Free Software Foundation, Inc.
-+%
-+% This texinfo.tex file is free software; you can redistribute it and/or
-+% modify it under the terms of the GNU General Public License as
-+% published by the Free Software Foundation; either version 2, or (at
-+% your option) any later version.
-+%
-+% This texinfo.tex file is distributed in the hope that it will be
-+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-+% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+% General Public License for more details.
-+%
-+% You should have received a copy of the GNU General Public License
-+% along with this texinfo.tex file; see the file COPYING. If not, write
-+% to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-+% Boston, MA 02111-1307, USA.
-+%
-+% In other words, you are welcome to use, share and improve this program.
-+% You are forbidden to forbid anyone else to use, share and improve
-+% what you give them. Help stamp out software-hoarding!
-+%
-+% Please try the latest version of texinfo.tex before submitting bug
-+% reports; you can get the latest version from:
-+% ftp://ftp.gnu.org/gnu/texinfo.tex
-+% (and all GNU mirrors, see http://www.gnu.org/order/ftp.html)
-+% ftp://texinfo.org/tex/texinfo.tex
-+% ftp://us.ctan.org/macros/texinfo/texinfo.tex
-+% (and all CTAN mirrors, finger ctan@us.ctan.org for a list).
-+% /home/gd/gnu/doc/texinfo.tex on the GNU machines.
-+% The texinfo.tex in any given Texinfo distribution could well be out
-+% of date, so if that's what you're using, please check.
-+% Texinfo has a small home page at http://texinfo.org/.
-+%
-+% Send bug reports to bug-texinfo@gnu.org. Please include including a
-+% complete document in each bug report with which we can reproduce the
-+% problem. Patches are, of course, greatly appreciated.
-+%
-+% To process a Texinfo manual with TeX, it's most reliable to use the
-+% texi2dvi shell script that comes with the distribution. For a simple
-+% manual foo.texi, however, you can get away with this:
-+% tex foo.texi
-+% texindex foo.??
-+% tex foo.texi
-+% tex foo.texi
-+% dvips foo.dvi -o # or whatever, to process the dvi file; this makes foo.ps.
-+% The extra runs of TeX get the cross-reference information correct.
-+% Sometimes one run after texindex suffices, and sometimes you need more
-+% than two; texi2dvi does it as many times as necessary.
-+%
-+% It is possible to adapt texinfo.tex for other languages. You can get
-+% the existing language-specific files from ftp://ftp.gnu.org/gnu/texinfo/.
-
--% This automatically updates the version number based on RCS.
--\def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}}
--\deftexinfoversion$Revision: 1.2 $
--\message{Loading texinfo package [Version \texinfoversion]:}
-+\message{Loading texinfo [version \texinfoversion]:}
-
- % If in a .fmt file, print the version number
- % and turn on active characters that we couldn't do earlier because
- % they might have appeared in the input file name.
--\everyjob{\message{[Texinfo version \texinfoversion]}\message{}
-+\everyjob{\message{[Texinfo version \texinfoversion]}%
- \catcode`+=\active \catcode`\_=\active}
-
- % Save some parts of plain tex whose names we will redefine.
--
- \let\ptexb=\b
- \let\ptexbullet=\bullet
- \let\ptexc=\c
-@@ -54,25 +74,17 @@
- \let\ptexdot=\.
- \let\ptexdots=\dots
- \let\ptexend=\end
--\let\ptexequiv = \equiv
-+\let\ptexequiv=\equiv
-+\let\ptexexclam=\!
- \let\ptexi=\i
- \let\ptexlbrace=\{
- \let\ptexrbrace=\}
- \let\ptexstar=\*
- \let\ptext=\t
-
--% Be sure we're in horizontal mode when doing a tie, since we make space
--% equivalent to this in @example-like environments. Otherwise, a space
--% at the beginning of a line will start with \penalty -- and
--% since \penalty is valid in vertical mode, we'd end up putting the
--% penalty on the vertical list instead of in the new paragraph.
--{\catcode`@ = 11
-- % Avoid using \@M directly, because that causes trouble
-- % if the definition is written into an index file.
-- \global\let\tiepenalty = \@M
-- \gdef\tie{\leavevmode\penalty\tiepenalty\ }
--}
--
-+% We never want plain's outer \+ definition in Texinfo.
-+% For @tex, we can use \tabalign.
-+\let\+ = \relax
-
- \message{Basics,}
- \chardef\other=12
-@@ -81,18 +93,47 @@
- % starts a new line in the output.
- \newlinechar = `^^J
-
--% Set up fixed words for English.
--\ifx\putwordChapter\undefined{\gdef\putwordChapter{Chapter}}\fi%
--\def\putwordInfo{Info}%
--\ifx\putwordSee\undefined{\gdef\putwordSee{See}}\fi%
--\ifx\putwordsee\undefined{\gdef\putwordsee{see}}\fi%
--\ifx\putwordfile\undefined{\gdef\putwordfile{file}}\fi%
--\ifx\putwordpage\undefined{\gdef\putwordpage{page}}\fi%
--\ifx\putwordsection\undefined{\gdef\putwordsection{section}}\fi%
--\ifx\putwordSection\undefined{\gdef\putwordSection{Section}}\fi%
--\ifx\putwordTableofContents\undefined{\gdef\putwordTableofContents{Table of Contents}}\fi%
--\ifx\putwordShortContents\undefined{\gdef\putwordShortContents{Short Contents}}\fi%
--\ifx\putwordAppendix\undefined{\gdef\putwordAppendix{Appendix}}\fi%
-+% Set up fixed words for English if not already set.
-+\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi
-+\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi
-+\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi
-+\ifx\putwordin\undefined \gdef\putwordin{in}\fi
-+\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
-+\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
-+\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi
-+\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
-+\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi
-+\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi
-+\ifx\putwordof\undefined \gdef\putwordof{of}\fi
-+\ifx\putwordon\undefined \gdef\putwordon{on}\fi
-+\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi
-+\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi
-+\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi
-+\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi
-+\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi
-+\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi
-+\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi
-+%
-+\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
-+\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
-+\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
-+\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
-+\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
-+\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
-+\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
-+\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
-+\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
-+\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
-+\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
-+\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
-+%
-+\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi
-+\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi
-+\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi
-+\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi
-+\ifx\putwordDeftypevar\undefined\gdef\putwordDeftypevar{Variable}\fi
-+\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi
-+\ifx\putwordDeftypefun\undefined\gdef\putwordDeftypefun{Function}\fi
-
- % Ignore a token.
- %
-@@ -113,30 +154,35 @@
- % since that produces some useless output on the terminal.
- %
- \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
-+\ifx\eTeXversion\undefined
- \def\loggingall{\tracingcommands2 \tracingstats2
- \tracingpages1 \tracingoutput1 \tracinglostchars1
- \tracingmacros2 \tracingparagraphs1 \tracingrestores1
- \showboxbreadth\maxdimen\showboxdepth\maxdimen
- }%
-+\else
-+\def\loggingall{\tracingcommands3 \tracingstats2
-+ \tracingpages1 \tracingoutput1 \tracinglostchars1
-+ \tracingmacros2 \tracingparagraphs1 \tracingrestores1
-+ \tracingscantokens1 \tracingassigns1 \tracingifs1
-+ \tracinggroups1 \tracingnesting2
-+ \showboxbreadth\maxdimen\showboxdepth\maxdimen
-+}%
-+\fi
-
- % For @cropmarks command.
- % Do @cropmarks to get crop marks.
--%
-+%
- \newif\ifcropmarks
- \let\cropmarks = \cropmarkstrue
- %
- % Dimensions to add cropmarks at corners.
- % Added by P. A. MacKay, 12 Nov. 1986
- %
--\newdimen\cornerlong \newdimen\cornerthick
--\newdimen\topandbottommargin
--\newdimen\outerhsize \newdimen\outervsize
--\cornerlong=1pc\cornerthick=.3pt % These set size of cropmarks
--\outerhsize=7in
--%\outervsize=9.5in
--% Alternative @smallbook page size is 9.25in
--\outervsize=9.25in
--\topandbottommargin=.75in
-+\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
-+\newdimen\cornerlong \cornerlong=1pc
-+\newdimen\cornerthick \cornerthick=.3pt
-+\newdimen\topandbottommargin \topandbottommargin=.75in
-
- % Main output routine.
- \chardef\PAGE = 255
-@@ -168,15 +214,21 @@
- \normalturnoffactive % \ in index entries must not stay \, e.g., if
- % the page break happens to be in the middle of an example.
- \shipout\vbox{%
-+ % Do this early so pdf references go to the beginning of the page.
-+ \ifpdfmakepagedest \pdfmkdest{\the\pageno} \fi
-+ %
- \ifcropmarks \vbox to \outervsize\bgroup
- \hsize = \outerhsize
-- \line{\ewtop\hfil\ewtop}%
-- \nointerlineskip
-- \line{%
-- \vbox{\moveleft\cornerthick\nstop}%
-- \hfill
-- \vbox{\moveright\cornerthick\nstop}%
-- }%
-+ \vskip-\topandbottommargin
-+ \vtop to0pt{%
-+ \line{\ewtop\hfil\ewtop}%
-+ \nointerlineskip
-+ \line{%
-+ \vbox{\moveleft\cornerthick\nstop}%
-+ \hfill
-+ \vbox{\moveright\cornerthick\nstop}%
-+ }%
-+ \vss}%
- \vskip\topandbottommargin
- \line\bgroup
- \hfil % center the page within the outer (page) hsize.
-@@ -199,13 +251,15 @@
- \hfil\egroup % end of (centering) \line\bgroup
- \vskip\topandbottommargin plus1fill minus1fill
- \boxmaxdepth = \cornerthick
-- \line{%
-- \vbox{\moveleft\cornerthick\nsbot}%
-- \hfill
-- \vbox{\moveright\cornerthick\nsbot}%
-+ \vbox to0pt{\vss
-+ \line{%
-+ \vbox{\moveleft\cornerthick\nsbot}%
-+ \hfill
-+ \vbox{\moveright\cornerthick\nsbot}%
-+ }%
-+ \nointerlineskip
-+ \line{\ewbot\hfil\ewbot}%
- }%
-- \nointerlineskip
-- \line{\ewbot\hfil\ewbot}%
- \egroup % \vbox from first cropmarks clause
- \fi
- }% end of \shipout\vbox
-@@ -321,11 +375,11 @@
- %% Call \inENV within environments (after a \begingroup)
- \newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi}
- \def\ENVcheck{%
--\ifENV\errmessage{Still within an environment. Type Return to continue.}
-+\ifENV\errmessage{Still within an environment; press RETURN to continue}
- \endgroup\fi} % This is not perfect, but it should reduce lossage
-
- % @begin foo is the same as @foo, for now.
--\newhelp\EMsimple{Type <Return> to continue.}
-+\newhelp\EMsimple{Press RETURN to continue.}
-
- \outer\def\begin{\parsearg\beginxxx}
-
-@@ -384,7 +438,7 @@
-
- % @@ prints an @
- % Kludge this until the fonts are right (grr).
--\def\@{{\tt \char '100}}
-+\def\@{{\tt\char64}}
-
- % This is turned off because it was never documented
- % and you can use @w{...} around a quote to suppress ligatures.
-@@ -394,8 +448,8 @@
- %\def\'{{'}}
-
- % Used to generate quoted braces.
--\def\mylbrace {{\tt \char '173}}
--\def\myrbrace {{\tt \char '175}}
-+\def\mylbrace {{\tt\char123}}
-+\def\myrbrace {{\tt\char125}}
- \let\{=\mylbrace
- \let\}=\myrbrace
- \begingroup
-@@ -432,6 +486,18 @@
- \fi\fi
- }
-
-+% Be sure we're in horizontal mode when doing a tie, since we make space
-+% equivalent to this in @example-like environments. Otherwise, a space
-+% at the beginning of a line will start with \penalty -- and
-+% since \penalty is valid in vertical mode, we'd end up putting the
-+% penalty on the vertical list instead of in the new paragraph.
-+{\catcode`@ = 11
-+ % Avoid using \@M directly, because that causes trouble
-+ % if the definition is written into an index file.
-+ \global\let\tiepenalty = \@M
-+ \gdef\tie{\leavevmode\penalty\tiepenalty\ }
-+}
-+
- % @: forces normal size whitespace following.
- \def\:{\spacefactor=1000 }
-
-@@ -441,14 +507,11 @@
- % @. is an end-of-sentence period.
- \def\.{.\spacefactor=3000 }
-
--% @enddots{} is an end-of-sentence ellipsis.
--\gdef\enddots{$\mathinner{\ldotp\ldotp\ldotp\ldotp}$\spacefactor=3000}
--
- % @! is an end-of-sentence bang.
--\gdef\!{!\spacefactor=3000 }
-+\def\!{!\spacefactor=3000 }
-
- % @? is an end-of-sentence query.
--\gdef\?{?\spacefactor=3000 }
-+\def\?{?\spacefactor=3000 }
-
- % @w prevents a word break. Without the \leavevmode, @w at the
- % beginning of a paragraph, when TeX is still in vertical mode, would
-@@ -532,53 +595,81 @@
- %% This method tries to make TeX break the page naturally
- %% if the depth of the box does not fit.
- %{\baselineskip=0pt%
--%\vtop to #1\mil{\vfil}\kern -#1\mil\penalty 10000
-+%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak
- %\prevdepth=-1000pt
- %}}
-
- \def\needx#1{%
-- % Go into vertical mode, so we don't make a big box in the middle of a
-+ % Ensure vertical mode, so we don't make a big box in the middle of a
- % paragraph.
- \par
- %
-- % Don't add any leading before our big empty box, but allow a page
-- % break, since the best break might be right here.
-- \allowbreak
-- \nointerlineskip
-- \vtop to #1\mil{\vfil}%
-- %
-- % TeX does not even consider page breaks if a penalty added to the
-- % main vertical list is 10000 or more. But in order to see if the
-- % empty box we just added fits on the page, we must make it consider
-- % page breaks. On the other hand, we don't want to actually break the
-- % page after the empty box. So we use a penalty of 9999.
-- %
-- % There is an extremely small chance that TeX will actually break the
-- % page at this \penalty, if there are no other feasible breakpoints in
-- % sight. (If the user is using lots of big @group commands, which
-- % almost-but-not-quite fill up a page, TeX will have a hard time doing
-- % good page breaking, for example.) However, I could not construct an
-- % example where a page broke at this \penalty; if it happens in a real
-- % document, then we can reconsider our strategy.
-- \penalty9999
-- %
-- % Back up by the size of the box, whether we did a page break or not.
-- \kern -#1\mil
-- %
-- % Do not allow a page break right after this kern.
-- \nobreak
-+ % If the @need value is less than one line space, it's useless.
-+ \dimen0 = #1\mil
-+ \dimen2 = \ht\strutbox
-+ \advance\dimen2 by \dp\strutbox
-+ \ifdim\dimen0 > \dimen2
-+ %
-+ % Do a \strut just to make the height of this box be normal, so the
-+ % normal leading is inserted relative to the preceding line.
-+ % And a page break here is fine.
-+ \vtop to #1\mil{\strut\vfil}%
-+ %
-+ % TeX does not even consider page breaks if a penalty added to the
-+ % main vertical list is 10000 or more. But in order to see if the
-+ % empty box we just added fits on the page, we must make it consider
-+ % page breaks. On the other hand, we don't want to actually break the
-+ % page after the empty box. So we use a penalty of 9999.
-+ %
-+ % There is an extremely small chance that TeX will actually break the
-+ % page at this \penalty, if there are no other feasible breakpoints in
-+ % sight. (If the user is using lots of big @group commands, which
-+ % almost-but-not-quite fill up a page, TeX will have a hard time doing
-+ % good page breaking, for example.) However, I could not construct an
-+ % example where a page broke at this \penalty; if it happens in a real
-+ % document, then we can reconsider our strategy.
-+ \penalty9999
-+ %
-+ % Back up by the size of the box, whether we did a page break or not.
-+ \kern -#1\mil
-+ %
-+ % Do not allow a page break right after this kern.
-+ \nobreak
-+ \fi
- }
-
- % @br forces paragraph break
-
- \let\br = \par
-+
-+% @dots{} output an ellipsis using the current font.
-+% We do .5em per period so that it has the same spacing in a typewriter
-+% font as three actual period characters.
-+%
-+\def\dots{%
-+ \leavevmode
-+ \hbox to 1.5em{%
-+ \hskip 0pt plus 0.25fil minus 0.25fil
-+ .\hss.\hss.%
-+ \hskip 0pt plus 0.5fil minus 0.5fil
-+ }%
-+}
-
--% @dots{} output some dots
-+% @enddots{} is an end-of-sentence ellipsis.
-+%
-+\def\enddots{%
-+ \leavevmode
-+ \hbox to 2em{%
-+ \hskip 0pt plus 0.25fil minus 0.25fil
-+ .\hss.\hss.\hss.%
-+ \hskip 0pt plus 0.5fil minus 0.5fil
-+ }%
-+ \spacefactor=3000
-+}
-
--\def\dots{$\ldots$}
-
- % @page forces the start of a new page
--
-+%
- \def\page{\par\vfill\supereject}
-
- % @exdent text....
-@@ -645,420 +736,296 @@
- % @c is the same as @comment
- % @ignore ... @end ignore is another way to write a comment
-
--\def\comment{\catcode 64=\other \catcode 123=\other \catcode 125=\other%
--\parsearg \commentxxx}
-+\def\comment{\begingroup \catcode`\^^M=\other%
-+\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
-+\commentxxx}
-+{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
-
--\def\commentxxx #1{\catcode 64=0 \catcode 123=1 \catcode 125=2 }
--
- \let\c=\comment
--
--% @paragraphindent is defined for the Info formatting commands only.
--\let\paragraphindent=\comment
-
--% Prevent errors for section commands.
--% Used in @ignore and in failing conditionals.
--\def\ignoresections{%
--\let\chapter=\relax
--\let\unnumbered=\relax
--\let\top=\relax
--\let\unnumberedsec=\relax
--\let\unnumberedsection=\relax
--\let\unnumberedsubsec=\relax
--\let\unnumberedsubsection=\relax
--\let\unnumberedsubsubsec=\relax
--\let\unnumberedsubsubsection=\relax
--\let\section=\relax
--\let\subsec=\relax
--\let\subsubsec=\relax
--\let\subsection=\relax
--\let\subsubsection=\relax
--\let\appendix=\relax
--\let\appendixsec=\relax
--\let\appendixsection=\relax
--\let\appendixsubsec=\relax
--\let\appendixsubsection=\relax
--\let\appendixsubsubsec=\relax
--\let\appendixsubsubsection=\relax
--\let\contents=\relax
--\let\smallbook=\relax
--\let\titlepage=\relax
-+% @paragraphindent NCHARS
-+% We'll use ems for NCHARS, close enough.
-+% We cannot implement @paragraphindent asis, though.
-+%
-+\def\asisword{asis} % no translation, these are keywords
-+\def\noneword{none}
-+%
-+\def\paragraphindent{\parsearg\doparagraphindent}
-+\def\doparagraphindent#1{%
-+ \def\temp{#1}%
-+ \ifx\temp\asisword
-+ \else
-+ \ifx\temp\noneword
-+ \defaultparindent = 0pt
-+ \else
-+ \defaultparindent = #1em
-+ \fi
-+ \fi
-+ \parindent = \defaultparindent
- }
-
--% Used in nested conditionals, where we have to parse the Texinfo source
--% and so want to turn off most commands, in case they are used
--% incorrectly.
--%
--\def\ignoremorecommands{%
-- \let\defcodeindex = \relax
-- \let\defcv = \relax
-- \let\deffn = \relax
-- \let\deffnx = \relax
-- \let\defindex = \relax
-- \let\defivar = \relax
-- \let\defmac = \relax
-- \let\defmethod = \relax
-- \let\defop = \relax
-- \let\defopt = \relax
-- \let\defspec = \relax
-- \let\deftp = \relax
-- \let\deftypefn = \relax
-- \let\deftypefun = \relax
-- \let\deftypevar = \relax
-- \let\deftypevr = \relax
-- \let\defun = \relax
-- \let\defvar = \relax
-- \let\defvr = \relax
-- \let\ref = \relax
-- \let\xref = \relax
-- \let\printindex = \relax
-- \let\pxref = \relax
-- \let\settitle = \relax
-- \let\setchapternewpage = \relax
-- \let\setchapterstyle = \relax
-- \let\everyheading = \relax
-- \let\evenheading = \relax
-- \let\oddheading = \relax
-- \let\everyfooting = \relax
-- \let\evenfooting = \relax
-- \let\oddfooting = \relax
-- \let\headings = \relax
-- \let\include = \relax
-- \let\lowersections = \relax
-- \let\down = \relax
-- \let\raisesections = \relax
-- \let\up = \relax
-- \let\set = \relax
-- \let\clear = \relax
-- \let\item = \relax
-+% @exampleindent NCHARS
-+% We'll use ems for NCHARS like @paragraphindent.
-+% It seems @exampleindent asis isn't necessary, but
-+% I preserve it to make it similar to @paragraphindent.
-+\def\exampleindent{\parsearg\doexampleindent}
-+\def\doexampleindent#1{%
-+ \def\temp{#1}%
-+ \ifx\temp\asisword
-+ \else
-+ \ifx\temp\noneword
-+ \lispnarrowing = 0pt
-+ \else
-+ \lispnarrowing = #1em
-+ \fi
-+ \fi
- }
-
--% Ignore @ignore ... @end ignore.
-+% @asis just yields its argument. Used with @table, for example.
- %
--\def\ignore{\doignore{ignore}}
-+\def\asis#1{#1}
-
--% Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text.
-+% @math means output in math mode.
-+% We don't use $'s directly in the definition of \math because control
-+% sequences like \math are expanded when the toc file is written. Then,
-+% we read the toc file back, the $'s will be normal characters (as they
-+% should be, according to the definition of Texinfo). So we must use a
-+% control sequence to switch into and out of math mode.
- %
--\def\ifinfo{\doignore{ifinfo}}
--\def\ifhtml{\doignore{ifhtml}}
--\def\ifnottex{\doignore{ifnottex}}
--\def\html{\doignore{html}}
--\def\menu{\doignore{menu}}
--\def\direntry{\doignore{direntry}}
--
--% Also ignore @macro ... @end macro. The user must run texi2dvi,
--% which runs makeinfo to do macro expansion. Ignore @unmacro, too.
--\def\macro{\doignore{macro}}
--\let\unmacro = \comment
-+% This isn't quite enough for @math to work properly in indices, but it
-+% seems unlikely it will ever be needed there.
-+%
-+\let\implicitmath = $
-+\def\math#1{\implicitmath #1\implicitmath}
-
-+% @bullet and @minus need the same treatment as @math, just above.
-+\def\bullet{\implicitmath\ptexbullet\implicitmath}
-+\def\minus{\implicitmath-\implicitmath}
-
--% @dircategory CATEGORY -- specify a category of the dir file
--% which this file should belong to. Ignore this in TeX.
--\let\dircategory = \comment
-+% @refill is a no-op.
-+\let\refill=\relax
-
--% Ignore text until a line `@end #1'.
-+% If working on a large document in chapters, it is convenient to
-+% be able to disable indexing, cross-referencing, and contents, for test runs.
-+% This is done with @novalidate (before @setfilename).
- %
--\def\doignore#1{\begingroup
-- % Don't complain about control sequences we have declared \outer.
-- \ignoresections
-- %
-- % Define a command to swallow text until we reach `@end #1'.
-- \long\def\doignoretext##1\end #1{\enddoignore}%
-- %
-- % Make sure that spaces turn into tokens that match what \doignoretext wants.
-- \catcode32 = 10
-- %
-- % Ignore braces, too, so mismatched braces don't cause trouble.
-- \catcode`\{ = 9
-- \catcode`\} = 9
-- %
-- % And now expand that command.
-- \doignoretext
-+\newif\iflinks \linkstrue % by default we want the aux files.
-+\let\novalidate = \linksfalse
-+
-+% @setfilename is done at the beginning of every texinfo file.
-+% So open here the files we need to have open while reading the input.
-+% This makes it possible to make a .fmt file for texinfo.
-+\def\setfilename{%
-+ \iflinks
-+ \readauxfile
-+ \fi % \openindices needs to do some work in any case.
-+ \openindices
-+ \fixbackslash % Turn off hack to swallow `\input texinfo'.
-+ \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
-+ %
-+ % If texinfo.cnf is present on the system, read it.
-+ % Useful for site-wide @afourpaper, etc.
-+ % Just to be on the safe side, close the input stream before the \input.
-+ \openin 1 texinfo.cnf
-+ \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi
-+ \closein1
-+ \temp
-+ %
-+ \comment % Ignore the actual filename.
- }
-
--% What we do to finish off ignored text.
-+% Called from \setfilename.
- %
--\def\enddoignore{\endgroup\ignorespaces}%
-+\def\openindices{%
-+ \newindex{cp}%
-+ \newcodeindex{fn}%
-+ \newcodeindex{vr}%
-+ \newcodeindex{tp}%
-+ \newcodeindex{ky}%
-+ \newcodeindex{pg}%
-+}
-
--\newif\ifwarnedobs\warnedobsfalse
--\def\obstexwarn{%
-- \ifwarnedobs\relax\else
-- % We need to warn folks that they may have trouble with TeX 3.0.
-- % This uses \immediate\write16 rather than \message to get newlines.
-- \immediate\write16{}
-- \immediate\write16{***WARNING*** for users of Unix TeX 3.0!}
-- \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).}
-- \immediate\write16{If you are running another version of TeX, relax.}
-- \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
-- \immediate\write16{ Then upgrade your TeX installation if you can.}
-- \immediate\write16{ (See ftp://ftp.gnu.ai.mit.edu/pub/gnu/TeX.README.)}
-- \immediate\write16{If you are stuck with version 3.0, run the}
-- \immediate\write16{ script ``tex3patch'' from the Texinfo distribution}
-- \immediate\write16{ to use a workaround.}
-- \immediate\write16{}
-- \global\warnedobstrue
-+% @bye.
-+\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
-+
-+
-+\message{pdf,}
-+% adobe `portable' document format
-+\newcount\tempnum
-+\newcount\lnkcount
-+\newtoks\filename
-+\newcount\filenamelength
-+\newcount\pgn
-+\newtoks\toksA
-+\newtoks\toksB
-+\newtoks\toksC
-+\newtoks\toksD
-+\newbox\boxA
-+\newcount\countA
-+\newif\ifpdf
-+\newif\ifpdfmakepagedest
-+
-+\ifx\pdfoutput\undefined
-+ \pdffalse
-+ \let\pdfmkdest = \gobble
-+ \let\pdfurl = \gobble
-+ \let\endlink = \relax
-+ \let\linkcolor = \relax
-+ \let\pdfmakeoutlines = \relax
-+\else
-+ \pdftrue
-+ \pdfoutput = 1
-+ \input pdfcolor
-+ \def\dopdfimage#1#2#3{%
-+ \def\imagewidth{#2}%
-+ \def\imageheight{#3}%
-+ \ifnum\pdftexversion < 14
-+ \pdfimage
-+ \else
-+ \pdfximage
- \fi
--}
-+ \ifx\empty\imagewidth\else width \imagewidth \fi
-+ \ifx\empty\imageheight\else height \imageheight \fi
-+ {#1.pdf}%
-+ \ifnum\pdftexversion < 14 \else
-+ \pdfrefximage \pdflastximage
-+ \fi}
-+ \def\pdfmkdest#1{\pdfdest name{#1@} xyz}
-+ \def\pdfmkpgn#1{#1@}
-+ \let\linkcolor = \Blue % was Cyan, but that seems light?
-+ \def\endlink{\Black\pdfendlink}
-+ % Adding outlines to PDF; macros for calculating structure of outlines
-+ % come from Petr Olsak
-+ \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
-+ \else \csname#1\endcsname \fi}
-+ \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
-+ \advance\tempnum by1
-+ \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
-+ \def\pdfmakeoutlines{{%
-+ \openin 1 \jobname.toc
-+ \ifeof 1\else\bgroup
-+ \closein 1
-+ \indexnofonts
-+ \def\tt{}
-+ \let\_ = \normalunderscore
-+ % Thanh's hack / proper braces in bookmarks
-+ \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
-+ \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
-+ %
-+ \def\chapentry ##1##2##3{}
-+ \def\unnumbchapentry ##1##2{}
-+ \def\secentry ##1##2##3##4{\advancenumber{chap##2}}
-+ \def\unnumbsecentry ##1##2{}
-+ \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}}
-+ \def\unnumbsubsecentry ##1##2{}
-+ \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}}
-+ \def\unnumbsubsubsecentry ##1##2{}
-+ \input \jobname.toc
-+ \def\chapentry ##1##2##3{%
-+ \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}}
-+ \def\unnumbchapentry ##1##2{%
-+ \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
-+ \def\secentry ##1##2##3##4{%
-+ \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}}
-+ \def\unnumbsecentry ##1##2{%
-+ \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
-+ \def\subsecentry ##1##2##3##4##5{%
-+ \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}}
-+ \def\unnumbsubsecentry ##1##2{%
-+ \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
-+ \def\subsubsecentry ##1##2##3##4##5##6{%
-+ \pdfoutline goto name{\pdfmkpgn{##6}}{##1}}
-+ \def\unnumbsubsubsecentry ##1##2{%
-+ \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
-+ \input \jobname.toc
-+ \egroup\fi
-+ }}
-+ \def\makelinks #1,{%
-+ \def\params{#1}\def\E{END}%
-+ \ifx\params\E
-+ \let\nextmakelinks=\relax
-+ \else
-+ \let\nextmakelinks=\makelinks
-+ \ifnum\lnkcount>0,\fi
-+ \picknum{#1}%
-+ \startlink attr{/Border [0 0 0]}
-+ goto name{\pdfmkpgn{\the\pgn}}%
-+ \linkcolor #1%
-+ \advance\lnkcount by 1%
-+ \endlink
-+ \fi
-+ \nextmakelinks
-+ }
-+ \def\picknum#1{\expandafter\pn#1}
-+ \def\pn#1{%
-+ \def\p{#1}%
-+ \ifx\p\lbrace
-+ \let\nextpn=\ppn
-+ \else
-+ \let\nextpn=\ppnn
-+ \def\first{#1}
-+ \fi
-+ \nextpn
-+ }
-+ \def\ppn#1{\pgn=#1\gobble}
-+ \def\ppnn{\pgn=\first}
-+ \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,}
-+ \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
-+ \def\skipspaces#1{\def\PP{#1}\def\D{|}%
-+ \ifx\PP\D\let\nextsp\relax
-+ \else\let\nextsp\skipspaces
-+ \ifx\p\space\else\addtokens{\filename}{\PP}%
-+ \advance\filenamelength by 1
-+ \fi
-+ \fi
-+ \nextsp}
-+ \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax}
-+ \ifnum\pdftexversion < 14
-+ \let \startlink \pdfannotlink
-+ \else
-+ \let \startlink \pdfstartlink
-+ \fi
-+ \def\pdfurl#1{%
-+ \begingroup
-+ \normalturnoffactive\def\@{@}%
-+ \leavevmode\Red
-+ \startlink attr{/Border [0 0 0]}%
-+ user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
-+ % #1
-+ \endgroup}
-+ \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
-+ \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
-+ \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
-+ \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
-+ \def\maketoks{%
-+ \expandafter\poptoks\the\toksA|ENDTOKS|
-+ \ifx\first0\adn0
-+ \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
-+ \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
-+ \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
-+ \else
-+ \ifnum0=\countA\else\makelink\fi
-+ \ifx\first.\let\next=\done\else
-+ \let\next=\maketoks
-+ \addtokens{\toksB}{\the\toksD}
-+ \ifx\first,\addtokens{\toksB}{\space}\fi
-+ \fi
-+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
-+ \next}
-+ \def\makelink{\addtokens{\toksB}%
-+ {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
-+ \def\pdflink#1{%
-+ \startlink attr{/Border [0 0 0]} goto name{\mkpgn{#1}}
-+ \linkcolor #1\endlink}
-+ \def\mkpgn#1{#1@}
-+ \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
-+\fi % \ifx\pdfoutput
-
--% **In TeX 3.0, setting text in \nullfont hangs tex. For a
--% workaround (which requires the file ``dummy.tfm'' to be installed),
--% uncomment the following line:
--%%%%%\font\nullfont=dummy\let\obstexwarn=\relax
-
--% Ignore text, except that we keep track of conditional commands for
--% purposes of nesting, up to an `@end #1' command.
--%
--\def\nestedignore#1{%
-- \obstexwarn
-- % We must actually expand the ignored text to look for the @end
-- % command, so that nested ignore constructs work. Thus, we put the
-- % text into a \vbox and then do nothing with the result. To minimize
-- % the change of memory overflow, we follow the approach outlined on
-- % page 401 of the TeXbook: make the current font be a dummy font.
-- %
-- \setbox0 = \vbox\bgroup
-- % Don't complain about control sequences we have declared \outer.
-- \ignoresections
-- %
-- % Define `@end #1' to end the box, which will in turn undefine the
-- % @end command again.
-- \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}%
-- %
-- % We are going to be parsing Texinfo commands. Most cause no
-- % trouble when they are used incorrectly, but some commands do
-- % complicated argument parsing or otherwise get confused, so we
-- % undefine them.
-- %
-- % We can't do anything about stray @-signs, unfortunately;
-- % they'll produce `undefined control sequence' errors.
-- \ignoremorecommands
-- %
-- % Set the current font to be \nullfont, a TeX primitive, and define
-- % all the font commands to also use \nullfont. We don't use
-- % dummy.tfm, as suggested in the TeXbook, because not all sites
-- % might have that installed. Therefore, math mode will still
-- % produce output, but that should be an extremely small amount of
-- % stuff compared to the main input.
-- %
-- \nullfont
-- \let\tenrm = \nullfont \let\tenit = \nullfont \let\tensl = \nullfont
-- \let\tenbf = \nullfont \let\tentt = \nullfont \let\smallcaps = \nullfont
-- \let\tensf = \nullfont
-- % Similarly for index fonts (mostly for their use in
-- % smallexample)
-- \let\indrm = \nullfont \let\indit = \nullfont \let\indsl = \nullfont
-- \let\indbf = \nullfont \let\indtt = \nullfont \let\indsc = \nullfont
-- \let\indsf = \nullfont
-- %
-- % Don't complain when characters are missing from the fonts.
-- \tracinglostchars = 0
-- %
-- % Don't bother to do space factor calculations.
-- \frenchspacing
-- %
-- % Don't report underfull hboxes.
-- \hbadness = 10000
-- %
-- % Do minimal line-breaking.
-- \pretolerance = 10000
-- %
-- % Do not execute instructions in @tex
-- \def\tex{\doignore{tex}}%
--}
--
--% @set VAR sets the variable VAR to an empty value.
--% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
--%
--% Since we want to separate VAR from REST-OF-LINE (which might be
--% empty), we can't just use \parsearg; we have to insert a space of our
--% own to delimit the rest of the line, and then take it out again if we
--% didn't need it. Make sure the catcode of space is correct to avoid
--% losing inside @example, for instance.
--%
--\def\set{\begingroup\catcode` =10
-- \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
-- \parsearg\setxxx}
--\def\setxxx#1{\setyyy#1 \endsetyyy}
--\def\setyyy#1 #2\endsetyyy{%
-- \def\temp{#2}%
-- \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
-- \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
-- \fi
-- \endgroup
--}
--% Can't use \xdef to pre-expand #2 and save some time, since \temp or
--% \next or other control sequences that we've defined might get us into
--% an infinite loop. Consider `@set foo @cite{bar}'.
--\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}}
--
--% @clear VAR clears (i.e., unsets) the variable VAR.
--%
--\def\clear{\parsearg\clearxxx}
--\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax}
--
--% @value{foo} gets the text saved in variable foo.
--%
--\def\value{\begingroup
-- \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
-- \valuexxx}
--\def\valuexxx#1{%
-- \expandafter\ifx\csname SET#1\endcsname\relax
-- {\{No value for ``#1''\}}%
-- \else
-- \csname SET#1\endcsname
-- \fi
--\endgroup}
--
--% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
--% with @set.
--%
--\def\ifset{\parsearg\ifsetxxx}
--\def\ifsetxxx #1{%
-- \expandafter\ifx\csname SET#1\endcsname\relax
-- \expandafter\ifsetfail
-- \else
-- \expandafter\ifsetsucceed
-- \fi
--}
--\def\ifsetsucceed{\conditionalsucceed{ifset}}
--\def\ifsetfail{\nestedignore{ifset}}
--\defineunmatchedend{ifset}
--
--% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
--% defined with @set, or has been undefined with @clear.
--%
--\def\ifclear{\parsearg\ifclearxxx}
--\def\ifclearxxx #1{%
-- \expandafter\ifx\csname SET#1\endcsname\relax
-- \expandafter\ifclearsucceed
-- \else
-- \expandafter\ifclearfail
-- \fi
--}
--\def\ifclearsucceed{\conditionalsucceed{ifclear}}
--\def\ifclearfail{\nestedignore{ifclear}}
--\defineunmatchedend{ifclear}
--
--% @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text
--% following, through the first @end iftex (etc.). Make `@end iftex'
--% (etc.) valid only after an @iftex.
--%
--\def\iftex{\conditionalsucceed{iftex}}
--\def\ifnothtml{\conditionalsucceed{ifnothtml}}
--\def\ifnotinfo{\conditionalsucceed{ifnotinfo}}
--\defineunmatchedend{iftex}
--\defineunmatchedend{ifnothtml}
--\defineunmatchedend{ifnotinfo}
--
--% We can't just want to start a group at @iftex (for example) and end it
--% at @end iftex, since then @set commands inside the conditional have no
--% effect (they'd get reverted at the end of the group). So we must
--% define \Eiftex to redefine itself to be its previous value. (We can't
--% just define it to fail again with an ``unmatched end'' error, since
--% the @ifset might be nested.)
--%
--\def\conditionalsucceed#1{%
-- \edef\temp{%
-- % Remember the current value of \E#1.
-- \let\nece{prevE#1} = \nece{E#1}%
-- %
-- % At the `@end #1', redefine \E#1 to be its previous value.
-- \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}%
-- }%
-- \temp
--}
--
--% We need to expand lots of \csname's, but we don't want to expand the
--% control sequences after we've constructed them.
--%
--\def\nece#1{\expandafter\noexpand\csname#1\endcsname}
--
--% @asis just yields its argument. Used with @table, for example.
--%
--\def\asis#1{#1}
--
--% @math means output in math mode.
--% We don't use $'s directly in the definition of \math because control
--% sequences like \math are expanded when the toc file is written. Then,
--% we read the toc file back, the $'s will be normal characters (as they
--% should be, according to the definition of Texinfo). So we must use a
--% control sequence to switch into and out of math mode.
--%
--% This isn't quite enough for @math to work properly in indices, but it
--% seems unlikely it will ever be needed there.
--%
--\let\implicitmath = $
--\def\math#1{\implicitmath #1\implicitmath}
--
--% @bullet and @minus need the same treatment as @math, just above.
--\def\bullet{\implicitmath\ptexbullet\implicitmath}
--\def\minus{\implicitmath-\implicitmath}
--
--\def\node{\ENVcheck\parsearg\nodezzz}
--\def\nodezzz#1{\nodexxx [#1,]}
--\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
--\let\nwnode=\node
--\let\lastnode=\relax
--
--\def\donoderef{\ifx\lastnode\relax\else
--\expandafter\expandafter\expandafter\setref{\lastnode}\fi
--\global\let\lastnode=\relax}
--
--\def\unnumbnoderef{\ifx\lastnode\relax\else
--\expandafter\expandafter\expandafter\unnumbsetref{\lastnode}\fi
--\global\let\lastnode=\relax}
--
--\def\appendixnoderef{\ifx\lastnode\relax\else
--\expandafter\expandafter\expandafter\appendixsetref{\lastnode}\fi
--\global\let\lastnode=\relax}
--
--% @refill is a no-op.
--\let\refill=\relax
--
--% @setfilename is done at the beginning of every texinfo file.
--% So open here the files we need to have open while reading the input.
--% This makes it possible to make a .fmt file for texinfo.
--\def\setfilename{%
-- \readauxfile
-- \opencontents
-- \openindices
-- \fixbackslash % Turn off hack to swallow `\input texinfo'.
-- \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
-- %
-- % If texinfo.cnf is present on the system, read it.
-- % Useful for site-wide @afourpaper, etc.
-- % Just to be on the safe side, close the input stream before the \input.
-- \openin 1 texinfo.cnf
-- \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi
-- \closein1
-- \temp
-- %
-- \comment % Ignore the actual filename.
--}
--
--% @bye.
--\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
--
--% \def\macro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\macroxxx}
--% \def\macroxxx#1#2 \end macro{%
--% \expandafter\gdef\macrotemp#1{#2}%
--% \endgroup}
--
--%\def\linemacro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\linemacroxxx}
--%\def\linemacroxxx#1#2 \end linemacro{%
--%\let\parsearg=\relax
--%\edef\macrotempx{\csname M\butfirst\expandafter\string\macrotemp\endcsname}%
--%\expandafter\xdef\macrotemp{\parsearg\macrotempx}%
--%\expandafter\gdef\macrotempx#1{#2}%
--%\endgroup}
--
--%\def\butfirst#1{}
--
--
- \message{fonts,}
--
- % Font-change commands.
-
--% Texinfo supports the sans serif font style, which plain TeX does not.
-+% Texinfo sort of supports the sans serif font style, which plain TeX does not.
- % So we set up a \sf analogous to plain's \rm, etc.
- \newfam\sffam
- \def\sf{\fam=\sffam \tensf}
-@@ -1124,22 +1091,17 @@
- \setfont\deftt\ttshape{10}{\magstep1}
- \def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
-
--% Fonts for indices and small examples (9pt).
--% We actually use the slanted font rather than the italic,
--% because texinfo normally uses the slanted fonts for that.
--% Do not make many font distinctions in general in the index, since they
--% aren't very useful.
--\setfont\ninett\ttshape{9}{1000}
--\setfont\indrm\rmshape{9}{1000}
--\setfont\indit\slshape{9}{1000}
--\let\indsl=\indit
--\let\indtt=\ninett
--\let\indttsl=\ninett
--\let\indsf=\indrm
--\let\indbf=\indrm
--\setfont\indsc\scshape{10}{900}
--\font\indi=cmmi9
--\font\indsy=cmsy9
-+% Fonts for indices, footnotes, small examples (9pt).
-+\setfont\smallrm\rmshape{9}{1000}
-+\setfont\smalltt\ttshape{9}{1000}
-+\setfont\smallbf\bfshape{10}{900}
-+\setfont\smallit\itshape{9}{1000}
-+\setfont\smallsl\slshape{9}{1000}
-+\setfont\smallsf\sfshape{9}{1000}
-+\setfont\smallsc\scshape{10}{900}
-+\setfont\smallttsl\ttslshape{10}{900}
-+\font\smalli=cmmi9
-+\font\smallsy=cmsy9
-
- % Fonts for title page:
- \setfont\titlerm\rmbshape{12}{\magstep3}
-@@ -1236,7 +1198,7 @@
- \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
- \let\tenttsl=\titlettsl
- \resetmathfonts \setleading{25pt}}
--\def\titlefont#1{{\titlefonts #1}}
-+\def\titlefont#1{{\titlefonts\rm #1}}
- \def\chapfonts{%
- \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
- \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
-@@ -1253,16 +1215,21 @@
- \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl
- \resetmathfonts \setleading{15pt}}
- \let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf?
--\def\indexfonts{%
-- \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl
-- \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc
-- \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy \let\tenttsl=\indttsl
-- \resetmathfonts \setleading{12pt}}
-+\def\smallfonts{%
-+ \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
-+ \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
-+ \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
-+ \let\tenttsl=\smallttsl
-+ \resetmathfonts \setleading{11pt}}
-
- % Set up the default fonts, so we can use them for creating boxes.
- %
- \textfonts
-
-+% Define these so they can be easily changed for other fonts.
-+\def\angleleft{$\langle$}
-+\def\angleright{$\rangle$}
-+
- % Count depth in font-changes, for error checks
- \newcount\fontdepth \fontdepth=0
-
-@@ -1277,13 +1244,14 @@
- % \smartitalic{ARG} outputs arg in italics, followed by an italic correction
- % unless the following character is such as not to need one.
- \def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi}
--\def\smartitalic#1{{\sl #1}\futurelet\next\smartitalicx}
-+\def\smartslanted#1{{\sl #1}\futurelet\next\smartitalicx}
-+\def\smartitalic#1{{\it #1}\futurelet\next\smartitalicx}
-
- \let\i=\smartitalic
--\let\var=\smartitalic
--\let\dfn=\smartitalic
-+\let\var=\smartslanted
-+\let\dfn=\smartslanted
- \let\emph=\smartitalic
--\let\cite=\smartitalic
-+\let\cite=\smartslanted
-
- \def\b#1{{\bf #1}}
- \let\strong=\b
-@@ -1300,20 +1268,22 @@
- \null
- }
- \let\ttfont=\t
--\def\samp #1{`\tclose{#1}'\null}
--\setfont\smallrm\rmshape{8}{1000}
--\font\smallsy=cmsy9
--\def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{%
-- \raise0.4pt\hbox{$\langle$}\kern-.08em\vtop{%
-+\def\samp#1{`\tclose{#1}'\null}
-+\setfont\keyrm\rmshape{8}{1000}
-+\font\keysy=cmsy9
-+\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
-+ \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
- \vbox{\hrule\kern-0.4pt
-- \hbox{\raise0.4pt\hbox{\vphantom{$\langle$}}#1}}%
-+ \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
- \kern-0.4pt\hrule}%
-- \kern-.06em\raise0.4pt\hbox{$\rangle$}}}}
-+ \kern-.06em\raise0.4pt\hbox{\angleright}}}}
- % The old definition, with no lozenge:
- %\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
- \def\ctrl #1{{\tt \rawbackslash \hat}#1}
-
-+% @file, @option are the same as @samp.
- \let\file=\samp
-+\let\option=\samp
-
- % @code is a modification of @t,
- % which makes spaces the same size as normal in the surrounding text.
-@@ -1348,20 +1318,18 @@
- % and arrange explicitly to hyphenate at a dash.
- % -- rms.
- {
--\catcode`\-=\active
--\catcode`\_=\active
--\catcode`\|=\active
--\global\def\code{\begingroup \catcode`\-=\active \let-\codedash \catcode`\_=\active \let_\codeunder \codex}
--% The following is used by \doprintindex to insure that long function names
--% wrap around. It is necessary for - and _ to be active before the index is
--% read from the file, as \entry parses the arguments long before \code is
--% ever called. -- mycroft
--% _ is always active; and it shouldn't be \let = to an _ that is a
--% subscript character anyway. Then, @cindex @samp{_} (for example)
--% fails. --karl
--\global\def\indexbreaks{%
-- \catcode`\-=\active \let-\realdash
--}
-+ \catcode`\-=\active
-+ \catcode`\_=\active
-+ %
-+ \global\def\code{\begingroup
-+ \catcode`\-=\active \let-\codedash
-+ \catcode`\_=\active \let_\codeunder
-+ \codex
-+ }
-+ %
-+ % If we end up with any active - characters when handling the index,
-+ % just treat them as a normal -.
-+ \global\def\indexbreaks{\catcode`\-=\active \let-\realdash}
- }
-
- \def\realdash{-}
-@@ -1402,27 +1370,55 @@
- \else{\tclose{\kbdfont\look}}\fi
- \else{\tclose{\kbdfont\look}}\fi}
-
--% @url. Quotes do not seem necessary, so use \code.
-+% For @url, @env, @command quotes seem unnecessary, so use \code.
- \let\url=\code
-+\let\env=\code
-+\let\command=\code
-
--% @uref (abbreviation for `urlref') takes an optional second argument
--% specifying the text to display. First (mandatory) arg is the url.
--% Perhaps eventually put in a hypertex \special here.
--%
--\def\uref#1{\urefxxx #1,,\finish}
--\def\urefxxx#1,#2,#3\finish{%
-- \setbox0 = \hbox{\ignorespaces #2}%
-+% @uref (abbreviation for `urlref') takes an optional (comma-separated)
-+% second argument specifying the text to display and an optional third
-+% arg as text to display instead of (rather than in addition to) the url
-+% itself. First (mandatory) arg is the url. Perhaps eventually put in
-+% a hypertex \special here.
-+%
-+\def\uref#1{\douref #1,,,\finish}
-+\def\douref#1,#2,#3,#4\finish{\begingroup
-+ \unsepspaces
-+ \pdfurl{#1}%
-+ \setbox0 = \hbox{\ignorespaces #3}%
- \ifdim\wd0 > 0pt
-- \unhbox0\ (\code{#1})%
-+ \unhbox0 % third arg given, show only that
- \else
-- \code{#1}%
-+ \setbox0 = \hbox{\ignorespaces #2}%
-+ \ifdim\wd0 > 0pt
-+ \ifpdf
-+ \unhbox0 % PDF: 2nd arg given, show only it
-+ \else
-+ \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
-+ \fi
-+ \else
-+ \code{#1}% only url given, so show it
-+ \fi
- \fi
--}
-+ \endlink
-+\endgroup}
-
--% rms does not like the angle brackets --karl, 17may97.
--% So now @email is just like @uref.
--%\def\email#1{$\langle${\tt #1}$\rangle$}
--\let\email=\uref
-+% rms does not like angle brackets --karl, 17may97.
-+% So now @email is just like @uref, unless we are pdf.
-+%
-+%\def\email#1{\angleleft{\tt #1}\angleright}
-+\ifpdf
-+ \def\email#1{\doemail#1,,\finish}
-+ \def\doemail#1,#2,#3\finish{\begingroup
-+ \unsepspaces
-+ \pdfurl{mailto:#1}%
-+ \setbox0 = \hbox{\ignorespaces #2}%
-+ \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
-+ \endlink
-+ \endgroup}
-+\else
-+ \let\email=\uref
-+\fi
-
- % Check if we are currently using a typewriter font. Since all the
- % Computer Modern typewriter fonts have zero interword stretch (and
-@@ -1432,8 +1428,7 @@
- \def\ifmonospace{\ifdim\fontdimen3\font=0pt }
-
- % Typeset a dimension, e.g., `in' or `pt'. The only reason for the
--% argument is to make the input look right: @dmn{pt} instead of
--% @dmn{}pt.
-+% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
- %
- \def\dmn#1{\thinspace #1}
-
-@@ -1444,11 +1439,14 @@
- % Polish suppressed-l. --karl, 22sep96.
- %\def\l#1{{\li #1}\null}
-
-+% Explicit font changes: @r, @sc, undocumented @ii.
- \def\r#1{{\rm #1}} % roman font
--% Use of \lowercase was suggested.
- \def\sc#1{{\smallcaps#1}} % smallcaps font
- \def\ii#1{{\it #1}} % italic font
-
-+% @acronym downcases the argument and prints in smallcaps.
-+\def\acronym#1{{\smallcaps \lowercase{#1}}}
-+
- % @pounds{} is a sterling sign.
- \def\pounds{{\it\$}}
-
-@@ -1462,15 +1460,20 @@
- \newif\ifseenauthor
- \newif\iffinishedtitlepage
-
-+% Do an implicit @contents or @shortcontents after @end titlepage if the
-+% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
-+%
-+\newif\ifsetcontentsaftertitlepage
-+ \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
-+\newif\ifsetshortcontentsaftertitlepage
-+ \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
-+
- \def\shorttitlepage{\parsearg\shorttitlepagezzz}
- \def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
- \endgroup\page\hbox{}\page}
-
- \def\titlepage{\begingroup \parindent=0pt \textfonts
- \let\subtitlerm=\tenrm
--% I deinstalled the following change because \cmr12 is undefined.
--% This change was not in the ChangeLog anyway. --rms.
--% \let\subtitlerm=\cmr12
- \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}%
- %
- \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}%
-@@ -1519,6 +1522,23 @@
- % after the title page, which we certainly don't want.
- \oldpage
- \endgroup
-+ %
-+ % If they want short, they certainly want long too.
-+ \ifsetshortcontentsaftertitlepage
-+ \shortcontents
-+ \contents
-+ \global\let\shortcontents = \relax
-+ \global\let\contents = \relax
-+ \fi
-+ %
-+ \ifsetcontentsaftertitlepage
-+ \contents
-+ \global\let\contents = \relax
-+ \global\let\shortcontents = \relax
-+ \fi
-+ %
-+ \ifpdf \pdfmakepagedesttrue \fi
-+ %
- \HEADINGSon
- }
-
-@@ -1532,10 +1552,10 @@
-
- \let\thispage=\folio
-
--\newtoks \evenheadline % Token sequence for heading line of even pages
--\newtoks \oddheadline % Token sequence for heading line of odd pages
--\newtoks \evenfootline % Token sequence for footing line of even pages
--\newtoks \oddfootline % Token sequence for footing line of odd pages
-+\newtoks\evenheadline % headline on even pages
-+\newtoks\oddheadline % headline on odd pages
-+\newtoks\evenfootline % footline on even pages
-+\newtoks\oddfootline % footline on odd pages
-
- % Now make Tex use those variables
- \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
-@@ -1652,40 +1672,28 @@
- }
-
- % Subroutines used in generating headings
--% Produces Day Month Year style of output.
--\def\today{\number\day\space
--\ifcase\month\or
--January\or February\or March\or April\or May\or June\or
--July\or August\or September\or October\or November\or December\fi
--\space\number\year}
--
--% Use this if you want the Month Day, Year style of output.
--%\def\today{\ifcase\month\or
--%January\or February\or March\or April\or May\or June\or
--%July\or August\or September\or October\or November\or December\fi
--%\space\number\day, \number\year}
--
--% @settitle line... specifies the title of the document, for headings
--% It generates no output of its own
-+% This produces Day Month Year style of output.
-+% Only define if not already defined, in case a txi-??.tex file has set
-+% up a different format (e.g., txi-cs.tex does this).
-+\ifx\today\undefined
-+\def\today{%
-+ \number\day\space
-+ \ifcase\month
-+ \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
-+ \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
-+ \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
-+ \fi
-+ \space\number\year}
-+\fi
-
--\def\thistitle{No Title}
-+% @settitle line... specifies the title of the document, for headings.
-+% It generates no output of its own.
-+\def\thistitle{\putwordNoTitle}
- \def\settitle{\parsearg\settitlezzz}
- \def\settitlezzz #1{\gdef\thistitle{#1}}
-
-
- \message{tables,}
--
--% @tabs -- simple alignment
--
--% These don't work. For one thing, \+ is defined as outer.
--% So these macros cannot even be defined.
--
--%\def\tabs{\parsearg\tabszzz}
--%\def\tabszzz #1{\settabs\+#1\cr}
--%\def\tabline{\parsearg\tablinezzz}
--%\def\tablinezzz #1{\+#1\cr}
--%\def\&{&}
--
- % Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x).
-
- % default indentation of table text
-@@ -1729,11 +1737,6 @@
- \itemindex{#1}%
- \nobreak % This prevents a break before @itemx.
- %
-- % Be sure we are not still in the middle of a paragraph.
-- %{\parskip = 0in
-- %\par
-- %}%
-- %
- % If the item text does not fit in the space we have, put it on a line
- % by itself, and do not allow a page break either before or after that
- % line. We do not start a paragraph here because then if the next
-@@ -1762,13 +1765,17 @@
- \itemxneedsnegativevskipfalse
- \else
- % The item text fits into the space. Start a paragraph, so that the
-- % following text (if any) will end up on the same line. Since that
-- % text will be indented by \tableindent, we make the item text be in
-- % a zero-width box.
-+ % following text (if any) will end up on the same line.
- \noindent
-- \rlap{\hskip -\tableindent\box0}\ignorespaces%
-- \endgroup%
-- \itemxneedsnegativevskiptrue%
-+ % Do this with kerns and \unhbox so that if there is a footnote in
-+ % the item text, it can migrate to the main vertical list and
-+ % eventually be printed.
-+ \nobreak\kern-\tableindent
-+ \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
-+ \unhbox0
-+ \nobreak\kern\dimen0
-+ \endgroup
-+ \itemxneedsnegativevskiptrue
- \fi
- }
-
-@@ -1779,9 +1786,10 @@
- \def\xitem{\errmessage{@xitem while not in a table}}
- \def\xitemx{\errmessage{@xitemx while not in a table}}
-
--%% Contains a kludge to get @end[description] to work
-+% Contains a kludge to get @end[description] to work.
- \def\description{\tablez{\dontindex}{1}{}{}{}{}}
-
-+% @table, @ftable, @vtable.
- \def\table{\begingroup\inENV\obeylines\obeyspaces\tablex}
- {\obeylines\obeyspaces%
- \gdef\tablex #1^^M{%
-@@ -1841,7 +1849,7 @@
- \def\itemize{\parsearg\itemizezzz}
-
- \def\itemizezzz #1{%
-- \begingroup % ended by the @end itemsize
-+ \begingroup % ended by the @end itemize
- \itemizey {#1}{\Eitemize}
- }
-
-@@ -2043,10 +2051,7 @@
- % @multitablelinespace is space to leave between table items, baseline
- % to baseline.
- % 0pt means it depends on current normal line spacing.
--
--%%%%
--% Dimensions
--
-+%
- \newskip\multitableparskip
- \newskip\multitableparindent
- \newdimen\multitablecolspace
-@@ -2056,129 +2061,150 @@
- \multitablecolspace=12pt
- \multitablelinespace=0pt
-
--%%%%
- % Macros used to set up halign preamble:
-+%
- \let\endsetuptable\relax
- \def\xendsetuptable{\endsetuptable}
- \let\columnfractions\relax
- \def\xcolumnfractions{\columnfractions}
- \newif\ifsetpercent
-
--%% 2/1/96, to allow fractions to be given with more than one digit.
--\def\pickupwholefraction#1 {\global\advance\colcount by1 %
--\expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}%
--\setuptable}
-+% #1 is the part of the @columnfraction before the decimal point, which
-+% is presumably either 0 or the empty string (but we don't check, we
-+% just throw it away). #2 is the decimal part, which we use as the
-+% percent of \hsize for this column.
-+\def\pickupwholefraction#1.#2 {%
-+ \global\advance\colcount by 1
-+ \expandafter\xdef\csname col\the\colcount\endcsname{.#2\hsize}%
-+ \setuptable
-+}
-
- \newcount\colcount
--\def\setuptable#1{\def\firstarg{#1}%
--\ifx\firstarg\xendsetuptable\let\go\relax%
--\else
-- \ifx\firstarg\xcolumnfractions\global\setpercenttrue%
-+\def\setuptable#1{%
-+ \def\firstarg{#1}%
-+ \ifx\firstarg\xendsetuptable
-+ \let\go = \relax
- \else
-- \ifsetpercent
-- \let\go\pickupwholefraction % In this case arg of setuptable
-- % is the decimal point before the
-- % number given in percent of hsize.
-- % We don't need this so we don't use it.
-+ \ifx\firstarg\xcolumnfractions
-+ \global\setpercenttrue
-+ \else
-+ \ifsetpercent
-+ \let\go\pickupwholefraction
-+ \else
-+ \global\advance\colcount by 1
-+ \setbox0=\hbox{#1\unskip }% Add a normal word space as a separator;
-+ % typically that is always in the input, anyway.
-+ \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
-+ \fi
-+ \fi
-+ \ifx\go\pickupwholefraction
-+ % Put the argument back for the \pickupwholefraction call, so
-+ % we'll always have a period there to be parsed.
-+ \def\go{\pickupwholefraction#1}%
- \else
-- \global\advance\colcount by1
-- \setbox0=\hbox{#1 }% Add a normal word space as a separator;
-- % typically that is always in the input, anyway.
-- \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
-+ \let\go = \setuptable
- \fi%
-- \fi%
--\ifx\go\pickupwholefraction\else\let\go\setuptable\fi%
--\fi\go}
--
--%%%%
--% multitable syntax
--\def\tab{&\hskip1sp\relax} % 2/2/96
-- % tiny skip here makes sure this column space is
-- % maintained, even if it is never used.
-+ \fi
-+ \go
-+}
-
-+% This used to have \hskip1sp. But then the space in a template line is
-+% not enough. That is bad. So let's go back to just & until we
-+% encounter the problem it was intended to solve again.
-+% --karl, nathan@acm.org, 20apr99.
-+\def\tab{&}
-
--%%%%
- % @multitable ... @end multitable definitions:
--
-+%
- \def\multitable{\parsearg\dotable}
--
- \def\dotable#1{\bgroup
--\let\item\cr
--\tolerance=9500
--\hbadness=9500
--\setmultitablespacing
--\parskip=\multitableparskip
--\parindent=\multitableparindent
--\overfullrule=0pt
--\global\colcount=0\relax%
--\def\Emultitable{\global\setpercentfalse\global\everycr{}\cr\egroup\egroup}%
-- % To parse everything between @multitable and @item :
--\setuptable#1 \endsetuptable
-- % Need to reset this to 0 after \setuptable.
--\global\colcount=0\relax%
-- %
-- % This preamble sets up a generic column definition, which will
-- % be used as many times as user calls for columns.
-- % \vtop will set a single line and will also let text wrap and
-- % continue for many paragraphs if desired.
--\halign\bgroup&\global\advance\colcount by 1\relax%
--\multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
-- % In order to keep entries from bumping into each other
-- % we will add a \leftskip of \multitablecolspace to all columns after
-- % the first one.
-- % If a template has been used, we will add \multitablecolspace
-- % to the width of each template entry.
-- % If user has set preamble in terms of percent of \hsize
-- % we will use that dimension as the width of the column, and
-- % the \leftskip will keep entries from bumping into each other.
-- % Table will start at left margin and final column will justify at
-- % right margin.
--\ifnum\colcount=1
--\else
-- \ifsetpercent
-+ \vskip\parskip
-+ \let\item\crcr
-+ \tolerance=9500
-+ \hbadness=9500
-+ \setmultitablespacing
-+ \parskip=\multitableparskip
-+ \parindent=\multitableparindent
-+ \overfullrule=0pt
-+ \global\colcount=0
-+ \def\Emultitable{\global\setpercentfalse\cr\egroup\egroup}%
-+ %
-+ % To parse everything between @multitable and @item:
-+ \setuptable#1 \endsetuptable
-+ %
-+ % \everycr will reset column counter, \colcount, at the end of
-+ % each line. Every column entry will cause \colcount to advance by one.
-+ % The table preamble
-+ % looks at the current \colcount to find the correct column width.
-+ \everycr{\noalign{%
-+ %
-+ % \filbreak%% keeps underfull box messages off when table breaks over pages.
-+ % Maybe so, but it also creates really weird page breaks when the table
-+ % breaks over pages. Wouldn't \vfil be better? Wait until the problem
-+ % manifests itself, so it can be fixed for real --karl.
-+ \global\colcount=0\relax}}%
-+ %
-+ % This preamble sets up a generic column definition, which will
-+ % be used as many times as user calls for columns.
-+ % \vtop will set a single line and will also let text wrap and
-+ % continue for many paragraphs if desired.
-+ \halign\bgroup&\global\advance\colcount by 1\relax
-+ \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
-+ %
-+ % In order to keep entries from bumping into each other
-+ % we will add a \leftskip of \multitablecolspace to all columns after
-+ % the first one.
-+ %
-+ % If a template has been used, we will add \multitablecolspace
-+ % to the width of each template entry.
-+ %
-+ % If the user has set preamble in terms of percent of \hsize we will
-+ % use that dimension as the width of the column, and the \leftskip
-+ % will keep entries from bumping into each other. Table will start at
-+ % left margin and final column will justify at right margin.
-+ %
-+ % Make sure we don't inherit \rightskip from the outer environment.
-+ \rightskip=0pt
-+ \ifnum\colcount=1
-+ % The first column will be indented with the surrounding text.
-+ \advance\hsize by\leftskip
- \else
-- % If user has <not> set preamble in terms of percent of \hsize
-- % we will advance \hsize by \multitablecolspace
-- \advance\hsize by \multitablecolspace
-+ \ifsetpercent \else
-+ % If user has not set preamble in terms of percent of \hsize
-+ % we will advance \hsize by \multitablecolspace.
-+ \advance\hsize by \multitablecolspace
-+ \fi
-+ % In either case we will make \leftskip=\multitablecolspace:
-+ \leftskip=\multitablecolspace
- \fi
-- % In either case we will make \leftskip=\multitablecolspace:
--\leftskip=\multitablecolspace
--\fi
-- % Ignoring space at the beginning and end avoids an occasional spurious
-- % blank line, when TeX decides to break the line at the space before the
-- % box from the multistrut, so the strut ends up on a line by itself.
-- % For example:
-- % @multitable @columnfractions .11 .89
-- % @item @code{#}
-- % @tab Legal holiday which is valid in major parts of the whole country.
-- % Is automatically provided with highlighting sequences respectively marking
-- % characters.
-- \noindent\ignorespaces##\unskip\multistrut}\cr
-- % \everycr will reset column counter, \colcount, at the end of
-- % each line. Every column entry will cause \colcount to advance by one.
-- % The table preamble
-- % looks at the current \colcount to find the correct column width.
--\global\everycr{\noalign{%
--% \filbreak%% keeps underfull box messages off when table breaks over pages.
--% Maybe so, but it also creates really weird page breaks when the table
--% breaks over pages Wouldn't \vfil be better? Wait until the problem
--% manifests itself, so it can be fixed for real --karl.
--\global\colcount=0\relax}}
-+ % Ignoring space at the beginning and end avoids an occasional spurious
-+ % blank line, when TeX decides to break the line at the space before the
-+ % box from the multistrut, so the strut ends up on a line by itself.
-+ % For example:
-+ % @multitable @columnfractions .11 .89
-+ % @item @code{#}
-+ % @tab Legal holiday which is valid in major parts of the whole country.
-+ % Is automatically provided with highlighting sequences respectively marking
-+ % characters.
-+ \noindent\ignorespaces##\unskip\multistrut}\cr
- }
-
- \def\setmultitablespacing{% test to see if user has set \multitablelinespace.
- % If so, do nothing. If not, give it an appropriate dimension based on
- % current baselineskip.
- \ifdim\multitablelinespace=0pt
-+\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
-+\global\advance\multitablelinespace by-\ht0
- %% strut to put in table in case some entry doesn't have descenders,
- %% to keep lines equally spaced
- \let\multistrut = \strut
--%% Test to see if parskip is larger than space between lines of
--%% table. If not, do nothing.
--%% If so, set to same dimension as multitablelinespace.
- \else
-+%% FIXME: what is \box0 supposed to be?
- \gdef\multistrut{\vrule height\multitablelinespace depth\dp0
- width0pt\relax} \fi
-+%% Test to see if parskip is larger than space between lines of
-+%% table. If not, do nothing.
-+%% If so, set to same dimension as multitablelinespace.
- \ifdim\multitableparskip>\multitablelinespace
- \global\multitableparskip=\multitablelinespace
- \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
-@@ -2191,6 +2217,356 @@
- \fi}
-
-
-+\message{conditionals,}
-+% Prevent errors for section commands.
-+% Used in @ignore and in failing conditionals.
-+\def\ignoresections{%
-+ \let\chapter=\relax
-+ \let\unnumbered=\relax
-+ \let\top=\relax
-+ \let\unnumberedsec=\relax
-+ \let\unnumberedsection=\relax
-+ \let\unnumberedsubsec=\relax
-+ \let\unnumberedsubsection=\relax
-+ \let\unnumberedsubsubsec=\relax
-+ \let\unnumberedsubsubsection=\relax
-+ \let\section=\relax
-+ \let\subsec=\relax
-+ \let\subsubsec=\relax
-+ \let\subsection=\relax
-+ \let\subsubsection=\relax
-+ \let\appendix=\relax
-+ \let\appendixsec=\relax
-+ \let\appendixsection=\relax
-+ \let\appendixsubsec=\relax
-+ \let\appendixsubsection=\relax
-+ \let\appendixsubsubsec=\relax
-+ \let\appendixsubsubsection=\relax
-+ \let\contents=\relax
-+ \let\smallbook=\relax
-+ \let\titlepage=\relax
-+}
-+
-+% Used in nested conditionals, where we have to parse the Texinfo source
-+% and so want to turn off most commands, in case they are used
-+% incorrectly.
-+%
-+\def\ignoremorecommands{%
-+ \let\defcodeindex = \relax
-+ \let\defcv = \relax
-+ \let\deffn = \relax
-+ \let\deffnx = \relax
-+ \let\defindex = \relax
-+ \let\defivar = \relax
-+ \let\defmac = \relax
-+ \let\defmethod = \relax
-+ \let\defop = \relax
-+ \let\defopt = \relax
-+ \let\defspec = \relax
-+ \let\deftp = \relax
-+ \let\deftypefn = \relax
-+ \let\deftypefun = \relax
-+ \let\deftypeivar = \relax
-+ \let\deftypeop = \relax
-+ \let\deftypevar = \relax
-+ \let\deftypevr = \relax
-+ \let\defun = \relax
-+ \let\defvar = \relax
-+ \let\defvr = \relax
-+ \let\ref = \relax
-+ \let\xref = \relax
-+ \let\printindex = \relax
-+ \let\pxref = \relax
-+ \let\settitle = \relax
-+ \let\setchapternewpage = \relax
-+ \let\setchapterstyle = \relax
-+ \let\everyheading = \relax
-+ \let\evenheading = \relax
-+ \let\oddheading = \relax
-+ \let\everyfooting = \relax
-+ \let\evenfooting = \relax
-+ \let\oddfooting = \relax
-+ \let\headings = \relax
-+ \let\include = \relax
-+ \let\lowersections = \relax
-+ \let\down = \relax
-+ \let\raisesections = \relax
-+ \let\up = \relax
-+ \let\set = \relax
-+ \let\clear = \relax
-+ \let\item = \relax
-+}
-+
-+% Ignore @ignore ... @end ignore.
-+%
-+\def\ignore{\doignore{ignore}}
-+
-+% Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text.
-+%
-+\def\ifinfo{\doignore{ifinfo}}
-+\def\ifhtml{\doignore{ifhtml}}
-+\def\ifnottex{\doignore{ifnottex}}
-+\def\html{\doignore{html}}
-+\def\menu{\doignore{menu}}
-+\def\direntry{\doignore{direntry}}
-+
-+% @dircategory CATEGORY -- specify a category of the dir file
-+% which this file should belong to. Ignore this in TeX.
-+\let\dircategory = \comment
-+
-+% Ignore text until a line `@end #1'.
-+%
-+\def\doignore#1{\begingroup
-+ % Don't complain about control sequences we have declared \outer.
-+ \ignoresections
-+ %
-+ % Define a command to swallow text until we reach `@end #1'.
-+ % This @ is a catcode 12 token (that is the normal catcode of @ in
-+ % this texinfo.tex file). We change the catcode of @ below to match.
-+ \long\def\doignoretext##1@end #1{\enddoignore}%
-+ %
-+ % Make sure that spaces turn into tokens that match what \doignoretext wants.
-+ \catcode32 = 10
-+ %
-+ % Ignore braces, too, so mismatched braces don't cause trouble.
-+ \catcode`\{ = 9
-+ \catcode`\} = 9
-+ %
-+ % We must not have @c interpreted as a control sequence.
-+ \catcode`\@ = 12
-+ %
-+ % Make the letter c a comment character so that the rest of the line
-+ % will be ignored. This way, the document can have (for example)
-+ % @c @end ifinfo
-+ % and the @end ifinfo will be properly ignored.
-+ % (We've just changed @ to catcode 12.)
-+ \catcode`\c = 14
-+ %
-+ % And now expand that command.
-+ \doignoretext
-+}
-+
-+% What we do to finish off ignored text.
-+%
-+\def\enddoignore{\endgroup\ignorespaces}%
-+
-+\newif\ifwarnedobs\warnedobsfalse
-+\def\obstexwarn{%
-+ \ifwarnedobs\relax\else
-+ % We need to warn folks that they may have trouble with TeX 3.0.
-+ % This uses \immediate\write16 rather than \message to get newlines.
-+ \immediate\write16{}
-+ \immediate\write16{WARNING: for users of Unix TeX 3.0!}
-+ \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).}
-+ \immediate\write16{If you are running another version of TeX, relax.}
-+ \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
-+ \immediate\write16{ Then upgrade your TeX installation if you can.}
-+ \immediate\write16{ (See ftp://ftp.gnu.org/pub/gnu/TeX.README.)}
-+ \immediate\write16{If you are stuck with version 3.0, run the}
-+ \immediate\write16{ script ``tex3patch'' from the Texinfo distribution}
-+ \immediate\write16{ to use a workaround.}
-+ \immediate\write16{}
-+ \global\warnedobstrue
-+ \fi
-+}
-+
-+% **In TeX 3.0, setting text in \nullfont hangs tex. For a
-+% workaround (which requires the file ``dummy.tfm'' to be installed),
-+% uncomment the following line:
-+%%%%%\font\nullfont=dummy\let\obstexwarn=\relax
-+
-+% Ignore text, except that we keep track of conditional commands for
-+% purposes of nesting, up to an `@end #1' command.
-+%
-+\def\nestedignore#1{%
-+ \obstexwarn
-+ % We must actually expand the ignored text to look for the @end
-+ % command, so that nested ignore constructs work. Thus, we put the
-+ % text into a \vbox and then do nothing with the result. To minimize
-+ % the change of memory overflow, we follow the approach outlined on
-+ % page 401 of the TeXbook: make the current font be a dummy font.
-+ %
-+ \setbox0 = \vbox\bgroup
-+ % Don't complain about control sequences we have declared \outer.
-+ \ignoresections
-+ %
-+ % Define `@end #1' to end the box, which will in turn undefine the
-+ % @end command again.
-+ \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}%
-+ %
-+ % We are going to be parsing Texinfo commands. Most cause no
-+ % trouble when they are used incorrectly, but some commands do
-+ % complicated argument parsing or otherwise get confused, so we
-+ % undefine them.
-+ %
-+ % We can't do anything about stray @-signs, unfortunately;
-+ % they'll produce `undefined control sequence' errors.
-+ \ignoremorecommands
-+ %
-+ % Set the current font to be \nullfont, a TeX primitive, and define
-+ % all the font commands to also use \nullfont. We don't use
-+ % dummy.tfm, as suggested in the TeXbook, because not all sites
-+ % might have that installed. Therefore, math mode will still
-+ % produce output, but that should be an extremely small amount of
-+ % stuff compared to the main input.
-+ %
-+ \nullfont
-+ \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont
-+ \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont
-+ \let\tensf=\nullfont
-+ % Similarly for index fonts (mostly for their use in smallexample).
-+ \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont
-+ \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont
-+ \let\smallsf=\nullfont
-+ %
-+ % Don't complain when characters are missing from the fonts.
-+ \tracinglostchars = 0
-+ %
-+ % Don't bother to do space factor calculations.
-+ \frenchspacing
-+ %
-+ % Don't report underfull hboxes.
-+ \hbadness = 10000
-+ %
-+ % Do minimal line-breaking.
-+ \pretolerance = 10000
-+ %
-+ % Do not execute instructions in @tex
-+ \def\tex{\doignore{tex}}%
-+ % Do not execute macro definitions.
-+ % `c' is a comment character, so the word `macro' will get cut off.
-+ \def\macro{\doignore{ma}}%
-+}
-+
-+% @set VAR sets the variable VAR to an empty value.
-+% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
-+%
-+% Since we want to separate VAR from REST-OF-LINE (which might be
-+% empty), we can't just use \parsearg; we have to insert a space of our
-+% own to delimit the rest of the line, and then take it out again if we
-+% didn't need it. Make sure the catcode of space is correct to avoid
-+% losing inside @example, for instance.
-+%
-+\def\set{\begingroup\catcode` =10
-+ \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
-+ \parsearg\setxxx}
-+\def\setxxx#1{\setyyy#1 \endsetyyy}
-+\def\setyyy#1 #2\endsetyyy{%
-+ \def\temp{#2}%
-+ \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
-+ \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
-+ \fi
-+ \endgroup
-+}
-+% Can't use \xdef to pre-expand #2 and save some time, since \temp or
-+% \next or other control sequences that we've defined might get us into
-+% an infinite loop. Consider `@set foo @cite{bar}'.
-+\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}}
-+
-+% @clear VAR clears (i.e., unsets) the variable VAR.
-+%
-+\def\clear{\parsearg\clearxxx}
-+\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax}
-+
-+% @value{foo} gets the text saved in variable foo.
-+{
-+ \catcode`\_ = \active
-+ %
-+ % We might end up with active _ or - characters in the argument if
-+ % we're called from @code, as @code{@value{foo-bar_}}. So \let any
-+ % such active characters to their normal equivalents.
-+ \gdef\value{\begingroup
-+ \catcode`\-=12 \catcode`\_=12
-+ \indexbreaks \let_\normalunderscore
-+ \valuexxx}
-+}
-+\def\valuexxx#1{\expandablevalue{#1}\endgroup}
-+
-+% We have this subroutine so that we can handle at least some @value's
-+% properly in indexes (we \let\value to this in \indexdummies). Ones
-+% whose names contain - or _ still won't work, but we can't do anything
-+% about that. The command has to be fully expandable, since the result
-+% winds up in the index file. This means that if the variable's value
-+% contains other Texinfo commands, it's almost certain it will fail
-+% (although perhaps we could fix that with sufficient work to do a
-+% one-level expansion on the result, instead of complete).
-+%
-+\def\expandablevalue#1{%
-+ \expandafter\ifx\csname SET#1\endcsname\relax
-+ {[No value for ``#1'']}%
-+ \else
-+ \csname SET#1\endcsname
-+ \fi
-+}
-+
-+% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
-+% with @set.
-+%
-+\def\ifset{\parsearg\ifsetxxx}
-+\def\ifsetxxx #1{%
-+ \expandafter\ifx\csname SET#1\endcsname\relax
-+ \expandafter\ifsetfail
-+ \else
-+ \expandafter\ifsetsucceed
-+ \fi
-+}
-+\def\ifsetsucceed{\conditionalsucceed{ifset}}
-+\def\ifsetfail{\nestedignore{ifset}}
-+\defineunmatchedend{ifset}
-+
-+% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
-+% defined with @set, or has been undefined with @clear.
-+%
-+\def\ifclear{\parsearg\ifclearxxx}
-+\def\ifclearxxx #1{%
-+ \expandafter\ifx\csname SET#1\endcsname\relax
-+ \expandafter\ifclearsucceed
-+ \else
-+ \expandafter\ifclearfail
-+ \fi
-+}
-+\def\ifclearsucceed{\conditionalsucceed{ifclear}}
-+\def\ifclearfail{\nestedignore{ifclear}}
-+\defineunmatchedend{ifclear}
-+
-+% @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text
-+% following, through the first @end iftex (etc.). Make `@end iftex'
-+% (etc.) valid only after an @iftex.
-+%
-+\def\iftex{\conditionalsucceed{iftex}}
-+\def\ifnothtml{\conditionalsucceed{ifnothtml}}
-+\def\ifnotinfo{\conditionalsucceed{ifnotinfo}}
-+\defineunmatchedend{iftex}
-+\defineunmatchedend{ifnothtml}
-+\defineunmatchedend{ifnotinfo}
-+
-+% We can't just want to start a group at @iftex (for example) and end it
-+% at @end iftex, since then @set commands inside the conditional have no
-+% effect (they'd get reverted at the end of the group). So we must
-+% define \Eiftex to redefine itself to be its previous value. (We can't
-+% just define it to fail again with an ``unmatched end'' error, since
-+% the @ifset might be nested.)
-+%
-+\def\conditionalsucceed#1{%
-+ \edef\temp{%
-+ % Remember the current value of \E#1.
-+ \let\nece{prevE#1} = \nece{E#1}%
-+ %
-+ % At the `@end #1', redefine \E#1 to be its previous value.
-+ \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}%
-+ }%
-+ \temp
-+}
-+
-+% We need to expand lots of \csname's, but we don't want to expand the
-+% control sequences after we've constructed them.
-+%
-+\def\nece#1{\expandafter\noexpand\csname#1\endcsname}
-+
-+% @defininfoenclose.
-+\let\definfoenclose=\comment
-+
-+
- \message{indexing,}
- % Index generation facilities
-
-@@ -2206,12 +2582,14 @@
- % the file that accumulates this index. The file's extension is foo.
- % The name of an index should be no more than 2 characters long
- % for the sake of vms.
--
--\def\newindex #1{
--\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
--\openout \csname#1indfile\endcsname \jobname.#1 % Open the file
--\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
--\noexpand\doindex {#1}}
-+%
-+\def\newindex#1{%
-+ \iflinks
-+ \expandafter\newwrite \csname#1indfile\endcsname
-+ \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
-+ \fi
-+ \expandafter\xdef\csname#1index\endcsname{% % Define @#1index
-+ \noexpand\doindex{#1}}
- }
-
- % @defindex foo == \newindex{foo}
-@@ -2220,31 +2598,37 @@
-
- % Define @defcodeindex, like @defindex except put all entries in @code.
-
--\def\newcodeindex #1{
--\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
--\openout \csname#1indfile\endcsname \jobname.#1 % Open the file
--\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
--\noexpand\docodeindex {#1}}
-+\def\newcodeindex#1{%
-+ \iflinks
-+ \expandafter\newwrite \csname#1indfile\endcsname
-+ \openout \csname#1indfile\endcsname \jobname.#1
-+ \fi
-+ \expandafter\xdef\csname#1index\endcsname{%
-+ \noexpand\docodeindex{#1}}
- }
-
- \def\defcodeindex{\parsearg\newcodeindex}
-
- % @synindex foo bar makes index foo feed into index bar.
- % Do this instead of @defindex foo if you don't want it as a separate index.
--\def\synindex #1 #2 {%
--\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
--\expandafter\let\csname#1indfile\endcsname=\synindexfoo
--\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
--\noexpand\doindex {#2}}%
-+% The \closeout helps reduce unnecessary open files; the limit on the
-+% Acorn RISC OS is a mere 16 files.
-+\def\synindex#1 #2 {%
-+ \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
-+ \expandafter\closeout\csname#1indfile\endcsname
-+ \expandafter\let\csname#1indfile\endcsname=\synindexfoo
-+ \expandafter\xdef\csname#1index\endcsname{% define \xxxindex
-+ \noexpand\doindex{#2}}%
- }
-
- % @syncodeindex foo bar similar, but put all entries made for index foo
- % inside @code.
--\def\syncodeindex #1 #2 {%
--\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
--\expandafter\let\csname#1indfile\endcsname=\synindexfoo
--\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
--\noexpand\docodeindex {#2}}%
-+\def\syncodeindex#1 #2 {%
-+ \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
-+ \expandafter\closeout\csname#1indfile\endcsname
-+ \expandafter\let\csname#1indfile\endcsname=\synindexfoo
-+ \expandafter\xdef\csname#1index\endcsname{% define \xxxindex
-+ \noexpand\docodeindex{#2}}%
- }
-
- % Define \doindex, the driver for all \fooindex macros.
-@@ -2265,6 +2649,7 @@
- \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
-
- \def\indexdummies{%
-+\def\ { }%
- % Take care of the plain tex accent commands.
- \def\"{\realbackslash "}%
- \def\`{\realbackslash `}%
-@@ -2294,8 +2679,11 @@
- % (Must be a way to avoid doing expansion at all, and thus not have to
- % laboriously list every single command here.)
- \def\@{@}% will be @@ when we switch to @ as escape char.
--%\let\{ = \lbracecmd
--%\let\} = \rbracecmd
-+% Need these in case \tex is in effect and \{ is a \delimiter again.
-+% But can't use \lbracecmd and \rbracecmd because texindex assumes
-+% braces and backslashes are used only as delimiters.
-+\let\{ = \mylbrace
-+\let\} = \myrbrace
- \def\_{{\realbackslash _}}%
- \def\w{\realbackslash w }%
- \def\bf{\realbackslash bf }%
-@@ -2306,7 +2694,6 @@
- \def\gtr{\realbackslash gtr}%
- \def\less{\realbackslash less}%
- \def\hat{\realbackslash hat}%
--%\def\char{\realbackslash char}%
- \def\TeX{\realbackslash TeX}%
- \def\dots{\realbackslash dots }%
- \def\result{\realbackslash result}%
-@@ -2318,6 +2705,11 @@
- \def\copyright{\realbackslash copyright}%
- \def\tclose##1{\realbackslash tclose {##1}}%
- \def\code##1{\realbackslash code {##1}}%
-+\def\uref##1{\realbackslash uref {##1}}%
-+\def\url##1{\realbackslash url {##1}}%
-+\def\env##1{\realbackslash env {##1}}%
-+\def\command##1{\realbackslash command {##1}}%
-+\def\option##1{\realbackslash option {##1}}%
- \def\dotless##1{\realbackslash dotless {##1}}%
- \def\samp##1{\realbackslash samp {##1}}%
- \def\,##1{\realbackslash ,{##1}}%
-@@ -2333,8 +2725,16 @@
- \def\kbd##1{\realbackslash kbd {##1}}%
- \def\dfn##1{\realbackslash dfn {##1}}%
- \def\emph##1{\realbackslash emph {##1}}%
--\def\value##1{\realbackslash value {##1}}%
-+\def\acronym##1{\realbackslash acronym {##1}}%
-+%
-+% Handle some cases of @value -- where the variable name does not
-+% contain - or _, and the value does not contain any
-+% (non-fully-expandable) commands.
-+\let\value = \expandablevalue
-+%
- \unsepspaces
-+% Turn off macro expansion
-+\turnoffmacros
- }
-
- % If an index command is used in an @example environment, any spaces
-@@ -2391,6 +2791,12 @@
- %\let\tt=\indexdummyfont
- \let\tclose=\indexdummyfont
- \let\code=\indexdummyfont
-+\let\url=\indexdummyfont
-+\let\uref=\indexdummyfont
-+\let\env=\indexdummyfont
-+\let\acronym=\indexdummyfont
-+\let\command=\indexdummyfont
-+\let\option=\indexdummyfont
- \let\file=\indexdummyfont
- \let\samp=\indexdummyfont
- \let\kbd=\indexdummyfont
-@@ -2406,14 +2812,24 @@
- % so we do not become unable to do a definition.
-
- {\catcode`\@=0 \catcode`\\=\other
--@gdef@realbackslash{\}}
-+ @gdef@realbackslash{\}}
-
- \let\indexbackslash=0 %overridden during \printindex.
-+\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
-+
-+% For \ifx comparisons.
-+\def\emptymacro{\empty}
-
--\let\SETmarginindex=\relax %initialize!
--% workhorse for all \fooindexes
--% #1 is name of index, #2 is stuff to put there
--\def\doind #1#2{%
-+% Most index entries go through here, but \dosubind is the general case.
-+%
-+\def\doind#1#2{\dosubind{#1}{#2}\empty}
-+
-+% Workhorse for all \fooindexes.
-+% #1 is name of index, #2 is stuff to put there, #3 is subentry --
-+% \empty if called from \doind, as we usually are. The main exception
-+% is with defuns, which call us directly.
-+%
-+\def\dosubind#1#2#3{%
- % Put the index entry in the margin if desired.
- \ifx\SETmarginindex\relax\else
- \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%
-@@ -2424,48 +2840,75 @@
- \indexdummies % Must do this here, since \bf, etc expand at this stage
- \escapechar=`\\
- {%
-- \let\folio=0% We will expand all macros now EXCEPT \folio.
-+ \let\folio = 0% We will expand all macros now EXCEPT \folio.
- \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
- % so it will be output as is; and it will print as backslash.
- %
-- % First process the index-string with all font commands turned off
-- % to get the string to sort by.
-- {\indexnofonts \xdef\indexsorttmp{#2}}%
-+ \def\thirdarg{#3}%
- %
-- % Now produce the complete index entry, with both the sort key and the
-- % original text, including any font commands.
-+ % If third arg is present, precede it with space in sort key.
-+ \ifx\thirdarg\emptymacro
-+ \let\subentry = \empty
-+ \else
-+ \def\subentry{ #3}%
-+ \fi
-+ %
-+ % First process the index entry with all font commands turned
-+ % off to get the string to sort by.
-+ {\indexnofonts \xdef\indexsorttmp{#2\subentry}}%
-+ %
-+ % Now the real index entry with the fonts.
- \toks0 = {#2}%
-+ %
-+ % If third (subentry) arg is present, add it to the index
-+ % string. And include a space.
-+ \ifx\thirdarg\emptymacro \else
-+ \toks0 = \expandafter{\the\toks0 \space #3}%
-+ \fi
-+ %
-+ % Set up the complete index entry, with both the sort key
-+ % and the original text, including any font commands. We write
-+ % three arguments to \entry to the .?? file, texindex reduces to
-+ % two when writing the .??s sorted result.
- \edef\temp{%
- \write\csname#1indfile\endcsname{%
- \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
- }%
-- \temp
-+ %
-+ % If a skip is the last thing on the list now, preserve it
-+ % by backing up by \lastskip, doing the \write, then inserting
-+ % the skip again. Otherwise, the whatsit generated by the
-+ % \write will make \lastskip zero. The result is that sequences
-+ % like this:
-+ % @end defun
-+ % @tindex whatever
-+ % @defun ...
-+ % will have extra space inserted, because the \medbreak in the
-+ % start of the @defun won't see the skip inserted by the @end of
-+ % the previous defun.
-+ %
-+ % But don't do any of this if we're not in vertical mode. We
-+ % don't want to do a \vskip and prematurely end a paragraph.
-+ %
-+ % Avoid page breaks due to these extra skips, too.
-+ %
-+ \iflinks
-+ \ifvmode
-+ \skip0 = \lastskip
-+ \ifdim\lastskip = 0pt \else \nobreak\vskip-\lastskip \fi
-+ \fi
-+ %
-+ \temp % do the write
-+ %
-+ %
-+ \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi
-+ \fi
- }%
- }%
- \penalty\count255
- }%
- }
-
--\def\dosubind #1#2#3{%
--{\count10=\lastpenalty %
--{\indexdummies % Must do this here, since \bf, etc expand at this stage
--\escapechar=`\\%
--{\let\folio=0%
--\def\rawbackslashxx{\indexbackslash}%
--%
--% Now process the index-string once, with all font commands turned off,
--% to get the string to sort the index by.
--{\indexnofonts
--\xdef\temp1{#2 #3}%
--}%
--% Now produce the complete index entry. We process the index-string again,
--% this time with font commands expanded, to get what to print in the index.
--\edef\temp{%
--\write \csname#1indfile\endcsname{%
--\realbackslash entry {\temp1}{\folio}{#2}{#3}}}%
--\temp }%
--}\penalty\count10}}
--
- % The index entry written in the file actually looks like
- % \entry {sortstring}{page}{topic}
- % or
-@@ -2505,18 +2948,23 @@
- \def\doprintindex#1{\begingroup
- \dobreak \chapheadingskip{10000}%
- %
-- \indexfonts \rm
-+ \smallfonts \rm
- \tolerance = 9500
- \indexbreaks
- %
- % See if the index file exists and is nonempty.
-+ % Change catcode of @ here so that if the index file contains
-+ % \initial {@}
-+ % as its first line, TeX doesn't complain about mismatched braces
-+ % (because it thinks @} is a control sequence).
-+ \catcode`\@ = 11
- \openin 1 \jobname.#1s
- \ifeof 1
- % \enddoublecolumns gets confused if there is no text in the index,
- % and it loses the chapter title and the aux file entries for the
- % index. The easiest way to prevent this problem is to make sure
- % there is some text.
-- (Index is nonexistent)
-+ \putwordIndexNonexistent
- \else
- %
- % If the index file exists but is empty, then \openin leaves \ifeof
-@@ -2524,14 +2972,13 @@
- % it can discover if there is anything in it.
- \read 1 to \temp
- \ifeof 1
-- (Index is empty)
-+ \putwordIndexIsEmpty
- \else
- % Index files are almost Texinfo source, but we use \ as the escape
- % character. It would be better to use @, but that's too big a change
- % to make right now.
- \def\indexbackslash{\rawbackslashxx}%
- \catcode`\\ = 0
-- \catcode`\@ = 11
- \escapechar = `\\
- \begindoublecolumns
- \input \jobname.#1s
-@@ -2544,21 +2991,35 @@
- % These macros are used by the sorted index file itself.
- % Change them to control the appearance of the index.
-
--% Same as \bigskipamount except no shrink.
--% \balancecolumns gets confused if there is any shrink.
--\newskip\initialskipamount \initialskipamount 12pt plus4pt
--
--\def\initial #1{%
--{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
--\ifdim\lastskip<\initialskipamount
--\removelastskip \penalty-200 \vskip \initialskipamount\fi
--\line{\secbf#1\hfill}\kern 2pt\penalty10000}}
-+\def\initial#1{{%
-+ % Some minor font changes for the special characters.
-+ \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
-+ %
-+ % Remove any glue we may have, we'll be inserting our own.
-+ \removelastskip
-+ %
-+ % We like breaks before the index initials, so insert a bonus.
-+ \penalty -300
-+ %
-+ % Typeset the initial. Making this add up to a whole number of
-+ % baselineskips increases the chance of the dots lining up from column
-+ % to column. It still won't often be perfect, because of the stretch
-+ % we need before each entry, but it's better.
-+ %
-+ % No shrink because it confuses \balancecolumns.
-+ \vskip 1.67\baselineskip plus .5\baselineskip
-+ \leftline{\secbf #1}%
-+ \vskip .33\baselineskip plus .1\baselineskip
-+ %
-+ % Do our best not to break after the initial.
-+ \nobreak
-+}}
-
- % This typesets a paragraph consisting of #1, dot leaders, and then #2
- % flush to the right margin. It is used for index and table of contents
- % entries. The paragraph is indented by \leftskip.
- %
--\def\entry #1#2{\begingroup
-+\def\entry#1#2{\begingroup
- %
- % Start a new paragraph if necessary, so our assignments below can't
- % affect previous text.
-@@ -2581,12 +3042,15 @@
- %
- % \hangafter is reset to 1 (which is the value we want) at the start
- % of each paragraph, so we need not do anything with that.
-- \hangindent=2em
-+ \hangindent = 2em
- %
- % When the entry text needs to be broken, just fill out the first line
- % with blank space.
- \rightskip = 0pt plus1fil
- %
-+ % A bit of stretch before each entry for the benefit of balancing columns.
-+ \vskip 0pt plus1pt
-+ %
- % Start a ``paragraph'' for the index entry so the line breaking
- % parameters we've set above will have an effect.
- \noindent
-@@ -2611,7 +3075,11 @@
- % The `\ ' here is removed by the implicit \unskip that TeX does as
- % part of (the primitive) \par. Without it, a spurious underfull
- % \hbox ensues.
-- \ #2% The page number ends the paragraph.
-+ \ifpdf
-+ \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
-+ \else
-+ \ #2% The page number ends the paragraph.
-+ \fi
- \fi%
- \par
- \endgroup}
-@@ -2640,24 +3108,26 @@
-
- \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
- % Grab any single-column material above us.
-- \output = {\global\setbox\partialpage = \vbox{%
-- %
-+ \output = {%
-+ %
- % Here is a possibility not foreseen in manmac: if we accumulate a
- % whole lot of material, we might end up calling this \output
- % routine twice in a row (see the doublecol-lose test, which is
- % essentially a couple of indexes with @setchapternewpage off). In
-- % that case, we must prevent the second \partialpage from
-- % simply overwriting the first, causing us to lose the page.
-- % This will preserve it until a real output routine can ship it
-- % out. Generally, \partialpage will be empty when this runs and
-- % this will be a no-op.
-- \unvbox\partialpage
-+ % that case we just ship out what is in \partialpage with the normal
-+ % output routine. Generally, \partialpage will be empty when this
-+ % runs and this will be a no-op. See the indexspread.tex test case.
-+ \ifvoid\partialpage \else
-+ \onepageout{\pagecontents\partialpage}%
-+ \fi
- %
-- % Unvbox the main output page.
-- \unvbox255
-- \kern-\topskip \kern\baselineskip
-- }}%
-- \eject
-+ \global\setbox\partialpage = \vbox{%
-+ % Unvbox the main output page.
-+ \unvbox\PAGE
-+ \kern-\topskip \kern\baselineskip
-+ }%
-+ }%
-+ \eject % run that output routine to set \partialpage
- %
- % Use the double-column output routine for subsequent pages.
- \output = {\doublecolumnout}%
-@@ -2685,14 +3155,21 @@
- %
- % Double the \vsize as well. (We don't need a separate register here,
- % since nobody clobbers \vsize.)
-+ \advance\vsize by -\ht\partialpage
- \vsize = 2\vsize
- }
-+
-+% The double-column output routine for all double-column pages except
-+% the last.
-+%
- \def\doublecolumnout{%
- \splittopskip=\topskip \splitmaxdepth=\maxdepth
- % Get the available space for the double columns -- the normal
- % (undoubled) page height minus any material left over from the
- % previous page.
-- \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage
-+ \dimen@ = \vsize
-+ \divide\dimen@ by 2
-+ %
- % box0 will be the left-hand column, box2 the right.
- \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
- \onepageout\pagesofar
-@@ -2701,42 +3178,67 @@
- }
- \def\pagesofar{%
- % Re-output the contents of the output page -- any previous material,
-- % followed by the two boxes we just split.
-+ % followed by the two boxes we just split, in box0 and box2.
- \unvbox\partialpage
-+ %
- \hsize = \doublecolumnhsize
-- \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}%
-+ \wd0=\hsize \wd2=\hsize
-+ \hbox to\pagewidth{\box0\hfil\box2}%
- }
- \def\enddoublecolumns{%
-- \output = {\balancecolumns}\eject % split what we have
-+ \output = {%
-+ % Split the last of the double-column material. Leave it on the
-+ % current page, no automatic page break.
-+ \balancecolumns
-+ %
-+ % If we end up splitting too much material for the current page,
-+ % though, there will be another page break right after this \output
-+ % invocation ends. Having called \balancecolumns once, we do not
-+ % want to call it again. Therefore, reset \output to its normal
-+ % definition right away. (We hope \balancecolumns will never be
-+ % called on to balance too much material, but if it is, this makes
-+ % the output somewhat more palatable.)
-+ \global\output = {\onepageout{\pagecontents\PAGE}}%
-+ }%
-+ \eject
- \endgroup % started in \begindoublecolumns
- %
-- % Back to normal single-column typesetting, but take account of the
-- % fact that we just accumulated some stuff on the output page.
-+ % \pagegoal was set to the doubled \vsize above, since we restarted
-+ % the current page. We're now back to normal single-column
-+ % typesetting, so reset \pagegoal to the normal \vsize (after the
-+ % \endgroup where \vsize got restored).
- \pagegoal = \vsize
- }
- \def\balancecolumns{%
- % Called at the end of the double column material.
-- \setbox0 = \vbox{\unvbox255}%
-+ \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
- \dimen@ = \ht0
- \advance\dimen@ by \topskip
- \advance\dimen@ by-\baselineskip
-- \divide\dimen@ by 2
-+ \divide\dimen@ by 2 % target to split to
-+ %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
- \splittopskip = \topskip
- % Loop until we get a decent breakpoint.
-- {\vbadness=10000 \loop
-- \global\setbox3=\copy0
-- \global\setbox1=\vsplit3 to\dimen@
-- \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt
-- \repeat}%
-+ {%
-+ \vbadness = 10000
-+ \loop
-+ \global\setbox3 = \copy0
-+ \global\setbox1 = \vsplit3 to \dimen@
-+ \ifdim\ht3>\dimen@
-+ \global\advance\dimen@ by 1pt
-+ \repeat
-+ }%
-+ %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
- \setbox0=\vbox to\dimen@{\unvbox1}%
- \setbox2=\vbox to\dimen@{\unvbox3}%
-+ %
- \pagesofar
- }
- \catcode`\@ = \other
-
-
- \message{sectioning,}
--% Define chapters, sections, etc.
-+% Chapters, sections, etc.
-
- \newcount\chapno
- \newcount\secno \secno=0
-@@ -2745,59 +3247,49 @@
-
- % This counter is funny since it counts through charcodes of letters A, B, ...
- \newcount\appendixno \appendixno = `\@
--\def\appendixletter{\char\the\appendixno}
--
--\newwrite\contentsfile
--% This is called from \setfilename.
--\def\opencontents{\openout\contentsfile = \jobname.toc }
-+% \def\appendixletter{\char\the\appendixno}
-+% We do the following for the sake of pdftex, which needs the actual
-+% letter in the expansion, not just typeset.
-+\def\appendixletter{%
-+ \ifnum\appendixno=`A A%
-+ \else\ifnum\appendixno=`B B%
-+ \else\ifnum\appendixno=`C C%
-+ \else\ifnum\appendixno=`D D%
-+ \else\ifnum\appendixno=`E E%
-+ \else\ifnum\appendixno=`F F%
-+ \else\ifnum\appendixno=`G G%
-+ \else\ifnum\appendixno=`H H%
-+ \else\ifnum\appendixno=`I I%
-+ \else\ifnum\appendixno=`J J%
-+ \else\ifnum\appendixno=`K K%
-+ \else\ifnum\appendixno=`L L%
-+ \else\ifnum\appendixno=`M M%
-+ \else\ifnum\appendixno=`N N%
-+ \else\ifnum\appendixno=`O O%
-+ \else\ifnum\appendixno=`P P%
-+ \else\ifnum\appendixno=`Q Q%
-+ \else\ifnum\appendixno=`R R%
-+ \else\ifnum\appendixno=`S S%
-+ \else\ifnum\appendixno=`T T%
-+ \else\ifnum\appendixno=`U U%
-+ \else\ifnum\appendixno=`V V%
-+ \else\ifnum\appendixno=`W W%
-+ \else\ifnum\appendixno=`X X%
-+ \else\ifnum\appendixno=`Y Y%
-+ \else\ifnum\appendixno=`Z Z%
-+ % The \the is necessary, despite appearances, because \appendixletter is
-+ % expanded while writing the .toc file. \char\appendixno is not
-+ % expandable, thus it is written literally, thus all appendixes come out
-+ % with the same letter (or @) in the toc without it.
-+ \else\char\the\appendixno
-+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
-+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
-
- % Each @chapter defines this as the name of the chapter.
--% page headings and footings can use it. @section does likewise
--
--\def\thischapter{} \def\thissection{}
--\def\seccheck#1{\ifnum \pageno<0
-- \errmessage{@#1 not allowed after generating table of contents}%
--\fi}
-+% page headings and footings can use it. @section does likewise.
-+\def\thischapter{}
-+\def\thissection{}
-
--\def\chapternofonts{%
-- \let\rawbackslash=\relax
-- \let\frenchspacing=\relax
-- \def\result{\realbackslash result}%
-- \def\equiv{\realbackslash equiv}%
-- \def\expansion{\realbackslash expansion}%
-- \def\print{\realbackslash print}%
-- \def\TeX{\realbackslash TeX}%
-- \def\dots{\realbackslash dots}%
-- \def\result{\realbackslash result}%
-- \def\equiv{\realbackslash equiv}%
-- \def\expansion{\realbackslash expansion}%
-- \def\print{\realbackslash print}%
-- \def\error{\realbackslash error}%
-- \def\point{\realbackslash point}%
-- \def\copyright{\realbackslash copyright}%
-- \def\tt{\realbackslash tt}%
-- \def\bf{\realbackslash bf}%
-- \def\w{\realbackslash w}%
-- \def\less{\realbackslash less}%
-- \def\gtr{\realbackslash gtr}%
-- \def\hat{\realbackslash hat}%
-- \def\char{\realbackslash char}%
-- \def\tclose##1{\realbackslash tclose{##1}}%
-- \def\code##1{\realbackslash code{##1}}%
-- \def\samp##1{\realbackslash samp{##1}}%
-- \def\r##1{\realbackslash r{##1}}%
-- \def\b##1{\realbackslash b{##1}}%
-- \def\key##1{\realbackslash key{##1}}%
-- \def\file##1{\realbackslash file{##1}}%
-- \def\kbd##1{\realbackslash kbd{##1}}%
-- % These are redefined because @smartitalic wouldn't work inside xdef.
-- \def\i##1{\realbackslash i{##1}}%
-- \def\cite##1{\realbackslash cite{##1}}%
-- \def\var##1{\realbackslash var{##1}}%
-- \def\emph##1{\realbackslash emph{##1}}%
-- \def\dfn##1{\realbackslash dfn{##1}}%
--}
--
- \newcount\absseclevel % used to calculate proper heading level
- \newcount\secbase\secbase=0 % @raise/lowersections modify this count
-
-@@ -2868,59 +3360,59 @@
- \fi
- }
-
--
-+% @chapter, @appendix, @unnumbered.
- \def\thischaptername{No Chapter Title}
- \outer\def\chapter{\parsearg\chapteryyy}
- \def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz
--\def\chapterzzz #1{\seccheck{chapter}%
-+\def\chapterzzz #1{%
- \secno=0 \subsecno=0 \subsubsecno=0
--\global\advance \chapno by 1 \message{\putwordChapter \the\chapno}%
-+\global\advance \chapno by 1 \message{\putwordChapter\space \the\chapno}%
- \chapmacro {#1}{\the\chapno}%
- \gdef\thissection{#1}%
- \gdef\thischaptername{#1}%
- % We don't substitute the actual chapter name into \thischapter
- % because we don't want its macros evaluated now.
- \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
--{\chapternofonts%
- \toks0 = {#1}%
--\edef\temp{{\realbackslash chapentry{\the\toks0}{\the\chapno}{\noexpand\folio}}}%
--\escapechar=`\\%
--\write \contentsfile \temp %
--\donoderef %
-+\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%
-+ {\the\chapno}}}%
-+\temp
-+\donoderef
- \global\let\section = \numberedsec
- \global\let\subsection = \numberedsubsec
- \global\let\subsubsection = \numberedsubsubsec
--}}
-+}
-
- \outer\def\appendix{\parsearg\appendixyyy}
- \def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz
--\def\appendixzzz #1{\seccheck{appendix}%
-+\def\appendixzzz #1{%
- \secno=0 \subsecno=0 \subsubsecno=0
--\global\advance \appendixno by 1 \message{Appendix \appendixletter}%
-+\global\advance \appendixno by 1
-+\message{\putwordAppendix\space \appendixletter}%
- \chapmacro {#1}{\putwordAppendix{} \appendixletter}%
- \gdef\thissection{#1}%
- \gdef\thischaptername{#1}%
- \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
--{\chapternofonts%
- \toks0 = {#1}%
--\edef\temp{{\realbackslash chapentry{\the\toks0}%
-- {\putwordAppendix{} \appendixletter}{\noexpand\folio}}}%
--\escapechar=`\\%
--\write \contentsfile \temp %
--\appendixnoderef %
-+\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}%
-+ {\putwordAppendix{} \appendixletter}}}%
-+\temp
-+\appendixnoderef
- \global\let\section = \appendixsec
- \global\let\subsection = \appendixsubsec
- \global\let\subsubsection = \appendixsubsubsec
--}}
-+}
-
- % @centerchap is like @unnumbered, but the heading is centered.
- \outer\def\centerchap{\parsearg\centerchapyyy}
- \def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}}
-
-+% @top is like @unnumbered.
- \outer\def\top{\parsearg\unnumberedyyy}
-+
- \outer\def\unnumbered{\parsearg\unnumberedyyy}
- \def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
--\def\unnumberedzzz #1{\seccheck{unnumbered}%
-+\def\unnumberedzzz #1{%
- \secno=0 \subsecno=0 \subsubsecno=0
- %
- % This used to be simply \message{#1}, but TeX fully expands the
-@@ -2932,155 +3424,139 @@
- % Anyway, we don't want the fully-expanded definition of @cite to appear
- % as a result of the \message, we just want `@cite' itself. We use
- % \the<toks register> to achieve this: TeX expands \the<toks> only once,
--% simply yielding the contents of the <toks register>.
-+% simply yielding the contents of <toks register>. (We also do this for
-+% the toc entries.)
- \toks0 = {#1}\message{(\the\toks0)}%
- %
- \unnumbchapmacro {#1}%
- \gdef\thischapter{#1}\gdef\thissection{#1}%
--{\chapternofonts%
- \toks0 = {#1}%
--\edef\temp{{\realbackslash unnumbchapentry{\the\toks0}{\noexpand\folio}}}%
--\escapechar=`\\%
--\write \contentsfile \temp %
--\unnumbnoderef %
-+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbchapentry{\the\toks0}}}%
-+\temp
-+\unnumbnoderef
- \global\let\section = \unnumberedsec
- \global\let\subsection = \unnumberedsubsec
- \global\let\subsubsection = \unnumberedsubsubsec
--}}
-+}
-
-+% Sections.
- \outer\def\numberedsec{\parsearg\secyyy}
- \def\secyyy #1{\numhead1{#1}} % normally calls seczzz
--\def\seczzz #1{\seccheck{section}%
-+\def\seczzz #1{%
- \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
- \gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
--{\chapternofonts%
- \toks0 = {#1}%
--\edef\temp{{\realbackslash secentry %
--{\the\toks0}{\the\chapno}{\the\secno}{\noexpand\folio}}}%
--\escapechar=`\\%
--\write \contentsfile \temp %
--\donoderef %
--\penalty 10000 %
--}}
-+\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}%
-+ {\the\chapno}{\the\secno}}}%
-+\temp
-+\donoderef
-+\nobreak
-+}
-
- \outer\def\appendixsection{\parsearg\appendixsecyyy}
- \outer\def\appendixsec{\parsearg\appendixsecyyy}
- \def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
--\def\appendixsectionzzz #1{\seccheck{appendixsection}%
-+\def\appendixsectionzzz #1{%
- \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
- \gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
--{\chapternofonts%
- \toks0 = {#1}%
--\edef\temp{{\realbackslash secentry %
--{\the\toks0}{\appendixletter}{\the\secno}{\noexpand\folio}}}%
--\escapechar=`\\%
--\write \contentsfile \temp %
--\appendixnoderef %
--\penalty 10000 %
--}}
-+\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}%
-+ {\appendixletter}{\the\secno}}}%
-+\temp
-+\appendixnoderef
-+\nobreak
-+}
-
- \outer\def\unnumberedsec{\parsearg\unnumberedsecyyy}
- \def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz
--\def\unnumberedseczzz #1{\seccheck{unnumberedsec}%
-+\def\unnumberedseczzz #1{%
- \plainsecheading {#1}\gdef\thissection{#1}%
--{\chapternofonts%
- \toks0 = {#1}%
--\edef\temp{{\realbackslash unnumbsecentry{\the\toks0}{\noexpand\folio}}}%
--\escapechar=`\\%
--\write \contentsfile \temp %
--\unnumbnoderef %
--\penalty 10000 %
--}}
-+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry{\the\toks0}}}%
-+\temp
-+\unnumbnoderef
-+\nobreak
-+}
-
-+% Subsections.
- \outer\def\numberedsubsec{\parsearg\numberedsubsecyyy}
- \def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz
--\def\numberedsubseczzz #1{\seccheck{subsection}%
-+\def\numberedsubseczzz #1{%
- \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
- \subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
--{\chapternofonts%
- \toks0 = {#1}%
--\edef\temp{{\realbackslash subsecentry %
--{\the\toks0}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
--\escapechar=`\\%
--\write \contentsfile \temp %
--\donoderef %
--\penalty 10000 %
--}}
-+\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}%
-+ {\the\chapno}{\the\secno}{\the\subsecno}}}%
-+\temp
-+\donoderef
-+\nobreak
-+}
-
- \outer\def\appendixsubsec{\parsearg\appendixsubsecyyy}
- \def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz
--\def\appendixsubseczzz #1{\seccheck{appendixsubsec}%
-+\def\appendixsubseczzz #1{%
- \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
- \subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
--{\chapternofonts%
- \toks0 = {#1}%
--\edef\temp{{\realbackslash subsecentry %
--{\the\toks0}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
--\escapechar=`\\%
--\write \contentsfile \temp %
--\appendixnoderef %
--\penalty 10000 %
--}}
-+\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}%
-+ {\appendixletter}{\the\secno}{\the\subsecno}}}%
-+\temp
-+\appendixnoderef
-+\nobreak
-+}
-
- \outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}
- \def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
--\def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}%
-+\def\unnumberedsubseczzz #1{%
- \plainsubsecheading {#1}\gdef\thissection{#1}%
--{\chapternofonts%
- \toks0 = {#1}%
--\edef\temp{{\realbackslash unnumbsubsecentry{\the\toks0}{\noexpand\folio}}}%
--\escapechar=`\\%
--\write \contentsfile \temp %
--\unnumbnoderef %
--\penalty 10000 %
--}}
-+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry%
-+ {\the\toks0}}}%
-+\temp
-+\unnumbnoderef
-+\nobreak
-+}
-
-+% Subsubsections.
- \outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy}
- \def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz
--\def\numberedsubsubseczzz #1{\seccheck{subsubsection}%
-+\def\numberedsubsubseczzz #1{%
- \gdef\thissection{#1}\global\advance \subsubsecno by 1 %
- \subsubsecheading {#1}
- {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
--{\chapternofonts%
- \toks0 = {#1}%
--\edef\temp{{\realbackslash subsubsecentry{\the\toks0}
-- {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}
-- {\noexpand\folio}}}%
--\escapechar=`\\%
--\write \contentsfile \temp %
--\donoderef %
--\penalty 10000 %
--}}
-+\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}%
-+ {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}%
-+\temp
-+\donoderef
-+\nobreak
-+}
-
- \outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy}
- \def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz
--\def\appendixsubsubseczzz #1{\seccheck{appendixsubsubsec}%
-+\def\appendixsubsubseczzz #1{%
- \gdef\thissection{#1}\global\advance \subsubsecno by 1 %
- \subsubsecheading {#1}
- {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
--{\chapternofonts%
- \toks0 = {#1}%
--\edef\temp{{\realbackslash subsubsecentry{\the\toks0}%
-- {\appendixletter}
-- {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}%
--\escapechar=`\\%
--\write \contentsfile \temp %
--\appendixnoderef %
--\penalty 10000 %
--}}
-+\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}%
-+ {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}%
-+\temp
-+\appendixnoderef
-+\nobreak
-+}
-
- \outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}
- \def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
--\def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}%
-+\def\unnumberedsubsubseczzz #1{%
- \plainsubsubsecheading {#1}\gdef\thissection{#1}%
--{\chapternofonts%
- \toks0 = {#1}%
--\edef\temp{{\realbackslash unnumbsubsubsecentry{\the\toks0}{\noexpand\folio}}}%
--\escapechar=`\\%
--\write \contentsfile \temp %
--\unnumbnoderef %
--\penalty 10000 %
--}}
-+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry%
-+ {\the\toks0}}}%
-+\temp
-+\unnumbnoderef
-+\nobreak
-+}
-
- % These are variants which are not "outer", so they can appear in @ifinfo.
- % Actually, they should now be obsolete; ordinary section commands should work.
-@@ -3109,8 +3585,7 @@
-
- % Define @majorheading, @heading and @subheading
-
--% NOTE on use of \vbox for chapter headings, section headings, and
--% such:
-+% NOTE on use of \vbox for chapter headings, section headings, and such:
- % 1) We use \vbox rather than the earlier \line to permit
- % overlong headings to fold.
- % 2) \hyphenpenalty is set to 10000 because hyphenation in a
-@@ -3157,12 +3632,12 @@
-
- \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
-
--\def\CHAPPAGoff{
-+\def\CHAPPAGoff{%
- \global\let\contentsalignmacro = \chappager
- \global\let\pchapsepmacro=\chapbreak
- \global\let\pagealignmacro=\chappager}
-
--\def\CHAPPAGon{
-+\def\CHAPPAGon{%
- \global\let\contentsalignmacro = \chappager
- \global\let\pchapsepmacro=\chappager
- \global\let\pagealignmacro=\chappager
-@@ -3216,7 +3691,7 @@
- \def\unnchfopen #1{%
- \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
- \parindent=0pt\raggedright
-- \rm #1\hfill}}\bigskip \par\penalty 10000 %
-+ \rm #1\hfill}}\bigskip \par\nobreak
- }
-
- \def\chfopen #1#2{\chapoddpage {\chapfonts
-@@ -3227,7 +3702,7 @@
- \def\centerchfopen #1{%
- \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
- \parindent=0pt
-- \hfill {\rm #1}\hfill}}\bigskip \par\penalty 10000 %
-+ \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
- }
-
- \def\CHAPFopen{
-@@ -3280,24 +3755,45 @@
- }
-
-
--\message{toc printing,}
--% Finish up the main text and prepare to read what we've written
--% to \contentsfile.
-+\message{toc,}
-+% Table of contents.
-+\newwrite\tocfile
-+
-+% Write an entry to the toc file, opening it if necessary.
-+% Called from @chapter, etc. We supply {\folio} at the end of the
-+% argument, which will end up as the last argument to the \...entry macro.
-+%
-+% We open the .toc file here instead of at @setfilename or any other
-+% given time so that @contents can be put in the document anywhere.
-+%
-+\newif\iftocfileopened
-+\def\writetocentry#1{%
-+ \iftocfileopened\else
-+ \immediate\openout\tocfile = \jobname.toc
-+ \global\tocfileopenedtrue
-+ \fi
-+ \iflinks \write\tocfile{#1{\folio}}\fi
-+}
-
- \newskip\contentsrightmargin \contentsrightmargin=1in
-+\newcount\savepageno
-+\newcount\lastnegativepageno \lastnegativepageno = -1
-+
-+% Finish up the main text and prepare to read what we've written
-+% to \tocfile.
-+%
- \def\startcontents#1{%
- % If @setchapternewpage on, and @headings double, the contents should
- % start on an odd page, unlike chapters. Thus, we maintain
- % \contentsalignmacro in parallel with \pagealignmacro.
- % From: Torbjorn Granlund <tege@matematik.su.se>
- \contentsalignmacro
-- \immediate\closeout \contentsfile
-- \ifnum \pageno>0
-- \pageno = -1 % Request roman numbered pages.
-- \fi
-+ \immediate\closeout\tocfile
-+ %
- % Don't need to put `Contents' or `Short Contents' in the headline.
- % It is abundantly clear what they are.
- \unnumbchapmacro{#1}\def\thischapter{}%
-+ \savepageno = \pageno
- \begingroup % Set up to handle contents files properly.
- \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11
- % We can't do this, because then an actual ^ in a section
-@@ -3305,20 +3801,31 @@
- %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
- \raggedbottom % Worry more about breakpoints than the bottom.
- \advance\hsize by -\contentsrightmargin % Don't use the full line length.
-+ %
-+ % Roman numerals for page numbers.
-+ \ifnum \pageno>0 \pageno = \lastnegativepageno \fi
- }
-
-
- % Normal (long) toc.
--\outer\def\contents{%
-- \startcontents{\putwordTableofContents}%
-- \input \jobname.toc
-+\def\contents{%
-+ \startcontents{\putwordTOC}%
-+ \openin 1 \jobname.toc
-+ \ifeof 1 \else
-+ \closein 1
-+ \input \jobname.toc
-+ \fi
-+ \vfill \eject
-+ \contentsalignmacro % in case @setchapternewpage odd is in effect
-+ \pdfmakeoutlines
- \endgroup
-- \vfill \eject
-+ \lastnegativepageno = \pageno
-+ \pageno = \savepageno
- }
-
- % And just the chapters.
--\outer\def\summarycontents{%
-- \startcontents{\putwordShortContents}%
-+\def\summarycontents{%
-+ \startcontents{\putwordShortTOC}%
- %
- \let\chapentry = \shortchapentry
- \let\unnumbchapentry = \shortunnumberedentry
-@@ -3334,12 +3841,23 @@
- \def\unnumbsubsecentry ##1##2{}
- \def\subsubsecentry ##1##2##3##4##5##6{}
- \def\unnumbsubsubsecentry ##1##2{}
-- \input \jobname.toc
-+ \openin 1 \jobname.toc
-+ \ifeof 1 \else
-+ \closein 1
-+ \input \jobname.toc
-+ \fi
-+ \vfill \eject
-+ \contentsalignmacro % in case @setchapternewpage odd is in effect
- \endgroup
-- \vfill \eject
-+ \lastnegativepageno = \pageno
-+ \pageno = \savepageno
- }
- \let\shortcontents = \summarycontents
-
-+\ifpdf
-+ \pdfcatalog{/PageMode /UseOutlines}%
-+\fi
-+
- % These macros generate individual entries in the table of contents.
- % The first argument is the chapter or section name.
- % The last argument is the page number.
-@@ -3350,7 +3868,7 @@
-
- % See comments in \dochapentry re vbox and related settings
- \def\shortchapentry#1#2#3{%
-- \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno{#3}}%
-+ \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}%
- }
-
- % Typeset the label for a chapter or appendix for the short contents.
-@@ -3358,10 +3876,14 @@
- % We could simplify the code here by writing out an \appendixentry
- % command in the toc file for appendices, instead of using \chapentry
- % for both, but it doesn't seem worth it.
--\setbox0 = \hbox{\shortcontrm \putwordAppendix }
--\newdimen\shortappendixwidth \shortappendixwidth = \wd0
--
-+%
-+\newdimen\shortappendixwidth
-+%
- \def\shortchaplabel#1{%
-+ % Compute width of word "Appendix", may change with language.
-+ \setbox0 = \hbox{\shortcontrm \putwordAppendix}%
-+ \shortappendixwidth = \wd0
-+ %
- % We typeset #1 in a box of constant width, regardless of the text of
- % #1, so the chapter titles will come out aligned.
- \setbox0 = \hbox{#1}%
-@@ -3376,7 +3898,7 @@
- }
-
- \def\unnumbchapentry#1#2{\dochapentry{#1}{#2}}
--\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno{#2}}}
-+\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno\bgroup#2\egroup}}
-
- % Sections.
- \def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
-@@ -3403,35 +3925,36 @@
- \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
- \begingroup
- \chapentryfonts
-- \tocentry{#1}{\dopageno{#2}}%
-+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
- \endgroup
- \nobreak\vskip .25\baselineskip plus.1\baselineskip
- }
-
- \def\dosecentry#1#2{\begingroup
- \secentryfonts \leftskip=\tocindent
-- \tocentry{#1}{\dopageno{#2}}%
-+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
- \endgroup}
-
- \def\dosubsecentry#1#2{\begingroup
- \subsecentryfonts \leftskip=2\tocindent
-- \tocentry{#1}{\dopageno{#2}}%
-+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
- \endgroup}
-
- \def\dosubsubsecentry#1#2{\begingroup
- \subsubsecentryfonts \leftskip=3\tocindent
-- \tocentry{#1}{\dopageno{#2}}%
-+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
- \endgroup}
-
- % Final typesetting of a toc entry; we use the same \entry macro as for
- % the index entries, but we want to suppress hyphenation here. (We
- % can't do that in the \entry macro, since index entries might consist
- % of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.)
--%
--% \turnoffactive is for the sake of @" used for umlauts.
- \def\tocentry#1#2{\begingroup
- \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
-- \entry{\turnoffactive #1}{\turnoffactive #2}%
-+ % Do not use \turnoffactive in these arguments. Since the toc is
-+ % typeset in cmr, so characters such as _ would come out wrong; we
-+ % have to do the usual translation tricks.
-+ \entry{#1}{#2}%
- \endgroup}
-
- % Space between chapter (or whatever) number and the title.
-@@ -3447,6 +3970,7 @@
-
-
- \message{environments,}
-+% @foo ... @end foo.
-
- % Since these characters are used in examples, it should be an even number of
- % \tt widths. Each \tt character is 1en, so two makes it 1em.
-@@ -3497,30 +4021,36 @@
- % But \@ or @@ will get a plain tex @ character.
-
- \def\tex{\begingroup
--\catcode `\\=0 \catcode `\{=1 \catcode `\}=2
--\catcode `\$=3 \catcode `\&=4 \catcode `\#=6
--\catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
--\catcode `\%=14
--\catcode 43=12 % plus
--\catcode`\"=12
--\catcode`\==12
--\catcode`\|=12
--\catcode`\<=12
--\catcode`\>=12
--\escapechar=`\\
--%
--\let\,=\ptexcomma
--\let\{=\ptexlbrace
--\let\}=\ptexrbrace
--\let\.=\ptexdot
--\let\*=\ptexstar
--\let\dots=\ptexdots
--\def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
--\def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
--\def\@{@}%
--\let\bullet=\ptexbullet
--\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext
--%
-+ \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
-+ \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
-+ \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
-+ \catcode `\%=14
-+ \catcode 43=12 % plus
-+ \catcode`\"=12
-+ \catcode`\==12
-+ \catcode`\|=12
-+ \catcode`\<=12
-+ \catcode`\>=12
-+ \escapechar=`\\
-+ %
-+ \let\b=\ptexb
-+ \let\bullet=\ptexbullet
-+ \let\c=\ptexc
-+ \let\,=\ptexcomma
-+ \let\.=\ptexdot
-+ \let\dots=\ptexdots
-+ \let\equiv=\ptexequiv
-+ \let\!=\ptexexclam
-+ \let\i=\ptexi
-+ \let\{=\ptexlbrace
-+ \let\+=\tabalign
-+ \let\}=\ptexrbrace
-+ \let\*=\ptexstar
-+ \let\t=\ptext
-+ %
-+ \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
-+ \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
-+ \def\@{@}%
- \let\Etex=\endgroup}
-
- % Define @lisp ... @endlisp.
-@@ -3565,8 +4095,8 @@
- % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins.
- \let\nonarrowing=\relax
-
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--% \cartouche: draw rectangle w/rounded corners around argument
-+% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
-+% environment contents.
- \font\circle=lcircle10
- \newdimen\circthick
- \newdimen\cartouter\newdimen\cartinner
-@@ -3593,9 +4123,9 @@
- \cartinner=\hsize \advance\cartinner by-\lskip
- \advance\cartinner by-\rskip
- \cartouter=\hsize
-- \advance\cartouter by 18pt % allow for 3pt kerns on either
-+ \advance\cartouter by 18.4pt % allow for 3pt kerns on either
- % side, and for 6pt waste from
--% each corner char
-+% each corner char, and rule thickness
- \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
- % Flag to tell @lisp, etc., not to narrow margin.
- \let\nonarrowing=\comment
-@@ -3649,57 +4179,68 @@
- \fi
- }
-
--% To ending an @example-like environment, we first end the paragraph
--% (via \afterenvbreak's vertical glue), and then the group. That way we
--% keep the zero \parskip that the environments set -- \parskip glue
--% will be inserted at the beginning of the next paragraph in the
--% document, after the environment.
-+% Define the \E... control sequence only if we are inside the particular
-+% environment, so the error checking in \end will work.
- %
--\def\nonfillfinish{\afterenvbreak\endgroup}%
-+% To end an @example-like environment, we first end the paragraph (via
-+% \afterenvbreak's vertical glue), and then the group. That way we keep
-+% the zero \parskip that the environments set -- \parskip glue will be
-+% inserted at the beginning of the next paragraph in the document, after
-+% the environment.
-+%
-+\def\nonfillfinish{\afterenvbreak\endgroup}
-
-+% @lisp: indented, narrowed, typewriter font.
- \def\lisp{\begingroup
- \nonfillstart
- \let\Elisp = \nonfillfinish
- \tt
-- % Make @kbd do something special, if requested.
-- \let\kbdfont\kbdexamplefont
-- \rawbackslash % have \ input char produce \ char from current font
-- \gobble
-+ \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
-+ \gobble % eat return
- }
-
--% Define the \E... control sequence only if we are inside the
--% environment, so the error checking in \end will work.
--%
--% We must call \lisp last in the definition, since it reads the
--% return following the @example (or whatever) command.
--%
-+% @example: Same as @lisp.
- \def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp}
--\def\smallexample{\begingroup \def\Esmallexample{\nonfillfinish\endgroup}\lisp}
--\def\smalllisp{\begingroup \def\Esmalllisp{\nonfillfinish\endgroup}\lisp}
-
--% @smallexample and @smalllisp. This is not used unless the @smallbook
--% command is given. Originally contributed by Pavel@xerox.
--%
-+% @small... is usually equivalent to the non-small (@smallbook
-+% redefines). We must call \example (or whatever) last in the
-+% definition, since it reads the return following the @example (or
-+% whatever) command.
-+%
-+% This actually allows (for example) @end display inside an
-+% @smalldisplay. Too bad, but makeinfo will catch the error anyway.
-+%
-+\def\smalldisplay{\begingroup\def\Esmalldisplay{\nonfillfinish\endgroup}\display}
-+\def\smallexample{\begingroup\def\Esmallexample{\nonfillfinish\endgroup}\lisp}
-+\def\smallformat{\begingroup\def\Esmallformat{\nonfillfinish\endgroup}\format}
-+\def\smalllisp{\begingroup\def\Esmalllisp{\nonfillfinish\endgroup}\lisp}
-+
-+% Real @smallexample and @smalllisp (when @smallbook): use smaller fonts.
-+% Originally contributed by Pavel@xerox.
- \def\smalllispx{\begingroup
-- \nonfillstart
-- \let\Esmalllisp = \nonfillfinish
-- \let\Esmallexample = \nonfillfinish
-- %
-- % Smaller fonts for small examples.
-- \indexfonts \tt
-- \rawbackslash % make \ output the \ character from the current font (tt)
-- \gobble
-+ \def\Esmalllisp{\nonfillfinish\endgroup}%
-+ \def\Esmallexample{\nonfillfinish\endgroup}%
-+ \smallfonts
-+ \lisp
- }
-
--% This is @display; same as @lisp except use roman font.
-+% @display: same as @lisp except keep current font.
- %
- \def\display{\begingroup
- \nonfillstart
- \let\Edisplay = \nonfillfinish
- \gobble
- }
-+
-+% @smalldisplay (when @smallbook): @display plus smaller fonts.
-+%
-+\def\smalldisplayx{\begingroup
-+ \def\Esmalldisplay{\nonfillfinish\endgroup}%
-+ \smallfonts \rm
-+ \display
-+}
-
--% This is @format; same as @display except don't narrow margins.
-+% @format: same as @display except don't narrow margins.
- %
- \def\format{\begingroup
- \let\nonarrowing = t
-@@ -3708,20 +4249,27 @@
- \gobble
- }
-
--% @flushleft (same as @format) and @flushright.
-+% @smallformat (when @smallbook): @format plus smaller fonts.
- %
--\def\flushleft{\begingroup
-- \let\nonarrowing = t
-- \nonfillstart
-- \let\Eflushleft = \nonfillfinish
-- \gobble
-+\def\smallformatx{\begingroup
-+ \def\Esmallformat{\nonfillfinish\endgroup}%
-+ \smallfonts \rm
-+ \format
- }
-+
-+% @flushleft (same as @format).
-+%
-+\def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format}
-+
-+% @flushright.
-+%
- \def\flushright{\begingroup
- \let\nonarrowing = t
- \nonfillstart
- \let\Eflushright = \nonfillfinish
- \advance\leftskip by 0pt plus 1fill
-- \gobble}
-+ \gobble
-+}
-
- % @quotation does normal linebreaking (hence we can't use \nonfillstart)
- % and narrows the margins.
-@@ -3744,9 +4292,11 @@
- \fi
- }
-
-+
- \message{defuns,}
--% Define formatter for defuns
--% First, allow user to change definition object font (\df) internally
-+% @defun etc.
-+
-+% Allow user to change definition object font (\df) internally
- \def\setdeffont #1 {\csname DEF#1\endcsname}
-
- \newskip\defbodyindent \defbodyindent=.4in
-@@ -3800,10 +4350,16 @@
- %% contained text. This is especially needed for [ and ]
- \def\opnr{{\sf\char`\(}\global\advance\parencount by 1 }
- \def\clnr{{\sf\char`\)}\global\advance\parencount by -1 }
--\def\ampnr{\&}
-+\let\ampnr = \&
- \def\lbrb{{\bf\char`\[}}
- \def\rbrb{{\bf\char`\]}}
-
-+% Active &'s sneak into the index arguments, so make sure it's defined.
-+{
-+ \catcode`& = 13
-+ \global\let& = \ampnr
-+}
-+
- % First, defname, which formats the header line itself.
- % #1 should be the function name.
- % #2 should be the type of definition, such as "Function".
-@@ -3813,20 +4369,18 @@
- % outside the @def...
- \dimen2=\leftskip
- \advance\dimen2 by -\defbodyindent
--\dimen3=\rightskip
--\advance\dimen3 by -\defbodyindent
--\noindent %
-+\noindent
- \setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}%
- \dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line
- \dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations
--\parshape 2 0in \dimen0 \defargsindent \dimen1 %
-+\parshape 2 0in \dimen0 \defargsindent \dimen1
- % Now output arg 2 ("Function" or some such)
- % ending at \deftypemargin from the right margin,
- % but stuck inside a box of width 0 so it does not interfere with linebreaking
- {% Adjust \hsize to exclude the ambient margins,
- % so that \rightline will obey them.
--\advance \hsize by -\dimen2 \advance \hsize by -\dimen3
--\rlap{\rightline{{\rm #2}\hskip \deftypemargin}}}%
-+\advance \hsize by -\dimen2
-+\rlap{\rightline{{\rm #2}\hskip -1.25pc }}}%
- % Make all lines underfull and no complaints:
- \tolerance=10000 \hbadness=10000
- \advance\leftskip by -\defbodyindent
-@@ -3847,23 +4401,62 @@
- \def#1{\endgraf\endgroup\medbreak}%
- \def#2{\begingroup\obeylines\activeparens\spacesplit#3}%
- \parindent=0in
--\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-+\advance\leftskip by \defbodyindent
- \exdentamount=\defbodyindent
- \begingroup %
- \catcode 61=\active % 61 is `='
- \obeylines\activeparens\spacesplit#3}
-
--\def\defmethparsebody #1#2#3#4 {\begingroup\inENV %
-+% #1 is the \E... control sequence to end the definition (which we define).
-+% #2 is the \...x control sequence for consecutive fns (which we define).
-+% #3 is the control sequence to call to resume processing.
-+% #4, delimited by the space, is the class name.
-+%
-+\def\defmethparsebody#1#2#3#4 {\begingroup\inENV %
- \medbreak %
- % Define the end token that this defining construct specifies
- % so that it will exit this group.
- \def#1{\endgraf\endgroup\medbreak}%
- \def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}%
- \parindent=0in
--\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-+\advance\leftskip by \defbodyindent
- \exdentamount=\defbodyindent
- \begingroup\obeylines\activeparens\spacesplit{#3{#4}}}
-
-+% Used for @deftypemethod and @deftypeivar.
-+% #1 is the \E... control sequence to end the definition (which we define).
-+% #2 is the \...x control sequence for consecutive fns (which we define).
-+% #3 is the control sequence to call to resume processing.
-+% #4, delimited by a space, is the class name.
-+% #5 is the method's return type.
-+%
-+\def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV
-+ \medbreak
-+ \def#1{\endgraf\endgroup\medbreak}%
-+ \def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}%
-+ \parindent=0in
-+ \advance\leftskip by \defbodyindent
-+ \exdentamount=\defbodyindent
-+ \begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}}
-+
-+% Used for @deftypeop. The change from \deftypemethparsebody is an
-+% extra argument at the beginning which is the `category', instead of it
-+% being the hardwired string `Method' or `Instance Variable'. We have
-+% to account for this both in the \...x definition and in parsing the
-+% input at hand. Thus also need a control sequence (passed as #5) for
-+% the \E... definition to assign the category name to.
-+%
-+\def\deftypeopparsebody#1#2#3#4#5 #6 {\begingroup\inENV
-+ \medbreak
-+ \def#1{\endgraf\endgroup\medbreak}%
-+ \def#2##1 ##2 ##3 {%
-+ \def#4{##1}%
-+ \begingroup\obeylines\activeparens\spacesplit{#3{##2}{##3}}}%
-+ \parindent=0in
-+ \advance\leftskip by \defbodyindent
-+ \exdentamount=\defbodyindent
-+ \begingroup\obeylines\activeparens\spacesplit{#3{#5}{#6}}}
-+
- \def\defopparsebody #1#2#3#4#5 {\begingroup\inENV %
- \medbreak %
- % Define the end token that this defining construct specifies
-@@ -3872,7 +4465,7 @@
- \def#2##1 ##2 {\def#4{##1}%
- \begingroup\obeylines\activeparens\spacesplit{#3{##2}}}%
- \parindent=0in
--\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-+\advance\leftskip by \defbodyindent
- \exdentamount=\defbodyindent
- \begingroup\obeylines\activeparens\spacesplit{#3{#5}}}
-
-@@ -3887,7 +4480,7 @@
- \def#1{\endgraf\endgroup\medbreak}%
- \def#2{\begingroup\obeylines\spacesplit#3}%
- \parindent=0in
--\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-+\advance\leftskip by \defbodyindent
- \exdentamount=\defbodyindent
- \begingroup %
- \catcode 61=\active %
-@@ -3904,7 +4497,7 @@
- \def#1{\endgraf\endgroup\medbreak}%
- \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}%
- \parindent=0in
-- \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-+ \advance\leftskip by \defbodyindent
- \exdentamount=\defbodyindent
- \begingroup\obeylines
- }
-@@ -3949,7 +4542,7 @@
- \def#2##1 ##2 {\def#4{##1}%
- \begingroup\obeylines\spacesplit{#3{##2}}}%
- \parindent=0in
--\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
-+\advance\leftskip by \defbodyindent
- \exdentamount=\defbodyindent
- \begingroup\obeylines\spacesplit{#3{#5}}}
-
-@@ -3973,16 +4566,17 @@
- % First, define the processing that is wanted for arguments of \defun
- % Use this to expand the args and terminate the paragraph they make up
-
--\def\defunargs #1{\functionparens \sl
-+\def\defunargs#1{\functionparens \sl
- % Expand, preventing hyphenation at `-' chars.
- % Note that groups don't affect changes in \hyphenchar.
--\hyphenchar\tensl=0
-+% Set the font temporarily and use \font in case \setfont made \tensl a macro.
-+{\tensl\hyphenchar\font=0}%
- #1%
--\hyphenchar\tensl=45
-+{\tensl\hyphenchar\font=45}%
- \ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi%
- \interlinepenalty=10000
- \advance\rightskip by 0pt plus 1fil
--\endgraf\penalty 10000\vskip -\parskip\penalty 10000%
-+\endgraf\nobreak\vskip -\parskip\nobreak
- }
-
- \def\deftypefunargs #1{%
-@@ -3993,7 +4587,7 @@
- \tclose{#1}% avoid \code because of side effects on active chars
- \interlinepenalty=10000
- \advance\rightskip by 0pt plus 1fil
--\endgraf\penalty 10000\vskip -\parskip\penalty 10000%
-+\endgraf\nobreak\vskip -\parskip\nobreak
- }
-
- % Do complete processing of one @defun or @defunx line already parsed.
-@@ -4012,7 +4606,7 @@
- \def\defun{\defparsebody\Edefun\defunx\defunheader}
-
- \def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
--\begingroup\defname {#1}{Function}%
-+\begingroup\defname {#1}{\putwordDeffunc}%
- \defunargs {#2}\endgroup %
- \catcode 61=\other % Turn off change made in \defparsebody
- }
-@@ -4026,7 +4620,7 @@
- % #1 is the data type, #2 the name, #3 the args.
- \def\deftypefunheaderx #1#2 #3\relax{%
- \doind {fn}{\code{#2}}% Make entry in function index
--\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Function}%
-+\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypefun}%
- \deftypefunargs {#3}\endgroup %
- \catcode 61=\other % Turn off change made in \defparsebody
- }
-@@ -4057,7 +4651,7 @@
- \def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}
-
- \def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
--\begingroup\defname {#1}{Macro}%
-+\begingroup\defname {#1}{\putwordDefmac}%
- \defunargs {#2}\endgroup %
- \catcode 61=\other % Turn off change made in \defparsebody
- }
-@@ -4067,53 +4661,78 @@
- \def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}
-
- \def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
--\begingroup\defname {#1}{Special Form}%
-+\begingroup\defname {#1}{\putwordDefspec}%
- \defunargs {#2}\endgroup %
- \catcode 61=\other % Turn off change made in \defparsebody
- }
--
--% This definition is run if you use @defunx
--% anywhere other than immediately after a @defun or @defunx.
-
--\def\deffnx #1 {\errmessage{@deffnx in invalid context}}
--\def\defunx #1 {\errmessage{@defunx in invalid context}}
--\def\defmacx #1 {\errmessage{@defmacx in invalid context}}
--\def\defspecx #1 {\errmessage{@defspecx in invalid context}}
--\def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}}
--\def\deftypemethodx #1 {\errmessage{@deftypemethodx in invalid context}}
--\def\deftypeunx #1 {\errmessage{@deftypeunx in invalid context}}
--
--% @defmethod, and so on
--
--% @defop {Funny Method} foo-class frobnicate argument
--
-+% @defop CATEGORY CLASS OPERATION ARG...
-+%
- \def\defop #1 {\def\defoptype{#1}%
- \defopparsebody\Edefop\defopx\defopheader\defoptype}
--
--\def\defopheader #1#2#3{%
--\dosubind {fn}{\code{#2}}{on #1}% Make entry in function index
--\begingroup\defname {#2}{\defoptype{} on #1}%
-+%
-+\def\defopheader#1#2#3{%
-+\dosubind {fn}{\code{#2}}{\putwordon\ #1}% Make entry in function index
-+\begingroup\defname {#2}{\defoptype\ \putwordon\ #1}%
- \defunargs {#3}\endgroup %
- }
-+
-+% @deftypeop CATEGORY CLASS TYPE OPERATION ARG...
-+%
-+\def\deftypeop #1 {\def\deftypeopcategory{#1}%
-+ \deftypeopparsebody\Edeftypeop\deftypeopx\deftypeopheader
-+ \deftypeopcategory}
-+%
-+% #1 is the class name, #2 the data type, #3 the operation name, #4 the args.
-+\def\deftypeopheader#1#2#3#4{%
-+ \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
-+ \begingroup
-+ \defname{\defheaderxcond#2\relax$$$#3}
-+ {\deftypeopcategory\ \putwordon\ \code{#1}}%
-+ \deftypefunargs{#4}%
-+ \endgroup
-+}
-
--% @deftypemethod foo-class return-type foo-method args
-+% @deftypemethod CLASS TYPE METHOD ARG...
- %
- \def\deftypemethod{%
-- \defmethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
-+ \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
- %
- % #1 is the class name, #2 the data type, #3 the method name, #4 the args.
- \def\deftypemethodheader#1#2#3#4{%
-- \deftypefnheaderx{Method on #1}{#2}#3 #4\relax
-+ \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
-+ \begingroup
-+ \defname{\defheaderxcond#2\relax$$$#3}{\putwordMethodon\ \code{#1}}%
-+ \deftypefunargs{#4}%
-+ \endgroup
- }
-
--% @defmethod == @defop Method
-+% @deftypeivar CLASS TYPE VARNAME
-+%
-+\def\deftypeivar{%
-+ \deftypemethparsebody\Edeftypeivar\deftypeivarx\deftypeivarheader}
-+%
-+% #1 is the class name, #2 the data type, #3 the variable name.
-+\def\deftypeivarheader#1#2#3{%
-+ \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index
-+ \begingroup
-+ \defname{\defheaderxcond#2\relax$$$#3}
-+ {\putwordInstanceVariableof\ \code{#1}}%
-+ \defvarargs{#3}%
-+ \endgroup
-+}
-
-+% @defmethod == @defop Method
-+%
- \def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
--
--\def\defmethodheader #1#2#3{%
--\dosubind {fn}{\code{#2}}{on #1}% entry in function index
--\begingroup\defname {#2}{Method on #1}%
--\defunargs {#3}\endgroup %
-+%
-+% #1 is the class name, #2 the method name, #3 the args.
-+\def\defmethodheader#1#2#3{%
-+ \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% entry in function index
-+ \begingroup
-+ \defname{#2}{\putwordMethodon\ \code{#1}}%
-+ \defunargs{#3}%
-+ \endgroup
- }
-
- % @defcv {Class Option} foo-class foo-flag
-@@ -4122,37 +4741,30 @@
- \defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}
-
- \def\defcvarheader #1#2#3{%
--\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index
--\begingroup\defname {#2}{\defcvtype{} of #1}%
-+\dosubind {vr}{\code{#2}}{\putwordof\ #1}% Make entry in var index
-+\begingroup\defname {#2}{\defcvtype\ \putwordof\ #1}%
- \defvarargs {#3}\endgroup %
- }
-
--% @defivar == @defcv {Instance Variable}
--
-+% @defivar CLASS VARNAME == @defcv {Instance Variable} CLASS VARNAME
-+%
- \def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}
--
--\def\defivarheader #1#2#3{%
--\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index
--\begingroup\defname {#2}{Instance Variable of #1}%
--\defvarargs {#3}\endgroup %
-+%
-+\def\defivarheader#1#2#3{%
-+ \dosubind {vr}{\code{#2}}{\putwordof\ #1}% entry in var index
-+ \begingroup
-+ \defname{#2}{\putwordInstanceVariableof\ #1}%
-+ \defvarargs{#3}%
-+ \endgroup
- }
--
--% These definitions are run if you use @defmethodx, etc.,
--% anywhere other than immediately after a @defmethod, etc.
--
--\def\defopx #1 {\errmessage{@defopx in invalid context}}
--\def\defmethodx #1 {\errmessage{@defmethodx in invalid context}}
--\def\defcvx #1 {\errmessage{@defcvx in invalid context}}
--\def\defivarx #1 {\errmessage{@defivarx in invalid context}}
--
--% Now @defvar
-
-+% @defvar
- % First, define the processing that is wanted for arguments of @defvar.
- % This is actually simple: just print them in roman.
- % This must expand the args and terminate the paragraph they make up
- \def\defvarargs #1{\normalparens #1%
- \interlinepenalty=10000
--\endgraf\penalty 10000\vskip -\parskip\penalty 10000}
-+\endgraf\nobreak\vskip -\parskip\nobreak}
-
- % @defvr Counter foo-count
-
-@@ -4166,7 +4778,7 @@
- \def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}
-
- \def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
--\begingroup\defname {#1}{Variable}%
-+\begingroup\defname {#1}{\putwordDefvar}%
- \defvarargs {#2}\endgroup %
- }
-
-@@ -4175,7 +4787,7 @@
- \def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}
-
- \def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
--\begingroup\defname {#1}{User Option}%
-+\begingroup\defname {#1}{\putwordDefopt}%
- \defvarargs {#2}\endgroup %
- }
-
-@@ -4187,9 +4799,9 @@
- % is actually part of the data type, which should not be put into the index.
- \def\deftypevarheader #1#2{%
- \dovarind#2 \relax% Make entry in variables index
--\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}%
-+\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypevar}%
- \interlinepenalty=10000
--\endgraf\penalty 10000\vskip -\parskip\penalty 10000
-+\endgraf\nobreak\vskip -\parskip\nobreak
- \endgroup}
- \def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}}
-
-@@ -4200,18 +4812,9 @@
- \def\deftypevrheader #1#2#3{\dovarind#3 \relax%
- \begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1}
- \interlinepenalty=10000
--\endgraf\penalty 10000\vskip -\parskip\penalty 10000
-+\endgraf\nobreak\vskip -\parskip\nobreak
- \endgroup}
-
--% This definition is run if you use @defvarx
--% anywhere other than immediately after a @defvar or @defvarx.
--
--\def\defvrx #1 {\errmessage{@defvrx in invalid context}}
--\def\defvarx #1 {\errmessage{@defvarx in invalid context}}
--\def\defoptx #1 {\errmessage{@defoptx in invalid context}}
--\def\deftypevarx #1 {\errmessage{@deftypevarx in invalid context}}
--\def\deftypevrx #1 {\errmessage{@deftypevrx in invalid context}}
--
- % Now define @deftp
- % Args are printed in bold, a slight difference from @defvar.
-
-@@ -4223,52 +4826,395 @@
-
- \def\deftpheader #1#2#3{\doind {tp}{\code{#2}}%
- \begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup}
-+
-+% These definitions are used if you use @defunx (etc.)
-+% anywhere other than immediately after a @defun or @defunx.
-+%
-+\def\defcvx#1 {\errmessage{@defcvx in invalid context}}
-+\def\deffnx#1 {\errmessage{@deffnx in invalid context}}
-+\def\defivarx#1 {\errmessage{@defivarx in invalid context}}
-+\def\defmacx#1 {\errmessage{@defmacx in invalid context}}
-+\def\defmethodx#1 {\errmessage{@defmethodx in invalid context}}
-+\def\defoptx #1 {\errmessage{@defoptx in invalid context}}
-+\def\defopx#1 {\errmessage{@defopx in invalid context}}
-+\def\defspecx#1 {\errmessage{@defspecx in invalid context}}
-+\def\deftpx#1 {\errmessage{@deftpx in invalid context}}
-+\def\deftypefnx#1 {\errmessage{@deftypefnx in invalid context}}
-+\def\deftypefunx#1 {\errmessage{@deftypefunx in invalid context}}
-+\def\deftypeivarx#1 {\errmessage{@deftypeivarx in invalid context}}
-+\def\deftypemethodx#1 {\errmessage{@deftypemethodx in invalid context}}
-+\def\deftypeopx#1 {\errmessage{@deftypeopx in invalid context}}
-+\def\deftypevarx#1 {\errmessage{@deftypevarx in invalid context}}
-+\def\deftypevrx#1 {\errmessage{@deftypevrx in invalid context}}
-+\def\defunx#1 {\errmessage{@defunx in invalid context}}
-+\def\defvarx#1 {\errmessage{@defvarx in invalid context}}
-+\def\defvrx#1 {\errmessage{@defvrx in invalid context}}
-+
-+
-+\message{macros,}
-+% @macro.
-+
-+% To do this right we need a feature of e-TeX, \scantokens,
-+% which we arrange to emulate with a temporary file in ordinary TeX.
-+\ifx\eTeXversion\undefined
-+ \newwrite\macscribble
-+ \def\scanmacro#1{%
-+ \begingroup \newlinechar`\^^M
-+ % Undo catcode changes of \startcontents and \doprintindex
-+ \catcode`\@=0 \catcode`\\=12 \escapechar=`\@
-+ % Append \endinput to make sure that TeX does not see the ending newline.
-+ \toks0={#1\endinput}%
-+ \immediate\openout\macscribble=\jobname.tmp
-+ \immediate\write\macscribble{\the\toks0}%
-+ \immediate\closeout\macscribble
-+ \let\xeatspaces\eatspaces
-+ \input \jobname.tmp
-+ \endgroup
-+}
-+\else
-+\def\scanmacro#1{%
-+\begingroup \newlinechar`\^^M
-+% Undo catcode changes of \startcontents and \doprintindex
-+\catcode`\@=0 \catcode`\\=12 \escapechar=`\@
-+\let\xeatspaces\eatspaces\scantokens{#1\endinput}\endgroup}
-+\fi
-+
-+\newcount\paramno % Count of parameters
-+\newtoks\macname % Macro name
-+\newif\ifrecursive % Is it recursive?
-+\def\macrolist{} % List of all defined macros in the form
-+ % \do\macro1\do\macro2...
-+
-+% Utility routines.
-+% Thisdoes \let #1 = #2, except with \csnames.
-+\def\cslet#1#2{%
-+\expandafter\expandafter
-+\expandafter\let
-+\expandafter\expandafter
-+\csname#1\endcsname
-+\csname#2\endcsname}
-+
-+% Trim leading and trailing spaces off a string.
-+% Concepts from aro-bend problem 15 (see CTAN).
-+{\catcode`\@=11
-+\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
-+\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
-+\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
-+\def\unbrace#1{#1}
-+\unbrace{\gdef\trim@@@ #1 } #2@{#1}
-+}
-+
-+% Trim a single trailing ^^M off a string.
-+{\catcode`\^^M=12\catcode`\Q=3%
-+\gdef\eatcr #1{\eatcra #1Q^^MQ}%
-+\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
-+\gdef\eatcrb#1Q#2Q{#1}%
-+}
-+
-+% Macro bodies are absorbed as an argument in a context where
-+% all characters are catcode 10, 11 or 12, except \ which is active
-+% (as in normal texinfo). It is necessary to change the definition of \.
-+
-+% It's necessary to have hard CRs when the macro is executed. This is
-+% done by making ^^M (\endlinechar) catcode 12 when reading the macro
-+% body, and then making it the \newlinechar in \scanmacro.
-+
-+\def\macrobodyctxt{%
-+ \catcode`\~=12
-+ \catcode`\^=12
-+ \catcode`\_=12
-+ \catcode`\|=12
-+ \catcode`\<=12
-+ \catcode`\>=12
-+ \catcode`\+=12
-+ \catcode`\{=12
-+ \catcode`\}=12
-+ \catcode`\@=12
-+ \catcode`\^^M=12
-+ \usembodybackslash}
-+
-+\def\macroargctxt{%
-+ \catcode`\~=12
-+ \catcode`\^=12
-+ \catcode`\_=12
-+ \catcode`\|=12
-+ \catcode`\<=12
-+ \catcode`\>=12
-+ \catcode`\+=12
-+ \catcode`\@=12
-+ \catcode`\\=12}
-+
-+% \mbodybackslash is the definition of \ in @macro bodies.
-+% It maps \foo\ => \csname macarg.foo\endcsname => #N
-+% where N is the macro parameter number.
-+% We define \csname macarg.\endcsname to be \realbackslash, so
-+% \\ in macro replacement text gets you a backslash.
-+
-+{\catcode`@=0 @catcode`@\=@active
-+ @gdef@usembodybackslash{@let\=@mbodybackslash}
-+ @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
-+}
-+\expandafter\def\csname macarg.\endcsname{\realbackslash}
-+
-+\def\macro{\recursivefalse\parsearg\macroxxx}
-+\def\rmacro{\recursivetrue\parsearg\macroxxx}
-+
-+\def\macroxxx#1{%
-+ \getargs{#1}% now \macname is the macname and \argl the arglist
-+ \ifx\argl\empty % no arguments
-+ \paramno=0%
-+ \else
-+ \expandafter\parsemargdef \argl;%
-+ \fi
-+ \if1\csname ismacro.\the\macname\endcsname
-+ \message{Warning: redefining \the\macname}%
-+ \else
-+ \expandafter\ifx\csname \the\macname\endcsname \relax
-+ \else \errmessage{The name \the\macname\space is reserved}\fi
-+ \global\cslet{macsave.\the\macname}{\the\macname}%
-+ \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
-+ % Add the macroname to \macrolist
-+ \toks0 = \expandafter{\macrolist\do}%
-+ \xdef\macrolist{\the\toks0
-+ \expandafter\noexpand\csname\the\macname\endcsname}%
-+ \fi
-+ \begingroup \macrobodyctxt
-+ \ifrecursive \expandafter\parsermacbody
-+ \else \expandafter\parsemacbody
-+ \fi}
-+
-+\def\unmacro{\parsearg\unmacroxxx}
-+\def\unmacroxxx#1{%
-+ \if1\csname ismacro.#1\endcsname
-+ \global\cslet{#1}{macsave.#1}%
-+ \global\expandafter\let \csname ismacro.#1\endcsname=0%
-+ % Remove the macro name from \macrolist
-+ \begingroup
-+ \edef\tempa{\expandafter\noexpand\csname#1\endcsname}%
-+ \def\do##1{%
-+ \def\tempb{##1}%
-+ \ifx\tempa\tempb
-+ % remove this
-+ \else
-+ \toks0 = \expandafter{\newmacrolist\do}%
-+ \edef\newmacrolist{\the\toks0\expandafter\noexpand\tempa}%
-+ \fi}%
-+ \def\newmacrolist{}%
-+ % Execute macro list to define \newmacrolist
-+ \macrolist
-+ \global\let\macrolist\newmacrolist
-+ \endgroup
-+ \else
-+ \errmessage{Macro #1 not defined}%
-+ \fi
-+}
-+
-+% This makes use of the obscure feature that if the last token of a
-+% <parameter list> is #, then the preceding argument is delimited by
-+% an opening brace, and that opening brace is not consumed.
-+\def\getargs#1{\getargsxxx#1{}}
-+\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
-+\def\getmacname #1 #2\relax{\macname={#1}}
-+\def\getmacargs#1{\def\argl{#1}}
-+
-+% Parse the optional {params} list. Set up \paramno and \paramlist
-+% so \defmacro knows what to do. Define \macarg.blah for each blah
-+% in the params list, to be ##N where N is the position in that list.
-+% That gets used by \mbodybackslash (above).
-+
-+% We need to get `macro parameter char #' into several definitions.
-+% The technique used is stolen from LaTeX: let \hash be something
-+% unexpandable, insert that wherever you need a #, and then redefine
-+% it to # just before using the token list produced.
-+%
-+% The same technique is used to protect \eatspaces till just before
-+% the macro is used.
-+
-+\def\parsemargdef#1;{\paramno=0\def\paramlist{}%
-+ \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,}
-+\def\parsemargdefxxx#1,{%
-+ \if#1;\let\next=\relax
-+ \else \let\next=\parsemargdefxxx
-+ \advance\paramno by 1%
-+ \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
-+ {\xeatspaces{\hash\the\paramno}}%
-+ \edef\paramlist{\paramlist\hash\the\paramno,}%
-+ \fi\next}
-+
-+% These two commands read recursive and nonrecursive macro bodies.
-+% (They're different since rec and nonrec macros end differently.)
-+
-+\long\def\parsemacbody#1@end macro%
-+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
-+\long\def\parsermacbody#1@end rmacro%
-+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
-+
-+% This defines the macro itself. There are six cases: recursive and
-+% nonrecursive macros of zero, one, and many arguments.
-+% Much magic with \expandafter here.
-+% \xdef is used so that macro definitions will survive the file
-+% they're defined in; @include reads the file inside a group.
-+\def\defmacro{%
-+ \let\hash=##% convert placeholders to macro parameter chars
-+ \ifrecursive
-+ \ifcase\paramno
-+ % 0
-+ \expandafter\xdef\csname\the\macname\endcsname{%
-+ \noexpand\scanmacro{\temp}}%
-+ \or % 1
-+ \expandafter\xdef\csname\the\macname\endcsname{%
-+ \bgroup\noexpand\macroargctxt
-+ \noexpand\braceorline
-+ \expandafter\noexpand\csname\the\macname xxx\endcsname}%
-+ \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
-+ \egroup\noexpand\scanmacro{\temp}}%
-+ \else % many
-+ \expandafter\xdef\csname\the\macname\endcsname{%
-+ \bgroup\noexpand\macroargctxt
-+ \noexpand\csname\the\macname xx\endcsname}%
-+ \expandafter\xdef\csname\the\macname xx\endcsname##1{%
-+ \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
-+ \expandafter\expandafter
-+ \expandafter\xdef
-+ \expandafter\expandafter
-+ \csname\the\macname xxx\endcsname
-+ \paramlist{\egroup\noexpand\scanmacro{\temp}}%
-+ \fi
-+ \else
-+ \ifcase\paramno
-+ % 0
-+ \expandafter\xdef\csname\the\macname\endcsname{%
-+ \noexpand\norecurse{\the\macname}%
-+ \noexpand\scanmacro{\temp}\egroup}%
-+ \or % 1
-+ \expandafter\xdef\csname\the\macname\endcsname{%
-+ \bgroup\noexpand\macroargctxt
-+ \noexpand\braceorline
-+ \expandafter\noexpand\csname\the\macname xxx\endcsname}%
-+ \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
-+ \egroup
-+ \noexpand\norecurse{\the\macname}%
-+ \noexpand\scanmacro{\temp}\egroup}%
-+ \else % many
-+ \expandafter\xdef\csname\the\macname\endcsname{%
-+ \bgroup\noexpand\macroargctxt
-+ \expandafter\noexpand\csname\the\macname xx\endcsname}%
-+ \expandafter\xdef\csname\the\macname xx\endcsname##1{%
-+ \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
-+ \expandafter\expandafter
-+ \expandafter\xdef
-+ \expandafter\expandafter
-+ \csname\the\macname xxx\endcsname
-+ \paramlist{%
-+ \egroup
-+ \noexpand\norecurse{\the\macname}%
-+ \noexpand\scanmacro{\temp}\egroup}%
-+ \fi
-+ \fi}
-+
-+\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
-
--% This definition is run if you use @deftpx, etc
--% anywhere other than immediately after a @deftp, etc.
-+% \braceorline decides whether the next nonwhitespace character is a
-+% {. If so it reads up to the closing }, if not, it reads the whole
-+% line. Whatever was read is then fed to the next control sequence
-+% as an argument (by \parsebrace or \parsearg)
-+\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx}
-+\def\braceorlinexxx{%
-+ \ifx\nchar\bgroup\else
-+ \expandafter\parsearg
-+ \fi \next}
-+
-+% We mant to disable all macros during \shipout so that they are not
-+% expanded by \write.
-+\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}%
-+ \edef\next{\macrolist}\expandafter\endgroup\next}
-+
-+
-+% @alias.
-+% We need some trickery to remove the optional spaces around the equal
-+% sign. Just make them active and then expand them all to nothing.
-+\def\alias{\begingroup\obeyspaces\parsearg\aliasxxx}
-+\def\aliasxxx #1{\aliasyyy#1\relax}
-+\def\aliasyyy #1=#2\relax{\ignoreactivespaces
-+\edef\next{\global\let\expandafter\noexpand\csname#1\endcsname=%
-+ \expandafter\noexpand\csname#2\endcsname}%
-+\expandafter\endgroup\next}
-
--\def\deftpx #1 {\errmessage{@deftpx in invalid context}}
-
-+\message{cross references,}
-+% @xref etc.
-
--\message{cross reference,}
--% Define cross-reference macros
--\newwrite \auxfile
-+\newwrite\auxfile
-
--\newif\ifhavexrefs % True if xref values are known.
-+\newif\ifhavexrefs % True if xref values are known.
- \newif\ifwarnedxrefs % True if we warned once that they aren't known.
-
--% @inforef is simple.
-+% @inforef is relatively simple.
- \def\inforef #1{\inforefzzz #1,,,,**}
- \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
- node \samp{\ignorespaces#1{}}}
-+
-+% @node's job is to define \lastnode.
-+\def\node{\ENVcheck\parsearg\nodezzz}
-+\def\nodezzz#1{\nodexxx [#1,]}
-+\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
-+\let\nwnode=\node
-+\let\lastnode=\relax
-
--% \setref{foo} defines a cross-reference point named foo.
-+% The sectioning commands (@chapter, etc.) call these.
-+\def\donoderef{%
-+ \ifx\lastnode\relax\else
-+ \expandafter\expandafter\expandafter\setref{\lastnode}%
-+ {Ysectionnumberandtype}%
-+ \global\let\lastnode=\relax
-+ \fi
-+}
-+\def\unnumbnoderef{%
-+ \ifx\lastnode\relax\else
-+ \expandafter\expandafter\expandafter\setref{\lastnode}{Ynothing}%
-+ \global\let\lastnode=\relax
-+ \fi
-+}
-+\def\appendixnoderef{%
-+ \ifx\lastnode\relax\else
-+ \expandafter\expandafter\expandafter\setref{\lastnode}%
-+ {Yappendixletterandtype}%
-+ \global\let\lastnode=\relax
-+ \fi
-+}
-+
-+
-+% @anchor{NAME} -- define xref target at arbitrary point.
-+%
-+\newcount\savesfregister
-+\gdef\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
-+\gdef\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
-+\gdef\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
-+
-+% \setref{NAME}{SNT} defines a cross-reference point NAME, namely
-+% NAME-title, NAME-pg, and NAME-SNT. Called from \foonoderef. We have
-+% to set \indexdummies so commands such as @code in a section title
-+% aren't expanded. It would be nicer not to expand the titles in the
-+% first place, but there's so many layers that that is hard to do.
-+%
-+\def\setref#1#2{{%
-+ \indexdummies
-+ \pdfmkdest{#1}%
-+ \dosetq{#1-title}{Ytitle}%
-+ \dosetq{#1-pg}{Ypagenumber}%
-+ \dosetq{#1-snt}{#2}%
-+}}
-
--\def\setref#1{%
--\dosetq{#1-title}{Ytitle}%
--\dosetq{#1-pg}{Ypagenumber}%
--\dosetq{#1-snt}{Ysectionnumberandtype}}
--
--\def\unnumbsetref#1{%
--\dosetq{#1-title}{Ytitle}%
--\dosetq{#1-pg}{Ypagenumber}%
--\dosetq{#1-snt}{Ynothing}}
--
--\def\appendixsetref#1{%
--\dosetq{#1-title}{Ytitle}%
--\dosetq{#1-pg}{Ypagenumber}%
--\dosetq{#1-snt}{Yappendixletterandtype}}
--
--% \xref, \pxref, and \ref generate cross-references to specified points.
--% For \xrefX, #1 is the node name, #2 the name of the Info
--% cross-reference, #3 the printed node name, #4 the name of the Info
--% file, #5 the name of the printed manual. All but the node name can be
--% omitted.
-+% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is
-+% the node name, #2 the name of the Info cross-reference, #3 the printed
-+% node name, #4 the name of the Info file, #5 the name of the printed
-+% manual. All but the node name can be omitted.
- %
- \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
- \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
- \def\ref#1{\xrefX[#1,,,,,,,]}
- \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
-+ \unsepspaces
- \def\printedmanual{\ignorespaces #5}%
- \def\printednodename{\ignorespaces #3}%
- \setbox1=\hbox{\printedmanual}%
-@@ -4281,7 +5227,7 @@
- \else
- % Use the actual chapter/section title appear inside
- % the square brackets. Use the real section title if we have it.
-- \ifdim \wd1>0pt%
-+ \ifdim \wd1 > 0pt
- % It is in another manual, so we don't have it.
- \def\printednodename{\ignorespaces #1}%
- \else
-@@ -4302,27 +5248,54 @@
- % are best written with fairly long node names, containing hyphens, this
- % is a loss. Therefore, we give the text of the node name again, so it
- % is as if TeX is seeing it for the first time.
-+ \ifpdf
-+ \leavevmode
-+ \getfilename{#4}%
-+ \ifnum\filenamelength>0
-+ \startlink attr{/Border [0 0 0]}%
-+ goto file{\the\filename.pdf} name{#1@}%
-+ \else
-+ \startlink attr{/Border [0 0 0]}%
-+ goto name{#1@}%
-+ \fi
-+ \linkcolor
-+ \fi
-+ %
- \ifdim \wd1 > 0pt
-- \putwordsection{} ``\printednodename'' in \cite{\printedmanual}%
-+ \putwordsection{} ``\printednodename'' \putwordin{} \cite{\printedmanual}%
- \else
- % _ (for example) has to be the character _ for the purposes of the
- % control sequence corresponding to the node, but it has to expand
- % into the usual \leavevmode...\vrule stuff for purposes of
- % printing. So we \turnoffactive for the \refx-snt, back on for the
- % printing, back off for the \refx-pg.
-- {\turnoffactive \refx{#1-snt}{}}%
-- \space [\printednodename],\space
-+ {\normalturnoffactive
-+ % Only output a following space if the -snt ref is nonempty; for
-+ % @unnumbered and @anchor, it won't be.
-+ \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
-+ \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
-+ }%
-+ % [mynode],
-+ [\printednodename],\space
-+ % page 3
- \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
- \fi
-+ \endlink
- \endgroup}
-
- % \dosetq is the interface for calls from other macros
-
--% Use \turnoffactive so that punctuation chars such as underscore
--% work in node names.
--\def\dosetq #1#2{{\let\folio=0 \turnoffactive
--\edef\next{\write\auxfile{\internalsetq {#1}{#2}}}%
--\next}}
-+% Use \normalturnoffactive so that punctuation chars such as underscore
-+% and backslash work in node names. (\turnoffactive doesn't do \.)
-+\def\dosetq#1#2{%
-+ {\let\folio=0%
-+ \normalturnoffactive
-+ \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}%
-+ \iflinks
-+ \next
-+ \fi
-+ }%
-+}
-
- % \internalsetq {foo}{page} expands into
- % CHARACTERS 'xrdef {foo}{...expansion of \Ypage...}
-@@ -4373,13 +5346,15 @@
- \def\refx#1#2{%
- \expandafter\ifx\csname X#1\endcsname\relax
- % If not defined, say something at least.
-- $\langle$un\-de\-fined$\rangle$%
-- \ifhavexrefs
-- \message{\linenumber Undefined cross reference `#1'.}%
-- \else
-- \ifwarnedxrefs\else
-- \global\warnedxrefstrue
-- \message{Cross reference values unknown; you must run TeX again.}%
-+ \angleleft un\-de\-fined\angleright
-+ \iflinks
-+ \ifhavexrefs
-+ \message{\linenumber Undefined cross reference `#1'.}%
-+ \else
-+ \ifwarnedxrefs\else
-+ \global\warnedxrefstrue
-+ \message{Cross reference values unknown; you must run TeX again.}%
-+ \fi
- \fi
- \fi
- \else
-@@ -4390,10 +5365,13 @@
- }
-
- % This is the macro invoked by entries in the aux file.
--\def\xrdef #1#2{{%
-- \catcode`\'=\other
-- \expandafter\gdef\csname X#1\endcsname{#2}%
--}}
-+%
-+\def\xrdef#1{\begingroup
-+ % Reenable \ as an escape while reading the second argument.
-+ \catcode`\\ = 0
-+ \afterassignment\endgroup
-+ \expandafter\gdef\csname X#1\endcsname
-+}
-
- % Read the last existing aux file, if any. No error if none exists.
- \def\readauxfile{\begingroup
-@@ -4450,8 +5428,7 @@
- \catcode`\$=\other
- \catcode`\#=\other
- \catcode`\&=\other
-- % `\+ does not work, so use 43.
-- \catcode43=\other
-+ \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
- % Make the characters 128-255 be printing characters
- {%
- \count 1=128
-@@ -4540,6 +5517,8 @@
- \xspaceskip\z@skip
- \parindent\defaultparindent
- %
-+ \smallfonts \rm
-+ %
- % Hang the footnote text off the number.
- \hang
- \textindent{\thisfootno}%
-@@ -4554,7 +5533,7 @@
- \else\let\next\f@t\fi \next}
- \def\f@@t{\bgroup\aftergroup\@foot\let\next}
- \def\f@t#1{#1\@foot}
--\def\@foot{\strut\egroup}
-+\def\@foot{\strut\par\egroup}
-
- }%end \catcode `\@=11
-
-@@ -4613,23 +5592,25 @@
-
- % @image. We use the macros from epsf.tex to support this.
- % If epsf.tex is not installed and @image is used, we complain.
--%
-+%
- % Check for and read epsf.tex up front. If we read it only at @image
- % time, we might be inside a group, and then its definitions would get
- % undone and the next image would fail.
--\openin 1 = xepsf.tex
-+\openin 1 = epsf.tex
- \ifeof 1 \else
- \closein 1
-- \def\epsfannounce{\toks0 = }% do not bother showing banner
-+ % Do not bother showing banner with post-v2.7 epsf.tex (available in
-+ % doc/epsf.tex until it shows up on ctan).
-+ \def\epsfannounce{\toks0 = }%
- \input epsf.tex
- \fi
- %
-+% We will only complain once about lack of epsf.tex.
- \newif\ifwarnednoepsf
- \newhelp\noepsfhelp{epsf.tex must be installed for images to
- work. It is also included in the Texinfo distribution, or you can get
-- it from ftp://ftp.tug.org/tex/epsf.tex.}
-+ it from ftp://tug.org/tex/epsf.tex.}
- %
--% Only complain once about lack of epsf.tex.
- \def\image#1{%
- \ifx\epsfbox\undefined
- \ifwarnednoepsf \else
-@@ -4647,43 +5628,80 @@
- % #2 is (optional) width, #3 is (optional) height.
- % #4 is just the usual extra ignored arg for parsing this stuff.
- \def\imagexxx#1,#2,#3,#4\finish{%
-- % \epsfbox itself resets \epsf?size at each figure.
-- \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
-- \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
-- \epsfbox{#1.eps}%
-+ \ifpdf
-+ \centerline{\dopdfimage{#1}{#2}{#3}}%
-+ \else
-+ % \epsfbox itself resets \epsf?size at each figure.
-+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
-+ \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
-+ \begingroup
-+ \catcode`\^^M = 5 % in case we're inside an example
-+ % If the image is by itself, center it.
-+ \ifvmode
-+ \nobreak\bigskip
-+ % Usually we'll have text after the image which will insert
-+ % \parskip glue, so insert it here too to equalize the space
-+ % above and below.
-+ \nobreak\vskip\parskip
-+ \nobreak
-+ \centerline{\epsfbox{#1.eps}}%
-+ \bigbreak
-+ \else
-+ % In the middle of a paragraph, no extra space.
-+ \epsfbox{#1.eps}%
-+ \fi
-+ \endgroup
-+ \fi
- }
-
--% End of control word definitions.
-
-+\message{localization,}
-+% and i18n.
-
--\message{and turning on texinfo input format.}
--
--\def\openindices{%
-- \newindex{cp}%
-- \newcodeindex{fn}%
-- \newcodeindex{vr}%
-- \newcodeindex{tp}%
-- \newcodeindex{ky}%
-- \newcodeindex{pg}%
-+% @documentlanguage is usually given very early, just after
-+% @setfilename. If done too late, it may not override everything
-+% properly. Single argument is the language abbreviation.
-+% It would be nice if we could set up a hyphenation file here.
-+%
-+\def\documentlanguage{\parsearg\dodocumentlanguage}
-+\def\dodocumentlanguage#1{%
-+ \tex % read txi-??.tex file in plain TeX.
-+ % Read the file if it exists.
-+ \openin 1 txi-#1.tex
-+ \ifeof1
-+ \errhelp = \nolanghelp
-+ \errmessage{Cannot read language file txi-#1.tex}%
-+ \let\temp = \relax
-+ \else
-+ \def\temp{\input txi-#1.tex }%
-+ \fi
-+ \temp
-+ \endgroup
- }
-+\newhelp\nolanghelp{The given language definition file cannot be found or
-+is empty. Maybe you need to install it? In the current directory
-+should work if nowhere else does.}
-+
-
--% Set some numeric style parameters, for 8.5 x 11 format.
-+% @documentencoding should change something in TeX eventually, most
-+% likely, but for now just recognize it.
-+\let\documentencoding = \comment
-
--\hsize = 6in
--\hoffset = .25in
-+
-+% Page size parameters.
-+%
- \newdimen\defaultparindent \defaultparindent = 15pt
--\parindent = \defaultparindent
--\parskip 3pt plus 2pt minus 1pt
--\setleading{13.2pt}
--\advance\topskip by 1.2cm
-
- \chapheadingskip = 15pt plus 4pt minus 2pt
- \secheadingskip = 12pt plus 3pt minus 2pt
- \subsecheadingskip = 9pt plus 2pt minus 2pt
-
- % Prevent underfull vbox error messages.
--\vbadness=10000
-+\vbadness = 10000
-
-+% Don't be so finicky about underfull hboxes, either.
-+\hbadness = 2000
-+
- % Following George Bush, just get rid of widows and orphans.
- \widowpenalty=10000
- \clubpenalty=10000
-@@ -4691,101 +5709,125 @@
- % Use TeX 3.0's \emergencystretch to help line breaking, but if we're
- % using an old version of TeX, don't do anything. We want the amount of
- % stretch added to depend on the line length, hence the dependence on
--% \hsize. This makes it come to about 9pt for the 8.5x11 format.
-+% \hsize. We call this whenever the paper size is set.
- %
--\ifx\emergencystretch\thisisundefined
-- % Allow us to assign to \emergencystretch anyway.
-- \def\emergencystretch{\dimen0}%
--\else
-- \emergencystretch = \hsize
-- \divide\emergencystretch by 45
--\fi
--
--% Use @smallbook to reset parameters for 7x9.5 format (or else 7x9.25)
--\def\smallbook{
-- \global\chapheadingskip = 15pt plus 4pt minus 2pt
-- \global\secheadingskip = 12pt plus 3pt minus 2pt
-- \global\subsecheadingskip = 9pt plus 2pt minus 2pt
-- %
-- \global\lispnarrowing = 0.3in
-- \setleading{12pt}
-- \advance\topskip by -1cm
-- \global\parskip 2pt plus 1pt
-- \global\hsize = 5in
-- \global\vsize=7.5in
-- \global\tolerance=700
-- \global\hfuzz=1pt
-- \global\contentsrightmargin=0pt
-- \global\deftypemargin=0pt
-- \global\defbodyindent=.5cm
-- %
-- \global\pagewidth=\hsize
-- \global\pageheight=\vsize
-- %
-- \global\let\smalllisp=\smalllispx
-- \global\let\smallexample=\smalllispx
-- \global\def\Esmallexample{\Esmalllisp}
-+\def\setemergencystretch{%
-+ \ifx\emergencystretch\thisisundefined
-+ % Allow us to assign to \emergencystretch anyway.
-+ \def\emergencystretch{\dimen0}%
-+ \else
-+ \emergencystretch = .15\hsize
-+ \fi
- }
-
-+% Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
-+% 4) hoffset; 5) binding offset; 6) topskip. Then whoever calls us can
-+% set \parskip and call \setleading for \baselineskip.
-+%
-+\def\internalpagesizes#1#2#3#4#5#6{%
-+ \voffset = #3\relax
-+ \topskip = #6\relax
-+ \splittopskip = \topskip
-+ %
-+ \vsize = #1\relax
-+ \advance\vsize by \topskip
-+ \outervsize = \vsize
-+ \advance\outervsize by 2\topandbottommargin
-+ \pageheight = \vsize
-+ %
-+ \hsize = #2\relax
-+ \outerhsize = \hsize
-+ \advance\outerhsize by 0.5in
-+ \pagewidth = \hsize
-+ %
-+ \normaloffset = #4\relax
-+ \bindingoffset = #5\relax
-+ %
-+ \parindent = \defaultparindent
-+ \setemergencystretch
-+}
-+
-+% @letterpaper (the default).
-+\def\letterpaper{{\globaldefs = 1
-+ \parskip = 3pt plus 2pt minus 1pt
-+ \setleading{13.2pt}%
-+ %
-+ % If page is nothing but text, make it come out even.
-+ \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}%
-+}}
-+
-+% Use @smallbook to reset parameters for 7x9.5 (or so) format.
-+\def\smallbook{{\globaldefs = 1
-+ \parskip = 2pt plus 1pt
-+ \setleading{12pt}%
-+ %
-+ \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}%
-+ %
-+ \lispnarrowing = 0.3in
-+ \tolerance = 700
-+ \hfuzz = 1pt
-+ \contentsrightmargin = 0pt
-+ \deftypemargin = 0pt
-+ \defbodyindent = .5cm
-+ %
-+ \let\smalldisplay = \smalldisplayx
-+ \let\smallexample = \smalllispx
-+ \let\smallformat = \smallformatx
-+ \let\smalllisp = \smalllispx
-+}}
-+
- % Use @afourpaper to print on European A4 paper.
--\def\afourpaper{
--\global\tolerance=700
--\global\hfuzz=1pt
--\setleading{12pt}
--\global\parskip 15pt plus 1pt
--
--\global\vsize= 53\baselineskip
--\advance\vsize by \topskip
--%\global\hsize= 5.85in % A4 wide 10pt
--\global\hsize= 6.5in
--\global\outerhsize=\hsize
--\global\advance\outerhsize by 0.5in
--\global\outervsize=\vsize
--\global\advance\outervsize by 0.6in
--
--\global\pagewidth=\hsize
--\global\pageheight=\vsize
--}
--
--\bindingoffset=0pt
--\normaloffset=\hoffset
--\pagewidth=\hsize
--\pageheight=\vsize
--
--% Allow control of the text dimensions. Parameters in order: textheight;
--% textwidth; voffset; hoffset; binding offset; topskip.
--% All require a dimension;
--% header is additional; added length extends the bottom of the page.
--
--\def\changepagesizes#1#2#3#4#5#6{
-- \global\vsize= #1
-- \global\topskip= #6
-- \advance\vsize by \topskip
-- \global\voffset= #3
-- \global\hsize= #2
-- \global\outerhsize=\hsize
-- \global\advance\outerhsize by 0.5in
-- \global\outervsize=\vsize
-- \global\advance\outervsize by 0.6in
-- \global\pagewidth=\hsize
-- \global\pageheight=\vsize
-- \global\normaloffset= #4
-- \global\bindingoffset= #5}
-+\def\afourpaper{{\globaldefs = 1
-+ \setleading{12pt}%
-+ \parskip = 3pt plus 2pt minus 1pt
-+ %
-+ \internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}%
-+ %
-+ \tolerance = 700
-+ \hfuzz = 1pt
-+}}
-
- % A specific text layout, 24x15cm overall, intended for A4 paper. Top margin
- % 29mm, hence bottom margin 28mm, nominal side margin 3cm.
--\def\afourlatex
-- {\global\tolerance=700
-- \global\hfuzz=1pt
-- \setleading{12pt}
-- \global\parskip 15pt plus 1pt
-- \advance\baselineskip by 1.6pt
-- \changepagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}
-- }
-+\def\afourlatex{{\globaldefs = 1
-+ \setleading{13.6pt}%
-+ %
-+ \afourpaper
-+ \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}%
-+ %
-+ \globaldefs = 0
-+}}
-
- % Use @afourwide to print on European A4 paper in wide format.
--\def\afourwide{\afourpaper
--\changepagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}}
-+\def\afourwide{%
-+ \afourpaper
-+ \internalpagesizes{6.5in}{9.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}%
-+ %
-+ \globaldefs = 0
-+}
-+
-+% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
-+% Perhaps we should allow setting the margins, \topskip, \parskip,
-+% and/or leading, also. Or perhaps we should compute them somehow.
-+%
-+\def\pagesizes{\parsearg\pagesizesxxx}
-+\def\pagesizesxxx#1{\pagesizesyyy #1,,\finish}
-+\def\pagesizesyyy#1,#2,#3\finish{{%
-+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
-+ \globaldefs = 1
-+ %
-+ \parskip = 3pt plus 2pt minus 1pt
-+ \setleading{13.2pt}%
-+ %
-+ \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}%
-+}}
-+
-+% Set default to letter.
-+%
-+\letterpaper
-+
-+
-+\message{and turning on texinfo input format.}
-
- % Define macros to output various characters with catcode for normal text.
- \catcode`\"=\other
-@@ -4796,6 +5838,7 @@
- \catcode`\<=\other
- \catcode`\>=\other
- \catcode`\+=\other
-+\catcode`\$=\other
- \def\normaldoublequote{"}
- \def\normaltilde{~}
- \def\normalcaret{^}
-@@ -4804,6 +5847,7 @@
- \def\normalless{<}
- \def\normalgreater{>}
- \def\normalplus{+}
-+\def\normaldollar{$}
-
- % This macro is used to make a character print one way in ttfont
- % where it can probably just be output, and another way in other fonts,
-@@ -4814,7 +5858,13 @@
- % interword stretch (and shrink), and it is reasonable to expect all
- % typewriter fonts to have this, we can check that font parameter.
- %
--\def\ifusingtt#1#2{\ifdim \fontdimen3\the\font=0pt #1\else #2\fi}
-+\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
-+
-+% Same as above, but check for italic font. Actually this also catches
-+% non-italic slanted fonts since it is impossible to distinguish them from
-+% italic fonts. But since this is only used by $ and it uses \sl anyway
-+% this is not a problem.
-+\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
-
- % Turn off all special characters except @
- % (and those which the user can use as if they were ordinary).
-@@ -4822,10 +5872,10 @@
- % use math or other variants that look better in normal text.
-
- \catcode`\"=\active
--\def\activedoublequote{{\tt \char '042}}
-+\def\activedoublequote{{\tt\char34}}
- \let"=\activedoublequote
- \catcode`\~=\active
--\def~{{\tt \char '176}}
-+\def~{{\tt\char126}}
- \chardef\hat=`\^
- \catcode`\^=\active
- \def^{{\tt \hat}}
-@@ -4836,7 +5886,7 @@
- \def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}}
-
- \catcode`\|=\active
--\def|{{\tt \char '174}}
-+\def|{{\tt\char124}}
- \chardef \less=`\<
- \catcode`\<=\active
- \def<{{\tt \less}}
-@@ -4845,6 +5895,8 @@
- \def>{{\tt \gtr}}
- \catcode`\+=\active
- \def+{{\tt \char 43}}
-+\catcode`\$=\active
-+\def${\ifusingit{{\sl\$}}\normaldollar}
- %\catcode 27=\active
- %\def^^[{$\diamondsuit$}
-
-@@ -4875,9 +5927,6 @@
- % \normalbackslash outputs one backslash in fixed width font.
- \def\normalbackslash{{\tt\rawbackslashxx}}
-
--% Say @foo, not \foo, in error messages.
--\escapechar=`\@
--
- % \catcode 17=0 % Define control-q
- \catcode`\\=\active
-
-@@ -4891,7 +5940,8 @@
- @let|=@normalverticalbar
- @let<=@normalless
- @let>=@normalgreater
--@let+=@normalplus}
-+@let+=@normalplus
-+@let$=@normaldollar}
-
- @def@normalturnoffactive{@let"=@normaldoublequote
- @let\=@normalbackslash
-@@ -4901,7 +5951,8 @@
- @let|=@normalverticalbar
- @let<=@normalless
- @let>=@normalgreater
--@let+=@normalplus}
-+@let+=@normalplus
-+@let$=@normaldollar}
-
- % Make _ and + \other characters, temporarily.
- % This is canceled by @fixbackslash.
-@@ -4920,16 +5971,29 @@
- % Also back turn on active characters that might appear in the input
- % file name, in case not using a pre-dumped format.
- %
--@gdef@fixbackslash{@ifx\@eatinput @let\ = @normalbackslash @fi
-- @catcode`+=@active @catcode`@_=@active}
-+@gdef@fixbackslash{%
-+ @ifx\@eatinput @let\ = @normalbackslash @fi
-+ @catcode`+=@active
-+ @catcode`@_=@active
-+}
-+
-+% Say @foo, not \foo, in error messages.
-+@escapechar = `@@
-
--%% These look ok in all fonts, so just make them not special. The @rm below
--%% makes sure that the current font starts out as the newly loaded cmr10
--@catcode`@$=@other @catcode`@%=@other @catcode`@&=@other @catcode`@#=@other
-+% These look ok in all fonts, so just make them not special.
-+@catcode`@& = @other
-+@catcode`@# = @other
-+@catcode`@% = @other
-
-+@c Set initial fonts.
- @textfonts
- @rm
-
-+
- @c Local variables:
-+@c eval: (add-hook 'write-file-hooks 'time-stamp)
- @c page-delimiter: "^\\\\message"
-+@c time-stamp-start: "def\\\\texinfoversion{"
-+@c time-stamp-format: "%:y-%02m-%02d.%02H"
-+@c time-stamp-end: "}"
- @c End: