diff options
author | dmcmahill <dmcmahill@pkgsrc.org> | 2002-08-12 01:53:34 +0000 |
---|---|---|
committer | dmcmahill <dmcmahill@pkgsrc.org> | 2002-08-12 01:53:34 +0000 |
commit | 7d47e28417b3b648718acabc9baa9d8a276138b7 (patch) | |
tree | cee44d04fb7872ba6b2f40c5793ca4fbeb5eea32 | |
parent | d47d70a623c3e5ee16f3080f727b329283c29e2d (diff) | |
download | pkgsrc-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.
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: |