aboutsummaryrefslogtreecommitdiff
path: root/gnu/usr.bin/cc/include
diff options
context:
space:
mode:
authorPeter Wemm <peter@FreeBSD.org>1996-09-19 15:53:53 +0000
committerPeter Wemm <peter@FreeBSD.org>1996-09-19 15:53:53 +0000
commita1b588fd3f68a3ba13d5671ef1e6d3edb9b31ea5 (patch)
treedde8c3c6cc96fffa0ab7be0605216c2b88a75739 /gnu/usr.bin/cc/include
parentcd6eea255ff303444b65690aaccaec91793d4c78 (diff)
Notes
Diffstat (limited to 'gnu/usr.bin/cc/include')
-rw-r--r--gnu/usr.bin/cc/include/basic-block.h68
-rw-r--r--gnu/usr.bin/cc/include/bc-arity.h232
-rw-r--r--gnu/usr.bin/cc/include/bc-emit.h133
-rw-r--r--gnu/usr.bin/cc/include/bc-opcode.h238
-rw-r--r--gnu/usr.bin/cc/include/bc-optab.h74
-rw-r--r--gnu/usr.bin/cc/include/bc-typecd.def21
-rw-r--r--gnu/usr.bin/cc/include/bc-typecd.h53
-rw-r--r--gnu/usr.bin/cc/include/bi-run.h165
-rw-r--r--gnu/usr.bin/cc/include/bytecode.h91
-rw-r--r--gnu/usr.bin/cc/include/bytetypes.h35
-rw-r--r--gnu/usr.bin/cc/include/c-gperf.h184
-rw-r--r--gnu/usr.bin/cc/include/c-lex.h79
-rw-r--r--gnu/usr.bin/cc/include/c-parse.h65
-rw-r--r--gnu/usr.bin/cc/include/c-tree.h483
-rw-r--r--gnu/usr.bin/cc/include/conditions.h115
-rw-r--r--gnu/usr.bin/cc/include/config.h42
-rw-r--r--gnu/usr.bin/cc/include/convert.h23
-rw-r--r--gnu/usr.bin/cc/include/defaults.h133
-rw-r--r--gnu/usr.bin/cc/include/expr.h844
-rw-r--r--gnu/usr.bin/cc/include/flags.h359
-rw-r--r--gnu/usr.bin/cc/include/function.h216
-rw-r--r--gnu/usr.bin/cc/include/gbl-ctors.h85
-rw-r--r--gnu/usr.bin/cc/include/glimits.h93
-rw-r--r--gnu/usr.bin/cc/include/hard-reg-set.h270
-rw-r--r--gnu/usr.bin/cc/include/i386/bsd.h132
-rw-r--r--gnu/usr.bin/cc/include/i386/gas.h154
-rw-r--r--gnu/usr.bin/cc/include/i386/gstabs.h9
-rw-r--r--gnu/usr.bin/cc/include/i386/i386.h1875
-rw-r--r--gnu/usr.bin/cc/include/i386/perform.h97
-rw-r--r--gnu/usr.bin/cc/include/i386/unix.h146
-rw-r--r--gnu/usr.bin/cc/include/input.h46
-rw-r--r--gnu/usr.bin/cc/include/insn-attr.h19
-rw-r--r--gnu/usr.bin/cc/include/insn-codes.h216
-rw-r--r--gnu/usr.bin/cc/include/insn-config.h12
-rw-r--r--gnu/usr.bin/cc/include/insn-flags.h643
-rw-r--r--gnu/usr.bin/cc/include/integrate.h125
-rw-r--r--gnu/usr.bin/cc/include/longlong.h1185
-rw-r--r--gnu/usr.bin/cc/include/loop.h169
-rw-r--r--gnu/usr.bin/cc/include/machmode.def118
-rw-r--r--gnu/usr.bin/cc/include/machmode.h169
-rw-r--r--gnu/usr.bin/cc/include/modemap.def30
-rw-r--r--gnu/usr.bin/cc/include/multilib.h3
-rw-r--r--gnu/usr.bin/cc/include/obstack.h516
-rw-r--r--gnu/usr.bin/cc/include/output.h241
-rw-r--r--gnu/usr.bin/cc/include/pcp.h100
-rw-r--r--gnu/usr.bin/cc/include/real.h437
-rw-r--r--gnu/usr.bin/cc/include/recog.h120
-rw-r--r--gnu/usr.bin/cc/include/regs.h174
-rw-r--r--gnu/usr.bin/cc/include/reload.h236
-rw-r--r--gnu/usr.bin/cc/include/rtl.def764
-rw-r--r--gnu/usr.bin/cc/include/rtl.h961
-rw-r--r--gnu/usr.bin/cc/include/stack.h41
-rw-r--r--gnu/usr.bin/cc/include/tconfig.h42
-rw-r--r--gnu/usr.bin/cc/include/tm.h251
-rw-r--r--gnu/usr.bin/cc/include/tree.def695
-rw-r--r--gnu/usr.bin/cc/include/tree.h1658
-rw-r--r--gnu/usr.bin/cc/include/typeclass.h14
57 files changed, 0 insertions, 15499 deletions
diff --git a/gnu/usr.bin/cc/include/basic-block.h b/gnu/usr.bin/cc/include/basic-block.h
deleted file mode 100644
index b1bc002000fb..000000000000
--- a/gnu/usr.bin/cc/include/basic-block.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Define control and data flow tables, and regsets.
- Copyright (C) 1987 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-
-/* Number of bits in each actual element of a regset. */
-
-#define REGSET_ELT_BITS HOST_BITS_PER_WIDE_INT
-
-/* Type to use for a regset element. Note that lots of code assumes
- that the initial part of a regset that contains information on the
- hard registers is the same format as a HARD_REG_SET. */
-
-#define REGSET_ELT_TYPE unsigned HOST_WIDE_INT
-
-/* Define the type for a pointer to a set with a bit for each
- (hard or pseudo) register. */
-
-typedef REGSET_ELT_TYPE *regset;
-
-/* Size of a regset for the current function,
- in (1) bytes and (2) elements. */
-
-extern int regset_bytes;
-extern int regset_size;
-
-/* Number of basic blocks in the current function. */
-
-extern int n_basic_blocks;
-
-/* Index by basic block number, get first insn in the block. */
-
-extern rtx *basic_block_head;
-
-/* Index by basic block number, get last insn in the block. */
-
-extern rtx *basic_block_end;
-
-/* Index by basic block number, get address of regset
- describing the registers live at the start of that block. */
-
-extern regset *basic_block_live_at_start;
-
-/* Indexed by n, gives number of basic block that (REG n) is used in.
- If the value is REG_BLOCK_GLOBAL (-2),
- it means (REG n) is used in more than one basic block.
- REG_BLOCK_UNKNOWN (-1) means it hasn't been seen yet so we don't know.
- This information remains valid for the rest of the compilation
- of the current function; it is used to control register allocation. */
-
-#define REG_BLOCK_UNKNOWN -1
-#define REG_BLOCK_GLOBAL -2
-extern int *reg_basic_block;
diff --git a/gnu/usr.bin/cc/include/bc-arity.h b/gnu/usr.bin/cc/include/bc-arity.h
deleted file mode 100644
index c75c040ffe4d..000000000000
--- a/gnu/usr.bin/cc/include/bc-arity.h
+++ /dev/null
@@ -1,232 +0,0 @@
-{ 0, 0, 0, {0}},
-{ 1, 0, 0, {0}},
-{ 1, 2, 0, {0}},
-{ 1, 2, 0, {0}},
-{ 0, 0, 1, {(char) SIcode, }},
-{ 0, 0, 1, {(char) SIcode, }},
-{ 0, 1, 1, {(char) QIcode, }},
-{ 0, 1, 1, {(char) HIcode, }},
-{ 0, 1, 1, {(char) SIcode, }},
-{ 0, 1, 1, {(char) DIcode, }},
-{ 0, 1, 1, {(char) SFcode, }},
-{ 0, 1, 1, {(char) DFcode, }},
-{ 0, 1, 1, {(char) XFcode, }},
-{ 0, 1, 1, {(char) Pcode, }},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 2, 0, 0, {0}},
-{ 2, 0, 0, {0}},
-{ 2, 0, 0, {0}},
-{ 2, 0, 0, {0}},
-{ 2, 0, 0, {0}},
-{ 2, 0, 0, {0}},
-{ 2, 0, 0, {0}},
-{ 2, 0, 0, {0}},
-{ 3, 0, 0, {0}},
-{ 2, 0, 0, {0}},
-{ 1, 1, 1, {(char) SIcode, }},
-{ 1, 1, 0, {0}},
-{ 0, 1, 1, {(char) SIcode, }},
-{ 0, 1, 1, {(char) SIcode, }},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 3, 1, 0, {0}},
-{ 3, 1, 0, {0}},
-{ 4, 0, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 1, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 4, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 4, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 4, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 2, 1, 0, {0}},
-{ 4, 1, 0, {0}},
-{ 1, 0, 1, {(char) SIcode, }},
-{ 1, 0, 1, {(char) SIcode, }},
-{ 0, 0, 1, {(char) SIcode, }},
-{ 0, 0, 0, {0}},
-{ 1, 0, 3, {(char) SIcode, (char) SIcode, (char) SIcode, }},
-{ 1, 0, 3, {(char) SIcode, (char) SIcode, (char) SIcode, }},
-{ 1, 0, 3, {(char) SIcode, (char) SIcode, (char) SIcode, }},
-{ 1, 0, 3, {(char) SIcode, (char) SIcode, (char) SIcode, }},
-{ 3, 0, 0, {0}},
-{ 0, 1, 0, {0}},
-{ 0, 0, 0, {0}},
-{ 0, 0, 1, {(char) SIcode, }},
diff --git a/gnu/usr.bin/cc/include/bc-emit.h b/gnu/usr.bin/cc/include/bc-emit.h
deleted file mode 100644
index c00da5b35393..000000000000
--- a/gnu/usr.bin/cc/include/bc-emit.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/* bc-emit.h - declare entry points for producing object files of bytecodes. */
-
-/* Internal format of symbol table for the object file. */
-struct bc_sym
-{
- /* Private copy separately malloc'd. */
- char *name;
-
- /* Symbol has a defined value. */
- unsigned int defined:1;
-
- /* Symbol has been globalized. */
- unsigned int global:1;
-
- /* Symbol is common. */
- unsigned int common:1;
-
- /* Value if defined. */
- unsigned long int val;
-
- /* Used in internal symbol table structure. */
- struct bc_sym *next;
-};
-
-
-/* List of symbols defined in a particular segment. */
-struct bc_segsym
-{
- struct bc_sym *sym;
- struct bc_segsym *next;
-};
-
-
-/* List of relocations needed in a particular segment. */
-struct bc_segreloc
-{
- /* Offset of datum to be relocated. */
- unsigned int offset;
-
- /* Symbol to be relocated by. */
- struct bc_sym *sym;
-
- struct bc_segreloc *next;
-};
-
-
-/* Segment of an object file. */
-struct bc_seg
-{
- /* Size allocated to contents. */
- unsigned int alloc;
-
- /* Pointer to base of contents. */
- char *data;
-
- /* Actual size of contents. */
- unsigned int size;
-
- /* List of symbols defined in this segment. */
- struct bc_segsym *syms;
-
- /* List of relocations for this segment. */
- struct bc_segreloc *relocs;
-};
-
-
-/* Anonymous bytecode label within a single function. */
-struct bc_label
-{
- /* Offset of label from start of segment. */
- unsigned int offset;
-
- /* True when offset is valid. */
- unsigned int defined:1;
-
- /* Unique bytecode ID, used to determine innermost
- block containment */
- int uid;
-
- /* Next node in list */
- struct bc_label *next;
-};
-
-
-/* Reference to a bc_label; a list of all such references is kept for
- the function, then when it is finished they are backpatched to
- contain the correct values. */
-
-struct bc_labelref
-{
- /* Label referenced. */
- struct bc_label *label;
-
- /* Code offset of reference. */
- unsigned int offset;
-
- /* Next labelref in list */
- struct bc_labelref *next;
-};
-
-
-
-extern void bc_initialize();
-extern int bc_begin_function();
-extern char *bc_emit_trampoline();
-extern void bc_emit_bytecode();
-extern void bc_emit_bytecode_const();
-extern struct bc_label *bc_get_bytecode_label();
-extern int bc_emit_bytecode_labeldef();
-extern void bc_emit_bytecode_labelref();
-extern void bc_emit_code_labelref();
-extern char *bc_end_function();
-extern void bc_align_const();
-extern void bc_emit_const();
-extern void bc_emit_const_skip();
-extern int bc_emit_const_labeldef();
-extern void bc_emit_const_labelref();
-extern void bc_align_data();
-extern void bc_emit_data();
-extern void bc_emit_data_skip();
-extern int bc_emit_data_labeldef();
-extern void bc_emit_data_labelref();
-extern int bc_define_pointer ();
-extern int bc_emit_common();
-extern void bc_globalize_label();
-extern void bc_text();
-extern void bc_data();
-extern void bc_align();
-extern void bc_emit();
-extern void bc_emit_skip();
-extern int bc_emit_labeldef();
-extern void bc_emit_labelref();
-extern void bc_write_file();
diff --git a/gnu/usr.bin/cc/include/bc-opcode.h b/gnu/usr.bin/cc/include/bc-opcode.h
deleted file mode 100644
index ba5cafec909f..000000000000
--- a/gnu/usr.bin/cc/include/bc-opcode.h
+++ /dev/null
@@ -1,238 +0,0 @@
-/* This file is automatically generated from bytecode.def,
-do not make any changes here. Instead edit bytecode.def. */
-
-enum bytecode_opcode
-{ neverneverland,
- drop,
- duplicate,
- over,
- setstackSI,
- adjstackSI,
- constQI,
- constHI,
- constSI,
- constDI,
- constSF,
- constDF,
- constXF,
- constP,
- loadQI,
- loadHI,
- loadSI,
- loadDI,
- loadSF,
- loadDF,
- loadXF,
- loadP,
- storeQI,
- storeHI,
- storeSI,
- storeDI,
- storeSF,
- storeDF,
- storeXF,
- storeP,
- storeBLK,
- clearBLK,
- addconstPSI,
- newlocalSI,
- localP,
- argP,
- convertQIHI,
- convertHISI,
- convertSIDI,
- convertQISI,
- convertQUHU,
- convertHUSU,
- convertSUDU,
- convertQUSU,
- convertSFDF,
- convertDFXF,
- convertHIQI,
- convertSIHI,
- convertDISI,
- convertSIQI,
- convertSUQU,
- convertDFSF,
- convertXFDF,
- convertSISF,
- convertSIDF,
- convertSIXF,
- convertSUSF,
- convertSUDF,
- convertSUXF,
- convertDISF,
- convertDIDF,
- convertDIXF,
- convertDUSF,
- convertDUDF,
- convertDUXF,
- convertSFSI,
- convertDFSI,
- convertXFSI,
- convertSFSU,
- convertDFSU,
- convertXFSU,
- convertSFDI,
- convertDFDI,
- convertXFDI,
- convertSFDU,
- convertDFDU,
- convertXFDU,
- convertPSI,
- convertSIP,
- convertSIT,
- convertDIT,
- convertSFT,
- convertDFT,
- convertXFT,
- convertPT,
- zxloadBI,
- sxloadBI,
- sstoreBI,
- addSI,
- addDI,
- addSF,
- addDF,
- addXF,
- addPSI,
- subSI,
- subDI,
- subSF,
- subDF,
- subXF,
- subPP,
- mulSI,
- mulDI,
- mulSU,
- mulDU,
- mulSF,
- mulDF,
- mulXF,
- divSI,
- divDI,
- divSU,
- divDU,
- divSF,
- divDF,
- divXF,
- modSI,
- modDI,
- modSU,
- modDU,
- andSI,
- andDI,
- iorSI,
- iorDI,
- xorSI,
- xorDI,
- lshiftSI,
- lshiftSU,
- lshiftDI,
- lshiftDU,
- rshiftSI,
- rshiftSU,
- rshiftDI,
- rshiftDU,
- ltSI,
- ltSU,
- ltDI,
- ltDU,
- ltSF,
- ltDF,
- ltXF,
- ltP,
- leSI,
- leSU,
- leDI,
- leDU,
- leSF,
- leDF,
- leXF,
- leP,
- geSI,
- geSU,
- geDI,
- geDU,
- geSF,
- geDF,
- geXF,
- geP,
- gtSI,
- gtSU,
- gtDI,
- gtDU,
- gtSF,
- gtDF,
- gtXF,
- gtP,
- eqSI,
- eqDI,
- eqSF,
- eqDF,
- eqXF,
- eqP,
- neSI,
- neDI,
- neSF,
- neDF,
- neXF,
- neP,
- negSI,
- negDI,
- negSF,
- negDF,
- negXF,
- notSI,
- notDI,
- notT,
- predecQI,
- predecHI,
- predecSI,
- predecDI,
- predecP,
- predecSF,
- predecDF,
- predecXF,
- predecBI,
- preincQI,
- preincHI,
- preincSI,
- preincDI,
- preincP,
- preincSF,
- preincDF,
- preincXF,
- preincBI,
- postdecQI,
- postdecHI,
- postdecSI,
- postdecDI,
- postdecP,
- postdecSF,
- postdecDF,
- postdecXF,
- postdecBI,
- postincQI,
- postincHI,
- postincSI,
- postincDI,
- postincP,
- postincSF,
- postincDF,
- postincXF,
- postincBI,
- xjumpif,
- xjumpifnot,
- jump,
- jumpP,
- caseSI,
- caseSU,
- caseDI,
- caseDU,
- call,
- returnP,
- ret,
- linenote,
- LAST_AND_UNUSED_OPCODE
-};
diff --git a/gnu/usr.bin/cc/include/bc-optab.h b/gnu/usr.bin/cc/include/bc-optab.h
deleted file mode 100644
index f42485f7bbfd..000000000000
--- a/gnu/usr.bin/cc/include/bc-optab.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Bytecode token definitions for GNU C-compiler.
- Copyright (C) 1993 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-
-extern void bc_expand_conversion ();
-extern void bc_expand_truth_conversion ();
-extern void bc_expand_binary_operation ();
-extern void bc_expand_unary_operation ();
-
-struct binary_operator
-{
- enum bytecode_opcode opcode;
- enum typecode result;
- enum typecode arg0;
- enum typecode arg1;
-};
-
-extern struct binary_operator optab_plus_expr[];
-extern struct binary_operator optab_minus_expr[];
-extern struct binary_operator optab_mult_expr[];
-extern struct binary_operator optab_trunc_div_expr[];
-extern struct binary_operator optab_trunc_mod_expr[];
-extern struct binary_operator optab_rdiv_expr[];
-extern struct binary_operator optab_bit_and_expr[];
-extern struct binary_operator optab_bit_ior_expr[];
-extern struct binary_operator optab_bit_xor_expr[];
-extern struct binary_operator optab_lshift_expr[];
-extern struct binary_operator optab_rshift_expr[];
-extern struct binary_operator optab_truth_and_expr[];
-extern struct binary_operator optab_truth_or_expr[];
-extern struct binary_operator optab_lt_expr[];
-extern struct binary_operator optab_le_expr[];
-extern struct binary_operator optab_ge_expr[];
-extern struct binary_operator optab_gt_expr[];
-extern struct binary_operator optab_eq_expr[];
-extern struct binary_operator optab_ne_expr[];
-
-struct unary_operator
-{
- enum bytecode_opcode opcode;
- enum typecode result;
- enum typecode arg0;
-};
-
-extern struct unary_operator optab_negate_expr[];
-extern struct unary_operator optab_bit_not_expr[];
-extern struct unary_operator optab_truth_not_expr[];
-
-struct increment_operator
-{
- enum bytecode_opcode opcode;
- enum typecode arg;
-};
-
-extern struct increment_operator optab_predecrement_expr[];
-extern struct increment_operator optab_preincrement_expr[];
-extern struct increment_operator optab_postdecrement_expr[];
-extern struct increment_operator optab_postincrement_expr[];
diff --git a/gnu/usr.bin/cc/include/bc-typecd.def b/gnu/usr.bin/cc/include/bc-typecd.def
deleted file mode 100644
index fd92cdd92822..000000000000
--- a/gnu/usr.bin/cc/include/bc-typecd.def
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Typecodes used by the interpreter and their related
- machine modes and types.
-
- The last argument is used for retrieving the given
- type from a varargs list. Due to a bug in varargs,
- the type has to be the generic machine type of
- larger. */
-
-DEFTYPECODE (QIcode, "QI", QImode, SItype)
-DEFTYPECODE (QUcode, "QU", QImode, SUtype)
-DEFTYPECODE (HIcode, "HI", HImode, SItype)
-DEFTYPECODE (HUcode, "HU", HImode, SUtype)
-DEFTYPECODE (SIcode, "SI", SImode, SItype)
-DEFTYPECODE (SUcode, "SU", SImode, SUtype)
-DEFTYPECODE (DIcode, "DI", DImode, DItype)
-DEFTYPECODE (DUcode, "DU", DImode, DUtype)
-DEFTYPECODE (SFcode, "SF", SFmode, SFtype)
-DEFTYPECODE (DFcode, "DF", DFmode, DFtype)
-DEFTYPECODE (XFcode, "XF", XFmode, XFtype)
-DEFTYPECODE (Pcode, "P", PSImode, Ptype)
-DEFTYPECODE (Tcode, "T", SImode, SItype)
diff --git a/gnu/usr.bin/cc/include/bc-typecd.h b/gnu/usr.bin/cc/include/bc-typecd.h
deleted file mode 100644
index 097cd62e5785..000000000000
--- a/gnu/usr.bin/cc/include/bc-typecd.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Typecode definitions for Bytecode Interpreter.
- Copyright (C) 1993 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#ifndef TYPECODE_H
-#define TYPECODE_H
-
-enum typecode
-{
-#define DEFTYPECODE(CODE, NAME, MACHMODE, TYPE) CODE,
-#include "bc-typecd.def"
-#undef DEFTYPECODE
-
- LAST_AND_UNUSED_TYPECODE
-};
-
-/* Determine if a given type is integer. */
-#define TYPECODE_INTEGER_P(TYPECODE) ((int) (TYPECODE) < (int) SFcode)
-
-/* Determine if a given type is unsigned. */
-#define TYPECODE_UNSIGNED_P(TYPECODE) \
- (TYPECODE_INTEGER_P(TYPECODE) && (int) (TYPECODE) & 1)
-
-/* Determine if a given type is signed. */
-#define TYPECODE_SIGNED_P(TYPECODE) \
- (TYPECODE_INTEGER_P(TYPECODE) && !((int) (TYPECODE) & 1))
-
-/* Determine if a given type is floating. */
-#define TYPECODE_FLOAT_P(TYPECODE) \
- ((int) (TYPECODE) < (int) Pcode && !TYPECODE_INTEGER_P(TYPECODE))
-
-/* Determine if the given type is arithmetic. */
-#define TYPECODE_ARITH_P(TYPECODE) \
- (TYPECODE_INTEGER_P(TYPECODE) || TYPECODE_FLOAT_P(TYPECODE))
-
-#define NUM_TYPECODES ((int) LAST_AND_UNUSED_TYPECODE)
-
-#endif
diff --git a/gnu/usr.bin/cc/include/bi-run.h b/gnu/usr.bin/cc/include/bi-run.h
deleted file mode 100644
index 391ab8a78430..000000000000
--- a/gnu/usr.bin/cc/include/bi-run.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/* Definitions for Bytecode Interpreter.
- Copyright (C) 1993, 1994 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#define MAXLITERALS 5
-
-struct arityvec
-{
- char ninputs;
- char noutputs;
- char nliterals;
- char literals[MAXLITERALS];
-};
-
-struct argtype
-{
- int modealign; /* Argument mode:alignment */
- int size; /* Argument size, in bytes */
-};
-
-struct callinfo
-{
- int nargs; /* Number of arguments in call */
- struct argtype retvaltype; /* Type of return value */
- struct argtype argtypes[1]; /* Argument types */
-};
-
-/* Structure describing a bytecode function. If this changes, we also
- need to change expand_function_end () in bc-trans.c */
-struct bytecode
-{
- int stacksize; /* Depth required of evaluation stack. */
- int localsize; /* Size in bytes of local variables. */
- unsigned char *pc0; /* Initial program counter. */
- void **ptrlit; /* Vector of (relocatable) pointer literals. */
- struct callinfo *callinfo; /* Vector of procedure call type info. */
-};
-
-
-#define INTERP_BPC 8 /* Bits per char */
-#define INTERP_BPI \
- (sizeof (int) * INTERP_BPC) /* Bits per int */
-
-
-#ifndef min
-#define min(L, R) ((L) < (R) ? (L) : (R))
-#endif
-
-
-/* bit field operations. */
-
-/* Low (high) mask: int with low (high) N bits set */
-
-#define LM(N) ((1 << (N)) - 1)
-#define HM(N) ((~LM (INTERP_BPI - (N))))
-
-
-/* Sign-extend SIZE low bits of VALUE to integer (typeof VALUE)
- Signed bitfields are loaded from memory by the sxloadBI instruction,
- which first retrieves the bitfield with XFIELD and then sign extends
- it to an SItype. */
-
-#define EXTEND(SIZE, VALUE) \
- ({ SUtype value = (SUtype) (VALUE); \
- (value & (1 << ((SIZE) - 1)) ? value | ~LM (SIZE) : value); })
-
-
-/* Given OFFSET:SIZE for a bitfield, calculate:
-
- [1] BYTE_OFFSET = the byte offset of the bit field.
- [2] BIT_OFFSET = the bit offset of the bit field (less than INTERP_BPC).
- [3] NBYTES = the number of integral bytes in the bit field.
- [4] TRAILING_BITS= the number of trailing bits (less than INTERP_BPC).
-
-
- , , , , , (memory bytes)
- ---------------- (bitfield)
- | | || | | (divisions)
- ^ ^ ^ ^
- | | | |__ [4] (bits)
- | | |_________ [3] (bytes)
- | |_________________ [2] (bits)
- |___________________________ [1] (bytes)
-
-
- The above applies to BYTE_LOW_ENDIAN machines. In BYTE_BIG_ENDIAN machines, the
- bit numbering is reversed (i.e. bit 0 is the sign bit).
-
- (Alright, so I drew this to keep my tongue in cheek while writing the code below,
- not because I'm into ASCII art.) */
-
-
-#define BI_PARAMS(OFFSET, SIZE, BYTE_OFFSET, BIT_OFFSET, NBYTES, TRAILING_BITS) \
- { BYTE_OFFSET = (OFFSET) / (INTERP_BPC); \
- BIT_OFFSET = (OFFSET) % (INTERP_BPC); \
- NBYTES = ((SIZE) - (INTERP_BPC - (BIT_OFFSET))) / INTERP_BPC; \
- if ((NBYTES) < 0 || ((NBYTES) > 64)) \
- NBYTES = 0; \
- if ((SIZE) + (BIT_OFFSET) <= INTERP_BPC) \
- TRAILING_BITS = 0; \
- else \
- TRAILING_BITS = ((SIZE) - (INTERP_BPC - (BIT_OFFSET))) % INTERP_BPC; }
-
-
-/* SHIFT_IN_BITS retrieves NBITS bits from SOURCE and shifts into
- DEST. The bit field starts OFFSET bits into SOURCE.
-
- OR_IN_BITS copies the NBITS low bits from VALUE into a the bitfield in
- DEST offset by OFFSET bits. */
-
-
-#if BYTES_BIG_ENDIAN
-
-#define SHIFT_IN_BITS(DEST, SOURCE, OFFSET, NBITS) \
- (DEST = ((DEST) << (NBITS)) \
- | (LM ((NBITS)) \
- & ((SOURCE) >> (INTERP_BPC - (OFFSET) - (NBITS)))))
-
-#define OR_IN_BITS(DEST, VALUE, OFFSET, NBITS) \
- (DEST = ((DEST) & ~(LM ((NBITS)) << (INTERP_BPC - (OFFSET) - (NBITS)))) \
- | (((VALUE) & LM ((NBITS))) << (INTERP_BPC - (OFFSET) - (NBITS))))
-
-#else
-
-#define SHIFT_IN_BITS(DEST, SOURCE, OFFSET, NBITS) \
- (DEST = ((DEST) << (NBITS)) \
- | (LM ((NBITS)) \
- & ((SOURCE) >> (OFFSET))))
-
-#define OR_IN_BITS(DEST, VALUE, OFFSET, NBITS) \
- (DEST = ((DEST) & ~(LM ((NBITS)) << (OFFSET))) \
- | (((VALUE) & LM ((NBITS))) << (OFFSET)))
-
-#endif
-
-
-/* Procedure call; arguments are a pointer to the function to be called,
- a pointer to a place to store the return value, a pointer to a vector
- describing the type of procedure call, and the interpreter's stack pointer,
- which will point to the first of the arguments at this point. */
-
-#define CALL(FUNC, CALLDESC, RETVAL, SP) __call(FUNC, CALLDESC, RETVAL, SP)
-
-
-/* Procedure return; arguments are a pointer to the calldesc for this
- function, and a pointer to the place where the value to be returned
- may be found. Generally the MACHARGS above contain a machine dependent
- cookie that is used to determine where to jump to. */
-
-#define PROCRET(CALLDESC, RETVAL) return
diff --git a/gnu/usr.bin/cc/include/bytecode.h b/gnu/usr.bin/cc/include/bytecode.h
deleted file mode 100644
index 16397b18e3fa..000000000000
--- a/gnu/usr.bin/cc/include/bytecode.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* Bytecode definitions for GNU C-compiler.
- Copyright (C) 1993, 1994 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-
-extern int output_bytecode;
-extern int stack_depth;
-extern int max_stack_depth;
-
-/* Emit DI constant according to target machine word ordering */
-
-#if WORDS_BIG_ENDIAN
-
-#define bc_emit_bytecode_DI_const(CST) \
-{ int opcode; \
- opcode = TREE_INT_CST_HIGH (CST); \
- bc_emit_bytecode_const ((char *) &opcode, sizeof opcode); \
- opcode = TREE_INT_CST_LOW (CST); \
- bc_emit_bytecode_const ((char *) &opcode, sizeof opcode); \
-}
-
-#else
-
-#define bc_emit_bytecode_DI_const(CST) \
-{ int opcode; \
- opcode = TREE_INT_CST_LOW (CST); \
- bc_emit_bytecode_const ((char *) &opcode, sizeof opcode); \
- opcode = TREE_INT_CST_HIGH (CST); \
- bc_emit_bytecode_const ((char *) &opcode, sizeof opcode); \
-}
-
-#endif
-
-
-extern void bc_expand_expr ();
-extern void bc_output_data_constructor ();
-extern void bc_store_field ();
-extern void bc_load_bit_field ();
-extern void bc_store_bit_field ();
-extern void bc_push_offset_and_size ();
-extern void bc_init_mode_to_code_map ();
-
-/* These are just stubs, so the compiler will compile for targets
- that aren't yet supported by the bytecode generator. */
-
-#ifndef TARGET_SUPPORTS_BYTECODE
-
-#define MACHINE_SEG_ALIGN 1
-#define INT_ALIGN 1
-#define PTR_ALIGN 1
-#define NAMES_HAVE_UNDERSCORES
-#define BC_NOP (0)
-#define BC_GLOBALIZE_LABEL(FP, NAME) BC_NOP
-#define BC_OUTPUT_COMMON(FP, NAME, SIZE, ROUNDED) BC_NOP
-#define BC_OUTPUT_LOCAL(FP, NAME, SIZE, ROUNDED) BC_NOP
-#define BC_OUTPUT_ALIGN(FP, ALIGN) BC_NOP
-#define BC_OUTPUT_LABEL(FP, NAME) BC_NOP
-#define BC_OUTPUT_SKIP(FP, SIZE) BC_NOP
-#define BC_OUTPUT_LABELREF(FP, NAME) BC_NOP
-#define BC_OUTPUT_FLOAT(FP, VAL) BC_NOP
-#define BC_OUTPUT_DOUBLE(FP, VAL) BC_NOP
-#define BC_OUTPUT_BYTE(FP, VAL) BC_NOP
-#define BC_OUTPUT_FILE ASM_OUTPUT_FILE
-#define BC_OUTPUT_ASCII ASM_OUTPUT_ASCII
-#define BC_OUTPUT_IDENT ASM_OUTPUT_IDENT
-#define BCXSTR(RTX) ((RTX)->bc_label)
-#define BC_WRITE_FILE(FP) BC_NOP
-#define BC_WRITE_SEGSYM(SEGSYM, FP) BC_NOP
-#define BC_WRITE_RELOC_ENTRY(SEGRELOC, FP, OFFSET) BC_NOP
-#define BC_START_BYTECODE_LINE(FP) BC_NOP
-#define BC_WRITE_BYTECODE(SEP, VAL, FP) BC_NOP
-#define BC_WRITE_RTL(R, FP) BC_NOP
-#define BC_EMIT_TRAMPOLINE(TRAMPSEG, CALLINFO) BC_NOP
-#define VALIDATE_STACK BC_NOP
-
-#endif /* !TARGET_SUPPORTS_BYTECODE */
diff --git a/gnu/usr.bin/cc/include/bytetypes.h b/gnu/usr.bin/cc/include/bytetypes.h
deleted file mode 100644
index f91566900c66..000000000000
--- a/gnu/usr.bin/cc/include/bytetypes.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* These should come from genemit */
-
-/* Use __signed__ in case compiling with -traditional. */
-
-typedef __signed__ char QItype;
-typedef unsigned char QUtype;
-typedef __signed__ short int HItype;
-typedef unsigned short int HUtype;
-typedef __signed__ long int SItype;
-typedef unsigned long int SUtype;
-typedef __signed__ long long int DItype;
-typedef unsigned long long int DUtype;
-typedef float SFtype;
-typedef double DFtype;
-typedef long double XFtype;
-typedef char *Ptype;
-typedef int Ttype;
-
-
-typedef union stacktype
-{
- QItype QIval;
- QUtype QUval;
- HItype HIval;
- HUtype HUval;
- SItype SIval;
- SUtype SUval;
- DItype DIval;
- DUtype DUval;
- SFtype SFval;
- DFtype DFval;
- XFtype XFval;
- Ptype Pval;
- Ttype Tval;
-} stacktype;
diff --git a/gnu/usr.bin/cc/include/c-gperf.h b/gnu/usr.bin/cc/include/c-gperf.h
deleted file mode 100644
index 49460751ea99..000000000000
--- a/gnu/usr.bin/cc/include/c-gperf.h
+++ /dev/null
@@ -1,184 +0,0 @@
-/* C code produced by gperf version 2.5 (GNU C++ version) */
-/* Command-line: gperf -p -j1 -i 1 -g -o -t -G -N is_reserved_word -k1,3,$ c-parse.gperf */
-struct resword { char *name; short token; enum rid rid; };
-
-#define TOTAL_KEYWORDS 79
-#define MIN_WORD_LENGTH 2
-#define MAX_WORD_LENGTH 20
-#define MIN_HASH_VALUE 10
-#define MAX_HASH_VALUE 144
-/* maximum key range = 135, duplicates = 0 */
-
-#ifdef __GNUC__
-__inline
-#endif
-static unsigned int
-hash (str, len)
- register char *str;
- register int unsigned len;
-{
- static unsigned char asso_values[] =
- {
- 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
- 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
- 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
- 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
- 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
- 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
- 145, 145, 145, 145, 25, 145, 145, 145, 145, 145,
- 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
- 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
- 145, 145, 145, 145, 145, 1, 145, 46, 8, 15,
- 61, 6, 36, 48, 3, 5, 145, 18, 63, 25,
- 29, 76, 1, 145, 13, 2, 1, 51, 37, 9,
- 9, 1, 3, 145, 145, 145, 145, 145,
- };
- register int hval = len;
-
- switch (hval)
- {
- default:
- case 3:
- hval += asso_values[str[2]];
- case 2:
- case 1:
- hval += asso_values[str[0]];
- }
- return hval + asso_values[str[len - 1]];
-}
-
-static struct resword wordlist[] =
-{
- {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
- {"",},
- {"int", TYPESPEC, RID_INT},
- {"",}, {"",},
- {"__typeof__", TYPEOF, NORID},
- {"__signed__", TYPESPEC, RID_SIGNED},
- {"__imag__", IMAGPART, NORID},
- {"switch", SWITCH, NORID},
- {"__inline__", SCSPEC, RID_INLINE},
- {"else", ELSE, NORID},
- {"__iterator__", SCSPEC, RID_ITERATOR},
- {"__inline", SCSPEC, RID_INLINE},
- {"__extension__", EXTENSION, NORID},
- {"struct", STRUCT, NORID},
- {"__real__", REALPART, NORID},
- {"__const", TYPE_QUAL, RID_CONST},
- {"while", WHILE, NORID},
- {"__const__", TYPE_QUAL, RID_CONST},
- {"case", CASE, NORID},
- {"__complex__", TYPESPEC, RID_COMPLEX},
- {"__iterator", SCSPEC, RID_ITERATOR},
- {"bycopy", TYPE_QUAL, RID_BYCOPY},
- {"",}, {"",}, {"",},
- {"__complex", TYPESPEC, RID_COMPLEX},
- {"",},
- {"in", TYPE_QUAL, RID_IN},
- {"break", BREAK, NORID},
- {"@defs", DEFS, NORID},
- {"",}, {"",}, {"",},
- {"extern", SCSPEC, RID_EXTERN},
- {"if", IF, NORID},
- {"typeof", TYPEOF, NORID},
- {"typedef", SCSPEC, RID_TYPEDEF},
- {"__typeof", TYPEOF, NORID},
- {"sizeof", SIZEOF, NORID},
- {"",},
- {"return", RETURN, NORID},
- {"const", TYPE_QUAL, RID_CONST},
- {"__volatile__", TYPE_QUAL, RID_VOLATILE},
- {"@private", PRIVATE, NORID},
- {"@selector", SELECTOR, NORID},
- {"__volatile", TYPE_QUAL, RID_VOLATILE},
- {"__asm__", ASM_KEYWORD, NORID},
- {"",}, {"",},
- {"continue", CONTINUE, NORID},
- {"__alignof__", ALIGNOF, NORID},
- {"__imag", IMAGPART, NORID},
- {"__attribute__", ATTRIBUTE, NORID},
- {"",}, {"",},
- {"__attribute", ATTRIBUTE, NORID},
- {"for", FOR, NORID},
- {"",},
- {"@encode", ENCODE, NORID},
- {"id", OBJECTNAME, RID_ID},
- {"static", SCSPEC, RID_STATIC},
- {"@interface", INTERFACE, NORID},
- {"",},
- {"__signed", TYPESPEC, RID_SIGNED},
- {"",},
- {"__label__", LABEL, NORID},
- {"",}, {"",},
- {"__asm", ASM_KEYWORD, NORID},
- {"char", TYPESPEC, RID_CHAR},
- {"",},
- {"inline", SCSPEC, RID_INLINE},
- {"out", TYPE_QUAL, RID_OUT},
- {"register", SCSPEC, RID_REGISTER},
- {"__real", REALPART, NORID},
- {"short", TYPESPEC, RID_SHORT},
- {"",},
- {"enum", ENUM, NORID},
- {"inout", TYPE_QUAL, RID_INOUT},
- {"",},
- {"oneway", TYPE_QUAL, RID_ONEWAY},
- {"union", UNION, NORID},
- {"",},
- {"__alignof", ALIGNOF, NORID},
- {"",},
- {"@implementation", IMPLEMENTATION, NORID},
- {"",},
- {"@class", CLASS, NORID},
- {"",},
- {"@public", PUBLIC, NORID},
- {"asm", ASM_KEYWORD, NORID},
- {"",}, {"",}, {"",}, {"",}, {"",},
- {"default", DEFAULT, NORID},
- {"",},
- {"void", TYPESPEC, RID_VOID},
- {"",},
- {"@protected", PROTECTED, NORID},
- {"@protocol", PROTOCOL, NORID},
- {"",}, {"",}, {"",},
- {"volatile", TYPE_QUAL, RID_VOLATILE},
- {"",}, {"",},
- {"signed", TYPESPEC, RID_SIGNED},
- {"float", TYPESPEC, RID_FLOAT},
- {"@end", END, NORID},
- {"",}, {"",},
- {"unsigned", TYPESPEC, RID_UNSIGNED},
- {"@compatibility_alias", ALIAS, NORID},
- {"double", TYPESPEC, RID_DOUBLE},
- {"",}, {"",},
- {"auto", SCSPEC, RID_AUTO},
- {"",},
- {"goto", GOTO, NORID},
- {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
- {"do", DO, NORID},
- {"",}, {"",}, {"",}, {"",},
- {"long", TYPESPEC, RID_LONG},
-};
-
-#ifdef __GNUC__
-__inline
-#endif
-struct resword *
-is_reserved_word (str, len)
- register char *str;
- register unsigned int len;
-{
- if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
- {
- register int key = hash (str, len);
-
- if (key <= MAX_HASH_VALUE && key >= 0)
- {
- register char *s = wordlist[key].name;
-
- if (*s == *str && !strcmp (str + 1, s + 1))
- return &wordlist[key];
- }
- }
- return 0;
-}
diff --git a/gnu/usr.bin/cc/include/c-lex.h b/gnu/usr.bin/cc/include/c-lex.h
deleted file mode 100644
index ae67d4c11126..000000000000
--- a/gnu/usr.bin/cc/include/c-lex.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Define constants for communication with c-parse.y.
- Copyright (C) 1987, 1992 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-
-
-enum rid
-{
- RID_UNUSED,
- RID_INT,
- RID_CHAR,
- RID_FLOAT,
- RID_DOUBLE,
- RID_VOID,
- RID_UNUSED1,
-
- RID_UNSIGNED,
- RID_SHORT,
- RID_LONG,
- RID_AUTO,
- RID_STATIC,
- RID_EXTERN,
- RID_REGISTER,
- RID_TYPEDEF,
- RID_SIGNED,
- RID_CONST,
- RID_VOLATILE,
- RID_INLINE,
- RID_NOALIAS,
- RID_ITERATOR,
- RID_COMPLEX,
-
- RID_IN,
- RID_OUT,
- RID_INOUT,
- RID_BYCOPY,
- RID_ONEWAY,
- RID_ID,
-
- RID_MAX
-};
-
-#define NORID RID_UNUSED
-
-#define RID_FIRST_MODIFIER RID_UNSIGNED
-
-/* The elements of `ridpointers' are identifier nodes
- for the reserved type names and storage classes.
- It is indexed by a RID_... value. */
-extern tree ridpointers[(int) RID_MAX];
-
-/* the declaration found for the last IDENTIFIER token read in.
- yylex must look this up to detect typedefs, which get token type TYPENAME,
- so it is left around in case the identifier is not a typedef but is
- used in a context which makes it a reference to a variable. */
-extern tree lastiddecl;
-
-extern char *token_buffer; /* Pointer to token buffer. */
-
-extern tree make_pointer_declarator ();
-extern void reinit_parse_for_function ();
-extern int yylex ();
-
-extern char *get_directive_line ();
diff --git a/gnu/usr.bin/cc/include/c-parse.h b/gnu/usr.bin/cc/include/c-parse.h
deleted file mode 100644
index dab903ee8f1e..000000000000
--- a/gnu/usr.bin/cc/include/c-parse.h
+++ /dev/null
@@ -1,65 +0,0 @@
-typedef union {long itype; tree ttype; enum tree_code code;
- char *filename; int lineno; } 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 ALIGN 285
-#define ATTRIBUTE 286
-#define EXTENSION 287
-#define LABEL 288
-#define REALPART 289
-#define IMAGPART 290
-#define ASSIGN 291
-#define OROR 292
-#define ANDAND 293
-#define EQCOMPARE 294
-#define ARITHCOMPARE 295
-#define LSHIFT 296
-#define RSHIFT 297
-#define UNARY 298
-#define PLUSPLUS 299
-#define MINUSMINUS 300
-#define HYPERUNARY 301
-#define POINTSAT 302
-#define INTERFACE 303
-#define IMPLEMENTATION 304
-#define END 305
-#define SELECTOR 306
-#define DEFS 307
-#define ENCODE 308
-#define CLASSNAME 309
-#define PUBLIC 310
-#define PRIVATE 311
-#define PROTECTED 312
-#define PROTOCOL 313
-#define OBJECTNAME 314
-#define CLASS 315
-#define ALIAS 316
-#define OBJC_STRING 317
-
-
-extern YYSTYPE yylval;
diff --git a/gnu/usr.bin/cc/include/c-tree.h b/gnu/usr.bin/cc/include/c-tree.h
deleted file mode 100644
index 230035115ee0..000000000000
--- a/gnu/usr.bin/cc/include/c-tree.h
+++ /dev/null
@@ -1,483 +0,0 @@
-/* Definitions for C parsing and type checking.
- Copyright (C) 1987, 1993, 1994 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#ifndef _C_TREE_H
-#define _C_TREE_H
-
-/* Language-dependent contents of an identifier. */
-
-/* The limbo_value is used for block level extern declarations, which need
- to be type checked against subsequent extern declarations. They can't
- be referenced after they fall out of scope, so they can't be global. */
-
-struct lang_identifier
-{
- struct tree_identifier ignore;
- tree global_value, local_value, label_value, implicit_decl;
- tree error_locus, limbo_value;
-};
-
-/* Macros for access to language-specific slots in an identifier. */
-/* Each of these slots contains a DECL node or null. */
-
-/* This represents the value which the identifier has in the
- file-scope namespace. */
-#define IDENTIFIER_GLOBAL_VALUE(NODE) \
- (((struct lang_identifier *)(NODE))->global_value)
-/* This represents the value which the identifier has in the current
- scope. */
-#define IDENTIFIER_LOCAL_VALUE(NODE) \
- (((struct lang_identifier *)(NODE))->local_value)
-/* This represents the value which the identifier has as a label in
- the current label scope. */
-#define IDENTIFIER_LABEL_VALUE(NODE) \
- (((struct lang_identifier *)(NODE))->label_value)
-/* This records the extern decl of this identifier, if it has had one
- at any point in this compilation. */
-#define IDENTIFIER_LIMBO_VALUE(NODE) \
- (((struct lang_identifier *)(NODE))->limbo_value)
-/* This records the implicit function decl of this identifier, if it
- has had one at any point in this compilation. */
-#define IDENTIFIER_IMPLICIT_DECL(NODE) \
- (((struct lang_identifier *)(NODE))->implicit_decl)
-/* This is the last function in which we printed an "undefined variable"
- message for this identifier. Value is a FUNCTION_DECL or null. */
-#define IDENTIFIER_ERROR_LOCUS(NODE) \
- (((struct lang_identifier *)(NODE))->error_locus)
-
-/* In identifiers, C uses the following fields in a special way:
- TREE_PUBLIC to record that there was a previous local extern decl.
- TREE_USED to record that such a decl was used.
- TREE_ADDRESSABLE to record that the address of such a decl was used. */
-
-/* Nonzero means reject anything that ANSI standard C forbids. */
-extern int pedantic;
-
-/* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is read-only. */
-#define C_TYPE_FIELDS_READONLY(type) TREE_LANG_FLAG_1 (type)
-
-/* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is volatile. */
-#define C_TYPE_FIELDS_VOLATILE(type) TREE_LANG_FLAG_2 (type)
-
-/* In a RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE
- nonzero if the definition of the type has already started. */
-#define C_TYPE_BEING_DEFINED(type) TYPE_LANG_FLAG_0 (type)
-
-/* In a RECORD_TYPE, a sorted array of the fields of the type. */
-struct lang_type
-{
- int len;
- tree elts[1];
-};
-
-/* Mark which labels are explicitly declared.
- These may be shadowed, and may be referenced from nested functions. */
-#define C_DECLARED_LABEL_FLAG(label) TREE_LANG_FLAG_1 (label)
-
-/* Record whether a type or decl was written with nonconstant size.
- Note that TYPE_SIZE may have simplified to a constant. */
-#define C_TYPE_VARIABLE_SIZE(type) TYPE_LANG_FLAG_1 (type)
-#define C_DECL_VARIABLE_SIZE(type) DECL_LANG_FLAG_0 (type)
-
-/* Record in each node resulting from a binary operator
- what operator was specified for it. */
-#define C_EXP_ORIGINAL_CODE(exp) ((enum tree_code) TREE_COMPLEXITY (exp))
-
-#if 0 /* Not used. */
-/* Record whether a decl for a function or function pointer has
- already been mentioned (in a warning) because it was called
- but didn't have a prototype. */
-#define C_MISSING_PROTOTYPE_WARNED(decl) DECL_LANG_FLAG_2(decl)
-#endif
-
-/* Store a value in that field. */
-#define C_SET_EXP_ORIGINAL_CODE(exp, code) \
- (TREE_COMPLEXITY (exp) = (int)(code))
-
-/* Record whether a typedef for type `int' was actually `signed int'. */
-#define C_TYPEDEF_EXPLICITLY_SIGNED(exp) DECL_LANG_FLAG_1 ((exp))
-
-/* Nonzero for a declaration of a built in function if there has been no
- occasion that would declare the function in ordinary C.
- Using the function draws a pedantic warning in this case. */
-#define C_DECL_ANTICIPATED(exp) DECL_LANG_FLAG_3 ((exp))
-
-/* For FUNCTION_TYPE, a hidden list of types of arguments. The same as
- TYPE_ARG_TYPES for functions with prototypes, but created for functions
- without prototypes. */
-#define TYPE_ACTUAL_ARG_TYPES(NODE) TYPE_NONCOPIED_PARTS (NODE)
-
-/* Nonzero if the type T promotes to itself.
- ANSI C states explicitly the list of types that promote;
- in particular, short promotes to int even if they have the same width. */
-#define C_PROMOTING_INTEGER_TYPE_P(t) \
- (TREE_CODE ((t)) == INTEGER_TYPE \
- && (TYPE_MAIN_VARIANT (t) == char_type_node \
- || TYPE_MAIN_VARIANT (t) == signed_char_type_node \
- || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node \
- || TYPE_MAIN_VARIANT (t) == short_integer_type_node \
- || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node))
-
-/* In a VAR_DECL, means the variable is really an iterator. */
-#define ITERATOR_P(D) (DECL_LANG_FLAG_4(D))
-
-/* In a VAR_DECL for an iterator, means we are within
- an explicit loop over that iterator. */
-#define ITERATOR_BOUND_P(NODE) ((NODE)->common.readonly_flag)
-
-/* in c-lang.c and objc-act.c */
-extern tree lookup_interface PROTO((tree));
-extern tree is_class_name PROTO((tree));
-extern void maybe_objc_check_decl PROTO((tree));
-extern int maybe_objc_comptypes PROTO((tree, tree, int));
-extern tree maybe_building_objc_message_expr PROTO((void));
-extern tree maybe_objc_method_name PROTO((tree));
-extern int recognize_objc_keyword PROTO((void));
-extern tree build_objc_string PROTO((int, char *));
-
-/* in c-aux-info.c */
-extern void gen_aux_info_record PROTO((tree, int, int, int));
-
-/* in c-common.c */
-extern void declare_function_name PROTO((void));
-extern void decl_attributes PROTO((tree, tree));
-extern void init_function_format_info PROTO((void));
-extern void record_function_format PROTO((tree, tree, int, int, int));
-extern void check_function_format PROTO((tree, tree, tree));
-/* Print an error message for invalid operands to arith operation CODE.
- NOP_EXPR is used as a special case (see truthvalue_conversion). */
-extern void binary_op_error PROTO((enum tree_code));
-extern void c_expand_expr_stmt PROTO((tree));
-/* Validate the expression after `case' and apply default promotions. */
-extern tree check_case_value PROTO((tree));
-/* Concatenate a list of STRING_CST nodes into one STRING_CST. */
-extern tree combine_strings PROTO((tree));
-extern void constant_expression_warning PROTO((tree));
-extern tree convert_and_check PROTO((tree, tree));
-extern void overflow_warning PROTO((tree));
-extern void unsigned_conversion_warning PROTO((tree, tree));
-/* Read the rest of the current #-directive line. */
-extern char *get_directive_line STDIO_PROTO((FILE *));
-/* Subroutine of build_binary_op, used for comparison operations.
- See if the operands have both been converted from subword integer types
- and, if so, perhaps change them both back to their original type. */
-extern tree shorten_compare PROTO((tree *, tree *, tree *, enum tree_code *));
-/* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
- or validate its data type for an `if' or `while' statement or ?..: exp. */
-extern tree truthvalue_conversion PROTO((tree));
-extern tree type_for_mode PROTO((enum machine_mode, int));
-extern tree type_for_size PROTO((unsigned, int));
-
-/* in c-convert.c */
-extern tree convert PROTO((tree, tree));
-
-/* in c-decl.c */
-/* Standard named or nameless data types of the C compiler. */
-extern tree char_array_type_node;
-extern tree char_type_node;
-extern tree const_ptr_type_node;
-extern tree const_string_type_node;
-extern tree default_function_type;
-extern tree double_ftype_double;
-extern tree double_ftype_double_double;
-extern tree double_type_node;
-extern tree float_type_node;
-extern tree intDI_type_node;
-extern tree intHI_type_node;
-extern tree intQI_type_node;
-extern tree intSI_type_node;
-extern tree int_array_type_node;
-extern tree int_ftype_cptr_cptr_sizet;
-extern tree int_ftype_int;
-extern tree int_ftype_ptr_ptr_int;
-extern tree int_ftype_string_string;
-extern tree integer_type_node;
-extern tree long_double_type_node;
-extern tree long_ftype_long;
-extern tree long_integer_type_node;
-extern tree long_long_integer_type_node;
-extern tree long_long_unsigned_type_node;
-extern tree long_unsigned_type_node;
-extern tree complex_integer_type_node;
-extern tree complex_float_type_node;
-extern tree complex_double_type_node;
-extern tree complex_long_double_type_node;
-extern tree ptr_type_node;
-extern tree ptrdiff_type_node;
-extern tree short_integer_type_node;
-extern tree short_unsigned_type_node;
-extern tree signed_char_type_node;
-extern tree signed_wchar_type_node;
-extern tree string_ftype_ptr_ptr;
-extern tree string_type_node;
-extern tree unsigned_char_type_node;
-extern tree unsigned_intDI_type_node;
-extern tree unsigned_intHI_type_node;
-extern tree unsigned_intQI_type_node;
-extern tree unsigned_intSI_type_node;
-extern tree unsigned_type_node;
-extern tree unsigned_wchar_type_node;
-extern tree void_ftype_ptr_int_int;
-extern tree void_ftype_ptr_ptr_int;
-extern tree void_type_node;
-extern tree wchar_array_type_node;
-extern tree wchar_type_node;
-
-extern tree build_enumerator PROTO((tree, tree));
-/* Declare a predefined function. Return the declaration. */
-extern tree builtin_function PROTO((char *, tree, enum built_in_function function_, char *));
-/* Add qualifiers to a type, in the fashion for C. */
-extern tree c_build_type_variant PROTO((tree, int, int));
-extern int c_decode_option PROTO((char *));
-extern void c_mark_varargs PROTO((void));
-extern tree check_identifier PROTO((tree, tree));
-extern void clear_parm_order PROTO((void));
-extern tree combine_parm_decls PROTO((tree, tree, int));
-extern int complete_array_type PROTO((tree, tree, int));
-extern void declare_parm_level PROTO((int));
-extern tree define_label PROTO((char *, int, tree));
-extern void delete_block PROTO((tree));
-extern void finish_decl PROTO((tree, tree, tree));
-extern tree finish_enum PROTO((tree, tree));
-extern void finish_function PROTO((int));
-extern tree finish_struct PROTO((tree, tree));
-extern tree get_parm_info PROTO((int));
-extern tree getdecls PROTO((void));
-extern tree gettags PROTO((void));
-extern int global_bindings_p PROTO((void));
-extern tree grokfield PROTO((char *, int, tree, tree, tree));
-extern tree groktypename PROTO((tree));
-extern tree groktypename_in_parm_context PROTO((tree));
-extern tree implicitly_declare PROTO((tree));
-extern int in_parm_level_p PROTO((void));
-extern void init_decl_processing PROTO((void));
-extern void insert_block PROTO((tree));
-extern void keep_next_level PROTO((void));
-extern int kept_level_p PROTO((void));
-extern tree lookup_label PROTO((tree));
-extern tree lookup_name PROTO((tree));
-extern tree lookup_name_current_level PROTO((tree));
-extern tree lookup_name_current_level_global PROTO((tree));
-extern tree maybe_build_cleanup PROTO((tree));
-extern void parmlist_tags_warning PROTO((void));
-extern void pending_xref_error PROTO((void));
-extern void pop_c_function_context PROTO((void));
-extern void pop_label_level PROTO((void));
-extern tree poplevel PROTO((int, int, int));
-extern void print_lang_decl STDIO_PROTO((FILE *, tree,
- int));
-extern void print_lang_identifier STDIO_PROTO((FILE *, tree,
- int));
-extern void print_lang_type STDIO_PROTO((FILE *, tree,
- int));
-extern void push_c_function_context PROTO((void));
-extern void push_label_level PROTO((void));
-extern void push_parm_decl PROTO((tree));
-extern tree pushdecl PROTO((tree));
-extern tree pushdecl_top_level PROTO((tree));
-extern void pushlevel PROTO((int));
-extern void pushtag PROTO((tree, tree));
-extern void set_block PROTO((tree));
-extern tree shadow_label PROTO((tree));
-extern void shadow_record_fields PROTO((tree));
-extern void shadow_tag PROTO((tree));
-extern void shadow_tag_warned PROTO((tree, int));
-extern tree start_enum PROTO((tree));
-extern int start_function PROTO((tree, tree, int));
-extern tree start_decl PROTO((tree, tree, int));
-extern tree start_struct PROTO((enum tree_code, tree));
-extern void store_parm_decls PROTO((void));
-extern tree xref_tag PROTO((enum tree_code, tree));
-
-/* in c-typeck.c */
-extern tree require_complete_type PROTO((tree));
-extern void incomplete_type_error PROTO((tree, tree));
-/* Given two integer or real types, return the type for their sum.
- Given two compatible ANSI C types, returns the merged type. */
-extern tree common_type PROTO((tree, tree));
-extern int comptypes PROTO((tree, tree));
-extern int self_promoting_args_p PROTO((tree));
-extern tree c_sizeof PROTO((tree));
-extern tree c_sizeof_nowarn PROTO((tree));
-extern tree c_size_in_bytes PROTO((tree));
-extern tree c_alignof PROTO((tree));
-extern tree c_alignof_expr PROTO((tree));
-extern tree default_conversion PROTO((tree));
-extern tree build_component_ref PROTO((tree, tree));
-extern tree build_indirect_ref PROTO((tree, char *));
-extern tree build_array_ref PROTO((tree, tree));
-extern tree build_function_call PROTO((tree, tree));
-extern tree parser_build_binary_op PROTO((enum tree_code,
- tree, tree));
-extern tree build_binary_op PROTO((enum tree_code,
- tree, tree, int));
-extern tree build_unary_op PROTO((enum tree_code,
- tree, int));
-extern int lvalue_p PROTO((tree));
-extern int lvalue_or_else PROTO((tree, char *));
-extern void readonly_warning PROTO((tree, char *));
-extern int mark_addressable PROTO((tree));
-extern tree build_conditional_expr PROTO((tree, tree, tree));
-extern tree build_compound_expr PROTO((tree));
-extern tree build_c_cast PROTO((tree, tree));
-extern tree build_modify_expr PROTO((tree, enum tree_code,
- tree));
-extern tree initializer_constant_valid_p PROTO((tree, tree));
-extern void store_init_value PROTO((tree, tree));
-extern void error_init PROTO((char *, char *,
- char *));
-extern void pedwarn_init PROTO((char *, char *,
- char *));
-extern void start_init PROTO((tree, tree, int));
-extern void finish_init PROTO((void));
-extern void really_start_incremental_init PROTO((tree));
-extern void push_init_level PROTO((int));
-extern tree pop_init_level PROTO((int));
-extern void set_init_index PROTO((tree, tree));
-extern void set_init_label PROTO((tree));
-extern void process_init_element PROTO((tree));
-extern void c_expand_asm_operands PROTO((tree, tree, tree, tree,
- int, char *, int));
-extern void c_expand_return PROTO((tree));
-extern tree c_expand_start_case PROTO((tree));
-
-/* in c-iterate.c */
-extern void iterator_expand PROTO((tree));
-extern void iterator_for_loop_start PROTO((tree));
-extern void iterator_for_loop_end PROTO((tree));
-extern void iterator_for_loop_record PROTO((tree));
-extern void push_iterator_stack PROTO((void));
-extern void pop_iterator_stack PROTO((void));
-
-/* Set to 0 at beginning of a function definition, set to 1 if
- a return statement that specifies a return value is seen. */
-
-extern int current_function_returns_value;
-
-/* Set to 0 at beginning of a function definition, set to 1 if
- a return statement with no argument is seen. */
-
-extern int current_function_returns_null;
-
-/* Nonzero means `$' can be in an identifier. */
-
-extern int dollars_in_ident;
-
-/* Nonzero means allow type mismatches in conditional expressions;
- just make their values `void'. */
-
-extern int flag_cond_mismatch;
-
-/* Nonzero means don't recognize the keyword `asm'. */
-
-extern int flag_no_asm;
-
-/* Nonzero means ignore `#ident' directives. */
-
-extern int flag_no_ident;
-
-/* Nonzero means warn about implicit declarations. */
-
-extern int warn_implicit;
-
-/* Nonzero means give string constants the type `const char *'
- to get extra warnings from them. These warnings will be too numerous
- to be useful, except in thoroughly ANSIfied programs. */
-
-extern int warn_write_strings;
-
-/* Nonzero means warn about sizeof (function) or addition/subtraction
- of function pointers. */
-
-extern int warn_pointer_arith;
-
-/* Nonzero means warn for all old-style non-prototype function decls. */
-
-extern int warn_strict_prototypes;
-
-/* Nonzero means warn about multiple (redundant) decls for the same single
- variable or function. */
-
-extern int warn_redundant_decls;
-
-/* Nonzero means warn about extern declarations of objects not at
- file-scope level and about *all* declarations of functions (whether
- extern or static) not at file-scope level. Note that we exclude
- implicit function declarations. To get warnings about those, use
- -Wimplicit. */
-
-extern int warn_nested_externs;
-
-/* Nonzero means warn about pointer casts that can drop a type qualifier
- from the pointer target type. */
-
-extern int warn_cast_qual;
-
-/* Nonzero means warn when casting a function call to a type that does
- not match the return type (e.g. (float)sqrt() or (anything*)malloc()
- when there is no previous declaration of sqrt or malloc. */
-
-extern int warn_bad_function_cast;
-
-/* Warn about traditional constructs whose meanings changed in ANSI C. */
-
-extern int warn_traditional;
-
-/* Warn about *printf or *scanf format/argument anomalies. */
-
-extern int warn_format;
-
-/* Warn about a subscript that has type char. */
-
-extern int warn_char_subscripts;
-
-/* Warn if a type conversion is done that might have confusing results. */
-
-extern int warn_conversion;
-
-/* Nonzero means do some things the same way PCC does. */
-
-extern int flag_traditional;
-
-/* Nonzero means to allow single precision math even if we're generally
- being traditional. */
-extern int flag_allow_single_precision;
-
-/* Nonzero means warn about suggesting putting in ()'s. */
-
-extern int warn_parentheses;
-
-/* Warn if initializer is not completely bracketed. */
-
-extern int warn_missing_braces;
-
-/* Nonzero means this is a function to call to perform comptypes
- on two record types. */
-
-extern int (*comptypes_record_hook) ();
-
-/* Nonzero means we are reading code that came from a system header file. */
-
-extern int system_header_p;
-
-/* Nonzero enables objc features. */
-
-extern int doing_objc_thang;
-
-#endif /* not _C_TREE_H */
diff --git a/gnu/usr.bin/cc/include/conditions.h b/gnu/usr.bin/cc/include/conditions.h
deleted file mode 100644
index e7319377f37a..000000000000
--- a/gnu/usr.bin/cc/include/conditions.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/* Definitions for condition code handling in final.c and output routines.
- Copyright (C) 1987 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* None of the things in the files exist if we don't use CC0. */
-
-#ifdef HAVE_cc0
-
-/* The variable cc_status says how to interpret the condition code.
- It is set by output routines for an instruction that sets the cc's
- and examined by output routines for jump instructions.
-
- cc_status contains two components named `value1' and `value2'
- that record two equivalent expressions for the values that the
- condition codes were set from. (Either or both may be null if
- there is no useful expression to record.) These fields are
- used for eliminating redundant test and compare instructions
- in the cases where the condition codes were already set by the
- previous instruction.
-
- cc_status.flags contains flags which say that the condition codes
- were set in a nonstandard manner. The output of jump instructions
- uses these flags to compensate and produce the standard result
- with the nonstandard condition codes. Standard flags are defined here.
- The tm.h file can also define other machine-dependent flags.
-
- cc_status also contains a machine-dependent component `mdep'
- whose type, `CC_STATUS_MDEP', may be defined as a macro in the
- tm.h file. */
-
-#ifndef CC_STATUS_MDEP
-#define CC_STATUS_MDEP int
-#endif
-
-#ifndef CC_STATUS_MDEP_INIT
-#define CC_STATUS_MDEP_INIT 0
-#endif
-
-typedef struct {int flags; rtx value1, value2; CC_STATUS_MDEP mdep;} CC_STATUS;
-
-/* While outputting an insn as assembler code,
- this is the status BEFORE that insn. */
-extern CC_STATUS cc_prev_status;
-
-/* While outputting an insn as assembler code,
- this is being altered to the status AFTER that insn. */
-extern CC_STATUS cc_status;
-
-/* These are the machine-independent flags: */
-
-/* Set if the sign of the cc value is inverted:
- output a following jump-if-less as a jump-if-greater, etc. */
-#define CC_REVERSED 1
-
-/* This bit means that the current setting of the N bit is bogus
- and conditional jumps should use the Z bit in its place.
- This state obtains when an extraction of a signed single-bit field
- or an arithmetic shift right of a byte by 7 bits
- is turned into a btst, because btst does not set the N bit. */
-#define CC_NOT_POSITIVE 2
-
-/* This bit means that the current setting of the N bit is bogus
- and conditional jumps should pretend that the N bit is clear.
- Used after extraction of an unsigned bit
- or logical shift right of a byte by 7 bits is turned into a btst.
- The btst does not alter the N bit, but the result of that shift
- or extract is never negative. */
-#define CC_NOT_NEGATIVE 4
-
-/* This bit means that the current setting of the overflow flag
- is bogus and conditional jumps should pretend there is no overflow. */
-#define CC_NO_OVERFLOW 010
-
-/* This bit means that what ought to be in the Z bit
- should be tested as the complement of the N bit. */
-#define CC_Z_IN_NOT_N 020
-
-/* This bit means that what ought to be in the Z bit
- should be tested as the N bit. */
-#define CC_Z_IN_N 040
-
-/* Nonzero if we must invert the sense of the following branch, i.e.
- change EQ to NE. This is not safe for IEEE floating point operations!
- It is intended for use only when a combination of arithmetic
- or logical insns can leave the condition codes set in a fortuitous
- (though inverted) state. */
-#define CC_INVERTED 0100
-
-/* Nonzero if we must convert signed condition operators to unsigned.
- This is only used by machine description files. */
-#define CC_NOT_SIGNED 0200
-
-/* This is how to initialize the variable cc_status.
- final does this at appropriate moments. */
-
-#define CC_STATUS_INIT \
- (cc_status.flags = 0, cc_status.value1 = 0, cc_status.value2 = 0, \
- CC_STATUS_MDEP_INIT)
-
-#endif
diff --git a/gnu/usr.bin/cc/include/config.h b/gnu/usr.bin/cc/include/config.h
deleted file mode 100644
index 78867243fcfc..000000000000
--- a/gnu/usr.bin/cc/include/config.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Configuration for GNU C-compiler for Intel 80386.
- Copyright (C) 1988, 1993 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#ifndef i386
-#define i386
-#endif
-
-/* #defines that need visibility everywhere. */
-#define FALSE 0
-#define TRUE 1
-
-/* This describes the machine the compiler is hosted on. */
-#define HOST_BITS_PER_CHAR 8
-#define HOST_BITS_PER_SHORT 16
-#define HOST_BITS_PER_INT 32
-#define HOST_BITS_PER_LONG 32
-#define HOST_BITS_PER_LONGLONG 64
-
-/* Arguments to use with `exit'. */
-#define SUCCESS_EXIT_CODE 0
-#define FATAL_EXIT_CODE 33
-
-/* target machine dependencies.
- tm.h is a symbolic link to the actual target specific file. */
-
-#include "tm.h"
diff --git a/gnu/usr.bin/cc/include/convert.h b/gnu/usr.bin/cc/include/convert.h
deleted file mode 100644
index b2c8c7947573..000000000000
--- a/gnu/usr.bin/cc/include/convert.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Definition of functions in convert.c.
- Copyright (C) 1993 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-extern tree convert_to_integer PROTO ((tree, tree));
-extern tree convert_to_pointer PROTO ((tree, tree));
-extern tree convert_to_real PROTO ((tree, tree));
-extern tree convert_to_complex PROTO ((tree, tree));
diff --git a/gnu/usr.bin/cc/include/defaults.h b/gnu/usr.bin/cc/include/defaults.h
deleted file mode 100644
index df5ce1cc1dc1..000000000000
--- a/gnu/usr.bin/cc/include/defaults.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/* Definitions of various defaults for how to do assembler output
- (most of which are designed to be appropriate for GAS or for
- some BSD assembler).
-
- Written by Ron Guilmette (rfg@netcom.com)
-
-Copyright (C) 1992 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* Store in OUTPUT a string (made with alloca) containing
- an assembler-name for a local static variable or function named NAME.
- LABELNO is an integer which is different for each call. */
-
-#ifndef ASM_FORMAT_PRIVATE_NAME
-#define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \
- do { \
- int len = strlen (NAME); \
- char *temp = (char *) alloca (len + 3); \
- temp[0] = 'L'; \
- strcpy (&temp[1], (NAME)); \
- temp[len + 1] = '.'; \
- temp[len + 2] = 0; \
- (OUTPUT) = (char *) alloca (strlen (NAME) + 11); \
- ASM_GENERATE_INTERNAL_LABEL (OUTPUT, temp, LABELNO); \
- } while (0)
-#endif
-
-#ifndef ASM_STABD_OP
-#define ASM_STABD_OP ".stabd"
-#endif
-
-/* This is how to output an element of a case-vector that is absolute.
- Some targets don't use this, but we have to define it anyway. */
-
-#ifndef ASM_OUTPUT_ADDR_VEC_ELT
-#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
-do { fprintf (FILE, "\t%s\t", ASM_LONG); \
- ASM_OUTPUT_INTERNAL_LABEL (FILE, "L", (VALUE)); \
- fputc ('\n', FILE); \
- } while (0)
-#endif
-
-/* This is how to output an element of a case-vector that is relative.
- Some targets don't use this, but we have to define it anyway. */
-
-#ifndef ASM_OUTPUT_ADDR_DIFF_ELT
-#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \
-do { fprintf (FILE, "\t%s\t", ASM_SHORT); \
- ASM_OUTPUT_INTERNAL_LABEL (FILE, "L", (VALUE)); \
- fputc ('-', FILE); \
- ASM_OUTPUT_INTERNAL_LABEL (FILE, "L", (REL)); \
- fputc ('\n', FILE); \
- } while (0)
-#endif
-
-/* choose a reasonable default for ASM_OUTPUT_ASCII. */
-
-#ifndef ASM_OUTPUT_ASCII
-#define ASM_OUTPUT_ASCII(MYFILE, MYSTRING, MYLENGTH) \
- do { \
- FILE *_hide_asm_out_file = (MYFILE); \
- unsigned char *_hide_p = (unsigned char *) (MYSTRING); \
- int _hide_thissize = (MYLENGTH); \
- { \
- FILE *asm_out_file = _hide_asm_out_file; \
- unsigned char *p = _hide_p; \
- int thissize = _hide_thissize; \
- int i; \
- fprintf (asm_out_file, "\t.ascii \""); \
- \
- for (i = 0; i < thissize; i++) \
- { \
- register int c = p[i]; \
- if (c == '\"' || c == '\\') \
- putc ('\\', asm_out_file); \
- if (c >= ' ' && c < 0177) \
- putc (c, asm_out_file); \
- else \
- { \
- fprintf (asm_out_file, "\\%o", c); \
- /* After an octal-escape, if a digit follows, \
- terminate one string constant and start another. \
- The Vax assembler fails to stop reading the escape \
- after three digits, so this is the only way we \
- can get it to parse the data properly. */ \
- if (i < thissize - 1 \
- && p[i + 1] >= '0' && p[i + 1] <= '9') \
- fprintf (asm_out_file, "\"\n\t.ascii \""); \
- } \
- } \
- fprintf (asm_out_file, "\"\n"); \
- } \
- } \
- while (0)
-#endif
-
-#ifndef ASM_IDENTIFY_GCC
- /* Default the definition, only if ASM_IDENTIFY_GCC is not set,
- because if it is set, we might not want ASM_IDENTIFY_LANGUAGE
- outputting labels, if we do want it to, then it must be defined
- in the tm.h file. */
-#ifndef ASM_IDENTIFY_LANGUAGE
-#define ASM_IDENTIFY_LANGUAGE(FILE) output_lang_identify (FILE);
-#endif
-#endif
-
-/* This is how we tell the assembler to equate two values. */
-#ifdef SET_ASM_OP
-#ifndef ASM_OUTPUT_DEF
-#define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2) \
- do { fprintf ((FILE), "\t%s\t", SET_ASM_OP); \
- assemble_name (FILE, LABEL1); \
- fprintf (FILE, ","); \
- assemble_name (FILE, LABEL2); \
- fprintf (FILE, "\n"); \
- } while (0)
-#endif
-#endif
diff --git a/gnu/usr.bin/cc/include/expr.h b/gnu/usr.bin/cc/include/expr.h
deleted file mode 100644
index affc28d15e78..000000000000
--- a/gnu/usr.bin/cc/include/expr.h
+++ /dev/null
@@ -1,844 +0,0 @@
-/* Definitions for code generation pass of GNU compiler.
- Copyright (C) 1987, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-
-#ifndef __STDC__
-#ifndef const
-#define const
-#endif
-#endif
-
-/* The default branch cost is 1. */
-#ifndef BRANCH_COST
-#define BRANCH_COST 1
-#endif
-
-/* Macros to access the slots of a QUEUED rtx.
- Here rather than in rtl.h because only the expansion pass
- should ever encounter a QUEUED. */
-
-/* The variable for which an increment is queued. */
-#define QUEUED_VAR(P) XEXP (P, 0)
-/* If the increment has been emitted, this is the insn
- that does the increment. It is zero before the increment is emitted. */
-#define QUEUED_INSN(P) XEXP (P, 1)
-/* If a pre-increment copy has been generated, this is the copy
- (it is a temporary reg). Zero if no copy made yet. */
-#define QUEUED_COPY(P) XEXP (P, 2)
-/* This is the body to use for the insn to do the increment.
- It is used to emit the increment. */
-#define QUEUED_BODY(P) XEXP (P, 3)
-/* Next QUEUED in the queue. */
-#define QUEUED_NEXT(P) XEXP (P, 4)
-
-/* This is the 4th arg to `expand_expr'.
- EXPAND_SUM means it is ok to return a PLUS rtx or MULT rtx.
- EXPAND_INITIALIZER is similar but also record any labels on forced_labels.
- EXPAND_CONST_ADDRESS means it is ok to return a MEM whose address
- is a constant that is not a legitimate address. */
-enum expand_modifier {EXPAND_NORMAL, EXPAND_SUM,
- EXPAND_CONST_ADDRESS, EXPAND_INITIALIZER};
-
-/* List of labels that must never be deleted. */
-extern rtx forced_labels;
-
-/* List (chain of EXPR_LISTs) of pseudo-regs of SAVE_EXPRs.
- So we can mark them all live at the end of the function, if stupid. */
-extern rtx save_expr_regs;
-
-extern int current_function_calls_alloca;
-extern int current_function_outgoing_args_size;
-
-/* This is the offset from the arg pointer to the place where the first
- anonymous arg can be found, if there is one. */
-extern rtx current_function_arg_offset_rtx;
-
-/* This is nonzero if the current function uses the constant pool. */
-extern int current_function_uses_const_pool;
-
-/* This is nonzero if the current function uses pic_offset_table_rtx. */
-extern int current_function_uses_pic_offset_table;
-
-/* The arg pointer hard register, or the pseudo into which it was copied. */
-extern rtx current_function_internal_arg_pointer;
-
-/* Nonzero means stack pops must not be deferred, and deferred stack
- pops must not be output. It is nonzero inside a function call,
- inside a conditional expression, inside a statement expression,
- and in other cases as well. */
-extern int inhibit_defer_pop;
-
-/* Number of function calls seen so far in current function. */
-
-extern int function_call_count;
-
-/* RTX for stack slot that holds the current handler for nonlocal gotos.
- Zero when function does not have nonlocal labels. */
-
-extern rtx nonlocal_goto_handler_slot;
-
-/* RTX for stack slot that holds the stack pointer value to restore
- for a nonlocal goto.
- Zero when function does not have nonlocal labels. */
-
-extern rtx nonlocal_goto_stack_level;
-
-/* List (chain of TREE_LIST) of LABEL_DECLs for all nonlocal labels
- (labels to which there can be nonlocal gotos from nested functions)
- in this function. */
-
-#ifdef TREE_CODE /* Don't lose if tree.h not included. */
-extern tree nonlocal_labels;
-#endif
-
-#define NO_DEFER_POP (inhibit_defer_pop += 1)
-#define OK_DEFER_POP (inhibit_defer_pop -= 1)
-
-/* Number of units that we should eventually pop off the stack.
- These are the arguments to function calls that have already returned. */
-extern int pending_stack_adjust;
-
-/* A list of all cleanups which belong to the arguments of
- function calls being expanded by expand_call. */
-#ifdef TREE_CODE /* Don't lose if tree.h not included. */
-extern tree cleanups_this_call;
-#endif
-
-/* When temporaries are created by TARGET_EXPRs, they are created at
- this level of temp_slot_level, so that they can remain allocated
- until no longer needed. CLEANUP_POINT_EXPRs define the lifetime
- of TARGET_EXPRs. */
-extern int target_temp_slot_level;
-
-#ifdef TREE_CODE /* Don't lose if tree.h not included. */
-/* Structure to record the size of a sequence of arguments
- as the sum of a tree-expression and a constant. */
-
-struct args_size
-{
- int constant;
- tree var;
-};
-#endif
-
-/* Add the value of the tree INC to the `struct args_size' TO. */
-
-#define ADD_PARM_SIZE(TO, INC) \
-{ tree inc = (INC); \
- if (TREE_CODE (inc) == INTEGER_CST) \
- (TO).constant += TREE_INT_CST_LOW (inc); \
- else if ((TO).var == 0) \
- (TO).var = inc; \
- else \
- (TO).var = size_binop (PLUS_EXPR, (TO).var, inc); }
-
-#define SUB_PARM_SIZE(TO, DEC) \
-{ tree dec = (DEC); \
- if (TREE_CODE (dec) == INTEGER_CST) \
- (TO).constant -= TREE_INT_CST_LOW (dec); \
- else if ((TO).var == 0) \
- (TO).var = size_binop (MINUS_EXPR, integer_zero_node, dec); \
- else \
- (TO).var = size_binop (MINUS_EXPR, (TO).var, dec); }
-
-/* Convert the implicit sum in a `struct args_size' into an rtx. */
-#define ARGS_SIZE_RTX(SIZE) \
-((SIZE).var == 0 ? GEN_INT ((SIZE).constant) \
- : expand_expr (size_binop (PLUS_EXPR, (SIZE).var, \
- size_int ((SIZE).constant)), \
- NULL_RTX, VOIDmode, 0))
-
-/* Convert the implicit sum in a `struct args_size' into a tree. */
-#define ARGS_SIZE_TREE(SIZE) \
-((SIZE).var == 0 ? size_int ((SIZE).constant) \
- : size_binop (PLUS_EXPR, (SIZE).var, size_int ((SIZE).constant)))
-
-/* Supply a default definition for FUNCTION_ARG_PADDING:
- usually pad upward, but pad short args downward on
- big-endian machines. */
-
-enum direction {none, upward, downward}; /* Value has this type. */
-
-#ifndef FUNCTION_ARG_PADDING
-#if BYTES_BIG_ENDIAN
-#define FUNCTION_ARG_PADDING(MODE, TYPE) \
- (((MODE) == BLKmode \
- ? ((TYPE) && TREE_CODE (TYPE_SIZE (TYPE)) == INTEGER_CST \
- && int_size_in_bytes (TYPE) < (PARM_BOUNDARY / BITS_PER_UNIT)) \
- : GET_MODE_BITSIZE (MODE) < PARM_BOUNDARY) \
- ? downward : upward)
-#else
-#define FUNCTION_ARG_PADDING(MODE, TYPE) upward
-#endif
-#endif
-
-/* Supply a default definition for FUNCTION_ARG_BOUNDARY. Normally, we let
- FUNCTION_ARG_PADDING, which also pads the length, handle any needed
- alignment. */
-
-#ifndef FUNCTION_ARG_BOUNDARY
-#define FUNCTION_ARG_BOUNDARY(MODE, TYPE) PARM_BOUNDARY
-#endif
-
-/* Nonzero if we do not know how to pass TYPE solely in registers.
- We cannot do so in the following cases:
-
- - if the type has variable size
- - if the type is marked as addressable (it is required to be constructed
- into the stack)
- - if the padding and mode of the type is such that a copy into a register
- would put it into the wrong part of the register.
-
- Which padding can't be supported depends on the byte endianness.
-
- A value in a register is implicitly padded at the most significant end.
- On a big-endian machine, that is the lower end in memory.
- So a value padded in memory at the upper end can't go in a register.
- For a little-endian machine, the reverse is true. */
-
-#if BYTES_BIG_ENDIAN
-#define MUST_PASS_IN_STACK_BAD_PADDING upward
-#else
-#define MUST_PASS_IN_STACK_BAD_PADDING downward
-#endif
-
-#define MUST_PASS_IN_STACK(MODE,TYPE) \
- ((TYPE) != 0 \
- && (TREE_CODE (TYPE_SIZE (TYPE)) != INTEGER_CST \
- || TREE_ADDRESSABLE (TYPE) \
- || ((MODE) == BLKmode \
- && ! ((TYPE) != 0 && TREE_CODE (TYPE_SIZE (TYPE)) == INTEGER_CST \
- && 0 == (int_size_in_bytes (TYPE) \
- % (PARM_BOUNDARY / BITS_PER_UNIT))) \
- && (FUNCTION_ARG_PADDING (MODE, TYPE) \
- == MUST_PASS_IN_STACK_BAD_PADDING))))
-
-/* Nonzero if type TYPE should be returned in memory.
- Most machines can use the following default definition. */
-
-#ifndef RETURN_IN_MEMORY
-#define RETURN_IN_MEMORY(TYPE) (TYPE_MODE (TYPE) == BLKmode)
-#endif
-
-/* Optabs are tables saying how to generate insn bodies
- for various machine modes and numbers of operands.
- Each optab applies to one operation.
- For example, add_optab applies to addition.
-
- The insn_code slot is the enum insn_code that says how to
- generate an insn for this operation on a particular machine mode.
- It is CODE_FOR_nothing if there is no such insn on the target machine.
-
- The `lib_call' slot is the name of the library function that
- can be used to perform the operation.
-
- A few optabs, such as move_optab and cmp_optab, are used
- by special code. */
-
-/* Everything that uses expr.h needs to define enum insn_code
- but we don't list it in the Makefile dependencies just for that. */
-#include "insn-codes.h"
-
-typedef struct optab
-{
- enum rtx_code code;
- struct {
- enum insn_code insn_code;
- rtx libfunc;
- } handlers [NUM_MACHINE_MODES];
-} * optab;
-
-/* Given an enum insn_code, access the function to construct
- the body of that kind of insn. */
-#ifdef FUNCTION_CONVERSION_BUG
-/* Some compilers fail to convert a function properly to a
- pointer-to-function when used as an argument.
- So produce the pointer-to-function directly.
- Luckily, these compilers seem to work properly when you
- call the pointer-to-function. */
-#define GEN_FCN(CODE) (insn_gen_function[(int) (CODE)])
-#else
-#define GEN_FCN(CODE) (*insn_gen_function[(int) (CODE)])
-#endif
-
-extern rtx (*const insn_gen_function[]) ();
-
-extern optab add_optab;
-extern optab sub_optab;
-extern optab smul_optab; /* Signed and floating-point multiply */
-extern optab smul_highpart_optab; /* Signed multiply, return high word */
-extern optab umul_highpart_optab;
-extern optab smul_widen_optab; /* Signed multiply with result
- one machine mode wider than args */
-extern optab umul_widen_optab;
-extern optab sdiv_optab; /* Signed divide */
-extern optab sdivmod_optab; /* Signed divide-and-remainder in one */
-extern optab udiv_optab;
-extern optab udivmod_optab;
-extern optab smod_optab; /* Signed remainder */
-extern optab umod_optab;
-extern optab flodiv_optab; /* Optab for floating divide. */
-extern optab ftrunc_optab; /* Convert float to integer in float fmt */
-extern optab and_optab; /* Logical and */
-extern optab ior_optab; /* Logical or */
-extern optab xor_optab; /* Logical xor */
-extern optab ashl_optab; /* Arithmetic shift left */
-extern optab ashr_optab; /* Arithmetic shift right */
-extern optab lshr_optab; /* Logical shift right */
-extern optab rotl_optab; /* Rotate left */
-extern optab rotr_optab; /* Rotate right */
-extern optab smin_optab; /* Signed and floating-point minimum value */
-extern optab smax_optab; /* Signed and floating-point maximum value */
-extern optab umin_optab; /* Unsigned minimum value */
-extern optab umax_optab; /* Unsigned maximum value */
-
-extern optab mov_optab; /* Move instruction. */
-extern optab movstrict_optab; /* Move, preserving high part of register. */
-
-extern optab cmp_optab; /* Compare insn; two operands. */
-extern optab tst_optab; /* tst insn; compare one operand against 0 */
-
-/* Unary operations */
-extern optab neg_optab; /* Negation */
-extern optab abs_optab; /* Abs value */
-extern optab one_cmpl_optab; /* Bitwise not */
-extern optab ffs_optab; /* Find first bit set */
-extern optab sqrt_optab; /* Square root */
-extern optab sin_optab; /* Sine */
-extern optab cos_optab; /* Cosine */
-extern optab strlen_optab; /* String length */
-
-/* Tables of patterns for extending one integer mode to another. */
-extern enum insn_code extendtab[MAX_MACHINE_MODE][MAX_MACHINE_MODE][2];
-
-/* Tables of patterns for converting between fixed and floating point. */
-extern enum insn_code fixtab[NUM_MACHINE_MODES][NUM_MACHINE_MODES][2];
-extern enum insn_code fixtrunctab[NUM_MACHINE_MODES][NUM_MACHINE_MODES][2];
-extern enum insn_code floattab[NUM_MACHINE_MODES][NUM_MACHINE_MODES][2];
-
-/* Contains the optab used for each rtx code. */
-extern optab code_to_optab[NUM_RTX_CODE + 1];
-
-/* Passed to expand_binop and expand_unop to say which options to try to use
- if the requested operation can't be open-coded on the requisite mode.
- Either OPTAB_LIB or OPTAB_LIB_WIDEN says try using a library call.
- Either OPTAB_WIDEN or OPTAB_LIB_WIDEN says try using a wider mode.
- OPTAB_MUST_WIDEN says try widening and don't try anything else. */
-
-enum optab_methods
-{
- OPTAB_DIRECT,
- OPTAB_LIB,
- OPTAB_WIDEN,
- OPTAB_LIB_WIDEN,
- OPTAB_MUST_WIDEN
-};
-
-/* SYMBOL_REF rtx's for the library functions that are called
- implicitly and not via optabs. */
-
-extern rtx extendsfdf2_libfunc;
-extern rtx extendsfxf2_libfunc;
-extern rtx extendsftf2_libfunc;
-extern rtx extenddfxf2_libfunc;
-extern rtx extenddftf2_libfunc;
-
-extern rtx truncdfsf2_libfunc;
-extern rtx truncxfsf2_libfunc;
-extern rtx trunctfsf2_libfunc;
-extern rtx truncxfdf2_libfunc;
-extern rtx trunctfdf2_libfunc;
-
-extern rtx memcpy_libfunc;
-extern rtx bcopy_libfunc;
-extern rtx memcmp_libfunc;
-extern rtx bcmp_libfunc;
-extern rtx memset_libfunc;
-extern rtx bzero_libfunc;
-
-extern rtx eqhf2_libfunc;
-extern rtx nehf2_libfunc;
-extern rtx gthf2_libfunc;
-extern rtx gehf2_libfunc;
-extern rtx lthf2_libfunc;
-extern rtx lehf2_libfunc;
-
-extern rtx eqsf2_libfunc;
-extern rtx nesf2_libfunc;
-extern rtx gtsf2_libfunc;
-extern rtx gesf2_libfunc;
-extern rtx ltsf2_libfunc;
-extern rtx lesf2_libfunc;
-
-extern rtx eqdf2_libfunc;
-extern rtx nedf2_libfunc;
-extern rtx gtdf2_libfunc;
-extern rtx gedf2_libfunc;
-extern rtx ltdf2_libfunc;
-extern rtx ledf2_libfunc;
-
-extern rtx eqxf2_libfunc;
-extern rtx nexf2_libfunc;
-extern rtx gtxf2_libfunc;
-extern rtx gexf2_libfunc;
-extern rtx ltxf2_libfunc;
-extern rtx lexf2_libfunc;
-
-extern rtx eqtf2_libfunc;
-extern rtx netf2_libfunc;
-extern rtx gttf2_libfunc;
-extern rtx getf2_libfunc;
-extern rtx lttf2_libfunc;
-extern rtx letf2_libfunc;
-
-extern rtx floatsisf_libfunc;
-extern rtx floatdisf_libfunc;
-extern rtx floattisf_libfunc;
-
-extern rtx floatsidf_libfunc;
-extern rtx floatdidf_libfunc;
-extern rtx floattidf_libfunc;
-
-extern rtx floatsixf_libfunc;
-extern rtx floatdixf_libfunc;
-extern rtx floattixf_libfunc;
-
-extern rtx floatsitf_libfunc;
-extern rtx floatditf_libfunc;
-extern rtx floattitf_libfunc;
-
-extern rtx fixsfsi_libfunc;
-extern rtx fixsfdi_libfunc;
-extern rtx fixsfti_libfunc;
-
-extern rtx fixdfsi_libfunc;
-extern rtx fixdfdi_libfunc;
-extern rtx fixdfti_libfunc;
-
-extern rtx fixxfsi_libfunc;
-extern rtx fixxfdi_libfunc;
-extern rtx fixxfti_libfunc;
-
-extern rtx fixtfsi_libfunc;
-extern rtx fixtfdi_libfunc;
-extern rtx fixtfti_libfunc;
-
-extern rtx fixunssfsi_libfunc;
-extern rtx fixunssfdi_libfunc;
-extern rtx fixunssfti_libfunc;
-
-extern rtx fixunsdfsi_libfunc;
-extern rtx fixunsdfdi_libfunc;
-extern rtx fixunsdfti_libfunc;
-
-extern rtx fixunsxfsi_libfunc;
-extern rtx fixunsxfdi_libfunc;
-extern rtx fixunsxfti_libfunc;
-
-extern rtx fixunstfsi_libfunc;
-extern rtx fixunstfdi_libfunc;
-extern rtx fixunstfti_libfunc;
-
-typedef rtx (*rtxfun) ();
-
-/* Indexed by the rtx-code for a conditional (eg. EQ, LT,...)
- gives the gen_function to make a branch to test that condition. */
-
-extern rtxfun bcc_gen_fctn[NUM_RTX_CODE];
-
-/* Indexed by the rtx-code for a conditional (eg. EQ, LT,...)
- gives the insn code to make a store-condition insn
- to test that condition. */
-
-extern enum insn_code setcc_gen_code[NUM_RTX_CODE];
-
-/* This array records the insn_code of insns to perform block moves. */
-extern enum insn_code movstr_optab[NUM_MACHINE_MODES];
-
-/* Define functions given in optabs.c. */
-
-/* Expand a binary operation given optab and rtx operands. */
-extern rtx expand_binop PROTO((enum machine_mode, optab, rtx, rtx, rtx,
- int, enum optab_methods));
-
-/* Expand a binary operation with both signed and unsigned forms. */
-extern rtx sign_expand_binop PROTO((enum machine_mode, optab, optab, rtx,
- rtx, rtx, int, enum optab_methods));
-
-/* Generate code to perform an operation on two operands with two results. */
-extern int expand_twoval_binop PROTO((optab, rtx, rtx, rtx, rtx, int));
-
-/* Expand a unary arithmetic operation given optab rtx operand. */
-extern rtx expand_unop PROTO((enum machine_mode, optab, rtx, rtx, int));
-
-/* Expand the absolute value operation. */
-extern rtx expand_abs PROTO((enum machine_mode, rtx, rtx, int, int));
-
-/* Expand the complex absolute value operation. */
-extern rtx expand_complex_abs PROTO((enum machine_mode, rtx, rtx, int));
-
-/* Generate an instruction with a given INSN_CODE with an output and
- an input. */
-extern void emit_unop_insn PROTO((int, rtx, rtx, enum rtx_code));
-
-/* Emit code to perform a series of operations on a multi-word quantity, one
- word at a time. */
-extern rtx emit_no_conflict_block PROTO((rtx, rtx, rtx, rtx, rtx));
-
-/* Emit code to make a call to a constant function or a library call. */
-extern void emit_libcall_block PROTO((rtx, rtx, rtx, rtx));
-
-/* Emit one rtl instruction to store zero in specified rtx. */
-extern void emit_clr_insn PROTO((rtx));
-
-/* Emit one rtl insn to store 1 in specified rtx assuming it contains 0. */
-extern void emit_0_to_1_insn PROTO((rtx));
-
-/* Emit one rtl insn to compare two rtx's. */
-extern void emit_cmp_insn PROTO((rtx, rtx, enum rtx_code, rtx,
- enum machine_mode, int, int));
-
-/* Nonzero if a compare of mode MODE can be done straightforwardly
- (without splitting it into pieces). */
-extern int can_compare_p PROTO((enum machine_mode));
-
-/* Emit a library call comparison between floating point X and Y.
- COMPARISON is the rtl operator to compare with (EQ, NE, GT, etc.). */
-extern void emit_float_lib_cmp PROTO((rtx, rtx, enum rtx_code));
-
-/* Generate code to indirectly jump to a location given in the rtx LOC. */
-extern void emit_indirect_jump PROTO((rtx));
-
-/* Create but don't emit one rtl instruction to add one rtx into another.
- Modes must match; operands must meet the operation's predicates.
- Likewise for subtraction and for just copying.
- These do not call protect_from_queue; caller must do so. */
-extern rtx gen_add2_insn PROTO((rtx, rtx));
-extern rtx gen_sub2_insn PROTO((rtx, rtx));
-extern rtx gen_move_insn PROTO((rtx, rtx));
-extern int have_add2_insn PROTO((enum machine_mode));
-extern int have_sub2_insn PROTO((enum machine_mode));
-
-/* Return the INSN_CODE to use for an extend operation. */
-extern enum insn_code can_extend_p PROTO((enum machine_mode,
- enum machine_mode, int));
-
-/* Generate the body of an insn to extend Y (with mode MFROM)
- into X (with mode MTO). Do zero-extension if UNSIGNEDP is nonzero. */
-extern rtx gen_extend_insn PROTO((rtx, rtx, enum machine_mode,
- enum machine_mode, int));
-
-/* Initialize the tables that control conversion between fixed and
- floating values. */
-extern void init_fixtab PROTO((void));
-extern void init_floattab PROTO((void));
-
-/* Generate code for a FLOAT_EXPR. */
-extern void expand_float PROTO((rtx, rtx, int));
-
-/* Generate code for a FIX_EXPR. */
-extern void expand_fix PROTO((rtx, rtx, int));
-
-/* Call this once to initialize the contents of the optabs
- appropriately for the current target machine. */
-extern void init_optabs PROTO((void));
-
-/* Functions from expmed.c: */
-
-/* Arguments MODE, RTX: return an rtx for the negation of that value.
- May emit insns. */
-extern rtx negate_rtx PROTO((enum machine_mode, rtx));
-
-/* Expand a logical AND operation. */
-extern rtx expand_and PROTO((rtx, rtx, rtx));
-
-/* Emit a store-flag operation. */
-extern rtx emit_store_flag PROTO((rtx, enum rtx_code, rtx, rtx,
- enum machine_mode, int, int));
-
-/* Functions from loop.c: */
-
-/* Given a JUMP_INSN, return a description of the test being made. */
-extern rtx get_condition PROTO((rtx, rtx *));
-
-/* Functions from expr.c: */
-
-/* This is run once per compilation to set up which modes can be used
- directly in memory and to initialize the block move optab. */
-extern void init_expr_once PROTO((void));
-
-/* This is run at the start of compiling a function. */
-extern void init_expr PROTO((void));
-
-/* Use protect_from_queue to convert a QUEUED expression
- into something that you can put immediately into an instruction. */
-extern rtx protect_from_queue PROTO((rtx, int));
-
-/* Perform all the pending incrementations. */
-extern void emit_queue PROTO((void));
-
-/* Emit some rtl insns to move data between rtx's, converting machine modes.
- Both modes must be floating or both fixed. */
-extern void convert_move PROTO((rtx, rtx, int));
-
-/* Convert an rtx to specified machine mode and return the result. */
-extern rtx convert_to_mode PROTO((enum machine_mode, rtx, int));
-
-/* Convert an rtx to MODE from OLDMODE and return the result. */
-extern rtx convert_modes PROTO((enum machine_mode, enum machine_mode, rtx, int));
-
-/* Emit code to move a block Y to a block X. */
-extern void emit_block_move PROTO((rtx, rtx, rtx, int));
-
-/* Copy all or part of a value X into registers starting at REGNO.
- The number of registers to be filled is NREGS. */
-extern void move_block_to_reg PROTO((int, rtx, int, enum machine_mode));
-
-/* Copy all or part of a BLKmode value X out of registers starting at REGNO.
- The number of registers to be filled is NREGS. */
-extern void move_block_from_reg PROTO((int, rtx, int, int));
-
-/* Mark REG as holding a parameter for the next CALL_INSN. */
-extern void use_reg PROTO((rtx*, rtx));
-/* Mark NREGS consecutive regs, starting at REGNO, as holding parameters
- for the next CALL_INSN. */
-extern void use_regs PROTO((rtx*, int, int));
-
-/* Write zeros through the storage of OBJECT.
- If OBJECT has BLKmode, SIZE is its length in bytes. */
-extern void clear_storage PROTO((rtx, int));
-
-/* Emit insns to set X from Y. */
-extern rtx emit_move_insn PROTO((rtx, rtx));
-
-/* Emit insns to set X from Y, with no frills. */
-extern rtx emit_move_insn_1 PROTO ((rtx, rtx));
-
-/* Push a block of length SIZE (perhaps variable)
- and return an rtx to address the beginning of the block. */
-extern rtx push_block PROTO((rtx, int, int));
-
-/* Make an operand to push someting on the stack. */
-extern rtx gen_push_operand PROTO((void));
-
-#ifdef TREE_CODE
-/* Generate code to push something onto the stack, given its mode and type. */
-extern void emit_push_insn PROTO((rtx, enum machine_mode, tree, rtx, int,
- int, rtx, int, rtx, rtx));
-
-/* Emit library call. */
-extern void emit_library_call PVPROTO((rtx orgfun, int no_queue,
- enum machine_mode outmode, int nargs, ...));
-extern rtx emit_library_call_value PVPROTO((rtx orgfun, rtx value, int no_queue,
- enum machine_mode outmode, int nargs, ...));
-
-/* Expand an assignment that stores the value of FROM into TO. */
-extern rtx expand_assignment PROTO((tree, tree, int, int));
-
-/* Generate code for computing expression EXP,
- and storing the value into TARGET.
- If SUGGEST_REG is nonzero, copy the value through a register
- and return that register, if that is possible. */
-extern rtx store_expr PROTO((tree, rtx, int));
-#endif
-
-/* Given an rtx that may include add and multiply operations,
- generate them as insns and return a pseudo-reg containing the value.
- Useful after calling expand_expr with 1 as sum_ok. */
-extern rtx force_operand PROTO((rtx, rtx));
-
-#ifdef TREE_CODE
-/* Generate code for computing expression EXP.
- An rtx for the computed value is returned. The value is never null.
- In the case of a void EXP, const0_rtx is returned. */
-extern rtx expand_expr PROTO((tree, rtx, enum machine_mode,
- enum expand_modifier));
-#endif
-
-/* At the start of a function, record that we have no previously-pushed
- arguments waiting to be popped. */
-extern void init_pending_stack_adjust PROTO((void));
-
-/* When exiting from function, if safe, clear out any pending stack adjust
- so the adjustment won't get done. */
-extern void clear_pending_stack_adjust PROTO((void));
-
-/* Pop any previously-pushed arguments that have not been popped yet. */
-extern void do_pending_stack_adjust PROTO((void));
-
-#ifdef TREE_CODE
-/* Expand all cleanups up to OLD_CLEANUPS. */
-extern void expand_cleanups_to PROTO((tree));
-
-/* Generate code to evaluate EXP and jump to LABEL if the value is zero. */
-extern void jumpifnot PROTO((tree, rtx));
-
-/* Generate code to evaluate EXP and jump to LABEL if the value is nonzero. */
-extern void jumpif PROTO((tree, rtx));
-
-/* Generate code to evaluate EXP and jump to IF_FALSE_LABEL if
- the result is zero, or IF_TRUE_LABEL if the result is one. */
-extern void do_jump PROTO((tree, rtx, rtx));
-#endif
-
-/* Generate rtl to compare two rtx's, will call emit_cmp_insn. */
-extern rtx compare_from_rtx PROTO((rtx, rtx, enum rtx_code, int,
- enum machine_mode, rtx, int));
-
-/* Generate a tablejump instruction (used for switch statements). */
-extern void do_tablejump PROTO((rtx, enum machine_mode, rtx, rtx, rtx));
-
-#ifdef TREE_CODE
-/* rtl.h and tree.h were included. */
-/* Return an rtx for the size in bytes of the value of an expr. */
-extern rtx expr_size PROTO((tree));
-
-extern rtx lookup_static_chain PROTO((tree));
-
-/* Convert a stack slot address ADDR valid in function FNDECL
- into an address valid in this function (using a static chain). */
-extern rtx fix_lexical_addr PROTO((rtx, tree));
-
-/* Return the address of the trampoline for entering nested fn FUNCTION. */
-extern rtx trampoline_address PROTO((tree));
-
-/* Return an rtx that refers to the value returned by a function
- in its original home. This becomes invalid if any more code is emitted. */
-extern rtx hard_function_value PROTO((tree, tree));
-
-extern rtx prepare_call_address PROTO((rtx, tree, rtx *, int));
-
-extern rtx expand_call PROTO((tree, rtx, int));
-
-extern rtx expand_shift PROTO((enum tree_code, enum machine_mode, rtx, tree, rtx, int));
-extern rtx expand_divmod PROTO((int, enum tree_code, enum machine_mode, rtx, rtx, rtx, int));
-extern void locate_and_pad_parm PROTO((enum machine_mode, tree, int, tree, struct args_size *, struct args_size *, struct args_size *));
-extern rtx expand_inline_function PROTO((tree, tree, rtx, int, tree, rtx));
-/* Return the CODE_LABEL rtx for a LABEL_DECL, creating it if necessary. */
-extern rtx label_rtx PROTO((tree));
-#endif
-
-/* Indicate how an input argument register was promoted. */
-extern rtx promoted_input_arg PROTO((int, enum machine_mode *, int *));
-
-/* Return an rtx like arg but sans any constant terms.
- Returns the original rtx if it has no constant terms.
- The constant terms are added and stored via a second arg. */
-extern rtx eliminate_constant_term PROTO((rtx, rtx *));
-
-/* Convert arg to a valid memory address for specified machine mode,
- by emitting insns to perform arithmetic if nec. */
-extern rtx memory_address PROTO((enum machine_mode, rtx));
-
-/* Like `memory_address' but pretent `flag_force_addr' is 0. */
-extern rtx memory_address_noforce PROTO((enum machine_mode, rtx));
-
-/* Return a memory reference like MEMREF, but with its mode changed
- to MODE and its address changed to ADDR.
- (VOIDmode means don't change the mode.
- NULL for ADDR means don't change the address.) */
-extern rtx change_address PROTO((rtx, enum machine_mode, rtx));
-
-/* Return a memory reference like MEMREF, but which is known to have a
- valid address. */
-
-extern rtx validize_mem PROTO((rtx));
-
-/* Assemble the static constant template for function entry trampolines. */
-extern rtx assemble_trampoline_template PROTO((void));
-
-/* Return 1 if two rtx's are equivalent in structure and elements. */
-extern int rtx_equal_p PROTO((rtx, rtx));
-
-/* Given rtx, return new rtx whose address won't be affected by
- any side effects. It has been copied to a new temporary reg. */
-extern rtx stabilize PROTO((rtx));
-
-/* Given an rtx, copy all regs it refers to into new temps
- and return a modified copy that refers to the new temps. */
-extern rtx copy_all_regs PROTO((rtx));
-
-/* Copy given rtx to a new temp reg and return that. */
-extern rtx copy_to_reg PROTO((rtx));
-
-/* Like copy_to_reg but always make the reg Pmode. */
-extern rtx copy_addr_to_reg PROTO((rtx));
-
-/* Like copy_to_reg but always make the reg the specified mode MODE. */
-extern rtx copy_to_mode_reg PROTO((enum machine_mode, rtx));
-
-/* Copy given rtx to given temp reg and return that. */
-extern rtx copy_to_suggested_reg PROTO((rtx, rtx, enum machine_mode));
-
-/* Copy a value to a register if it isn't already a register.
- Args are mode (in case value is a constant) and the value. */
-extern rtx force_reg PROTO((enum machine_mode, rtx));
-
-/* Return given rtx, copied into a new temp reg if it was in memory. */
-extern rtx force_not_mem PROTO((rtx));
-
-#ifdef TREE_CODE
-/* Return mode and signedness to use when object is promoted. */
-extern enum machine_mode promote_mode PROTO((tree, enum machine_mode,
- int *, int));
-#endif
-
-/* Remove some bytes from the stack. An rtx says how many. */
-extern void adjust_stack PROTO((rtx));
-
-/* Add some bytes to the stack. An rtx says how many. */
-extern void anti_adjust_stack PROTO((rtx));
-
-/* This enum is used for the following two functions. */
-enum save_level {SAVE_BLOCK, SAVE_FUNCTION, SAVE_NONLOCAL};
-
-/* Save the stack pointer at the specified level. */
-extern void emit_stack_save PROTO((enum save_level, rtx *, rtx));
-
-/* Restore the stack pointer from a save area of the specified level. */
-extern void emit_stack_restore PROTO((enum save_level, rtx, rtx));
-
-/* Allocate some space on the stack dynamically and return its address. An rtx
- says how many bytes. */
-extern rtx allocate_dynamic_stack_space PROTO((rtx, rtx, int));
-
-/* Emit code to copy function value to a new temp reg and return that reg. */
-extern rtx function_value ();
-
-/* Return an rtx that refers to the value returned by a library call
- in its original home. This becomes invalid if any more code is emitted. */
-extern rtx hard_libcall_value PROTO((enum machine_mode));
-
-/* Given an rtx, return an rtx for a value rounded up to a multiple
- of STACK_BOUNDARY / BITS_PER_UNIT. */
-extern rtx round_push PROTO((rtx));
-
-extern void emit_block_move PROTO((rtx, rtx, rtx, int));
-
-extern rtx store_bit_field PROTO((rtx, int, int, enum machine_mode, rtx, int, int));
-extern rtx extract_bit_field PROTO((rtx, int, int, int, rtx, enum machine_mode, enum machine_mode, int, int));
-extern rtx expand_mult PROTO((enum machine_mode, rtx, rtx, rtx, int));
-extern rtx expand_mult_add PROTO((rtx, rtx, rtx, rtx,enum machine_mode, int));
-
-extern rtx assemble_static_space PROTO((int));
-
-/* Hook called by expand_expr for language-specific tree codes.
- It is up to the language front end to install a hook
- if it has any such codes that expand_expr needs to know about. */
-extern rtx (*lang_expand_expr) ();
diff --git a/gnu/usr.bin/cc/include/flags.h b/gnu/usr.bin/cc/include/flags.h
deleted file mode 100644
index 07ea73490eec..000000000000
--- a/gnu/usr.bin/cc/include/flags.h
+++ /dev/null
@@ -1,359 +0,0 @@
-/* Compilation switch flag definitions for GNU CC.
- Copyright (C) 1987, 1988, 1994 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* Name of the input .c file being compiled. */
-extern char *main_input_filename;
-
-enum debug_info_type
-{
- NO_DEBUG, /* Write no debug info. */
- DBX_DEBUG, /* Write BSD .stabs for DBX (using dbxout.c). */
- SDB_DEBUG, /* Write COFF for (old) SDB (using sdbout.c). */
- DWARF_DEBUG, /* Write Dwarf debug info (using dwarfout.c). */
- XCOFF_DEBUG /* Write IBM/Xcoff debug info (using dbxout.c). */
-};
-
-/* Specify which kind of debugging info to generate. */
-extern enum debug_info_type write_symbols;
-
-enum debug_info_level
-{
- DINFO_LEVEL_NONE, /* Write no debugging info. */
- DINFO_LEVEL_TERSE, /* Write minimal info to support tracebacks only. */
- DINFO_LEVEL_NORMAL, /* Write info for all declarations (and line table). */
- DINFO_LEVEL_VERBOSE /* Write normal info plus #define/#undef info. */
-};
-
-/* Specify how much debugging info to generate. */
-extern enum debug_info_level debug_info_level;
-
-/* Nonzero means use GNU-only extensions in the generated symbolic
- debugging information. */
-extern int use_gnu_debug_info_extensions;
-
-/* Nonzero means do optimizations. -opt. */
-
-extern int optimize;
-
-/* Nonzero means do stupid register allocation. -noreg.
- Currently, this is 1 if `optimize' is 0. */
-
-extern int obey_regdecls;
-
-/* Don't print functions as they are compiled and don't print
- times taken by the various passes. -quiet. */
-
-extern int quiet_flag;
-
-/* Don't print warning messages. -w. */
-
-extern int inhibit_warnings;
-
-/* Do print extra warnings (such as for uninitialized variables). -W. */
-
-extern int extra_warnings;
-
-/* Nonzero to warn about unused local variables. */
-
-extern int warn_unused;
-
-/* Nonzero means warn if inline function is too large. */
-
-extern int warn_inline;
-
-/* Nonzero to warn about variables used before they are initialized. */
-
-extern int warn_uninitialized;
-
-/* Nonzero means warn about all declarations which shadow others. */
-
-extern int warn_shadow;
-
-/* Warn if a switch on an enum fails to have a case for every enum value. */
-
-extern int warn_switch;
-
-/* Nonzero means warn about function definitions that default the return type
- or that use a null return and have a return-type other than void. */
-
-extern int warn_return_type;
-
-/* Nonzero means warn about pointer casts that increase the required
- alignment of the target type (and might therefore lead to a crash
- due to a misaligned access). */
-
-extern int warn_cast_align;
-
-/* Nonzero means warn that dbx info for template class methods isn't fully
- supported yet. */
-
-extern int warn_template_debugging;
-
-/* Nonzero means warn about any identifiers that match in the first N
- characters. The value N is in `id_clash_len'. */
-
-extern int warn_id_clash;
-extern unsigned id_clash_len;
-
-/* Nonzero means warn about any objects definitions whose size is larger
- than N bytes. Also want about function definitions whose returned
- values are larger than N bytes. The value N is in `larger_than_size'. */
-
-extern int warn_larger_than;
-extern unsigned larger_than_size;
-
-/* Warn if a function returns an aggregate,
- since there are often incompatible calling conventions for doing this. */
-
-extern int warn_aggregate_return;
-
-/* Nonzero if generating code to do profiling. */
-
-extern int profile_flag;
-
-/* Nonzero if generating code to do profiling on the basis of basic blocks. */
-
-extern int profile_block_flag;
-
-/* Nonzero for -pedantic switch: warn about anything
- that standard C forbids. */
-
-extern int pedantic;
-
-/* Temporarily suppress certain warnings.
- This is set while reading code from a system header file. */
-
-extern int in_system_header;
-
-/* Nonzero for -dp: annotate the assembly with a comment describing the
- pattern and alternative used. */
-
-extern int flag_print_asm_name;
-
-/* Now the symbols that are set with `-f' switches. */
-
-/* Nonzero means `char' should be signed. */
-
-extern int flag_signed_char;
-
-/* Nonzero means give an enum type only as many bytes as it needs. */
-
-extern int flag_short_enums;
-
-/* Nonzero for -fcaller-saves: allocate values in regs that need to
- be saved across function calls, if that produces overall better code.
- Optional now, so people can test it. */
-
-extern int flag_caller_saves;
-
-/* Nonzero for -fpcc-struct-return: return values the same way PCC does. */
-
-extern int flag_pcc_struct_return;
-
-/* Nonzero for -fforce-mem: load memory value into a register
- before arithmetic on it. This makes better cse but slower compilation. */
-
-extern int flag_force_mem;
-
-/* Nonzero for -fforce-addr: load memory address into a register before
- reference to memory. This makes better cse but slower compilation. */
-
-extern int flag_force_addr;
-
-/* Nonzero for -fdefer-pop: don't pop args after each function call;
- instead save them up to pop many calls' args with one insns. */
-
-extern int flag_defer_pop;
-
-/* Nonzero for -ffloat-store: don't allocate floats and doubles
- in extended-precision registers. */
-
-extern int flag_float_store;
-
-/* Nonzero enables strength-reduction in loop.c. */
-
-extern int flag_strength_reduce;
-
-/* Nonzero enables loop unrolling in unroll.c. Only loops for which the
- number of iterations can be calculated at compile-time (UNROLL_COMPLETELY,
- UNROLL_MODULO) or at run-time (preconditioned to be UNROLL_MODULO) are
- unrolled. */
-
-extern int flag_unroll_loops;
-
-/* Nonzero enables loop unrolling in unroll.c. All loops are unrolled.
- This is generally not a win. */
-
-extern int flag_unroll_all_loops;
-
-/* Nonzero for -fcse-follow-jumps:
- have cse follow jumps to do a more extensive job. */
-
-extern int flag_cse_follow_jumps;
-
-/* Nonzero for -fcse-skip-blocks:
- have cse follow a branch around a block. */
-
-extern int flag_cse_skip_blocks;
-
-/* Nonzero for -fexpensive-optimizations:
- perform miscellaneous relatively-expensive optimizations. */
-extern int flag_expensive_optimizations;
-
-/* Nonzero for -fwritable-strings:
- store string constants in data segment and don't uniquize them. */
-
-extern int flag_writable_strings;
-
-/* Nonzero means don't put addresses of constant functions in registers.
- Used for compiling the Unix kernel, where strange substitutions are
- done on the assembly output. */
-
-extern int flag_no_function_cse;
-
-/* Nonzero for -fomit-frame-pointer:
- don't make a frame pointer in simple functions that don't require one. */
-
-extern int flag_omit_frame_pointer;
-
-/* Nonzero to inhibit use of define_optimization peephole opts. */
-
-extern int flag_no_peephole;
-
-/* Nonzero means all references through pointers are volatile. */
-
-extern int flag_volatile;
-
-/* Nonzero means treat all global and extern variables as global. */
-
-extern int flag_volatile_global;
-
-/* Nonzero allows GCC to violate some IEEE or ANSI rules regarding math
- operations in the interest of optimization. For example it allows
- GCC to assume arguments to sqrt are nonnegative numbers, allowing
- faster code for sqrt to be generated. */
-
-extern int flag_fast_math;
-
-/* Nonzero means make functions that look like good inline candidates
- go inline. */
-
-extern int flag_inline_functions;
-
-/* Nonzero for -fkeep-inline-functions: even if we make a function
- go inline everywhere, keep its definition around for debugging
- purposes. */
-
-extern int flag_keep_inline_functions;
-
-/* Nonzero means that functions declared `inline' will be treated
- as `static'. Prevents generation of zillions of copies of unused
- static inline functions; instead, `inlines' are written out
- only when actually used. Used in conjunction with -g. Also
- does the right thing with #pragma interface. */
-
-extern int flag_no_inline;
-
-/* Nonzero if we are only using compiler to check syntax errors. */
-
-extern int flag_syntax_only;
-
-/* Nonzero means we should save auxiliary info into a .X file. */
-
-extern int flag_gen_aux_info;
-
-/* Nonzero means make the text shared if supported. */
-
-extern int flag_shared_data;
-
-/* flag_schedule_insns means schedule insns within basic blocks (before
- local_alloc).
- flag_schedule_insns_after_reload means schedule insns after
- global_alloc. */
-
-extern int flag_schedule_insns;
-extern int flag_schedule_insns_after_reload;
-
-/* Nonzero means put things in delayed-branch slots if supported. */
-
-extern int flag_delayed_branch;
-
-/* Nonzero means to run cleanups after CALL_EXPRs. */
-
-extern int flag_short_temps;
-
-/* Nonzero means pretend it is OK to examine bits of target floats,
- even if that isn't true. The resulting code will have incorrect constants,
- but the same series of instructions that the native compiler would make. */
-
-extern int flag_pretend_float;
-
-/* Nonzero means change certain warnings into errors.
- Usually these are warnings about failure to conform to some standard. */
-
-extern int flag_pedantic_errors;
-
-/* Nonzero means generate position-independent code.
- This is not fully implemented yet. */
-
-extern int flag_pic;
-
-/* Nonzero means place uninitialized global data in the bss section. */
-
-extern int flag_no_common;
-
-/* -finhibit-size-directive inhibits output of .size for ELF.
- This is used only for compiling crtstuff.c,
- and it may be extended to other effects
- needed for crtstuff.c on other systems. */
-extern int flag_inhibit_size_directive;
-
-/* -fverbose-asm causes extra commentary information to be produced in
- the generated assembly code (to make it more readable). This option
- is generally only of use to those who actually need to read the
- generated assembly code (perhaps while debugging the compiler itself). */
-
-extern int flag_verbose_asm;
-
-/* -fgnu-linker specifies use of the GNU linker for initializations.
- -fno-gnu-linker says that collect will be used. */
-extern int flag_gnu_linker;
-
-/* Other basic status info about current function. */
-
-/* Nonzero means current function must be given a frame pointer.
- Set in stmt.c if anything is allocated on the stack there.
- Set in reload1.c if anything is allocated on the stack there. */
-
-extern int frame_pointer_needed;
-
-/* Set nonzero if jump_optimize finds that control falls through
- at the end of the function. */
-
-extern int can_reach_end;
-
-/* Nonzero if function being compiled receives nonlocal gotos
- from nested functions. */
-
-extern int current_function_has_nonlocal_label;
-
-/* Nonzero if function being compiled has nonlocal gotos to parent
- function. */
-
-extern int current_function_has_nonlocal_goto;
diff --git a/gnu/usr.bin/cc/include/function.h b/gnu/usr.bin/cc/include/function.h
deleted file mode 100644
index b37a59ace381..000000000000
--- a/gnu/usr.bin/cc/include/function.h
+++ /dev/null
@@ -1,216 +0,0 @@
-/* Structure for saving state for a nested function.
- Copyright (C) 1989, 1992, 1993, 1994 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-
-#ifndef NULL_TREE
-#define tree int *
-#endif
-#ifndef GET_CODE
-#define rtx int *
-#endif
-
-struct var_refs_queue
- {
- rtx modified;
- enum machine_mode promoted_mode;
- int unsignedp;
- struct var_refs_queue *next;
- };
-
-/* Stack of pending (incomplete) sequences saved by `start_sequence'.
- Each element describes one pending sequence.
- The main insn-chain is saved in the last element of the chain,
- unless the chain is empty. */
-
-struct sequence_stack
-{
- /* First and last insns in the chain of the saved sequence. */
- rtx first, last;
- tree sequence_rtl_expr;
- struct sequence_stack *next;
-};
-
-extern struct sequence_stack *sequence_stack;
-
-/* This structure can save all the important global and static variables
- describing the status of the current function. */
-
-struct function
-{
- struct function *next;
-
- /* For function.c. */
- char *name;
- tree decl;
- int pops_args;
- int returns_struct;
- int returns_pcc_struct;
- int needs_context;
- int calls_setjmp;
- int calls_longjmp;
- int calls_alloca;
- int has_nonlocal_label;
- int has_nonlocal_goto;
- rtx nonlocal_goto_handler_slot;
- rtx nonlocal_goto_stack_level;
- tree nonlocal_labels;
- int args_size;
- int pretend_args_size;
- rtx arg_offset_rtx;
- int varargs;
- int max_parm_reg;
- rtx *parm_reg_stack_loc;
- int outgoing_args_size;
- rtx return_rtx;
- rtx cleanup_label;
- rtx return_label;
- rtx save_expr_regs;
- rtx stack_slot_list;
- rtx parm_birth_insn;
- int frame_offset;
- rtx tail_recursion_label;
- rtx tail_recursion_reentry;
- rtx internal_arg_pointer;
- rtx arg_pointer_save_area;
- tree rtl_expr_chain;
- rtx last_parm_insn;
- tree context_display;
- tree trampoline_list;
- int function_call_count;
- struct temp_slot *temp_slots;
- int temp_slot_level;
- /* This slot is initialized as 0 and is added to
- during the nested function. */
- struct var_refs_queue *fixup_var_refs_queue;
-
- /* For stmt.c */
- struct nesting *block_stack;
- struct nesting *stack_block_stack;
- struct nesting *cond_stack;
- struct nesting *loop_stack;
- struct nesting *case_stack;
- struct nesting *nesting_stack;
- int nesting_depth;
- int block_start_count;
- tree last_expr_type;
- rtx last_expr_value;
- int expr_stmts_for_value;
- char *emit_filename;
- int emit_lineno;
- struct goto_fixup *goto_fixup_chain;
-
- /* For expr.c. */
- int pending_stack_adjust;
- int inhibit_defer_pop;
- tree cleanups_this_call;
- rtx saveregs_value;
- rtx apply_args_value;
- rtx forced_labels;
-
- /* For emit-rtl.c. */
- int reg_rtx_no;
- int first_label_num;
- rtx first_insn;
- rtx last_insn;
- tree sequence_rtl_expr;
- struct sequence_stack *sequence_stack;
- int cur_insn_uid;
- int last_linenum;
- char *last_filename;
- char *regno_pointer_flag;
- int regno_pointer_flag_length;
- rtx *regno_reg_rtx;
-
- /* For stor-layout.c. */
- tree permanent_type_chain;
- tree temporary_type_chain;
- tree permanent_type_end;
- tree temporary_type_end;
- tree pending_sizes;
- int immediate_size_expand;
-
- /* For tree.c. */
- int all_types_permanent;
- struct momentary_level *momentary_stack;
- char *maybepermanent_firstobj;
- char *temporary_firstobj;
- char *momentary_firstobj;
- char *momentary_function_firstobj;
- struct obstack *current_obstack;
- struct obstack *function_obstack;
- struct obstack *function_maybepermanent_obstack;
- struct obstack *expression_obstack;
- struct obstack *saveable_obstack;
- struct obstack *rtl_obstack;
-
- /* For integrate.c. */
- int uses_const_pool;
-
- /* For md files. */
- int uses_pic_offset_table;
- /* tm.h can use this to store whatever it likes. */
- struct machine_function *machine;
-
- /* For reorg. */
- rtx epilogue_delay_list;
-
- /* For varasm. */
- struct constant_descriptor **const_rtx_hash_table;
- struct pool_sym **const_rtx_sym_hash_table;
- struct pool_constant *first_pool, *last_pool;
- int pool_offset;
-};
-
-/* The FUNCTION_DECL for an inline function currently being expanded. */
-extern tree inline_function_decl;
-
-/* Label that will go on function epilogue.
- Jumping to this label serves as a "return" instruction
- on machines which require execution of the epilogue on all returns. */
-extern rtx return_label;
-
-/* List (chain of EXPR_LISTs) of all stack slots in this function.
- Made for the sake of unshare_all_rtl. */
-extern rtx stack_slot_list;
-
-/* Given a function decl for a containing function,
- return the `struct function' for it. */
-struct function *find_function_data PROTO((tree));
-
-/* Pointer to chain of `struct function' for containing functions. */
-extern struct function *outer_function_chain;
-
-/* Put all this function's BLOCK nodes into a vector and return it.
- Also store in each NOTE for the beginning or end of a block
- the index of that block in the vector. */
-extern tree *identify_blocks PROTO((tree, rtx));
-
-/* These variables hold pointers to functions to
- save and restore machine-specific data,
- in push_function_context and pop_function_context. */
-extern void (*save_machine_status) ();
-extern void (*restore_machine_status) ();
-
-#ifdef rtx
-#undef rtx
-#endif
-
-#ifdef tree
-#undef tree
-#endif
diff --git a/gnu/usr.bin/cc/include/gbl-ctors.h b/gnu/usr.bin/cc/include/gbl-ctors.h
deleted file mode 100644
index f673fb9bdff0..000000000000
--- a/gnu/usr.bin/cc/include/gbl-ctors.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/* Definitions relating to the special __do_global_init function used
- for getting g++ file-scope static objects constructed. This file
- will get included either by libgcc2.c (for systems that don't support
- a .init section) or by crtstuff.c (for those that do).
-
- Written by Ron Guilmette (rfg@netcom.com)
-
-Copyright (C) 1991 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* This file contains definitions and declarations of things
- relating to the normal start-up-time invocation of C++
- file-scope static object constructors. These declarations
- and definitions are used by *both* libgcc2.c and by crtstuff.c.
-
- Note that this file should only be compiled with GCC.
-*/
-
-#ifdef HAVE_ATEXIT
-extern void atexit (void (*) (void));
-#define ON_EXIT(FUNC,ARG) atexit ((FUNC))
-#else
-#ifdef sun
-extern void on_exit (void*, void*);
-#define ON_EXIT(FUNC,ARG) on_exit ((FUNC), (ARG))
-#endif
-#endif
-
-/* Declare a pointer to void function type. */
-
-typedef void (*func_ptr) (void);
-
-/* Declare the set of symbols use as begin and end markers for the lists
- of global object constructors and global object destructors. */
-
-extern func_ptr __CTOR_LIST__[];
-extern func_ptr __DTOR_LIST__[];
-
-/* Declare the routine which need to get invoked at program exit time. */
-
-extern void __do_global_dtors ();
-
-/* Define a macro with the code which needs to be executed at program
- start-up time. This macro is used in two places in crtstuff.c (for
- systems which support a .init section) and in one place in libgcc2.c
- (for those system which do *not* support a .init section). For all
- three places where this code might appear, it must be identical, so
- we define it once here as a macro to avoid various instances getting
- out-of-sync with one another. */
-
-/* Some systems place the number of pointers
- in the first word of the table.
- On other systems, that word is -1.
- In all cases, the table is null-terminated.
- If the length is not recorded, count up to the null. */
-
-/* Some systems use a different strategy for finding the ctors.
- For example, svr3. */
-#ifndef DO_GLOBAL_CTORS_BODY
-#define DO_GLOBAL_CTORS_BODY \
-do { \
- unsigned long nptrs = (unsigned long) __CTOR_LIST__[0]; \
- unsigned i; \
- if (nptrs == -1) \
- for (nptrs = 0; __CTOR_LIST__[nptrs + 1] != 0; nptrs++); \
- for (i = nptrs; i >= 1; i--) \
- __CTOR_LIST__[i] (); \
-} while (0)
-#endif
-
diff --git a/gnu/usr.bin/cc/include/glimits.h b/gnu/usr.bin/cc/include/glimits.h
deleted file mode 100644
index ff25a97ace3d..000000000000
--- a/gnu/usr.bin/cc/include/glimits.h
+++ /dev/null
@@ -1,93 +0,0 @@
-#ifndef _LIMITS_H___
-#ifndef _MACH_MACHLIMITS_H_
-
-/* _MACH_MACHLIMITS_H_ is used on OSF/1. */
-#define _LIMITS_H___
-#define _MACH_MACHLIMITS_H_
-
-/* Number of bits in a `char'. */
-#undef CHAR_BIT
-#define CHAR_BIT 8
-
-/* Maximum length of a multibyte character. */
-#ifndef MB_LEN_MAX
-#define MB_LEN_MAX 1
-#endif
-
-/* Minimum and maximum values a `signed char' can hold. */
-#undef SCHAR_MIN
-#define SCHAR_MIN (-128)
-#undef SCHAR_MAX
-#define SCHAR_MAX 127
-
-/* Maximum value an `unsigned char' can hold. (Minimum is 0). */
-#undef UCHAR_MAX
-#define UCHAR_MAX 255
-
-/* Minimum and maximum values a `char' can hold. */
-#ifdef __CHAR_UNSIGNED__
-#undef CHAR_MIN
-#define CHAR_MIN 0
-#undef CHAR_MAX
-#define CHAR_MAX 255
-#else
-#undef CHAR_MIN
-#define CHAR_MIN (-128)
-#undef CHAR_MAX
-#define CHAR_MAX 127
-#endif
-
-/* Minimum and maximum values a `signed short int' can hold. */
-#undef SHRT_MIN
-#define SHRT_MIN (-32768)
-#undef SHRT_MAX
-#define SHRT_MAX 32767
-
-/* Maximum value an `unsigned short int' can hold. (Minimum is 0). */
-#undef USHRT_MAX
-#define USHRT_MAX 65535
-
-/* Minimum and maximum values a `signed int' can hold. */
-#ifndef __INT_MAX__
-#define __INT_MAX__ 2147483647
-#endif
-#undef INT_MIN
-#define INT_MIN (-INT_MAX-1)
-#undef INT_MAX
-#define INT_MAX __INT_MAX__
-
-/* Maximum value an `unsigned int' can hold. (Minimum is 0). */
-#undef UINT_MAX
-#define UINT_MAX (INT_MAX * 2U + 1)
-
-/* Minimum and maximum values a `signed long int' can hold.
- (Same as `int'). */
-#ifndef __LONG_MAX__
-#define __LONG_MAX__ 2147483647L
-#endif
-#undef LONG_MIN
-#define LONG_MIN (-LONG_MAX-1)
-#undef LONG_MAX
-#define LONG_MAX __LONG_MAX__
-
-/* Maximum value an `unsigned long int' can hold. (Minimum is 0). */
-#undef ULONG_MAX
-#define ULONG_MAX (LONG_MAX * 2UL + 1)
-
-#if defined (__GNU_LIBRARY__) ? defined (__USE_GNU) : !defined (__STRICT_ANSI__)
-/* Minimum and maximum values a `signed long long int' can hold. */
-#ifndef __LONG_LONG_MAX__
-#define __LONG_LONG_MAX__ 9223372036854775807LL
-#endif
-#undef LONG_LONG_MIN
-#define LONG_LONG_MIN (-LONG_LONG_MAX-1)
-#undef LONG_LONG_MAX
-#define LONG_LONG_MAX __LONG_LONG_MAX__
-
-/* Maximum value an `unsigned long long int' can hold. (Minimum is 0). */
-#undef ULONG_LONG_MAX
-#define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1)
-#endif
-
-#endif /* _MACH_MACHLIMITS_H_ */
-#endif /* _LIMITS_H___ */
diff --git a/gnu/usr.bin/cc/include/hard-reg-set.h b/gnu/usr.bin/cc/include/hard-reg-set.h
deleted file mode 100644
index 66111d550d0c..000000000000
--- a/gnu/usr.bin/cc/include/hard-reg-set.h
+++ /dev/null
@@ -1,270 +0,0 @@
-/* Sets (bit vectors) of hard registers, and operations on them.
- Copyright (C) 1987, 1992, 1994 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-
-/* Define the type of a set of hard registers. */
-
-/* HARD_REG_ELT_TYPE is a typedef of the unsigned integral type which
- will be used for hard reg sets, either alone or in an array.
-
- If HARD_REG_SET is a macro, its definition is HARD_REG_ELT_TYPE,
- and it has enough bits to represent all the target machine's hard
- registers. Otherwise, it is a typedef for a suitably sized array
- of HARD_REG_ELT_TYPEs. HARD_REG_SET_LONGS is defined as how many.
-
- Note that lots of code assumes that the first part of a regset is
- the same format as a HARD_REG_SET. To help make sure this is true,
- we only try the widest integer mode (HOST_WIDE_INT) instead of all the
- smaller types. This approach loses only if there are a very few
- registers and then only in the few cases where we have an array of
- HARD_REG_SETs, so it needn't be as complex as it used to be. */
-
-typedef unsigned HOST_WIDE_INT HARD_REG_ELT_TYPE;
-
-#if FIRST_PSEUDO_REGISTER <= HOST_BITS_PER_WIDE_INT
-
-#define HARD_REG_SET HARD_REG_ELT_TYPE
-
-#else
-
-#define HARD_REG_SET_LONGS \
- ((FIRST_PSEUDO_REGISTER + HOST_BITS_PER_WIDE_INT - 1) \
- / HOST_BITS_PER_WIDE_INT)
-typedef HARD_REG_ELT_TYPE HARD_REG_SET[HARD_REG_SET_LONGS];
-
-#endif
-
-/* HARD_CONST is used to cast a constant to the appropriate type
- for use with a HARD_REG_SET. */
-
-#define HARD_CONST(X) ((HARD_REG_ELT_TYPE) (X))
-
-/* Define macros SET_HARD_REG_BIT, CLEAR_HARD_REG_BIT and TEST_HARD_REG_BIT
- to set, clear or test one bit in a hard reg set of type HARD_REG_SET.
- All three take two arguments: the set and the register number.
-
- In the case where sets are arrays of longs, the first argument
- is actually a pointer to a long.
-
- Define two macros for initializing a set:
- CLEAR_HARD_REG_SET and SET_HARD_REG_SET.
- These take just one argument.
-
- Also define macros for copying hard reg sets:
- COPY_HARD_REG_SET and COMPL_HARD_REG_SET.
- These take two arguments TO and FROM; they read from FROM
- and store into TO. COMPL_HARD_REG_SET complements each bit.
-
- Also define macros for combining hard reg sets:
- IOR_HARD_REG_SET and AND_HARD_REG_SET.
- These take two arguments TO and FROM; they read from FROM
- and combine bitwise into TO. Define also two variants
- IOR_COMPL_HARD_REG_SET and AND_COMPL_HARD_REG_SET
- which use the complement of the set FROM.
-
- Also define GO_IF_HARD_REG_SUBSET (X, Y, TO):
- if X is a subset of Y, go to TO.
-*/
-
-#ifdef HARD_REG_SET
-
-#define SET_HARD_REG_BIT(SET, BIT) \
- ((SET) |= HARD_CONST (1) << (BIT))
-#define CLEAR_HARD_REG_BIT(SET, BIT) \
- ((SET) &= ~(HARD_CONST (1) << (BIT)))
-#define TEST_HARD_REG_BIT(SET, BIT) \
- ((SET) & (HARD_CONST (1) << (BIT)))
-
-#define CLEAR_HARD_REG_SET(TO) ((TO) = HARD_CONST (0))
-#define SET_HARD_REG_SET(TO) ((TO) = ~ HARD_CONST (0))
-
-#define COPY_HARD_REG_SET(TO, FROM) ((TO) = (FROM))
-#define COMPL_HARD_REG_SET(TO, FROM) ((TO) = ~(FROM))
-
-#define IOR_HARD_REG_SET(TO, FROM) ((TO) |= (FROM))
-#define IOR_COMPL_HARD_REG_SET(TO, FROM) ((TO) |= ~ (FROM))
-#define AND_HARD_REG_SET(TO, FROM) ((TO) &= (FROM))
-#define AND_COMPL_HARD_REG_SET(TO, FROM) ((TO) &= ~ (FROM))
-
-#define GO_IF_HARD_REG_SUBSET(X,Y,TO) if (HARD_CONST (0) == ((X) & ~(Y))) goto TO
-
-#define GO_IF_HARD_REG_EQUAL(X,Y,TO) if ((X) == (Y)) goto TO
-
-#else
-
-#define UHOST_BITS_PER_WIDE_INT ((unsigned) HOST_BITS_PER_WIDE_INT)
-
-#define SET_HARD_REG_BIT(SET, BIT) \
- ((SET)[(BIT) / UHOST_BITS_PER_WIDE_INT] \
- |= HARD_CONST (1) << ((BIT) % UHOST_BITS_PER_WIDE_INT))
-
-#define CLEAR_HARD_REG_BIT(SET, BIT) \
- ((SET)[(BIT) / UHOST_BITS_PER_WIDE_INT] \
- &= ~(HARD_CONST (1) << ((BIT) % UHOST_BITS_PER_WIDE_INT)))
-
-#define TEST_HARD_REG_BIT(SET, BIT) \
- ((SET)[(BIT) / UHOST_BITS_PER_WIDE_INT] \
- & (HARD_CONST (1) << ((BIT) % UHOST_BITS_PER_WIDE_INT)))
-
-#define CLEAR_HARD_REG_SET(TO) \
-do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO); \
- register int i; \
- for (i = 0; i < HARD_REG_SET_LONGS; i++) \
- *scan_tp_++ = 0; } while (0)
-
-#define SET_HARD_REG_SET(TO) \
-do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO); \
- register int i; \
- for (i = 0; i < HARD_REG_SET_LONGS; i++) \
- *scan_tp_++ = -1; } while (0)
-
-#define COPY_HARD_REG_SET(TO, FROM) \
-do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \
- register int i; \
- for (i = 0; i < HARD_REG_SET_LONGS; i++) \
- *scan_tp_++ = *scan_fp_++; } while (0)
-
-#define COMPL_HARD_REG_SET(TO, FROM) \
-do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \
- register int i; \
- for (i = 0; i < HARD_REG_SET_LONGS; i++) \
- *scan_tp_++ = ~ *scan_fp_++; } while (0)
-
-#define AND_HARD_REG_SET(TO, FROM) \
-do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \
- register int i; \
- for (i = 0; i < HARD_REG_SET_LONGS; i++) \
- *scan_tp_++ &= *scan_fp_++; } while (0)
-
-#define AND_COMPL_HARD_REG_SET(TO, FROM) \
-do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \
- register int i; \
- for (i = 0; i < HARD_REG_SET_LONGS; i++) \
- *scan_tp_++ &= ~ *scan_fp_++; } while (0)
-
-#define IOR_HARD_REG_SET(TO, FROM) \
-do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \
- register int i; \
- for (i = 0; i < HARD_REG_SET_LONGS; i++) \
- *scan_tp_++ |= *scan_fp_++; } while (0)
-
-#define IOR_COMPL_HARD_REG_SET(TO, FROM) \
-do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \
- register int i; \
- for (i = 0; i < HARD_REG_SET_LONGS; i++) \
- *scan_tp_++ |= ~ *scan_fp_++; } while (0)
-
-#define GO_IF_HARD_REG_SUBSET(X,Y,TO) \
-do { register HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \
- register int i; \
- for (i = 0; i < HARD_REG_SET_LONGS; i++) \
- if (0 != (*scan_xp_++ & ~ *scan_yp_++)) break; \
- if (i == HARD_REG_SET_LONGS) goto TO; } while (0)
-
-#define GO_IF_HARD_REG_EQUAL(X,Y,TO) \
-do { register HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \
- register int i; \
- for (i = 0; i < HARD_REG_SET_LONGS; i++) \
- if (*scan_xp_++ != *scan_yp_++) break; \
- if (i == HARD_REG_SET_LONGS) goto TO; } while (0)
-
-#endif
-
-/* Define some standard sets of registers. */
-
-/* Indexed by hard register number, contains 1 for registers
- that are fixed use (stack pointer, pc, frame pointer, etc.).
- These are the registers that cannot be used to allocate
- a pseudo reg whose life does not cross calls. */
-
-extern char fixed_regs[FIRST_PSEUDO_REGISTER];
-
-/* The same info as a HARD_REG_SET. */
-
-extern HARD_REG_SET fixed_reg_set;
-
-/* Indexed by hard register number, contains 1 for registers
- that are fixed use or are clobbered by function calls.
- These are the registers that cannot be used to allocate
- a pseudo reg whose life crosses calls. */
-
-extern char call_used_regs[FIRST_PSEUDO_REGISTER];
-
-/* The same info as a HARD_REG_SET. */
-
-extern HARD_REG_SET call_used_reg_set;
-
-/* Indexed by hard register number, contains 1 for registers that are
- fixed use -- i.e. in fixed_regs -- or a function value return register
- or STRUCT_VALUE_REGNUM or STATIC_CHAIN_REGNUM. These are the
- registers that cannot hold quantities across calls even if we are
- willing to save and restore them. */
-
-extern char call_fixed_regs[FIRST_PSEUDO_REGISTER];
-
-/* The same info as a HARD_REG_SET. */
-
-extern HARD_REG_SET call_fixed_reg_set;
-
-/* Indexed by hard register number, contains 1 for registers
- that are being used for global register decls.
- These must be exempt from ordinary flow analysis
- and are also considered fixed. */
-
-extern char global_regs[FIRST_PSEUDO_REGISTER];
-
-/* Table of register numbers in the order in which to try to use them. */
-
-#ifdef REG_ALLOC_ORDER /* Avoid undef symbol in certain broken linkers. */
-extern int reg_alloc_order[FIRST_PSEUDO_REGISTER];
-#endif
-
-/* For each reg class, a HARD_REG_SET saying which registers are in it. */
-
-extern HARD_REG_SET reg_class_contents[];
-
-/* For each reg class, number of regs it contains. */
-
-extern int reg_class_size[N_REG_CLASSES];
-
-/* For each reg class, table listing all the containing classes. */
-
-extern enum reg_class reg_class_superclasses[N_REG_CLASSES][N_REG_CLASSES];
-
-/* For each reg class, table listing all the classes contained in it. */
-
-extern enum reg_class reg_class_subclasses[N_REG_CLASSES][N_REG_CLASSES];
-
-/* For each pair of reg classes,
- a largest reg class contained in their union. */
-
-extern enum reg_class reg_class_subunion[N_REG_CLASSES][N_REG_CLASSES];
-
-/* For each pair of reg classes,
- the smallest reg class that contains their union. */
-
-extern enum reg_class reg_class_superunion[N_REG_CLASSES][N_REG_CLASSES];
-
-/* Number of non-fixed registers. */
-
-extern int n_non_fixed_regs;
-
-/* Vector indexed by hardware reg giving its name. */
-
-extern char *reg_names[FIRST_PSEUDO_REGISTER];
diff --git a/gnu/usr.bin/cc/include/i386/bsd.h b/gnu/usr.bin/cc/include/i386/bsd.h
deleted file mode 100644
index abc9f0ea5855..000000000000
--- a/gnu/usr.bin/cc/include/i386/bsd.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/* Definitions for BSD assembler syntax for Intel 386
- (actually AT&T syntax for insns and operands,
- adapted to BSD conventions for symbol names and debugging.)
- Copyright (C) 1988 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* Include common aspects of all 386 Unix assemblers. */
-#include "i386/unix.h"
-
-/* Don't assume anything about the header files. */
-#define NO_IMPLICIT_EXTERN_C
-
-/* Use the Sequent Symmetry assembler syntax. */
-
-#define TARGET_VERSION fprintf (stderr, " (80386, BSD syntax)");
-
-/* Define the syntax of pseudo-ops, labels and comments. */
-
-/* Prefix for internally generated assembler labels. If we aren't using
- underscores, we are using prefix `.'s to identify labels that should
- be ignored, as in `i386/gas.h' --karl@cs.umb.edu */
-#ifdef NO_UNDERSCORES
-#define LPREFIX ".L"
-#else
-#define LPREFIX "L"
-#endif /* not NO_UNDERSCORES */
-
-/* Assembler pseudos to introduce constants of various size. */
-
-#define ASM_BYTE_OP "\t.byte"
-#define ASM_SHORT "\t.word"
-#define ASM_LONG "\t.long"
-#define ASM_DOUBLE "\t.double"
-
-/* Output at beginning of assembler file.
- ??? I am skeptical of this -- RMS. */
-
-#define ASM_FILE_START(FILE) \
- do { fprintf (FILE, "\t.file\t"); \
- output_quoted_string (FILE, dump_base_name); \
- fprintf (FILE, "\n"); \
- } while (0)
-
-/* This was suggested, but it shouldn't be right for DBX output. -- RMS
- #define ASM_OUTPUT_SOURCE_FILENAME(FILE, NAME) */
-
-
-/* Define the syntax of labels and symbol definitions/declarations. */
-
-/* This is how to output an assembler line
- that says to advance the location counter by SIZE bytes. */
-
-#define ASM_OUTPUT_SKIP(FILE,SIZE) \
- fprintf (FILE, "\t.space %u\n", (SIZE))
-
-/* Define the syntax of labels and symbol definitions/declarations. */
-
-/* This says how to output an assembler line
- to define a global common symbol. */
-
-#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \
-( fputs (".comm ", (FILE)), \
- assemble_name ((FILE), (NAME)), \
- fprintf ((FILE), ",%u\n", (ROUNDED)))
-
-/* This says how to output an assembler line
- to define a local common symbol. */
-
-#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \
-( fputs (".lcomm ", (FILE)), \
- assemble_name ((FILE), (NAME)), \
- fprintf ((FILE), ",%u\n", (ROUNDED)))
-
-/* This is how to output an assembler line
- that says to advance the location counter
- to a multiple of 2**LOG bytes. */
-
-#define ASM_OUTPUT_ALIGN(FILE,LOG) \
- if ((LOG)!=0) fprintf ((FILE), "\t.align %d\n", (LOG))
-
-/* This is how to store into the string BUF
- the symbol_ref name of an internal numbered label where
- PREFIX is the class of label and NUM is the number within the class.
- This is suitable for output with `assemble_name'. */
-
-#ifdef NO_UNDERSCORES
-#define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) \
- sprintf ((BUF), "*.%s%d", (PREFIX), (NUMBER))
-#else
-#define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) \
- sprintf ((BUF), "*%s%d", (PREFIX), (NUMBER))
-#endif
-
-/* This is how to output an internal numbered label where
- PREFIX is the class of label and NUM is the number within the class. */
-
-#ifdef NO_UNDERSCORES
-#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \
- fprintf (FILE, ".%s%d:\n", PREFIX, NUM)
-#else
-#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \
- fprintf (FILE, "%s%d:\n", PREFIX, NUM)
-#endif
-
-/* This is how to output a reference to a user-level label named NAME. */
-
-#ifdef NO_UNDERSCORES
-#define ASM_OUTPUT_LABELREF(FILE,NAME) fprintf (FILE, "%s", NAME)
-#else
-#define ASM_OUTPUT_LABELREF(FILE,NAME) fprintf (FILE, "_%s", NAME)
-#endif /* not NO_UNDERSCORES */
-
-/* Sequent has some changes in the format of DBX symbols. */
-#define DBX_NO_XREFS 1
-
-/* Don't split DBX symbols into continuations. */
-#define DBX_CONTIN_LENGTH 0
diff --git a/gnu/usr.bin/cc/include/i386/gas.h b/gnu/usr.bin/cc/include/i386/gas.h
deleted file mode 100644
index 3e8dba5e78f8..000000000000
--- a/gnu/usr.bin/cc/include/i386/gas.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/* Definitions for Intel 386 running system V with gnu tools
- Copyright (C) 1988, 1993, 1994 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* Note that i386/seq-gas.h is a GAS configuration that does not use this
- file. */
-
-#include "i386/i386.h"
-
-#ifndef YES_UNDERSCORES
-/* Define this now, because i386/bsd.h tests it. */
-#define NO_UNDERSCORES
-#endif
-
-/* Use the bsd assembler syntax. */
-/* we need to do this because gas is really a bsd style assembler,
- * and so doesn't work well this these att-isms:
- *
- * ASM_OUTPUT_SKIP is .set .,.+N, which isn't implemented in gas
- * ASM_OUTPUT_LOCAL is done with .set .,.+N, but that can't be
- * used to define bss static space
- *
- * Next is the question of whether to uses underscores. RMS didn't
- * like this idea at first, but since it is now obvious that we
- * need this separate tm file for use with gas, at least to get
- * dbx debugging info, I think we should also switch to underscores.
- * We can keep i386v for real att style output, and the few
- * people who want both form will have to compile twice.
- */
-
-#include "i386/bsd.h"
-
-/* these come from i386/bsd.h, but are specific to sequent */
-#undef DBX_NO_XREFS
-#undef DBX_CONTIN_LENGTH
-
-/* Ask for COFF symbols. */
-
-#define SDB_DEBUGGING_INFO
-
-/* Specify predefined symbols in preprocessor. */
-
-#define CPP_PREDEFINES "-Dunix -Di386 -Asystem(unix) -Acpu(i386) -Amachine(i386)"
-#define CPP_SPEC "%{posix:-D_POSIX_SOURCE}"
-
-/* Allow #sccs in preprocessor. */
-
-#define SCCS_DIRECTIVE
-
-/* Output #ident as a .ident. */
-
-#define ASM_OUTPUT_IDENT(FILE, NAME) fprintf (FILE, "\t.ident \"%s\"\n", NAME);
-
-/* Implicit library calls should use memcpy, not bcopy, etc. */
-
-#define TARGET_MEM_FUNCTIONS
-
-#if 0 /* People say gas uses the log as the arg to .align. */
-/* When using gas, .align N aligns to an N-byte boundary. */
-
-#undef ASM_OUTPUT_ALIGN
-#define ASM_OUTPUT_ALIGN(FILE,LOG) \
- if ((LOG)!=0) fprintf ((FILE), "\t.align %d\n", 1<<(LOG))
-#endif
-
-/* Align labels, etc. at 4-byte boundaries.
- For the 486, align to 16-byte boundary for sake of cache. */
-
-#undef ASM_OUTPUT_ALIGN_CODE
-#define ASM_OUTPUT_ALIGN_CODE(FILE) \
- fprintf ((FILE), "\t.align %d,0x90\n", \
- TARGET_486 ? 4 : 2); /* Use log of 16 or log of 4 as arg. */
-
-/* Align start of loop at 4-byte boundary. */
-
-#undef ASM_OUTPUT_LOOP_ALIGN
-#define ASM_OUTPUT_LOOP_ALIGN(FILE) \
- fprintf ((FILE), "\t.align 2,0x90\n"); /* Use log of 4 as arg. */
-
-/* A C statement or statements which output an assembler instruction
- opcode to the stdio stream STREAM. The macro-operand PTR is a
- variable of type `char *' which points to the opcode name in its
- "internal" form--the form that is written in the machine description.
-
- GAS version 1.38.1 doesn't understand the `repz' opcode mnemonic.
- So use `repe' instead. */
-
-#define ASM_OUTPUT_OPCODE(STREAM, PTR) \
-{ \
- if ((PTR)[0] == 'r' \
- && (PTR)[1] == 'e' \
- && (PTR)[2] == 'p') \
- { \
- if ((PTR)[3] == 'z') \
- { \
- fprintf (STREAM, "repe"); \
- (PTR) += 4; \
- } \
- else if ((PTR)[3] == 'n' && (PTR)[4] == 'z') \
- { \
- fprintf (STREAM, "repne"); \
- (PTR) += 5; \
- } \
- } \
-}
-
-/* Define macro used to output shift-double opcodes when the shift
- count is in %cl. Some assemblers require %cl as an argument;
- some don't.
-
- GAS requires the %cl argument, so override i386/unix.h. */
-
-#undef AS3_SHIFT_DOUBLE
-#define AS3_SHIFT_DOUBLE(a,b,c,d) AS3 (a,b,c,d)
-
-/* Print opcodes the way that GAS expects them. */
-#define GAS_MNEMONICS 1
-
-#ifdef NO_UNDERSCORES /* If user-symbols don't have underscores,
- then it must take more than `L' to identify
- a label that should be ignored. */
-
-/* This is how to store into the string BUF
- the symbol_ref name of an internal numbered label where
- PREFIX is the class of label and NUM is the number within the class.
- This is suitable for output with `assemble_name'. */
-
-#undef ASM_GENERATE_INTERNAL_LABEL
-#define ASM_GENERATE_INTERNAL_LABEL(BUF,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. */
-
-#undef ASM_OUTPUT_INTERNAL_LABEL
-#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \
- fprintf (FILE, ".%s%d:\n", PREFIX, NUM)
-
-#endif /* NO_UNDERSCORES */
diff --git a/gnu/usr.bin/cc/include/i386/gstabs.h b/gnu/usr.bin/cc/include/i386/gstabs.h
deleted file mode 100644
index 5f0ae348f158..000000000000
--- a/gnu/usr.bin/cc/include/i386/gstabs.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "i386/gas.h"
-
-/* We do not want to output SDB debugging information. */
-
-#undef SDB_DEBUGGING_INFO
-
-/* We want to output DBX debugging information. */
-
-#define DBX_DEBUGGING_INFO
diff --git a/gnu/usr.bin/cc/include/i386/i386.h b/gnu/usr.bin/cc/include/i386/i386.h
deleted file mode 100644
index 8d6bf34abb2f..000000000000
--- a/gnu/usr.bin/cc/include/i386/i386.h
+++ /dev/null
@@ -1,1875 +0,0 @@
-/* Definitions of target machine for GNU compiler for Intel X86 (386, 486, pentium)
- Copyright (C) 1988, 1992, 1994 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-
-/* The purpose of this file is to define the characteristics of the i386,
- independent of assembler syntax or operating system.
-
- Three other files build on this one to describe a specific assembler syntax:
- bsd386.h, att386.h, and sun386.h.
-
- The actual tm.h file for a particular system should include
- this file, and then the file for the appropriate assembler syntax.
-
- Many macros that specify assembler syntax are omitted entirely from
- this file because they really belong in the files for particular
- assemblers. These include AS1, AS2, AS3, RP, IP, LPREFIX, L_SIZE,
- PUT_OP_SIZE, USE_STAR, ADDR_BEG, ADDR_END, PRINT_IREG, PRINT_SCALE,
- PRINT_B_I_S, and many that start with ASM_ or end in ASM_OP. */
-
-/* Names to predefine in the preprocessor for this target machine. */
-
-#define I386 1
-
-/* Stubs for half-pic support if not OSF/1 reference platform. */
-
-#ifndef HALF_PIC_P
-#define HALF_PIC_P() 0
-#define HALF_PIC_NUMBER_PTRS 0
-#define HALF_PIC_NUMBER_REFS 0
-#define HALF_PIC_ENCODE(DECL)
-#define HALF_PIC_DECLARE(NAME)
-#define HALF_PIC_INIT() error ("half-pic init called on systems that don't support it.")
-#define HALF_PIC_ADDRESS_P(X) 0
-#define HALF_PIC_PTR(X) X
-#define HALF_PIC_FINISH(STREAM)
-#endif
-
-/* Run-time compilation parameters selecting different hardware subsets. */
-
-extern int target_flags;
-
-/* Macros used in the machine description to test the flags. */
-
-/* configure can arrage to make this 2, to force a 486. */
-#ifndef TARGET_CPU_DEFAULT
-#define TARGET_CPU_DEFAULT 0
-#endif
-
-/* Masks for the -m switches */
-#define MASK_80387 000000000001 /* Hardware floating point */
-#define MASK_486 000000000002 /* 80486 specific */
-#define MASK_NOTUSED 000000000004 /* bit not currently used */
-#define MASK_RTD 000000000010 /* Use ret that pops args */
-#define MASK_REGPARM 000000000020 /* Pass args in eax, edx */
-#define MASK_SVR3_SHLIB 000000000040 /* Uninit locals into bss */
-#define MASK_IEEE_FP 000000000100 /* IEEE fp comparisons */
-#define MASK_FLOAT_RETURNS 000000000200 /* Return float in st(0) */
-#define MASK_NO_FANCY_MATH_387 000000000400 /* Disable sin, cos, sqrt */
-
- /* Temporary codegen switches */
-#define MASK_DEBUG_ADDR 000001000000 /* Debug GO_IF_LEGITIMATE_ADDRESS */
-#define MASK_NO_WIDE_MULTIPLY 000002000000 /* Disable 32x32->64 multiplies */
-#define MASK_NO_MOVE 000004000000 /* Don't generate mem->mem */
-
-/* Use the floating point instructions */
-#define TARGET_80387 (target_flags & MASK_80387)
-
-/* Compile using ret insn that pops args.
- This will not work unless you use prototypes at least
- for all functions that can take varying numbers of args. */
-#define TARGET_RTD (target_flags & MASK_RTD)
-
-/* Compile passing first two args in regs 0 and 1.
- This exists only to test compiler features that will
- be needed for RISC chips. It is not usable
- and is not intended to be usable on this cpu. */
-#define TARGET_REGPARM (target_flags & MASK_RTD)
-
-/* Put uninitialized locals into bss, not data.
- Meaningful only on svr3. */
-#define TARGET_SVR3_SHLIB (target_flags & MASK_SVR3_SHLIB)
-
-/* Use IEEE floating point comparisons. These handle correctly the cases
- where the result of a comparison is unordered. Normally SIGFPE is
- generated in such cases, in which case this isn't needed. */
-#define TARGET_IEEE_FP (target_flags & MASK_IEEE_FP)
-
-/* Functions that return a floating point value may return that value
- in the 387 FPU or in 386 integer registers. If set, this flag causes
- the 387 to be used, which is compatible with most calling conventions. */
-#define TARGET_FLOAT_RETURNS_IN_80387 (target_flags & MASK_FLOAT_RETURNS)
-
-/* Disable generation of FP sin, cos and sqrt operations for 387.
- This is because FreeBSD lacks these in the math-emulator-code */
-#define TARGET_NO_FANCY_MATH_387 (target_flags & MASK_NO_FANCY_MATH_387)
-
-/* Temporary switches for tuning code generation */
-
-/* Disable 32x32->64 bit multiplies that are used for long long multiplies
- and division by constants, but sometimes cause reload problems. */
-#define TARGET_NO_WIDE_MULTIPLY (target_flags & MASK_NO_WIDE_MULTIPLY)
-#define TARGET_WIDE_MULTIPLY (!TARGET_NO_WIDE_MULTIPLY)
-
-/* Debug GO_IF_LEGITIMATE_ADDRESS */
-#define TARGET_DEBUG_ADDR (target_flags & MASK_DEBUG_ADDR)
-
-/* Hack macros for tuning code generation */
-#define TARGET_MOVE ((target_flags & MASK_NO_MOVE) == 0) /* Don't generate memory->memory */
-
-/* Specific hardware switches */
-#define TARGET_486 (target_flags & MASK_486) /* 80486DX, 80486SX, 80486DX[24] */
-#define TARGET_386 (!TARGET_486) /* 80386 */
-
-#define TARGET_SWITCHES \
-{ { "80387", MASK_80387 }, \
- { "no-80387", -MASK_80387 }, \
- { "hard-float", MASK_80387 }, \
- { "soft-float", -MASK_80387 }, \
- { "no-soft-float", MASK_80387 }, \
- { "386", -MASK_486 }, \
- { "no-386", MASK_486 }, \
- { "486", MASK_486 }, \
- { "no-486", -MASK_486 }, \
- { "rtd", MASK_RTD }, \
- { "no-rtd", -MASK_RTD }, \
- { "regparm", MASK_REGPARM }, \
- { "no-regparm", -MASK_REGPARM }, \
- { "svr3-shlib", MASK_SVR3_SHLIB }, \
- { "no-svr3-shlib", -MASK_SVR3_SHLIB }, \
- { "ieee-fp", MASK_IEEE_FP }, \
- { "no-ieee-fp", -MASK_IEEE_FP }, \
- { "fp-ret-in-387", MASK_FLOAT_RETURNS }, \
- { "no-fp-ret-in-387", -MASK_FLOAT_RETURNS }, \
- { "no-fancy-math-387", MASK_NO_FANCY_MATH_387 }, \
- { "fancy-math-387", -MASK_NO_FANCY_MATH_387 }, \
- { "no-wide-multiply", MASK_NO_WIDE_MULTIPLY }, \
- { "wide-multiply", -MASK_NO_WIDE_MULTIPLY }, \
- { "debug-addr", MASK_DEBUG_ADDR }, \
- { "no-debug-addr", -MASK_DEBUG_ADDR }, \
- { "move", -MASK_NO_MOVE }, \
- { "no-move", MASK_NO_MOVE }, \
- SUBTARGET_SWITCHES \
- { "", TARGET_DEFAULT | TARGET_CPU_DEFAULT}}
-
-/* This macro is similar to `TARGET_SWITCHES' but defines names of
- command options that have values. Its definition is an
- initializer with a subgrouping for each command option.
-
- Each subgrouping contains a string constant, that defines the
- fixed part of the option name, and the address of a variable. The
- variable, type `char *', is set to the variable part of the given
- option if the fixed part matches. The actual option name is made
- by appending `-m' to the specified name. */
-#define TARGET_OPTIONS \
-{ { "reg-alloc=", &i386_reg_alloc_order }, \
- SUBTARGET_OPTIONS }
-
-/* Sometimes certain combinations of command options do not make
- sense on a particular target machine. You can define a macro
- `OVERRIDE_OPTIONS' to take account of this. This macro, if
- defined, is executed once just after all the command options have
- been parsed.
-
- Don't use this macro to turn on various extra optimizations for
- `-O'. That is what `OPTIMIZATION_OPTIONS' is for. */
-
-#define OVERRIDE_OPTIONS override_options ()
-
-/* These are meant to be redefined in the host dependent files */
-#define SUBTARGET_SWITCHES
-#define SUBTARGET_OPTIONS
-
-
-/* target machine storage layout */
-
-/* Define for XFmode extended real floating point support.
- This will automatically cause REAL_ARITHMETIC to be defined. */
-#define LONG_DOUBLE_TYPE_SIZE 96
-
-/* Define if you don't want extended real, but do want to use the
- software floating point emulator for REAL_ARITHMETIC and
- decimal <-> binary conversion. */
-/* #define REAL_ARITHMETIC */
-
-/* Define this if most significant byte of a word is the lowest numbered. */
-/* That is true on the 80386. */
-
-#define BITS_BIG_ENDIAN 0
-
-/* Define this if most significant byte of a word is the lowest numbered. */
-/* That is not true on the 80386. */
-#define BYTES_BIG_ENDIAN 0
-
-/* Define this if most significant word of a multiword number is the lowest
- numbered. */
-/* Not true for 80386 */
-#define WORDS_BIG_ENDIAN 0
-
-/* number of bits in an addressable storage unit */
-#define BITS_PER_UNIT 8
-
-/* Width in bits of a "word", which is the contents of a machine register.
- Note that this is not necessarily the width of data type `int';
- if using 16-bit ints on a 80386, this would still be 32.
- But on a machine with 16-bit registers, this would be 16. */
-#define BITS_PER_WORD 32
-
-/* Width of a word, in units (bytes). */
-#define UNITS_PER_WORD 4
-
-/* Width in bits of a pointer.
- See also the macro `Pmode' defined below. */
-#define POINTER_SIZE 32
-
-/* Allocation boundary (in *bits*) for storing arguments in argument list. */
-#define PARM_BOUNDARY 32
-
-/* Boundary (in *bits*) on which stack pointer should be aligned. */
-#define STACK_BOUNDARY 32
-
-/* Allocation boundary (in *bits*) for the code of a function.
- For i486, we get better performance by aligning to a cache
- line (i.e. 16 byte) boundary. */
-#define FUNCTION_BOUNDARY (TARGET_486 ? 128 : 32)
-
-/* Alignment of field after `int : 0' in a structure. */
-
-#define EMPTY_FIELD_BOUNDARY 32
-
-/* Minimum size in bits of the largest boundary to which any
- and all fundamental data types supported by the hardware
- might need to be aligned. No data type wants to be aligned
- rounder than this. The i386 supports 64-bit floating point
- quantities, but these can be aligned on any 32-bit boundary. */
-#define BIGGEST_ALIGNMENT 32
-
-/* Set this non-zero if move instructions will actually fail to work
- when given unaligned data. */
-#define STRICT_ALIGNMENT 0
-
-/* If bit field type is int, don't let it cross an int,
- and give entire struct the alignment of an int. */
-/* Required on the 386 since it doesn't have bitfield insns. */
-#define PCC_BITFIELD_TYPE_MATTERS 1
-
-/* Align loop starts for optimal branching. */
-#define ASM_OUTPUT_LOOP_ALIGN(FILE) \
- ASM_OUTPUT_ALIGN (FILE, 2)
-
-/* This is how to align an instruction for optimal branching.
- On i486 we'll get better performance by aligning on a
- cache line (i.e. 16 byte) boundary. */
-#define ASM_OUTPUT_ALIGN_CODE(FILE) \
- ASM_OUTPUT_ALIGN ((FILE), (TARGET_486 ? 4 : 2))
-
-/* Standard register usage. */
-
-/* This processor has special stack-like registers. See reg-stack.c
- for details. */
-
-#define STACK_REGS
-
-/* Number of actual hardware registers.
- The hardware registers are assigned numbers for the compiler
- from 0 to just below FIRST_PSEUDO_REGISTER.
- All registers that the compiler knows about must be given numbers,
- even those that are not normally considered general registers.
-
- In the 80386 we give the 8 general purpose registers the numbers 0-7.
- We number the floating point registers 8-15.
- Note that registers 0-7 can be accessed as a short or int,
- while only 0-3 may be used with byte `mov' instructions.
-
- Reg 16 does not correspond to any hardware register, but instead
- appears in the RTL as an argument pointer prior to reload, and is
- eliminated during reloading in favor of either the stack or frame
- pointer. */
-
-#define FIRST_PSEUDO_REGISTER 17
-
-/* 1 for registers that have pervasive standard uses
- and are not available for the register allocator.
- On the 80386, the stack pointer is such, as is the arg pointer. */
-#define FIXED_REGISTERS \
-/*ax,dx,cx,bx,si,di,bp,sp,st,st1,st2,st3,st4,st5,st6,st7,arg*/ \
-{ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }
-
-/* 1 for registers not available across function calls.
- These must include the FIXED_REGISTERS and also any
- registers that can be used without being saved.
- The latter must include the registers where values are returned
- and the register where structure-value addresses are passed.
- Aside from that, you can include as many other registers as you like. */
-
-#define CALL_USED_REGISTERS \
-/*ax,dx,cx,bx,si,di,bp,sp,st,st1,st2,st3,st4,st5,st6,st7,arg*/ \
-{ 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
-
-/* Order in which to allocate registers. Each register must be
- listed once, even those in FIXED_REGISTERS. List frame pointer
- late and fixed registers last. Note that, in general, we prefer
- registers listed in CALL_USED_REGISTERS, keeping the others
- available for storage of persistent values.
-
- Three different versions of REG_ALLOC_ORDER have been tried:
-
- If the order is edx, ecx, eax, ... it produces a slightly faster compiler,
- but slower code on simple functions returning values in eax.
-
- If the order is eax, ecx, edx, ... it causes reload to abort when compiling
- perl 4.036 due to not being able to create a DImode register (to hold a 2
- word union).
-
- If the order is eax, edx, ecx, ... it produces better code for simple
- functions, and a slightly slower compiler. Users complained about the code
- generated by allocating edx first, so restore the 'natural' order of things. */
-
-#define REG_ALLOC_ORDER \
-/*ax,dx,cx,bx,si,di,bp,sp,st,st1,st2,st3,st4,st5,st6,st7,arg*/ \
-{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }
-
-/* A C statement (sans semicolon) to choose the order in which to
- allocate hard registers for pseudo-registers local to a basic
- block.
-
- Store the desired register order in the array `reg_alloc_order'.
- Element 0 should be the register to allocate first; element 1, the
- next register; and so on.
-
- The macro body should not assume anything about the contents of
- `reg_alloc_order' before execution of the macro.
-
- On most machines, it is not necessary to define this macro. */
-
-#define ORDER_REGS_FOR_LOCAL_ALLOC order_regs_for_local_alloc ()
-
-/* Macro to conditionally modify fixed_regs/call_used_regs. */
-#define CONDITIONAL_REGISTER_USAGE \
- { \
- if (flag_pic) \
- { \
- fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \
- call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \
- } \
- if (! TARGET_80387 && ! TARGET_FLOAT_RETURNS_IN_80387) \
- { \
- int i; \
- HARD_REG_SET x; \
- COPY_HARD_REG_SET (x, reg_class_contents[(int)FLOAT_REGS]); \
- for (i = 0; i < FIRST_PSEUDO_REGISTER; i++ ) \
- if (TEST_HARD_REG_BIT (x, i)) \
- fixed_regs[i] = call_used_regs[i] = 1; \
- } \
- }
-
-/* Return number of consecutive hard regs needed starting at reg REGNO
- to hold something of mode MODE.
- This is ordinarily the length in words of a value of mode MODE
- but can be less for certain modes in special long registers.
-
- Actually there are no two word move instructions for consecutive
- registers. And only registers 0-3 may have mov byte instructions
- applied to them.
- */
-
-#define HARD_REGNO_NREGS(REGNO, MODE) \
- (FP_REGNO_P (REGNO) ? 1 \
- : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
-
-/* Value is 1 if hard register REGNO can hold a value of machine-mode MODE.
- On the 80386, the first 4 cpu registers can hold any mode
- while the floating point registers may hold only floating point.
- Make it clear that the fp regs could not hold a 16-byte float. */
-
-/* The casts to int placate a compiler on a microvax,
- for cross-compiler testing. */
-
-#define HARD_REGNO_MODE_OK(REGNO, MODE) \
- ((REGNO) < 2 ? 1 \
- : (REGNO) < 4 ? 1 \
- : FP_REGNO_P (REGNO) \
- ? (((int) GET_MODE_CLASS (MODE) == (int) MODE_FLOAT \
- || (int) GET_MODE_CLASS (MODE) == (int) MODE_COMPLEX_FLOAT) \
- && GET_MODE_UNIT_SIZE (MODE) <= 12) \
- : (int) (MODE) != (int) QImode)
-
-/* Value is 1 if it is a good idea to tie two pseudo registers
- when one has mode MODE1 and one has mode MODE2.
- If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2,
- for any hard reg, then this must be 0 for correct output. */
-
-#define MODES_TIEABLE_P(MODE1, MODE2) ((MODE1) == (MODE2))
-
-/* A C expression returning the cost of moving data from a register of class
- CLASS1 to one of CLASS2.
-
- On the i386, copying between floating-point and fixed-point
- registers is expensive. */
-
-#define REGISTER_MOVE_COST(CLASS1, CLASS2) \
- (((FLOAT_CLASS_P (CLASS1) && ! FLOAT_CLASS_P (CLASS2)) \
- || (! FLOAT_CLASS_P (CLASS1) && FLOAT_CLASS_P (CLASS2))) ? 10 \
- : 2)
-
-/* Specify the registers used for certain standard purposes.
- The values of these macros are register numbers. */
-
-/* on the 386 the pc register is %eip, and is not usable as a general
- register. The ordinary mov instructions won't work */
-/* #define PC_REGNUM */
-
-/* Register to use for pushing function arguments. */
-#define STACK_POINTER_REGNUM 7
-
-/* Base register for access to local variables of the function. */
-#define FRAME_POINTER_REGNUM 6
-
-/* First floating point reg */
-#define FIRST_FLOAT_REG 8
-
-/* First & last stack-like regs */
-#define FIRST_STACK_REG FIRST_FLOAT_REG
-#define LAST_STACK_REG (FIRST_FLOAT_REG + 7)
-
-/* Value should be nonzero if functions must have frame pointers.
- Zero means the frame pointer need not be set up (and parms
- may be accessed via the stack pointer) in functions that seem suitable.
- This is computed in `reload', in reload1.c. */
-#define FRAME_POINTER_REQUIRED 0
-
-/* Base register for access to arguments of the function. */
-#define ARG_POINTER_REGNUM 16
-
-/* Register in which static-chain is passed to a function. */
-#define STATIC_CHAIN_REGNUM 2
-
-/* Register to hold the addressing base for position independent
- code access to data items. */
-#define PIC_OFFSET_TABLE_REGNUM 3
-
-/* Register in which address to store a structure value
- arrives in the function. On the 386, the prologue
- copies this from the stack to register %eax. */
-#define STRUCT_VALUE_INCOMING 0
-
-/* Place in which caller passes the structure value address.
- 0 means push the value on the stack like an argument. */
-#define STRUCT_VALUE 0
-
-/* A C expression which can inhibit the returning of certain function
- values in registers, based on the type of value. A nonzero value
- says to return the function value in memory, just as large
- structures are always returned. Here TYPE will be a C expression
- of type `tree', representing the data type of the value.
-
- Note that values of mode `BLKmode' must be explicitly handled by
- this macro. Also, the option `-fpcc-struct-return' takes effect
- regardless of this macro. On most systems, it is possible to
- leave the macro undefined; this causes a default definition to be
- used, whose value is the constant 1 for `BLKmode' values, and 0
- otherwise.
-
- Do not use this macro to indicate that structures and unions
- should always be returned in memory. You should instead use
- `DEFAULT_PCC_STRUCT_RETURN' to indicate this. */
-
-#define RETURN_IN_MEMORY(TYPE) \
- ((TYPE_MODE (TYPE) == BLKmode) || int_size_in_bytes (TYPE) > 12)
-
-
-/* Define the classes of registers for register constraints in the
- machine description. Also define ranges of constants.
-
- One of the classes must always be named ALL_REGS and include all hard regs.
- If there is more than one class, another class must be named NO_REGS
- and contain no registers.
-
- The name GENERAL_REGS must be the name of a class (or an alias for
- another name such as ALL_REGS). This is the class of registers
- that is allowed by "g" or "r" in a register constraint.
- Also, registers outside this class are allocated only when
- instructions express preferences for them.
-
- The classes must be numbered in nondecreasing order; that is,
- a larger-numbered class must never be contained completely
- in a smaller-numbered class.
-
- For any two classes, it is very desirable that there be another
- class that represents their union.
-
- It might seem that class BREG is unnecessary, since no useful 386
- opcode needs reg %ebx. But some systems pass args to the OS in ebx,
- and the "b" register constraint is useful in asms for syscalls. */
-
-enum reg_class
-{
- NO_REGS,
- AREG, DREG, CREG, BREG,
- AD_REGS, /* %eax/%edx for DImode */
- Q_REGS, /* %eax %ebx %ecx %edx */
- SIREG, DIREG,
- INDEX_REGS, /* %eax %ebx %ecx %edx %esi %edi %ebp */
- GENERAL_REGS, /* %eax %ebx %ecx %edx %esi %edi %ebp %esp */
- FP_TOP_REG, FP_SECOND_REG, /* %st(0) %st(1) */
- FLOAT_REGS,
- ALL_REGS, LIM_REG_CLASSES
-};
-
-#define N_REG_CLASSES (int) LIM_REG_CLASSES
-
-#define FLOAT_CLASS_P(CLASS) (reg_class_subset_p (CLASS, FLOAT_REGS))
-
-/* Give names of register classes as strings for dump file. */
-
-#define REG_CLASS_NAMES \
-{ "NO_REGS", \
- "AREG", "DREG", "CREG", "BREG", \
- "AD_REGS", \
- "Q_REGS", \
- "SIREG", "DIREG", \
- "INDEX_REGS", \
- "GENERAL_REGS", \
- "FP_TOP_REG", "FP_SECOND_REG", \
- "FLOAT_REGS", \
- "ALL_REGS" }
-
-/* Define which registers fit in which classes.
- This is an initializer for a vector of HARD_REG_SET
- of length N_REG_CLASSES. */
-
-#define REG_CLASS_CONTENTS \
-{ 0, \
- 0x1, 0x2, 0x4, 0x8, /* AREG, DREG, CREG, BREG */ \
- 0x3, /* AD_REGS */ \
- 0xf, /* Q_REGS */ \
- 0x10, 0x20, /* SIREG, DIREG */ \
- 0x07f, /* INDEX_REGS */ \
- 0x100ff, /* GENERAL_REGS */ \
- 0x0100, 0x0200, /* FP_TOP_REG, FP_SECOND_REG */ \
- 0xff00, /* FLOAT_REGS */ \
- 0x1ffff }
-
-/* The same information, inverted:
- Return the class number of the smallest class containing
- reg number REGNO. This could be a conditional expression
- or could index an array. */
-
-#define REGNO_REG_CLASS(REGNO) (regclass_map[REGNO])
-
-/* When defined, the compiler allows registers explicitly used in the
- rtl to be used as spill registers but prevents the compiler from
- extending the lifetime of these registers. */
-
-#define SMALL_REGISTER_CLASSES
-
-#define QI_REG_P(X) \
- (REG_P (X) && REGNO (X) < 4)
-#define NON_QI_REG_P(X) \
- (REG_P (X) && REGNO (X) >= 4 && REGNO (X) < FIRST_PSEUDO_REGISTER)
-
-#define FP_REG_P(X) (REG_P (X) && FP_REGNO_P (REGNO (X)))
-#define FP_REGNO_P(n) ((n) >= FIRST_STACK_REG && (n) <= LAST_STACK_REG)
-
-#define STACK_REG_P(xop) (REG_P (xop) && \
- REGNO (xop) >= FIRST_STACK_REG && \
- REGNO (xop) <= LAST_STACK_REG)
-
-#define NON_STACK_REG_P(xop) (REG_P (xop) && ! STACK_REG_P (xop))
-
-#define STACK_TOP_P(xop) (REG_P (xop) && REGNO (xop) == FIRST_STACK_REG)
-
-/* Try to maintain the accuracy of the death notes for regs satisfying the
- following. Important for stack like regs, to know when to pop. */
-
-/* #define PRESERVE_DEATH_INFO_REGNO_P(x) FP_REGNO_P(x) */
-
-/* 1 if register REGNO can magically overlap other regs.
- Note that nonzero values work only in very special circumstances. */
-
-/* #define OVERLAPPING_REGNO_P(REGNO) FP_REGNO_P (REGNO) */
-
-/* The class value for index registers, and the one for base regs. */
-
-#define INDEX_REG_CLASS INDEX_REGS
-#define BASE_REG_CLASS GENERAL_REGS
-
-/* Get reg_class from a letter such as appears in the machine description. */
-
-#define REG_CLASS_FROM_LETTER(C) \
- ((C) == 'r' ? GENERAL_REGS : \
- (C) == 'q' ? Q_REGS : \
- (C) == 'f' ? (TARGET_80387 || TARGET_FLOAT_RETURNS_IN_80387 \
- ? FLOAT_REGS \
- : NO_REGS) : \
- (C) == 't' ? (TARGET_80387 || TARGET_FLOAT_RETURNS_IN_80387 \
- ? FP_TOP_REG \
- : NO_REGS) : \
- (C) == 'u' ? (TARGET_80387 || TARGET_FLOAT_RETURNS_IN_80387 \
- ? FP_SECOND_REG \
- : NO_REGS) : \
- (C) == 'a' ? AREG : \
- (C) == 'b' ? BREG : \
- (C) == 'c' ? CREG : \
- (C) == 'd' ? DREG : \
- (C) == 'A' ? AD_REGS : \
- (C) == 'D' ? DIREG : \
- (C) == 'S' ? SIREG : NO_REGS)
-
-/* The letters I, J, K, L and M 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 for non-DImode shifts.
- J is for DImode shifts.
- K and L are for an `andsi' optimization.
- M is for shifts that can be executed by the "lea" opcode.
- */
-
-#define CONST_OK_FOR_LETTER_P(VALUE, C) \
- ((C) == 'I' ? (VALUE) >= 0 && (VALUE) <= 31 : \
- (C) == 'J' ? (VALUE) >= 0 && (VALUE) <= 63 : \
- (C) == 'K' ? (VALUE) == 0xff : \
- (C) == 'L' ? (VALUE) == 0xffff : \
- (C) == 'M' ? (VALUE) >= 0 && (VALUE) <= 3 : \
- 0)
-
-/* Similar, but for floating constants, and defining letters G and H.
- Here VALUE is the CONST_DOUBLE rtx itself. We allow constants even if
- TARGET_387 isn't set, because the stack register converter may need to
- load 0.0 into the function value register. */
-
-#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \
- ((C) == 'G' ? standard_80387_constant_p (VALUE) : 0)
-
-/* Place additional restrictions on the register class to use when it
- is necessary to be able to hold a value of mode MODE in a reload
- register for which class CLASS would ordinarily be used. */
-
-#define LIMIT_RELOAD_CLASS(MODE, CLASS) \
- ((MODE) == QImode && ((CLASS) == ALL_REGS || (CLASS) == GENERAL_REGS) \
- ? Q_REGS : (CLASS))
-
-/* Given an rtx X being reloaded into a reg required to be
- in class CLASS, return the class of reg to actually use.
- In general this is just CLASS; but on some machines
- in some cases it is preferable to use a more restrictive class.
- On the 80386 series, we prevent floating constants from being
- reloaded into floating registers (since no move-insn can do that)
- and we ensure that QImodes aren't reloaded into the esi or edi reg. */
-
-/* Put float CONST_DOUBLE in the constant pool instead of fp regs.
- QImode must go into class Q_REGS.
- Narrow ALL_REGS to GENERAL_REGS. This supports allowing movsf and
- movdf to do mem-to-mem moves through integer regs. */
-
-#define PREFERRED_RELOAD_CLASS(X,CLASS) \
- (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) != VOIDmode ? NO_REGS \
- : GET_MODE (X) == QImode && ! reg_class_subset_p (CLASS, Q_REGS) ? Q_REGS \
- : ((CLASS) == ALL_REGS \
- && GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT) ? GENERAL_REGS \
- : (CLASS))
-
-/* If we are copying between general and FP registers, we need a memory
- location. */
-
-#define SECONDARY_MEMORY_NEEDED(CLASS1,CLASS2,MODE) \
- ((FLOAT_CLASS_P (CLASS1) && ! FLOAT_CLASS_P (CLASS2)) \
- || (! FLOAT_CLASS_P (CLASS1) && FLOAT_CLASS_P (CLASS2)))
-
-/* Return the maximum number of consecutive registers
- needed to represent mode MODE in a register of class CLASS. */
-/* On the 80386, this is the size of MODE in words,
- except in the FP regs, where a single reg is always enough. */
-#define CLASS_MAX_NREGS(CLASS, MODE) \
- (FLOAT_CLASS_P (CLASS) ? 1 : \
- ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
-
-/* A C expression whose value is nonzero if pseudos that have been
- assigned to registers of class CLASS would likely be spilled
- because registers of CLASS are needed for spill registers.
-
- The default value of this macro returns 1 if CLASS has exactly one
- register and zero otherwise. On most machines, this default
- should be used. Only define this macro to some other expression
- if pseudo allocated by `local-alloc.c' end up in memory because
- their hard registers were needed for spill regisers. If this
- macro returns nonzero for those classes, those pseudos will only
- be allocated by `global.c', which knows how to reallocate the
- pseudo to another register. If there would not be another
- register available for reallocation, you should not change the
- definition of this macro since the only effect of such a
- definition would be to slow down register allocation. */
-
-#define CLASS_LIKELY_SPILLED_P(CLASS) \
- (((CLASS) == AREG) \
- || ((CLASS) == DREG) \
- || ((CLASS) == CREG) \
- || ((CLASS) == BREG) \
- || ((CLASS) == AD_REGS) \
- || ((CLASS) == SIREG) \
- || ((CLASS) == DIREG))
-
-
-/* Stack layout; function entry, exit and calling. */
-
-/* Define this if pushing a word on the stack
- makes the stack pointer a smaller address. */
-#define STACK_GROWS_DOWNWARD
-
-/* Define this if the nominal address of the stack frame
- is at the high-address end of the local variables;
- that is, each additional local variable allocated
- goes at a more negative offset in the frame. */
-#define FRAME_GROWS_DOWNWARD
-
-/* Offset within stack frame to start allocating local variables at.
- If FRAME_GROWS_DOWNWARD, this is the offset to the END of the
- first local allocated. Otherwise, it is the offset to the BEGINNING
- of the first local allocated. */
-#define STARTING_FRAME_OFFSET 0
-
-/* If we generate an insn to push BYTES bytes,
- this says how many the stack pointer really advances by.
- On 386 pushw decrements by exactly 2 no matter what the position was.
- On the 386 there is no pushb; we use pushw instead, and this
- has the effect of rounding up to 2. */
-
-#define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & (-2))
-
-/* Offset of first parameter from the argument pointer register value. */
-#define FIRST_PARM_OFFSET(FNDECL) 0
-
-/* Value is the number of bytes of arguments automatically
- popped when returning from a subroutine call.
- FUNTYPE is the data type of the function (as a tree),
- or for a library call it is an identifier node for the subroutine name.
- SIZE is the number of bytes of arguments passed on the stack.
-
- On the 80386, the RTD insn may be used to pop them if the number
- of args is fixed, but if the number is variable then the caller
- must pop them all. RTD can't be used for library calls now
- because the library is compiled with the Unix compiler.
- Use of RTD is a selectable option, since it is incompatible with
- standard Unix calling sequences. If the option is not selected,
- the caller must always pop the args. */
-
-#define RETURN_POPS_ARGS(FUNTYPE,SIZE) \
- (TREE_CODE (FUNTYPE) == IDENTIFIER_NODE ? 0 \
- : (TARGET_RTD \
- && (TYPE_ARG_TYPES (FUNTYPE) == 0 \
- || (TREE_VALUE (tree_last (TYPE_ARG_TYPES (FUNTYPE))) \
- == void_type_node))) ? (SIZE) \
- : (aggregate_value_p (TREE_TYPE (FUNTYPE))) ? GET_MODE_SIZE (Pmode) : 0)
-
-/* Define how to find the value returned by a function.
- VALTYPE is the data type of the value (as a tree).
- If the precise function being called is known, FUNC is its FUNCTION_DECL;
- otherwise, FUNC is 0. */
-#define FUNCTION_VALUE(VALTYPE, FUNC) \
- gen_rtx (REG, TYPE_MODE (VALTYPE), \
- VALUE_REGNO (TYPE_MODE (VALTYPE)))
-
-/* Define how to find the value returned by a library function
- assuming the value has mode MODE. */
-
-#define LIBCALL_VALUE(MODE) \
- gen_rtx (REG, MODE, VALUE_REGNO (MODE))
-
-/* Define the size of the result block used for communication between
- untyped_call and untyped_return. The block contains a DImode value
- followed by the block used by fnsave and frstor. */
-
-#define APPLY_RESULT_SIZE (8+108)
-
-/* 1 if N is a possible register number for function argument passing.
- On the 80386, no registers are used in this way.
- *NOTE* -mregparm does not work.
- It exists only to test register calling conventions. */
-
-#define FUNCTION_ARG_REGNO_P(N) 0
-
-/* Define a data type for recording info about an argument list
- during the scan of that argument list. This data type should
- hold all necessary information about the function itself
- and about the args processed so far, enough to enable macros
- such as FUNCTION_ARG to determine where the next arg should go.
-
- On the 80386, this is a single integer, which is a number of bytes
- of arguments scanned so far. */
-
-#define CUMULATIVE_ARGS int
-
-/* Initialize a variable CUM of type CUMULATIVE_ARGS
- for a call to a function whose data type is FNTYPE.
- For a library call, FNTYPE is 0.
-
- On the 80386, the offset starts at 0. */
-
-#define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME) \
- ((CUM) = 0)
-
-/* Update the data in CUM to advance over an argument
- of mode MODE and data type TYPE.
- (TYPE is null for libcalls where that information may not be available.) */
-
-#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
- ((CUM) += ((MODE) != BLKmode \
- ? (GET_MODE_SIZE (MODE) + 3) & ~3 \
- : (int_size_in_bytes (TYPE) + 3) & ~3))
-
-/* Define where to put the arguments to a function.
- Value is zero to push the argument on the stack,
- or a hard register in which to store the argument.
-
- MODE is the argument's machine mode.
- TYPE is the data type of the argument (as a tree).
- This is null for libcalls where that information may
- not be available.
- CUM is a variable of type CUMULATIVE_ARGS which gives info about
- the preceding args and about the function being called.
- NAMED is nonzero if this argument is a named parameter
- (otherwise it is an extra parameter matching an ellipsis). */
-
-
-/* On the 80386 all args are pushed, except if -mregparm is specified
- then the first two words of arguments are passed in EAX, EDX.
- *NOTE* -mregparm does not work.
- It exists only to test register calling conventions. */
-
-#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
-((TARGET_REGPARM && (CUM) < 8) ? gen_rtx (REG, (MODE), (CUM) / 4) : 0)
-
-/* For an arg passed partly in registers and partly in memory,
- this is the number of registers used.
- For args passed entirely in registers or entirely in memory, zero. */
-
-
-#define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) \
-((TARGET_REGPARM && (CUM) < 8 \
- && 8 < ((CUM) + ((MODE) == BLKmode \
- ? int_size_in_bytes (TYPE) \
- : GET_MODE_SIZE (MODE)))) \
- ? 2 - (CUM) / 4 : 0)
-
-/* 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.
- Refer to the array `regs_ever_live' to determine which registers
- to save; `regs_ever_live[I]' is nonzero if register number I
- is ever used in the function. This macro is responsible for
- knowing which registers should not be saved even if used. */
-
-#define FUNCTION_PROLOGUE(FILE, SIZE) \
- function_prologue (FILE, SIZE)
-
-/* Output assembler code to FILE to increment profiler label # LABELNO
- for profiling a function entry. */
-
-#define FUNCTION_PROFILER(FILE, LABELNO) \
-{ \
- if (flag_pic) \
- { \
- fprintf (FILE, "\tleal %sP%d@GOTOFF(%%ebx),%%edx\n", \
- LPREFIX, (LABELNO)); \
- fprintf (FILE, "\tcall *_mcount@GOT(%%ebx)\n"); \
- } \
- else \
- { \
- fprintf (FILE, "\tmovl $%sP%d,%%edx\n", LPREFIX, (LABELNO)); \
- fprintf (FILE, "\tcall _mcount\n"); \
- } \
-}
-
-/* A C statement or compound statement to output to FILE some
- assembler code to initialize basic-block profiling for the current
- object module. This code should call the subroutine
- `__bb_init_func' once per object module, passing it as its sole
- argument the address of a block allocated in the object module.
-
- The name of the block is a local symbol made with this statement:
-
- ASM_GENERATE_INTERNAL_LABEL (BUFFER, "LPBX", 0);
-
- Of course, since you are writing the definition of
- `ASM_GENERATE_INTERNAL_LABEL' as well as that of this macro, you
- can take a short cut in the definition of this macro and use the
- name that you know will result.
-
- The first word of this block is a flag which will be nonzero if the
- object module has already been initialized. So test this word
- first, and do not call `__bb_init_func' if the flag is nonzero. */
-
-#undef FUNCTION_BLOCK_PROFILER
-#define FUNCTION_BLOCK_PROFILER(STREAM, LABELNO) \
-do \
- { \
- static int num_func = 0; \
- rtx xops[8]; \
- char block_table[80], false_label[80]; \
- \
- ASM_GENERATE_INTERNAL_LABEL (block_table, "LPBX", 0); \
- ASM_GENERATE_INTERNAL_LABEL (false_label, "LPBZ", num_func); \
- \
- xops[0] = const0_rtx; \
- xops[1] = gen_rtx (SYMBOL_REF, VOIDmode, block_table); \
- xops[2] = gen_rtx (MEM, Pmode, gen_rtx (SYMBOL_REF, VOIDmode, false_label)); \
- xops[3] = gen_rtx (MEM, Pmode, gen_rtx (SYMBOL_REF, VOIDmode, "__bb_init_func")); \
- xops[4] = gen_rtx (MEM, Pmode, xops[1]); \
- xops[5] = stack_pointer_rtx; \
- xops[6] = GEN_INT (4); \
- xops[7] = gen_rtx (REG, Pmode, 0); /* eax */ \
- \
- CONSTANT_POOL_ADDRESS_P (xops[1]) = TRUE; \
- CONSTANT_POOL_ADDRESS_P (xops[2]) = TRUE; \
- \
- output_asm_insn (AS2(cmp%L4,%0,%4), xops); \
- output_asm_insn (AS1(jne,%2), xops); \
- \
- if (!flag_pic) \
- output_asm_insn (AS1(push%L1,%1), xops); \
- else \
- { \
- output_asm_insn (AS2 (lea%L7,%a1,%7), xops); \
- output_asm_insn (AS1 (push%L7,%7), xops); \
- } \
- \
- output_asm_insn (AS1(call,%P3), xops); \
- output_asm_insn (AS2(add%L0,%6,%5), xops); \
- ASM_OUTPUT_INTERNAL_LABEL (STREAM, "LPBZ", num_func); \
- num_func++; \
- } \
-while (0)
-
-
-/* A C statement or compound statement to increment the count
- associated with the basic block number BLOCKNO. Basic blocks are
- numbered separately from zero within each compilation. The count
- associated with block number BLOCKNO is at index BLOCKNO in a
- vector of words; the name of this array is a local symbol made
- with this statement:
-
- ASM_GENERATE_INTERNAL_LABEL (BUFFER, "LPBX", 2);
-
- Of course, since you are writing the definition of
- `ASM_GENERATE_INTERNAL_LABEL' as well as that of this macro, you
- can take a short cut in the definition of this macro and use the
- name that you know will result. */
-
-#define BLOCK_PROFILER(STREAM, BLOCKNO) \
-do \
- { \
- rtx xops[1], cnt_rtx; \
- char counts[80]; \
- \
- ASM_GENERATE_INTERNAL_LABEL (counts, "LPBX", 2); \
- cnt_rtx = gen_rtx (SYMBOL_REF, VOIDmode, counts); \
- SYMBOL_REF_FLAG (cnt_rtx) = TRUE; \
- \
- if (BLOCKNO) \
- cnt_rtx = plus_constant (cnt_rtx, (BLOCKNO)*4); \
- \
- if (flag_pic) \
- cnt_rtx = gen_rtx (PLUS, Pmode, pic_offset_table_rtx, cnt_rtx); \
- \
- xops[0] = gen_rtx (MEM, SImode, cnt_rtx); \
- output_asm_insn (AS1(inc%L0,%0), xops); \
- } \
-while (0)
-
-/* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
- the stack pointer does not matter. The value is tested only in
- functions that have frame pointers.
- No definition is equivalent to always zero. */
-/* Note on the 386 it might be more efficient not to define this since
- we have to restore it ourselves from the frame pointer, in order to
- use pop */
-
-#define EXIT_IGNORE_STACK 1
-
-/* This macro generates the assembly code for function exit,
- on machines that need it. If FUNCTION_EPILOGUE is not defined
- then individual return instructions are generated for each
- return statement. Args are same as for FUNCTION_PROLOGUE.
-
- The function epilogue should not depend on the current stack pointer!
- It should use the frame pointer only. This is mandatory because
- of alloca; we also take advantage of it to omit stack adjustments
- before returning.
-
- If the last non-note insn in the function is a BARRIER, then there
- is no need to emit a function prologue, because control does not fall
- off the end. This happens if the function ends in an "exit" call, or
- if a `return' insn is emitted directly into the function. */
-
-#define FUNCTION_EPILOGUE(FILE, SIZE) \
-do { \
- rtx last = get_last_insn (); \
- if (last && GET_CODE (last) == NOTE) \
- last = prev_nonnote_insn (last); \
- if (! last || GET_CODE (last) != BARRIER) \
- function_epilogue (FILE, SIZE); \
-} while (0)
-
-/* Output assembler code for a block containing the constant parts
- of a trampoline, leaving space for the variable parts. */
-
-/* On the 386, the trampoline contains three instructions:
- mov #STATIC,ecx
- mov #FUNCTION,eax
- jmp @eax */
-#define TRAMPOLINE_TEMPLATE(FILE) \
-{ \
- ASM_OUTPUT_CHAR (FILE, GEN_INT (0xb9)); \
- ASM_OUTPUT_SHORT (FILE, const0_rtx); \
- ASM_OUTPUT_SHORT (FILE, const0_rtx); \
- ASM_OUTPUT_CHAR (FILE, GEN_INT (0xb8)); \
- ASM_OUTPUT_SHORT (FILE, const0_rtx); \
- ASM_OUTPUT_SHORT (FILE, const0_rtx); \
- ASM_OUTPUT_CHAR (FILE, GEN_INT (0xff)); \
- ASM_OUTPUT_CHAR (FILE, GEN_INT (0xe0)); \
-}
-
-/* Length in units of the trampoline for entering a nested function. */
-
-#define TRAMPOLINE_SIZE 12
-
-/* Emit RTL insns to initialize the variable parts of a trampoline.
- 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. */
-
-#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
-{ \
- emit_move_insn (gen_rtx (MEM, SImode, plus_constant (TRAMP, 1)), CXT); \
- emit_move_insn (gen_rtx (MEM, SImode, plus_constant (TRAMP, 6)), FNADDR); \
-}
-
-/* Definitions for register eliminations.
-
- This is an array of structures. Each structure initializes one pair
- of eliminable registers. The "from" register number is given first,
- followed by "to". Eliminations of the same "from" register are listed
- in order of preference.
-
- We have two registers that can be eliminated on the i386. First, the
- frame pointer register can often be eliminated in favor of the stack
- pointer register. Secondly, the argument pointer register can always be
- eliminated; it is replaced with either the stack or frame pointer. */
-
-#define ELIMINABLE_REGS \
-{{ ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
- { ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \
- { FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}}
-
-/* Given FROM and TO register numbers, say whether this elimination is allowed.
- Frame pointer elimination is automatically handled.
-
- For the i386, if frame pointer elimination is being done, we would like to
- convert ap into sp, not fp.
-
- All other eliminations are valid. */
-
-#define CAN_ELIMINATE(FROM, TO) \
- ((FROM) == ARG_POINTER_REGNUM && (TO) == STACK_POINTER_REGNUM \
- ? ! frame_pointer_needed \
- : 1)
-
-/* Define the offset between two registers, one to be eliminated, and the other
- its replacement, at the start of a routine. */
-
-#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
-{ \
- if ((FROM) == ARG_POINTER_REGNUM && (TO) == FRAME_POINTER_REGNUM) \
- (OFFSET) = 8; /* Skip saved PC and previous frame pointer */ \
- else \
- { \
- int regno; \
- int offset = 0; \
- \
- for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) \
- if ((regs_ever_live[regno] && ! call_used_regs[regno]) \
- || (current_function_uses_pic_offset_table \
- && regno == PIC_OFFSET_TABLE_REGNUM)) \
- offset += 4; \
- \
- (OFFSET) = offset + get_frame_size (); \
- \
- if ((FROM) == ARG_POINTER_REGNUM && (TO) == STACK_POINTER_REGNUM) \
- (OFFSET) += 4; /* Skip saved PC */ \
- } \
-}
-
-/* Addressing modes, and classification of registers for them. */
-
-/* #define HAVE_POST_INCREMENT */
-/* #define HAVE_POST_DECREMENT */
-
-/* #define HAVE_PRE_DECREMENT */
-/* #define HAVE_PRE_INCREMENT */
-
-/* Macros to check register numbers against specific register classes. */
-
-/* These assume that REGNO is a hard or pseudo reg number.
- They give nonzero only if REGNO is a hard reg of the suitable class
- or a pseudo reg currently allocated to a suitable hard reg.
- Since they use reg_renumber, they are safe only once reg_renumber
- has been allocated, which happens in local-alloc.c. */
-
-#define REGNO_OK_FOR_INDEX_P(REGNO) \
- ((REGNO) < STACK_POINTER_REGNUM \
- || (unsigned) reg_renumber[REGNO] < STACK_POINTER_REGNUM)
-
-#define REGNO_OK_FOR_BASE_P(REGNO) \
- ((REGNO) <= STACK_POINTER_REGNUM \
- || (REGNO) == ARG_POINTER_REGNUM \
- || (unsigned) reg_renumber[REGNO] <= STACK_POINTER_REGNUM)
-
-#define REGNO_OK_FOR_SIREG_P(REGNO) ((REGNO) == 4 || reg_renumber[REGNO] == 4)
-#define REGNO_OK_FOR_DIREG_P(REGNO) ((REGNO) == 5 || reg_renumber[REGNO] == 5)
-
-/* The macros REG_OK_FOR..._P assume that the arg is a REG rtx
- and check its validity for a certain class.
- We have two alternate definitions for each of them.
- The usual definition accepts all pseudo regs; the other rejects
- them unless they have been allocated suitable hard regs.
- The symbol REG_OK_STRICT causes the latter definition to be used.
-
- Most source files want to accept pseudo regs in the hope that
- they will get allocated to the class that the insn wants them to be in.
- Source files for reload pass need to be strict.
- After reload, it makes no difference, since pseudo regs have
- been eliminated by then. */
-
-
-/* Non strict versions, pseudos are ok */
-#define REG_OK_FOR_INDEX_NONSTRICT_P(X) \
- (REGNO (X) < STACK_POINTER_REGNUM \
- || REGNO (X) >= FIRST_PSEUDO_REGISTER)
-
-#define REG_OK_FOR_BASE_NONSTRICT_P(X) \
- (REGNO (X) <= STACK_POINTER_REGNUM \
- || REGNO (X) == ARG_POINTER_REGNUM \
- || REGNO (X) >= FIRST_PSEUDO_REGISTER)
-
-#define REG_OK_FOR_STRREG_NONSTRICT_P(X) \
- (REGNO (X) == 4 || REGNO (X) == 5 || REGNO (X) >= FIRST_PSEUDO_REGISTER)
-
-/* Strict versions, hard registers only */
-#define REG_OK_FOR_INDEX_STRICT_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X))
-#define REG_OK_FOR_BASE_STRICT_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
-#define REG_OK_FOR_STRREG_STRICT_P(X) \
- (REGNO_OK_FOR_DIREG_P (REGNO (X)) || REGNO_OK_FOR_SIREG_P (REGNO (X)))
-
-#ifndef REG_OK_STRICT
-#define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_INDEX_NONSTRICT_P(X)
-#define REG_OK_FOR_BASE_P(X) REG_OK_FOR_BASE_NONSTRICT_P(X)
-#define REG_OK_FOR_STRREG_P(X) REG_OK_FOR_STRREG_NONSTRICT_P(X)
-
-#else
-#define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_INDEX_STRICT_P(X)
-#define REG_OK_FOR_BASE_P(X) REG_OK_FOR_BASE_STRICT_P(X)
-#define REG_OK_FOR_STRREG_P(X) REG_OK_FOR_STRREG_STRICT_P(X)
-#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 usually machine-independent.
-
- See legitimize_pic_address in i386.c for details as to what
- constitutes a legitimate address when -fpic is used. */
-
-#define MAX_REGS_PER_ADDRESS 2
-
-#define CONSTANT_ADDRESS_P(X) \
- (GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF \
- || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST \
- || GET_CODE (X) == HIGH)
-
-/* Nonzero if the constant value X is a legitimate general operand.
- It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE. */
-
-#define LEGITIMATE_CONSTANT_P(X) 1
-
-#ifdef REG_OK_STRICT
-#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
-{ \
- if (legitimate_address_p (MODE, X, 1)) \
- goto ADDR; \
-}
-
-#else
-#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
-{ \
- if (legitimate_address_p (MODE, X, 0)) \
- goto ADDR; \
-}
-
-#endif
-
-/* 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.
-
- OLDX is the address as it was before break_out_memory_refs was called.
- In some cases it is useful to look at this to decide what needs to be done.
-
- MODE and WIN are passed so that this macro can use
- GO_IF_LEGITIMATE_ADDRESS.
-
- It is always safe for this macro to do nothing. It exists to recognize
- opportunities to optimize the output.
-
- For the 80386, we handle X+REG by loading X into a register R and
- using R+REG. R will go in a general reg and indexing will be used.
- However, if REG is a broken-out memory address or multiplication,
- nothing needs to be done because REG can certainly go in a general reg.
-
- When -fpic is used, special handling is needed for symbolic references.
- See comments by legitimize_pic_address in i386.c for details. */
-
-#define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN) \
-{ \
- rtx orig_x = (X); \
- (X) = legitimize_address (X, OLDX, MODE); \
- if (memory_address_p (MODE, X)) \
- goto WIN; \
-}
-
-/* Nonzero if the constant value X is a legitimate general operand
- when generating PIC code. It is given that flag_pic is on and
- that X satisfies CONSTANT_P or is a CONST_DOUBLE. */
-
-#define LEGITIMATE_PIC_OPERAND_P(X) \
- (! SYMBOLIC_CONST (X) \
- || (GET_CODE (X) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (X)))
-
-#define SYMBOLIC_CONST(X) \
-(GET_CODE (X) == SYMBOL_REF \
- || GET_CODE (X) == LABEL_REF \
- || (GET_CODE (X) == CONST && symbolic_reference_mentioned_p (X)))
-
-/* Go to LABEL if ADDR (a legitimate address expression)
- has an effect that depends on the machine mode it is used for.
- On the 80386, only postdecrement and postincrement address depend thus
- (the amount of decrement or increment being the length of the operand). */
-#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) \
- if (GET_CODE (ADDR) == POST_INC || GET_CODE (ADDR) == POST_DEC) goto LABEL
-
-/* 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 i386, if using PIC, mark a SYMBOL_REF for a non-global symbol
- so that we may access it directly in the GOT. */
-
-#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)); \
- SYMBOL_REF_FLAG (XEXP (rtl, 0)) \
- = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd' \
- || ! TREE_PUBLIC (DECL)); \
- } \
- } \
-while (0)
-
-/* Initialize data used by insn expanders. This is called from
- init_emit, once for each function, before code is generated.
- For 386, clear stack slot assignments remembered from previous
- functions. */
-
-#define INIT_EXPANDERS clear_386_stack_locals ()
-
-/* The `FINALIZE_PIC' macro serves as a hook to emit these special
- codes once the function is being compiled into assembly code, but
- not before. (It is not done before, because in the case of
- compiling an inline function, it would lead to multiple PIC
- prologues being included in functions which used inline functions
- and were compiled to assembly language.) */
-
-#define FINALIZE_PIC \
-do \
- { \
- extern int current_function_uses_pic_offset_table; \
- \
- current_function_uses_pic_offset_table |= profile_flag | profile_block_flag; \
- } \
-while (0)
-
-
-/* Specify the machine mode that this machine uses
- for the index in the tablejump instruction. */
-#define CASE_VECTOR_MODE Pmode
-
-/* Define this if the tablejump instruction expects the table
- to contain offsets from the address of the table.
- Do not define this if the table should contain absolute addresses. */
-/* #define CASE_VECTOR_PC_RELATIVE */
-
-/* Specify the tree operation to be used to convert reals to integers.
- This should be changed to take advantage of fist --wfs ??
- */
-#define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR
-
-/* This is the kind of divide that is easiest to do in the general case. */
-#define EASY_DIV_EXPR TRUNC_DIV_EXPR
-
-/* Define this as 1 if `char' should by default be signed; else as 0. */
-#define DEFAULT_SIGNED_CHAR 1
-
-/* Max number of bytes we can move from memory to memory
- in one reasonably fast instruction. */
-#define MOVE_MAX 4
-
-/* MOVE_RATIO is the number of move instructions that is better than a
- block move. Make this large on i386, since the block move is very
- inefficient with small blocks, and the hard register needs of the
- block move require much reload work. */
-#define MOVE_RATIO 5
-
-/* Define this if zero-extension is slow (more than one real instruction). */
-/* #define SLOW_ZERO_EXTEND */
-
-/* Nonzero if access to memory by bytes is slow and undesirable. */
-#define SLOW_BYTE_ACCESS 0
-
-/* Define if shifts truncate the shift count
- which implies one can omit a sign-extension or zero-extension
- of a shift count. */
-/* One i386, shifts do truncate the count. But bit opcodes don't. */
-
-/* #define SHIFT_COUNT_TRUNCATED */
-
-/* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits
- is done just by pretending it is already truncated. */
-#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
-
-/* We assume that the store-condition-codes instructions store 0 for false
- and some other value for true. This is the value stored for true. */
-
-#define STORE_FLAG_VALUE 1
-
-/* When a prototype says `char' or `short', really pass an `int'.
- (The 386 can't easily push less than an int.) */
-
-#define PROMOTE_PROTOTYPES
-
-/* Specify the machine mode that pointers have.
- After generation of rtl, the compiler makes no further distinction
- between pointers and any other objects of this machine mode. */
-#define Pmode SImode
-
-/* A function address in a call instruction
- is a byte address (for indexing purposes)
- so give the MEM rtx a byte's mode. */
-#define FUNCTION_MODE QImode
-
-/* Define this if addresses of constant functions
- shouldn't be put through pseudo regs where they can be cse'd.
- Desirable on the 386 because a CALL with a constant address is
- not much slower than one with a register address. */
-#define NO_FUNCTION_CSE
-
-/* Provide the costs of a rtl expression. This is in the body of a
- switch on CODE. */
-
-#define RTX_COSTS(X,CODE,OUTER_CODE) \
- case MULT: \
- return COSTS_N_INSNS (10); \
- case DIV: \
- case UDIV: \
- case MOD: \
- case UMOD: \
- return COSTS_N_INSNS (40); \
- case PLUS: \
- if (GET_CODE (XEXP (X, 0)) == REG \
- && GET_CODE (XEXP (X, 1)) == CONST_INT) \
- return 1; \
- break;
-
-
-/* Compute the cost of computing a constant rtl expression RTX
- whose rtx-code is CODE. The body of this macro is a portion
- of a switch statement. If the code is computed here,
- return it with a return statement. Otherwise, break from the switch. */
-
-#define CONST_COSTS(RTX,CODE,OUTER_CODE) \
- case CONST_INT: \
- case CONST: \
- case LABEL_REF: \
- case SYMBOL_REF: \
- return flag_pic && SYMBOLIC_CONST (RTX) ? 2 : 0; \
- case CONST_DOUBLE: \
- { \
- int code; \
- if (GET_MODE (RTX) == VOIDmode) \
- return 2; \
- code = standard_80387_constant_p (RTX); \
- return code == 1 ? 0 : \
- code == 2 ? 1 : \
- 2; \
- }
-
-/* Compute the cost of an address. This is meant to approximate the size
- and/or execution delay of an insn using that address. If the cost is
- approximated by the RTL complexity, including CONST_COSTS above, as
- is usually the case for CISC machines, this macro should not be defined.
- For aggressively RISCy machines, only one insn format is allowed, so
- this macro should be a constant. The value of this macro only matters
- for valid addresses.
-
- For i386, it is better to use a complex address than let gcc copy
- the address into a reg and make a new pseudo. But not if the address
- requires to two regs - that would mean more pseudos with longer
- lifetimes. */
-
-#define ADDRESS_COST(RTX) \
- ((CONSTANT_P (RTX) \
- || (GET_CODE (RTX) == PLUS && CONSTANT_P (XEXP (RTX, 1)) \
- && REG_P (XEXP (RTX, 0)))) ? 0 \
- : REG_P (RTX) ? 1 \
- : 2)
-
-/* Add any extra modes needed to represent the condition code.
-
- For the i386, we need separate modes when floating-point equality
- comparisons are being done. */
-
-#define EXTRA_CC_MODES CCFPEQmode
-
-/* Define the names for the modes specified above. */
-#define EXTRA_CC_NAMES "CCFPEQ"
-
-/* Given a comparison code (EQ, NE, etc.) and the first operand of a COMPARE,
- return the mode to be used for the comparison.
-
- For floating-point equality comparisons, CCFPEQmode should be used.
- VOIDmode should be used in all other cases. */
-
-#define SELECT_CC_MODE(OP,X,Y) \
- (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \
- && ((OP) == EQ || (OP) == NE) ? CCFPEQmode : VOIDmode)
-
-/* Define the information needed to generate branch and scc insns. This is
- stored from the compare operation. Note that we can't use "rtx" here
- since it hasn't been defined! */
-
-extern struct rtx_def *(*i386_compare_gen)(), *(*i386_compare_gen_eq)();
-
-/* Tell final.c how to eliminate redundant test instructions. */
-
-/* Here we define machine-dependent flags and fields in cc_status
- (see `conditions.h'). */
-
-/* Set if the cc value is actually in the 80387, so a floating point
- conditional branch must be output. */
-#define CC_IN_80387 04000
-
-/* Set if the CC value was stored in a nonstandard way, so that
- the state of equality is indicated by zero in the carry bit. */
-#define CC_Z_IN_NOT_C 010000
-
-/* Store in cc_status the expressions
- that the condition codes will describe
- after execution of an instruction whose pattern is EXP.
- Do not alter them if the instruction would not alter the cc's. */
-
-#define NOTICE_UPDATE_CC(EXP, INSN) \
- notice_update_cc((EXP))
-
-/* Output a signed jump insn. Use template NORMAL ordinarily, or
- FLOAT following a floating point comparison.
- Use NO_OV following an arithmetic insn that set the cc's
- before a test insn that was deleted.
- NO_OV may be zero, meaning final should reinsert the test insn
- because the jump cannot be handled properly without it. */
-
-#define OUTPUT_JUMP(NORMAL, FLOAT, NO_OV) \
-{ \
- if (cc_prev_status.flags & CC_IN_80387) \
- return FLOAT; \
- if (cc_prev_status.flags & CC_NO_OVERFLOW) \
- return NO_OV; \
- return NORMAL; \
-}
-
-/* Control the assembler format that we output, to the extent
- this does not vary between assemblers. */
-
-/* How to refer to registers in assembler output.
- This sequence is indexed by compiler's hard-register-number (see above). */
-
-/* In order to refer to the first 8 regs as 32 bit regs prefix an "e"
- For non floating point regs, the following are the HImode names.
-
- For float regs, the stack top is sometimes referred to as "%st(0)"
- instead of just "%st". PRINT_REG handles this with the "y" code. */
-
-#define HI_REGISTER_NAMES \
-{"ax","dx","cx","bx","si","di","bp","sp", \
- "st","st(1)","st(2)","st(3)","st(4)","st(5)","st(6)","st(7)","" }
-
-#define REGISTER_NAMES HI_REGISTER_NAMES
-
-/* Table of additional register names to use in user input. */
-
-#define ADDITIONAL_REGISTER_NAMES \
-{ "eax", 0, "edx", 1, "ecx", 2, "ebx", 3, \
- "esi", 4, "edi", 5, "ebp", 6, "esp", 7, \
- "al", 0, "dl", 1, "cl", 2, "bl", 3, \
- "ah", 0, "dh", 1, "ch", 2, "bh", 3 }
-
-/* Note we are omitting these since currently I don't know how
-to get gcc to use these, since they want the same but different
-number as al, and ax.
-*/
-
-/* note the last four are not really qi_registers, but
- the md will have to never output movb into one of them
- only a movw . There is no movb into the last four regs */
-
-#define QI_REGISTER_NAMES \
-{"al", "dl", "cl", "bl", "si", "di", "bp", "sp",}
-
-/* These parallel the array above, and can be used to access bits 8:15
- of regs 0 through 3. */
-
-#define QI_HIGH_REGISTER_NAMES \
-{"ah", "dh", "ch", "bh", }
-
-/* How to renumber registers for dbx and gdb. */
-
-/* {0,2,1,3,6,7,4,5,12,13,14,15,16,17} */
-#define DBX_REGISTER_NUMBER(n) \
-((n) == 0 ? 0 : \
- (n) == 1 ? 2 : \
- (n) == 2 ? 1 : \
- (n) == 3 ? 3 : \
- (n) == 4 ? 6 : \
- (n) == 5 ? 7 : \
- (n) == 6 ? 4 : \
- (n) == 7 ? 5 : \
- (n) + 4)
-
-/* This is how to output the definition of a user-level label named NAME,
- such as the label on a static function or variable NAME. */
-
-#define ASM_OUTPUT_LABEL(FILE,NAME) \
- (assemble_name (FILE, NAME), fputs (":\n", FILE))
-
-/* This is how to output an assembler line defining a `double' constant. */
-
-#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \
-do { long l[2]; \
- REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \
- if (sizeof (int) == sizeof (long)) \
- fprintf (FILE, "%s 0x%x,0x%x\n", ASM_LONG, l[0], l[1]); \
- else \
- fprintf (FILE, "%s 0x%lx,0x%lx\n", ASM_LONG, l[0], l[1]); \
- } while (0)
-
-/* This is how to output a `long double' extended real constant. */
-
-#undef ASM_OUTPUT_LONG_DOUBLE
-#define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \
-do { long l[3]; \
- REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, l); \
- if (sizeof (int) == sizeof (long)) \
- fprintf (FILE, "%s 0x%x,0x%x,0x%x\n", ASM_LONG, l[0], l[1], l[2]); \
- else \
- fprintf (FILE, "%s 0x%lx,0x%lx,0x%lx\n", ASM_LONG, l[0], l[1], l[2]); \
- } while (0)
-
-/* This is how to output an assembler line defining a `float' constant. */
-
-#define ASM_OUTPUT_FLOAT(FILE,VALUE) \
-do { long l; \
- REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \
- if (sizeof (int) == sizeof (long)) \
- fprintf ((FILE), "%s 0x%x\n", ASM_LONG, l); \
- else \
- fprintf ((FILE), "%s 0x%lx\n", ASM_LONG, l); \
- } while (0)
-
-/* Store in OUTPUT a string (made with alloca) containing
- an assembler-name for a local static variable named NAME.
- LABELNO is an integer which is different for each call. */
-
-#define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \
-( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10), \
- sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO)))
-
-
-
-/* This is how to output an assembler line defining an `int' constant. */
-
-#define ASM_OUTPUT_INT(FILE,VALUE) \
-( fprintf (FILE, "%s ", ASM_LONG), \
- output_addr_const (FILE,(VALUE)), \
- putc('\n',FILE))
-
-/* Likewise for `char' and `short' constants. */
-/* is this supposed to do align too?? */
-
-#define ASM_OUTPUT_SHORT(FILE,VALUE) \
-( fprintf (FILE, "%s ", ASM_SHORT), \
- output_addr_const (FILE,(VALUE)), \
- putc('\n',FILE))
-
-/*
-#define ASM_OUTPUT_SHORT(FILE,VALUE) \
-( fprintf (FILE, "%s ", ASM_BYTE_OP), \
- output_addr_const (FILE,(VALUE)), \
- fputs (",", FILE), \
- output_addr_const (FILE,(VALUE)), \
- fputs (" >> 8\n",FILE))
-*/
-
-
-#define ASM_OUTPUT_CHAR(FILE,VALUE) \
-( fprintf (FILE, "%s ", ASM_BYTE_OP), \
- output_addr_const (FILE, (VALUE)), \
- putc ('\n', FILE))
-
-/* This is how to output an assembler line for a numeric constant byte. */
-
-#define ASM_OUTPUT_BYTE(FILE,VALUE) \
- fprintf ((FILE), "%s 0x%x\n", ASM_BYTE_OP, (VALUE))
-
-/* This is how to output an insn to push a register on the stack.
- It need not be very fast code. */
-
-#define ASM_OUTPUT_REG_PUSH(FILE,REGNO) \
- fprintf (FILE, "\tpushl e%s\n", 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, "\tpopl e%s\n", reg_names[REGNO])
-
-/* This is how to output an element of a case-vector that is absolute.
- */
-
-#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
- fprintf (FILE, "%s %s%d\n", ASM_LONG, LPREFIX, VALUE)
-
-/* This is how to output an element of a case-vector that is relative.
- We don't use these on the 386 yet, because the ATT assembler can't do
- forward reference the differences.
- */
-
-#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \
- fprintf (FILE, "\t.word %s%d-%s%d\n",LPREFIX, VALUE,LPREFIX, REL)
-
-/* Define the parentheses used to group arithmetic operations
- in assembler code. */
-
-#define ASM_OPEN_PAREN ""
-#define ASM_CLOSE_PAREN ""
-
-/* Define results of standard character escape sequences. */
-#define TARGET_BELL 007
-#define TARGET_BS 010
-#define TARGET_TAB 011
-#define TARGET_NEWLINE 012
-#define TARGET_VT 013
-#define TARGET_FF 014
-#define TARGET_CR 015
-
-/* Print operand X (an rtx) in assembler syntax to file FILE.
- CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.
- The CODE z takes the size of operand from the following digit, and
- outputs b,w,or l respectively.
-
- On the 80386, we use several such letters:
- f -- float insn (print a CONST_DOUBLE as a float rather than in hex).
- L,W,B,Q,S,T -- print the opcode suffix for specified size of operand.
- R -- print the prefix for register names.
- z -- print the opcode suffix for the size of the current operand.
- * -- print a star (in certain assembler syntax)
- w -- print the operand as if it's a "word" (HImode) even if it isn't.
- b -- print the operand as if it's a byte (QImode) even if it isn't.
- c -- don't print special prefixes before constant operands. */
-
-#define PRINT_OPERAND_PUNCT_VALID_P(CODE) \
- ((CODE) == '*')
-
-/* Print the name of a register based on its machine mode and number.
- If CODE is 'w', pretend the mode is HImode.
- If CODE is 'b', pretend the mode is QImode.
- If CODE is 'k', pretend the mode is SImode.
- If CODE is 'h', pretend the reg is the `high' byte register.
- If CODE is 'y', print "st(0)" instead of "st", if the reg is stack op. */
-
-extern char *hi_reg_name[];
-extern char *qi_reg_name[];
-extern char *qi_high_reg_name[];
-
-#define PRINT_REG(X, CODE, FILE) \
- do { if (REGNO (X) == ARG_POINTER_REGNUM) \
- abort (); \
- fprintf (FILE, "%s", RP); \
- switch ((CODE == 'w' ? 2 \
- : CODE == 'b' ? 1 \
- : CODE == 'k' ? 4 \
- : CODE == 'y' ? 3 \
- : CODE == 'h' ? 0 \
- : GET_MODE_SIZE (GET_MODE (X)))) \
- { \
- case 3: \
- if (STACK_TOP_P (X)) \
- { \
- fputs ("st(0)", FILE); \
- break; \
- } \
- case 4: \
- case 8: \
- case 12: \
- if (! FP_REG_P (X)) fputs ("e", FILE); \
- case 2: \
- fputs (hi_reg_name[REGNO (X)], FILE); \
- break; \
- case 1: \
- fputs (qi_reg_name[REGNO (X)], FILE); \
- break; \
- case 0: \
- fputs (qi_high_reg_name[REGNO (X)], FILE); \
- break; \
- } \
- } while (0)
-
-#define PRINT_OPERAND(FILE, X, CODE) \
- print_operand (FILE, X, CODE)
-
-#define PRINT_OPERAND_ADDRESS(FILE, ADDR) \
- print_operand_address (FILE, ADDR)
-
-/* Print the name of a register for based on its machine mode and number.
- This macro is used to print debugging output.
- This macro is different from PRINT_REG in that it may be used in
- programs that are not linked with aux-output.o. */
-
-#define DEBUG_PRINT_REG(X, CODE, FILE) \
- do { static char *hi_name[] = HI_REGISTER_NAMES; \
- static char *qi_name[] = QI_REGISTER_NAMES; \
- fprintf (FILE, "%d %s", REGNO (X), RP); \
- if (REGNO (X) == ARG_POINTER_REGNUM) \
- { fputs ("argp", FILE); break; } \
- if (STACK_TOP_P (X)) \
- { fputs ("st(0)", FILE); break; } \
- if (FP_REG_P (X)) \
- { fputs (hi_name[REGNO(X)], FILE); break; } \
- switch (GET_MODE_SIZE (GET_MODE (X))) \
- { \
- default: \
- fputs ("e", FILE); \
- case 2: \
- fputs (hi_name[REGNO (X)], FILE); \
- break; \
- case 1: \
- fputs (qi_name[REGNO (X)], FILE); \
- break; \
- } \
- } while (0)
-
-/* Output the prefix for an immediate operand, or for an offset operand. */
-#define PRINT_IMMED_PREFIX(FILE) fputs (IP, (FILE))
-#define PRINT_OFFSET_PREFIX(FILE) fputs (IP, (FILE))
-
-/* Routines in libgcc that return floats must return them in an fp reg,
- just as other functions do which return such values.
- These macros make that happen. */
-
-#define FLOAT_VALUE_TYPE float
-#define INTIFY(FLOATVAL) FLOATVAL
-
-/* Nonzero if INSN magically clobbers register REGNO. */
-
-/* #define INSN_CLOBBERS_REGNO_P(INSN, REGNO) \
- (FP_REGNO_P (REGNO) \
- && (GET_CODE (INSN) == JUMP_INSN || GET_CODE (INSN) == BARRIER))
-*/
-
-/* a letter which is not needed by the normal asm syntax, which
- we can use for operand syntax in the extended asm */
-
-#define ASM_OPERAND_LETTER '#'
-
-#define RET return ""
-#define AT_SP(mode) (gen_rtx (MEM, (mode), stack_pointer_rtx))
-
-/* Functions in i386.c */
-extern void override_options ();
-extern void order_regs_for_local_alloc ();
-extern void output_op_from_reg ();
-extern void output_to_reg ();
-extern char *singlemove_string ();
-extern char *output_move_double ();
-extern char *output_move_memory ();
-extern char *output_move_pushmem ();
-extern int standard_80387_constant_p ();
-extern char *output_move_const_single ();
-extern int symbolic_operand ();
-extern int call_insn_operand ();
-extern int expander_call_insn_operand ();
-extern int symbolic_reference_mentioned_p ();
-extern void emit_pic_move ();
-extern void function_prologue ();
-extern int simple_386_epilogue ();
-extern void function_epilogue ();
-extern int legitimate_address_p ();
-extern struct rtx_def *legitimize_pic_address ();
-extern struct rtx_def *legitimize_address ();
-extern void print_operand ();
-extern void print_operand_address ();
-extern void notice_update_cc ();
-extern void split_di ();
-extern int binary_387_op ();
-extern int shift_op ();
-extern int VOIDmode_compare_op ();
-extern char *output_387_binary_op ();
-extern char *output_fix_trunc ();
-extern char *output_float_compare ();
-extern char *output_fp_cc0_set ();
-extern void save_386_machine_status ();
-extern void restore_386_machine_status ();
-extern void clear_386_stack_locals ();
-extern struct rtx_def *assign_386_stack_local ();
-
-/* Variables in i386.c */
-extern char *i386_reg_alloc_order; /* register allocation order */
-extern char *hi_reg_name[]; /* names for 16 bit regs */
-extern char *qi_reg_name[]; /* names for 8 bit regs (low) */
-extern char *qi_high_reg_name[]; /* names for 8 bit regs (high) */
-extern enum reg_class regclass_map[]; /* smalled class containing REGNO */
-extern struct rtx_def *i386_compare_op0; /* operand 0 for comparisons */
-extern struct rtx_def *i386_compare_op1; /* operand 1 for comparisons */
-
-/* External variables used */
-extern int optimize; /* optimization level */
-extern int obey_regdecls; /* TRUE if stupid register allocation */
-
-/* External functions used */
-extern struct rtx_def *force_operand ();
-
-/*
-Local variables:
-version-control: t
-End:
-*/
diff --git a/gnu/usr.bin/cc/include/i386/perform.h b/gnu/usr.bin/cc/include/i386/perform.h
deleted file mode 100644
index 4fdd7b306740..000000000000
--- a/gnu/usr.bin/cc/include/i386/perform.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/* Definitions for AT&T assembler syntax for the Intel 80386.
- Copyright (C) 1993 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* Defines to be able to build libgcc.a with GCC. */
-
-/* It might seem that these are not important, since gcc 2 will never
- call libgcc for these functions. But programs might be linked with
- code compiled by gcc 1, and then these will be used. */
-
-/* The arg names used to be a and b, but `a' appears inside strings
- and that confuses non-ANSI cpp. */
-
-#define perform_udivsi3(arg0,arg1) \
-{ \
- register int dx asm("dx"); \
- register int ax asm("ax"); \
- \
- dx = 0; \
- ax = arg0; \
- asm ("divl %3" : "=a" (ax), "=d" (dx) : "a" (ax), "g" (arg1), "d" (dx)); \
- return ax; \
-}
-
-#define perform_divsi3(arg0,arg1) \
-{ \
- register int dx asm("dx"); \
- register int ax asm("ax"); \
- register int cx asm("cx"); \
- \
- ax = arg0; \
- cx = arg1; \
- asm ("cltd\n\tidivl %3" : "=a" (ax), "=&d" (dx) : "a" (ax), "c" (cx)); \
- return ax; \
-}
-
-#define perform_umodsi3(arg0,arg1) \
-{ \
- register int dx asm("dx"); \
- register int ax asm("ax"); \
- \
- dx = 0; \
- ax = arg0; \
- asm ("divl %3" : "=a" (ax), "=d" (dx) : "a" (ax), "g" (arg1), "d" (dx)); \
- return dx; \
-}
-
-#define perform_modsi3(arg0,arg1) \
-{ \
- register int dx asm("dx"); \
- register int ax asm("ax"); \
- register int cx asm("cx"); \
- \
- ax = arg0; \
- cx = arg1; \
- asm ("cltd\n\tidivl %3" : "=a" (ax), "=&d" (dx) : "a" (ax), "c" (cx)); \
- return dx; \
-}
-
-#define perform_fixdfsi(arg0) \
-{ \
- auto unsigned short ostatus; \
- auto unsigned short nstatus; \
- auto int ret; \
- auto double tmp; \
- \
- &ostatus; /* guarantee these land in memory */ \
- &nstatus; \
- &ret; \
- &tmp; \
- \
- asm volatile ("fnstcw %0" : "=m" (ostatus)); \
- nstatus = ostatus | 0x0c00; \
- asm volatile ("fldcw %0" : /* no outputs */ : "m" (nstatus)); \
- tmp = arg0; \
- asm volatile ("fldl %0" : /* no outputs */ : "m" (tmp)); \
- asm volatile ("fistpl %0" : "=m" (ret)); \
- asm volatile ("fldcw %0" : /* no outputs */ : "m" (ostatus)); \
- \
- return ret; \
-}
-
diff --git a/gnu/usr.bin/cc/include/i386/unix.h b/gnu/usr.bin/cc/include/i386/unix.h
deleted file mode 100644
index 0f0b5d5c5312..000000000000
--- a/gnu/usr.bin/cc/include/i386/unix.h
+++ /dev/null
@@ -1,146 +0,0 @@
-/* Definitions for Unix assembler syntax for the Intel 80386.
- Copyright (C) 1988, 1994 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* This file defines the aspects of assembler syntax
- that are the same for all the i386 Unix systems
- (though they may differ in non-Unix systems). */
-
-/* Define some concatenation macros to concatenate an opcode
- and one, two or three operands. In other assembler syntaxes
- they may alter the order of ther operands. */
-
-/* Note that the other files fail to use these
- in some of the places where they should. */
-
-#if defined(__STDC__) || defined(ALMOST_STDC)
-#define AS2(a,b,c) #a " " #b "," #c
-#define AS2C(b,c) " " #b "," #c
-#define AS3(a,b,c,d) #a " " #b "," #c "," #d
-#define AS1(a,b) #a " " #b
-#else
-#define AS1(a,b) "a b"
-#define AS2(a,b,c) "a b,c"
-#define AS2C(b,c) " b,c"
-#define AS3(a,b,c,d) "a b,c,d"
-#endif
-
-/* Define macro used to output shift-double opcodes when the shift
- count is in %cl. Some assemblers require %cl as an argument;
- some don't. This macro controls what to do: by default, don't
- print %cl. */
-#define AS3_SHIFT_DOUBLE(a,b,c,d) AS2 (a,c,d)
-
-/* Output the size-letter for an opcode.
- CODE is the letter used in an operand spec (L, B, W, S or Q).
- CH is the corresponding lower case letter
- (except if CODE is `Q' then CH is `l', unless GAS_MNEMONICS). */
-#define PUT_OP_SIZE(CODE,CH,FILE) putc (CH,(FILE))
-
-/* Opcode suffix for fullword insn. */
-#define L_SIZE "l"
-
-/* Prefix for register names in this syntax. */
-#define RP "%"
-
-/* Prefix for immediate operands in this syntax. */
-#define IP "$"
-
-/* Indirect call instructions should use `*'. */
-#define USE_STAR 1
-
-/* Prefix for a memory-operand X. */
-#define PRINT_PTR(X, FILE)
-
-/* Delimiters that surround base reg and index reg. */
-#define ADDR_BEG(FILE) putc('(', (FILE))
-#define ADDR_END(FILE) putc(')', (FILE))
-
-/* Print an index register (whose rtx is IREG). */
-#define PRINT_IREG(FILE,IREG) \
- do \
- { fputs (",", (FILE)); PRINT_REG ((IREG), 0, (FILE)); } \
- while (0)
-
-/* Print an index scale factor SCALE. */
-#define PRINT_SCALE(FILE,SCALE) \
- if ((SCALE) != 1) fprintf ((FILE), ",%d", (SCALE))
-
-/* Print a base/index combination.
- BREG is the base reg rtx, IREG is the index reg rtx,
- and SCALE is the index scale factor (an integer). */
-
-#define PRINT_B_I_S(BREG,IREG,SCALE,FILE) \
- { ADDR_BEG (FILE); \
- if (BREG) PRINT_REG ((BREG), 0, (FILE)); \
- if ((IREG) != 0) \
- { PRINT_IREG ((FILE), (IREG)); \
- PRINT_SCALE ((FILE), (SCALE)); } \
- ADDR_END (FILE); }
-
-/* Define the syntax of pseudo-ops, labels and comments. */
-
-/* String containing the assembler's comment-starter. */
-
-#define ASM_COMMENT_START "/"
-
-/* Output to assembler file text saying following lines
- may contain character constants, extra white space, comments, etc. */
-
-#define ASM_APP_ON "/APP\n"
-
-/* Output to assembler file text saying following lines
- no longer contain unusual constructs. */
-
-#define ASM_APP_OFF "/NO_APP\n"
-
-/* Output before read-only data. */
-
-#define TEXT_SECTION_ASM_OP ".text"
-
-/* Output before writable (initialized) data. */
-
-#define DATA_SECTION_ASM_OP ".data"
-
-/* Output before writable (uninitialized) data. */
-
-#define BSS_SECTION_ASM_OP ".bss"
-
-/* This is how to output a command to make the user-level label named NAME
- defined for reference from other files. */
-
-#define ASM_GLOBALIZE_LABEL(FILE,NAME) \
- (fputs (".globl ", FILE), assemble_name (FILE, NAME), fputs ("\n", FILE))
-
-/* By default, target has a 80387, uses IEEE compatible arithmetic,
- and returns float values in the 387, ie,
- (TARGET_80387 | TARGET_IEEE_FP | TARGET_FLOAT_RETURNS_IN_80387) */
-
-#define TARGET_DEFAULT 0301
-
-/* Floating-point return values come in the FP register. */
-
-#define VALUE_REGNO(MODE) \
- (GET_MODE_CLASS (MODE) == MODE_FLOAT \
- && TARGET_FLOAT_RETURNS_IN_80387 ? FIRST_FLOAT_REG : 0)
-
-/* 1 if N is a possible register number for a function value. */
-
-#define FUNCTION_VALUE_REGNO_P(N) \
- ((N) == 0 || ((N)== FIRST_FLOAT_REG && TARGET_FLOAT_RETURNS_IN_80387))
-
diff --git a/gnu/usr.bin/cc/include/input.h b/gnu/usr.bin/cc/include/input.h
deleted file mode 100644
index 39590e2eb5e3..000000000000
--- a/gnu/usr.bin/cc/include/input.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Declarations for variables relating to reading the source file.
- Used by parsers, lexical analyzers, and error message routines.
-
- Copyright (C) 1993 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* Source file current line is coming from. */
-extern char *input_filename;
-
-/* Top-level source file. */
-extern char *main_input_filename;
-
-/* Line number in current source file. */
-extern int lineno;
-
-/* Stream for reading from input file. */
-extern FILE *finput;
-
-struct file_stack
- {
- char *name;
- struct file_stack *next;
- int line;
- };
-
-/* Stack of currently pending input files.
- The line member is not accurate for the innermost file on the stack. */
-extern struct file_stack *input_file_stack;
-
-/* Incremented on each change to input_file_stack. */
-extern int input_file_stack_tick;
diff --git a/gnu/usr.bin/cc/include/insn-attr.h b/gnu/usr.bin/cc/include/insn-attr.h
deleted file mode 100644
index 5fe9a2f80012..000000000000
--- a/gnu/usr.bin/cc/include/insn-attr.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Generated automatically by the program `genattr'
-from the machine description file `md'. */
-
-#ifndef PROTO
-#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__)
-#define PROTO(ARGS) ARGS
-#else
-#define PROTO(ARGS) ()
-#endif
-#endif
-#define HAVE_ATTR_alternative
-#define get_attr_alternative(insn) which_alternative
-
-#define ATTR_FLAG_forward 0x1
-#define ATTR_FLAG_backward 0x2
-#define ATTR_FLAG_likely 0x4
-#define ATTR_FLAG_very_likely 0x8
-#define ATTR_FLAG_unlikely 0x10
-#define ATTR_FLAG_very_unlikely 0x20
diff --git a/gnu/usr.bin/cc/include/insn-codes.h b/gnu/usr.bin/cc/include/insn-codes.h
deleted file mode 100644
index 2c5c593fda6c..000000000000
--- a/gnu/usr.bin/cc/include/insn-codes.h
+++ /dev/null
@@ -1,216 +0,0 @@
-/* Generated automatically by the program `gencodes'
-from the machine description file `md'. */
-
-#ifndef MAX_INSN_CODE
-
-enum insn_code {
- CODE_FOR_tstsi_1 = 0,
- CODE_FOR_tstsi = 1,
- CODE_FOR_tsthi_1 = 2,
- CODE_FOR_tsthi = 3,
- CODE_FOR_tstqi_1 = 4,
- CODE_FOR_tstqi = 5,
- CODE_FOR_tstsf_cc = 6,
- CODE_FOR_tstsf = 7,
- CODE_FOR_tstdf_cc = 8,
- CODE_FOR_tstdf = 9,
- CODE_FOR_tstxf_cc = 10,
- CODE_FOR_tstxf = 11,
- CODE_FOR_cmpsi_1 = 12,
- CODE_FOR_cmpsi = 13,
- CODE_FOR_cmphi_1 = 14,
- CODE_FOR_cmphi = 15,
- CODE_FOR_cmpqi_1 = 16,
- CODE_FOR_cmpqi = 17,
- CODE_FOR_cmpsf_cc_1 = 30,
- CODE_FOR_cmpxf = 34,
- CODE_FOR_cmpdf = 35,
- CODE_FOR_cmpsf = 36,
- CODE_FOR_cmpxf_cc = 37,
- CODE_FOR_cmpxf_ccfpeq = 38,
- CODE_FOR_cmpdf_cc = 39,
- CODE_FOR_cmpdf_ccfpeq = 40,
- CODE_FOR_cmpsf_cc = 41,
- CODE_FOR_cmpsf_ccfpeq = 42,
- CODE_FOR_movsi = 49,
- CODE_FOR_movhi = 54,
- CODE_FOR_movstricthi = 56,
- CODE_FOR_movqi = 61,
- CODE_FOR_movstrictqi = 63,
- CODE_FOR_movsf = 65,
- CODE_FOR_movsf_push_nomove = 66,
- CODE_FOR_movsf_push = 67,
- CODE_FOR_movsf_mem = 68,
- CODE_FOR_movsf_normal = 69,
- CODE_FOR_swapsf = 70,
- CODE_FOR_movdf = 71,
- CODE_FOR_movdf_push_nomove = 72,
- CODE_FOR_movdf_push = 73,
- CODE_FOR_movdf_mem = 74,
- CODE_FOR_movdf_normal = 75,
- CODE_FOR_swapdf = 76,
- CODE_FOR_movxf = 77,
- CODE_FOR_movxf_push_nomove = 78,
- CODE_FOR_movxf_push = 79,
- CODE_FOR_movxf_mem = 80,
- CODE_FOR_movxf_normal = 81,
- CODE_FOR_swapxf = 82,
- CODE_FOR_movdi = 84,
- CODE_FOR_zero_extendhisi2 = 85,
- CODE_FOR_zero_extendqihi2 = 86,
- CODE_FOR_zero_extendqisi2 = 87,
- CODE_FOR_zero_extendsidi2 = 88,
- CODE_FOR_extendsidi2 = 89,
- CODE_FOR_extendhisi2 = 90,
- CODE_FOR_extendqihi2 = 91,
- CODE_FOR_extendqisi2 = 92,
- CODE_FOR_extendsfdf2 = 93,
- CODE_FOR_extenddfxf2 = 94,
- CODE_FOR_extendsfxf2 = 95,
- CODE_FOR_truncdfsf2 = 96,
- CODE_FOR_truncxfsf2 = 98,
- CODE_FOR_truncxfdf2 = 99,
- CODE_FOR_fixuns_truncxfsi2 = 100,
- CODE_FOR_fixuns_truncdfsi2 = 101,
- CODE_FOR_fixuns_truncsfsi2 = 102,
- CODE_FOR_fix_truncxfdi2 = 103,
- CODE_FOR_fix_truncdfdi2 = 104,
- CODE_FOR_fix_truncsfdi2 = 105,
- CODE_FOR_fix_truncxfsi2 = 109,
- CODE_FOR_fix_truncdfsi2 = 110,
- CODE_FOR_fix_truncsfsi2 = 111,
- CODE_FOR_floatsisf2 = 115,
- CODE_FOR_floatdisf2 = 116,
- CODE_FOR_floatsidf2 = 117,
- CODE_FOR_floatdidf2 = 118,
- CODE_FOR_floatsixf2 = 119,
- CODE_FOR_floatdixf2 = 120,
- CODE_FOR_adddi3 = 127,
- CODE_FOR_addsi3 = 128,
- CODE_FOR_addhi3 = 129,
- CODE_FOR_addqi3 = 130,
- CODE_FOR_movsi_lea = 131,
- CODE_FOR_addxf3 = 132,
- CODE_FOR_adddf3 = 133,
- CODE_FOR_addsf3 = 134,
- CODE_FOR_subdi3 = 135,
- CODE_FOR_subsi3 = 136,
- CODE_FOR_subhi3 = 137,
- CODE_FOR_subqi3 = 138,
- CODE_FOR_subxf3 = 139,
- CODE_FOR_subdf3 = 140,
- CODE_FOR_subsf3 = 141,
- CODE_FOR_mulhi3 = 143,
- CODE_FOR_mulsi3 = 145,
- CODE_FOR_umulqihi3 = 146,
- CODE_FOR_mulqihi3 = 147,
- CODE_FOR_umulsidi3 = 148,
- CODE_FOR_mulsidi3 = 149,
- CODE_FOR_umulsi3_highpart = 150,
- CODE_FOR_smulsi3_highpart = 151,
- CODE_FOR_mulxf3 = 152,
- CODE_FOR_muldf3 = 153,
- CODE_FOR_mulsf3 = 154,
- CODE_FOR_divqi3 = 155,
- CODE_FOR_udivqi3 = 156,
- CODE_FOR_divxf3 = 157,
- CODE_FOR_divdf3 = 158,
- CODE_FOR_divsf3 = 159,
- CODE_FOR_divmodsi4 = 160,
- CODE_FOR_divmodhi4 = 161,
- CODE_FOR_udivmodsi4 = 162,
- CODE_FOR_udivmodhi4 = 163,
- CODE_FOR_andsi3 = 164,
- CODE_FOR_andhi3 = 165,
- CODE_FOR_andqi3 = 166,
- CODE_FOR_iorsi3 = 167,
- CODE_FOR_iorhi3 = 168,
- CODE_FOR_iorqi3 = 169,
- CODE_FOR_xorsi3 = 170,
- CODE_FOR_xorhi3 = 171,
- CODE_FOR_xorqi3 = 172,
- CODE_FOR_negdi2 = 173,
- CODE_FOR_negsi2 = 174,
- CODE_FOR_neghi2 = 175,
- CODE_FOR_negqi2 = 176,
- CODE_FOR_negsf2 = 177,
- CODE_FOR_negdf2 = 178,
- CODE_FOR_negxf2 = 180,
- CODE_FOR_abssf2 = 182,
- CODE_FOR_absdf2 = 183,
- CODE_FOR_absxf2 = 185,
- CODE_FOR_sqrtsf2 = 187,
- CODE_FOR_sqrtdf2 = 188,
- CODE_FOR_sqrtxf2 = 190,
- CODE_FOR_sindf2 = 193,
- CODE_FOR_sinsf2 = 194,
- CODE_FOR_cosdf2 = 196,
- CODE_FOR_cossf2 = 197,
- CODE_FOR_one_cmplsi2 = 199,
- CODE_FOR_one_cmplhi2 = 200,
- CODE_FOR_one_cmplqi2 = 201,
- CODE_FOR_ashldi3 = 202,
- CODE_FOR_ashldi3_const_int = 203,
- CODE_FOR_ashldi3_non_const_int = 204,
- CODE_FOR_ashlsi3 = 205,
- CODE_FOR_ashlhi3 = 206,
- CODE_FOR_ashlqi3 = 207,
- CODE_FOR_ashrdi3 = 208,
- CODE_FOR_ashrdi3_const_int = 209,
- CODE_FOR_ashrdi3_non_const_int = 210,
- CODE_FOR_ashrsi3 = 211,
- CODE_FOR_ashrhi3 = 212,
- CODE_FOR_ashrqi3 = 213,
- CODE_FOR_lshrdi3 = 214,
- CODE_FOR_lshrdi3_const_int = 215,
- CODE_FOR_lshrdi3_non_const_int = 216,
- CODE_FOR_lshrsi3 = 217,
- CODE_FOR_lshrhi3 = 218,
- CODE_FOR_lshrqi3 = 219,
- CODE_FOR_rotlsi3 = 220,
- CODE_FOR_rotlhi3 = 221,
- CODE_FOR_rotlqi3 = 222,
- CODE_FOR_rotrsi3 = 223,
- CODE_FOR_rotrhi3 = 224,
- CODE_FOR_rotrqi3 = 225,
- CODE_FOR_seq = 232,
- CODE_FOR_sne = 234,
- CODE_FOR_sgt = 236,
- CODE_FOR_sgtu = 238,
- CODE_FOR_slt = 240,
- CODE_FOR_sltu = 242,
- CODE_FOR_sge = 244,
- CODE_FOR_sgeu = 246,
- CODE_FOR_sle = 248,
- CODE_FOR_sleu = 250,
- CODE_FOR_beq = 252,
- CODE_FOR_bne = 254,
- CODE_FOR_bgt = 256,
- CODE_FOR_bgtu = 258,
- CODE_FOR_blt = 260,
- CODE_FOR_bltu = 262,
- CODE_FOR_bge = 264,
- CODE_FOR_bgeu = 266,
- CODE_FOR_ble = 268,
- CODE_FOR_bleu = 270,
- CODE_FOR_jump = 282,
- CODE_FOR_indirect_jump = 283,
- CODE_FOR_casesi = 284,
- CODE_FOR_tablejump = 286,
- CODE_FOR_call_pop = 287,
- CODE_FOR_call = 290,
- CODE_FOR_call_value_pop = 293,
- CODE_FOR_call_value = 296,
- CODE_FOR_untyped_call = 299,
- CODE_FOR_blockage = 300,
- CODE_FOR_return = 301,
- CODE_FOR_nop = 302,
- CODE_FOR_movstrsi = 303,
- CODE_FOR_cmpstrsi = 305,
- CODE_FOR_ffssi2 = 308,
- CODE_FOR_ffshi2 = 310,
- CODE_FOR_strlensi = 325,
- CODE_FOR_nothing };
-
-#define MAX_INSN_CODE ((int) CODE_FOR_nothing)
-#endif /* MAX_INSN_CODE */
diff --git a/gnu/usr.bin/cc/include/insn-config.h b/gnu/usr.bin/cc/include/insn-config.h
deleted file mode 100644
index 7dba8866f62f..000000000000
--- a/gnu/usr.bin/cc/include/insn-config.h
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Generated automatically by the program `genconfig'
-from the machine description file `md'. */
-
-
-#define MAX_RECOG_OPERANDS 10
-
-#define MAX_DUP_OPERANDS 3
-#ifndef MAX_INSNS_PER_SPLIT
-#define MAX_INSNS_PER_SPLIT 1
-#endif
-#define REGISTER_CONSTRAINTS
-#define HAVE_cc0
diff --git a/gnu/usr.bin/cc/include/insn-flags.h b/gnu/usr.bin/cc/include/insn-flags.h
deleted file mode 100644
index 625671e72df1..000000000000
--- a/gnu/usr.bin/cc/include/insn-flags.h
+++ /dev/null
@@ -1,643 +0,0 @@
-/* Generated automatically by the program `genflags'
-from the machine description file `md'. */
-
-#define HAVE_tstsi_1 1
-#define HAVE_tstsi 1
-#define HAVE_tsthi_1 1
-#define HAVE_tsthi 1
-#define HAVE_tstqi_1 1
-#define HAVE_tstqi 1
-#define HAVE_tstsf_cc (TARGET_80387 && ! TARGET_IEEE_FP)
-#define HAVE_tstsf (TARGET_80387 && ! TARGET_IEEE_FP)
-#define HAVE_tstdf_cc (TARGET_80387 && ! TARGET_IEEE_FP)
-#define HAVE_tstdf (TARGET_80387 && ! TARGET_IEEE_FP)
-#define HAVE_tstxf_cc (TARGET_80387 && ! TARGET_IEEE_FP)
-#define HAVE_tstxf (TARGET_80387 && ! TARGET_IEEE_FP)
-#define HAVE_cmpsi_1 (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)
-#define HAVE_cmpsi 1
-#define HAVE_cmphi_1 (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)
-#define HAVE_cmphi 1
-#define HAVE_cmpqi_1 (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)
-#define HAVE_cmpqi 1
-#define HAVE_cmpsf_cc_1 (TARGET_80387 \
- && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM))
-#define HAVE_cmpxf (TARGET_80387)
-#define HAVE_cmpdf (TARGET_80387)
-#define HAVE_cmpsf (TARGET_80387)
-#define HAVE_cmpxf_cc (TARGET_80387)
-#define HAVE_cmpxf_ccfpeq (TARGET_80387)
-#define HAVE_cmpdf_cc (TARGET_80387)
-#define HAVE_cmpdf_ccfpeq (TARGET_80387)
-#define HAVE_cmpsf_cc (TARGET_80387)
-#define HAVE_cmpsf_ccfpeq (TARGET_80387)
-#define HAVE_movsi 1
-#define HAVE_movhi 1
-#define HAVE_movstricthi 1
-#define HAVE_movqi 1
-#define HAVE_movstrictqi 1
-#define HAVE_movsf 1
-#define HAVE_movsf_push_nomove (!TARGET_MOVE)
-#define HAVE_movsf_push 1
-#define HAVE_movsf_mem 1
-#define HAVE_movsf_normal ((!TARGET_MOVE || GET_CODE (operands[0]) != MEM) || (GET_CODE (operands[1]) != MEM))
-#define HAVE_swapsf 1
-#define HAVE_movdf 1
-#define HAVE_movdf_push_nomove (!TARGET_MOVE)
-#define HAVE_movdf_push 1
-#define HAVE_movdf_mem 1
-#define HAVE_movdf_normal ((!TARGET_MOVE || GET_CODE (operands[0]) != MEM) || (GET_CODE (operands[1]) != MEM))
-#define HAVE_swapdf 1
-#define HAVE_movxf 1
-#define HAVE_movxf_push_nomove (!TARGET_MOVE)
-#define HAVE_movxf_push 1
-#define HAVE_movxf_mem 1
-#define HAVE_movxf_normal ((!TARGET_MOVE || GET_CODE (operands[0]) != MEM) || (GET_CODE (operands[1]) != MEM))
-#define HAVE_swapxf 1
-#define HAVE_movdi 1
-#define HAVE_zero_extendhisi2 1
-#define HAVE_zero_extendqihi2 1
-#define HAVE_zero_extendqisi2 1
-#define HAVE_zero_extendsidi2 1
-#define HAVE_extendsidi2 1
-#define HAVE_extendhisi2 1
-#define HAVE_extendqihi2 1
-#define HAVE_extendqisi2 1
-#define HAVE_extendsfdf2 (TARGET_80387)
-#define HAVE_extenddfxf2 (TARGET_80387)
-#define HAVE_extendsfxf2 (TARGET_80387)
-#define HAVE_truncdfsf2 (TARGET_80387)
-#define HAVE_truncxfsf2 (TARGET_80387)
-#define HAVE_truncxfdf2 (TARGET_80387)
-#define HAVE_fixuns_truncxfsi2 (TARGET_80387)
-#define HAVE_fixuns_truncdfsi2 (TARGET_80387)
-#define HAVE_fixuns_truncsfsi2 (TARGET_80387)
-#define HAVE_fix_truncxfdi2 (TARGET_80387)
-#define HAVE_fix_truncdfdi2 (TARGET_80387)
-#define HAVE_fix_truncsfdi2 (TARGET_80387)
-#define HAVE_fix_truncxfsi2 (TARGET_80387)
-#define HAVE_fix_truncdfsi2 (TARGET_80387)
-#define HAVE_fix_truncsfsi2 (TARGET_80387)
-#define HAVE_floatsisf2 (TARGET_80387)
-#define HAVE_floatdisf2 (TARGET_80387)
-#define HAVE_floatsidf2 (TARGET_80387)
-#define HAVE_floatdidf2 (TARGET_80387)
-#define HAVE_floatsixf2 (TARGET_80387)
-#define HAVE_floatdixf2 (TARGET_80387)
-#define HAVE_adddi3 1
-#define HAVE_addsi3 1
-#define HAVE_addhi3 1
-#define HAVE_addqi3 1
-#define HAVE_movsi_lea 1
-#define HAVE_addxf3 (TARGET_80387)
-#define HAVE_adddf3 (TARGET_80387)
-#define HAVE_addsf3 (TARGET_80387)
-#define HAVE_subdi3 1
-#define HAVE_subsi3 1
-#define HAVE_subhi3 1
-#define HAVE_subqi3 1
-#define HAVE_subxf3 (TARGET_80387)
-#define HAVE_subdf3 (TARGET_80387)
-#define HAVE_subsf3 (TARGET_80387)
-#define HAVE_mulhi3 1
-#define HAVE_mulsi3 1
-#define HAVE_umulqihi3 1
-#define HAVE_mulqihi3 1
-#define HAVE_umulsidi3 (TARGET_WIDE_MULTIPLY)
-#define HAVE_mulsidi3 (TARGET_WIDE_MULTIPLY)
-#define HAVE_umulsi3_highpart (TARGET_WIDE_MULTIPLY)
-#define HAVE_smulsi3_highpart (TARGET_WIDE_MULTIPLY)
-#define HAVE_mulxf3 (TARGET_80387)
-#define HAVE_muldf3 (TARGET_80387)
-#define HAVE_mulsf3 (TARGET_80387)
-#define HAVE_divqi3 1
-#define HAVE_udivqi3 1
-#define HAVE_divxf3 (TARGET_80387)
-#define HAVE_divdf3 (TARGET_80387)
-#define HAVE_divsf3 (TARGET_80387)
-#define HAVE_divmodsi4 1
-#define HAVE_divmodhi4 1
-#define HAVE_udivmodsi4 1
-#define HAVE_udivmodhi4 1
-#define HAVE_andsi3 1
-#define HAVE_andhi3 1
-#define HAVE_andqi3 1
-#define HAVE_iorsi3 1
-#define HAVE_iorhi3 1
-#define HAVE_iorqi3 1
-#define HAVE_xorsi3 1
-#define HAVE_xorhi3 1
-#define HAVE_xorqi3 1
-#define HAVE_negdi2 1
-#define HAVE_negsi2 1
-#define HAVE_neghi2 1
-#define HAVE_negqi2 1
-#define HAVE_negsf2 (TARGET_80387)
-#define HAVE_negdf2 (TARGET_80387)
-#define HAVE_negxf2 (TARGET_80387)
-#define HAVE_abssf2 (TARGET_80387)
-#define HAVE_absdf2 (TARGET_80387)
-#define HAVE_absxf2 (TARGET_80387)
-#define HAVE_sqrtsf2 (! TARGET_NO_FANCY_MATH_387 && TARGET_80387 \
- && (TARGET_IEEE_FP || flag_fast_math) )
-#define HAVE_sqrtdf2 (! TARGET_NO_FANCY_MATH_387 && TARGET_80387 \
- && (TARGET_IEEE_FP || flag_fast_math) )
-#define HAVE_sqrtxf2 (! TARGET_NO_FANCY_MATH_387 && TARGET_80387 \
- && (TARGET_IEEE_FP || flag_fast_math) )
-#define HAVE_sindf2 (! TARGET_NO_FANCY_MATH_387 && TARGET_80387 \
- && (TARGET_IEEE_FP || flag_fast_math) )
-#define HAVE_sinsf2 (! TARGET_NO_FANCY_MATH_387 && TARGET_80387 \
- && (TARGET_IEEE_FP || flag_fast_math) )
-#define HAVE_cosdf2 (! TARGET_NO_FANCY_MATH_387 && TARGET_80387 \
- && (TARGET_IEEE_FP || flag_fast_math) )
-#define HAVE_cossf2 (! TARGET_NO_FANCY_MATH_387 && TARGET_80387 \
- && (TARGET_IEEE_FP || flag_fast_math) )
-#define HAVE_one_cmplsi2 1
-#define HAVE_one_cmplhi2 1
-#define HAVE_one_cmplqi2 1
-#define HAVE_ashldi3 1
-#define HAVE_ashldi3_const_int 1
-#define HAVE_ashldi3_non_const_int 1
-#define HAVE_ashlsi3 1
-#define HAVE_ashlhi3 1
-#define HAVE_ashlqi3 1
-#define HAVE_ashrdi3 1
-#define HAVE_ashrdi3_const_int 1
-#define HAVE_ashrdi3_non_const_int 1
-#define HAVE_ashrsi3 1
-#define HAVE_ashrhi3 1
-#define HAVE_ashrqi3 1
-#define HAVE_lshrdi3 1
-#define HAVE_lshrdi3_const_int 1
-#define HAVE_lshrdi3_non_const_int 1
-#define HAVE_lshrsi3 1
-#define HAVE_lshrhi3 1
-#define HAVE_lshrqi3 1
-#define HAVE_rotlsi3 1
-#define HAVE_rotlhi3 1
-#define HAVE_rotlqi3 1
-#define HAVE_rotrsi3 1
-#define HAVE_rotrhi3 1
-#define HAVE_rotrqi3 1
-#define HAVE_seq 1
-#define HAVE_sne 1
-#define HAVE_sgt 1
-#define HAVE_sgtu 1
-#define HAVE_slt 1
-#define HAVE_sltu 1
-#define HAVE_sge 1
-#define HAVE_sgeu 1
-#define HAVE_sle 1
-#define HAVE_sleu 1
-#define HAVE_beq 1
-#define HAVE_bne 1
-#define HAVE_bgt 1
-#define HAVE_bgtu 1
-#define HAVE_blt 1
-#define HAVE_bltu 1
-#define HAVE_bge 1
-#define HAVE_bgeu 1
-#define HAVE_ble 1
-#define HAVE_bleu 1
-#define HAVE_jump 1
-#define HAVE_indirect_jump 1
-#define HAVE_casesi (flag_pic)
-#define HAVE_tablejump 1
-#define HAVE_call_pop 1
-#define HAVE_call 1
-#define HAVE_call_value_pop 1
-#define HAVE_call_value 1
-#define HAVE_untyped_call 1
-#define HAVE_blockage 1
-#define HAVE_return (simple_386_epilogue ())
-#define HAVE_nop 1
-#define HAVE_movstrsi 1
-#define HAVE_cmpstrsi 1
-#define HAVE_ffssi2 1
-#define HAVE_ffshi2 1
-#define HAVE_strlensi 1
-
-#ifndef NO_MD_PROTOTYPES
-extern rtx gen_tstsi_1 PROTO((rtx));
-extern rtx gen_tstsi PROTO((rtx));
-extern rtx gen_tsthi_1 PROTO((rtx));
-extern rtx gen_tsthi PROTO((rtx));
-extern rtx gen_tstqi_1 PROTO((rtx));
-extern rtx gen_tstqi PROTO((rtx));
-extern rtx gen_tstsf_cc PROTO((rtx));
-extern rtx gen_tstsf PROTO((rtx));
-extern rtx gen_tstdf_cc PROTO((rtx));
-extern rtx gen_tstdf PROTO((rtx));
-extern rtx gen_tstxf_cc PROTO((rtx));
-extern rtx gen_tstxf PROTO((rtx));
-extern rtx gen_cmpsi_1 PROTO((rtx, rtx));
-extern rtx gen_cmpsi PROTO((rtx, rtx));
-extern rtx gen_cmphi_1 PROTO((rtx, rtx));
-extern rtx gen_cmphi PROTO((rtx, rtx));
-extern rtx gen_cmpqi_1 PROTO((rtx, rtx));
-extern rtx gen_cmpqi PROTO((rtx, rtx));
-extern rtx gen_cmpsf_cc_1 PROTO((rtx, rtx, rtx));
-extern rtx gen_cmpxf PROTO((rtx, rtx));
-extern rtx gen_cmpdf PROTO((rtx, rtx));
-extern rtx gen_cmpsf PROTO((rtx, rtx));
-extern rtx gen_cmpxf_cc PROTO((rtx, rtx));
-extern rtx gen_cmpxf_ccfpeq PROTO((rtx, rtx));
-extern rtx gen_cmpdf_cc PROTO((rtx, rtx));
-extern rtx gen_cmpdf_ccfpeq PROTO((rtx, rtx));
-extern rtx gen_cmpsf_cc PROTO((rtx, rtx));
-extern rtx gen_cmpsf_ccfpeq PROTO((rtx, rtx));
-extern rtx gen_movsi PROTO((rtx, rtx));
-extern rtx gen_movhi PROTO((rtx, rtx));
-extern rtx gen_movstricthi PROTO((rtx, rtx));
-extern rtx gen_movqi PROTO((rtx, rtx));
-extern rtx gen_movstrictqi PROTO((rtx, rtx));
-extern rtx gen_movsf PROTO((rtx, rtx));
-extern rtx gen_movsf_push_nomove PROTO((rtx, rtx));
-extern rtx gen_movsf_push PROTO((rtx, rtx));
-extern rtx gen_movsf_mem PROTO((rtx, rtx));
-extern rtx gen_movsf_normal PROTO((rtx, rtx));
-extern rtx gen_swapsf PROTO((rtx, rtx));
-extern rtx gen_movdf PROTO((rtx, rtx));
-extern rtx gen_movdf_push_nomove PROTO((rtx, rtx));
-extern rtx gen_movdf_push PROTO((rtx, rtx));
-extern rtx gen_movdf_mem PROTO((rtx, rtx));
-extern rtx gen_movdf_normal PROTO((rtx, rtx));
-extern rtx gen_swapdf PROTO((rtx, rtx));
-extern rtx gen_movxf PROTO((rtx, rtx));
-extern rtx gen_movxf_push_nomove PROTO((rtx, rtx));
-extern rtx gen_movxf_push PROTO((rtx, rtx));
-extern rtx gen_movxf_mem PROTO((rtx, rtx));
-extern rtx gen_movxf_normal PROTO((rtx, rtx));
-extern rtx gen_swapxf PROTO((rtx, rtx));
-extern rtx gen_movdi PROTO((rtx, rtx));
-extern rtx gen_zero_extendhisi2 PROTO((rtx, rtx));
-extern rtx gen_zero_extendqihi2 PROTO((rtx, rtx));
-extern rtx gen_zero_extendqisi2 PROTO((rtx, rtx));
-extern rtx gen_zero_extendsidi2 PROTO((rtx, rtx));
-extern rtx gen_extendsidi2 PROTO((rtx, rtx));
-extern rtx gen_extendhisi2 PROTO((rtx, rtx));
-extern rtx gen_extendqihi2 PROTO((rtx, rtx));
-extern rtx gen_extendqisi2 PROTO((rtx, rtx));
-extern rtx gen_extendsfdf2 PROTO((rtx, rtx));
-extern rtx gen_extenddfxf2 PROTO((rtx, rtx));
-extern rtx gen_extendsfxf2 PROTO((rtx, rtx));
-extern rtx gen_truncdfsf2 PROTO((rtx, rtx));
-extern rtx gen_truncxfsf2 PROTO((rtx, rtx));
-extern rtx gen_truncxfdf2 PROTO((rtx, rtx));
-extern rtx gen_fixuns_truncxfsi2 PROTO((rtx, rtx));
-extern rtx gen_fixuns_truncdfsi2 PROTO((rtx, rtx));
-extern rtx gen_fixuns_truncsfsi2 PROTO((rtx, rtx));
-extern rtx gen_fix_truncxfdi2 PROTO((rtx, rtx));
-extern rtx gen_fix_truncdfdi2 PROTO((rtx, rtx));
-extern rtx gen_fix_truncsfdi2 PROTO((rtx, rtx));
-extern rtx gen_fix_truncxfsi2 PROTO((rtx, rtx));
-extern rtx gen_fix_truncdfsi2 PROTO((rtx, rtx));
-extern rtx gen_fix_truncsfsi2 PROTO((rtx, rtx));
-extern rtx gen_floatsisf2 PROTO((rtx, rtx));
-extern rtx gen_floatdisf2 PROTO((rtx, rtx));
-extern rtx gen_floatsidf2 PROTO((rtx, rtx));
-extern rtx gen_floatdidf2 PROTO((rtx, rtx));
-extern rtx gen_floatsixf2 PROTO((rtx, rtx));
-extern rtx gen_floatdixf2 PROTO((rtx, rtx));
-extern rtx gen_adddi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_addsi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_addhi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_addqi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_movsi_lea PROTO((rtx, rtx));
-extern rtx gen_addxf3 PROTO((rtx, rtx, rtx));
-extern rtx gen_adddf3 PROTO((rtx, rtx, rtx));
-extern rtx gen_addsf3 PROTO((rtx, rtx, rtx));
-extern rtx gen_subdi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_subsi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_subhi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_subqi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_subxf3 PROTO((rtx, rtx, rtx));
-extern rtx gen_subdf3 PROTO((rtx, rtx, rtx));
-extern rtx gen_subsf3 PROTO((rtx, rtx, rtx));
-extern rtx gen_mulhi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_mulsi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_umulqihi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_mulqihi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_umulsidi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_mulsidi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_umulsi3_highpart PROTO((rtx, rtx, rtx));
-extern rtx gen_smulsi3_highpart PROTO((rtx, rtx, rtx));
-extern rtx gen_mulxf3 PROTO((rtx, rtx, rtx));
-extern rtx gen_muldf3 PROTO((rtx, rtx, rtx));
-extern rtx gen_mulsf3 PROTO((rtx, rtx, rtx));
-extern rtx gen_divqi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_udivqi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_divxf3 PROTO((rtx, rtx, rtx));
-extern rtx gen_divdf3 PROTO((rtx, rtx, rtx));
-extern rtx gen_divsf3 PROTO((rtx, rtx, rtx));
-extern rtx gen_divmodsi4 PROTO((rtx, rtx, rtx, rtx));
-extern rtx gen_divmodhi4 PROTO((rtx, rtx, rtx, rtx));
-extern rtx gen_udivmodsi4 PROTO((rtx, rtx, rtx, rtx));
-extern rtx gen_udivmodhi4 PROTO((rtx, rtx, rtx, rtx));
-extern rtx gen_andsi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_andhi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_andqi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_iorsi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_iorhi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_iorqi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_xorsi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_xorhi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_xorqi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_negdi2 PROTO((rtx, rtx));
-extern rtx gen_negsi2 PROTO((rtx, rtx));
-extern rtx gen_neghi2 PROTO((rtx, rtx));
-extern rtx gen_negqi2 PROTO((rtx, rtx));
-extern rtx gen_negsf2 PROTO((rtx, rtx));
-extern rtx gen_negdf2 PROTO((rtx, rtx));
-extern rtx gen_negxf2 PROTO((rtx, rtx));
-extern rtx gen_abssf2 PROTO((rtx, rtx));
-extern rtx gen_absdf2 PROTO((rtx, rtx));
-extern rtx gen_absxf2 PROTO((rtx, rtx));
-extern rtx gen_sqrtsf2 PROTO((rtx, rtx));
-extern rtx gen_sqrtdf2 PROTO((rtx, rtx));
-extern rtx gen_sqrtxf2 PROTO((rtx, rtx));
-extern rtx gen_sindf2 PROTO((rtx, rtx));
-extern rtx gen_sinsf2 PROTO((rtx, rtx));
-extern rtx gen_cosdf2 PROTO((rtx, rtx));
-extern rtx gen_cossf2 PROTO((rtx, rtx));
-extern rtx gen_one_cmplsi2 PROTO((rtx, rtx));
-extern rtx gen_one_cmplhi2 PROTO((rtx, rtx));
-extern rtx gen_one_cmplqi2 PROTO((rtx, rtx));
-extern rtx gen_ashldi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_ashldi3_const_int PROTO((rtx, rtx, rtx));
-extern rtx gen_ashldi3_non_const_int PROTO((rtx, rtx, rtx));
-extern rtx gen_ashlsi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_ashlhi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_ashlqi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_ashrdi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_ashrdi3_const_int PROTO((rtx, rtx, rtx));
-extern rtx gen_ashrdi3_non_const_int PROTO((rtx, rtx, rtx));
-extern rtx gen_ashrsi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_ashrhi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_ashrqi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_lshrdi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_lshrdi3_const_int PROTO((rtx, rtx, rtx));
-extern rtx gen_lshrdi3_non_const_int PROTO((rtx, rtx, rtx));
-extern rtx gen_lshrsi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_lshrhi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_lshrqi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_rotlsi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_rotlhi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_rotlqi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_rotrsi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_rotrhi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_rotrqi3 PROTO((rtx, rtx, rtx));
-extern rtx gen_seq PROTO((rtx));
-extern rtx gen_sne PROTO((rtx));
-extern rtx gen_sgt PROTO((rtx));
-extern rtx gen_sgtu PROTO((rtx));
-extern rtx gen_slt PROTO((rtx));
-extern rtx gen_sltu PROTO((rtx));
-extern rtx gen_sge PROTO((rtx));
-extern rtx gen_sgeu PROTO((rtx));
-extern rtx gen_sle PROTO((rtx));
-extern rtx gen_sleu PROTO((rtx));
-extern rtx gen_beq PROTO((rtx));
-extern rtx gen_bne PROTO((rtx));
-extern rtx gen_bgt PROTO((rtx));
-extern rtx gen_bgtu PROTO((rtx));
-extern rtx gen_blt PROTO((rtx));
-extern rtx gen_bltu PROTO((rtx));
-extern rtx gen_bge PROTO((rtx));
-extern rtx gen_bgeu PROTO((rtx));
-extern rtx gen_ble PROTO((rtx));
-extern rtx gen_bleu PROTO((rtx));
-extern rtx gen_jump PROTO((rtx));
-extern rtx gen_indirect_jump PROTO((rtx));
-extern rtx gen_casesi PROTO((rtx, rtx, rtx, rtx, rtx));
-extern rtx gen_tablejump PROTO((rtx, rtx));
-extern rtx gen_untyped_call PROTO((rtx, rtx, rtx));
-extern rtx gen_blockage PROTO((void));
-extern rtx gen_return PROTO((void));
-extern rtx gen_nop PROTO((void));
-extern rtx gen_movstrsi PROTO((rtx, rtx, rtx, rtx));
-extern rtx gen_cmpstrsi PROTO((rtx, rtx, rtx, rtx, rtx));
-extern rtx gen_ffssi2 PROTO((rtx, rtx));
-extern rtx gen_ffshi2 PROTO((rtx, rtx));
-extern rtx gen_strlensi PROTO((rtx, rtx, rtx, rtx));
-
-#ifdef MD_CALL_PROTOTYPES
-extern rtx gen_call_pop PROTO((rtx, rtx, rtx));
-extern rtx gen_call PROTO((rtx, rtx));
-extern rtx gen_call_value_pop PROTO((rtx, rtx, rtx, rtx));
-extern rtx gen_call_value PROTO((rtx, rtx, rtx));
-
-#else /* !MD_CALL_PROTOTYPES */
-extern rtx gen_call_pop ();
-extern rtx gen_call ();
-extern rtx gen_call_value_pop ();
-extern rtx gen_call_value ();
-#endif /* !MD_CALL_PROTOTYPES */
-
-#else /* NO_MD_PROTOTYPES */
-extern rtx gen_tstsi_1 ();
-extern rtx gen_tstsi ();
-extern rtx gen_tsthi_1 ();
-extern rtx gen_tsthi ();
-extern rtx gen_tstqi_1 ();
-extern rtx gen_tstqi ();
-extern rtx gen_tstsf_cc ();
-extern rtx gen_tstsf ();
-extern rtx gen_tstdf_cc ();
-extern rtx gen_tstdf ();
-extern rtx gen_tstxf_cc ();
-extern rtx gen_tstxf ();
-extern rtx gen_cmpsi_1 ();
-extern rtx gen_cmpsi ();
-extern rtx gen_cmphi_1 ();
-extern rtx gen_cmphi ();
-extern rtx gen_cmpqi_1 ();
-extern rtx gen_cmpqi ();
-extern rtx gen_cmpsf_cc_1 ();
-extern rtx gen_cmpxf ();
-extern rtx gen_cmpdf ();
-extern rtx gen_cmpsf ();
-extern rtx gen_cmpxf_cc ();
-extern rtx gen_cmpxf_ccfpeq ();
-extern rtx gen_cmpdf_cc ();
-extern rtx gen_cmpdf_ccfpeq ();
-extern rtx gen_cmpsf_cc ();
-extern rtx gen_cmpsf_ccfpeq ();
-extern rtx gen_movsi ();
-extern rtx gen_movhi ();
-extern rtx gen_movstricthi ();
-extern rtx gen_movqi ();
-extern rtx gen_movstrictqi ();
-extern rtx gen_movsf ();
-extern rtx gen_movsf_push_nomove ();
-extern rtx gen_movsf_push ();
-extern rtx gen_movsf_mem ();
-extern rtx gen_movsf_normal ();
-extern rtx gen_swapsf ();
-extern rtx gen_movdf ();
-extern rtx gen_movdf_push_nomove ();
-extern rtx gen_movdf_push ();
-extern rtx gen_movdf_mem ();
-extern rtx gen_movdf_normal ();
-extern rtx gen_swapdf ();
-extern rtx gen_movxf ();
-extern rtx gen_movxf_push_nomove ();
-extern rtx gen_movxf_push ();
-extern rtx gen_movxf_mem ();
-extern rtx gen_movxf_normal ();
-extern rtx gen_swapxf ();
-extern rtx gen_movdi ();
-extern rtx gen_zero_extendhisi2 ();
-extern rtx gen_zero_extendqihi2 ();
-extern rtx gen_zero_extendqisi2 ();
-extern rtx gen_zero_extendsidi2 ();
-extern rtx gen_extendsidi2 ();
-extern rtx gen_extendhisi2 ();
-extern rtx gen_extendqihi2 ();
-extern rtx gen_extendqisi2 ();
-extern rtx gen_extendsfdf2 ();
-extern rtx gen_extenddfxf2 ();
-extern rtx gen_extendsfxf2 ();
-extern rtx gen_truncdfsf2 ();
-extern rtx gen_truncxfsf2 ();
-extern rtx gen_truncxfdf2 ();
-extern rtx gen_fixuns_truncxfsi2 ();
-extern rtx gen_fixuns_truncdfsi2 ();
-extern rtx gen_fixuns_truncsfsi2 ();
-extern rtx gen_fix_truncxfdi2 ();
-extern rtx gen_fix_truncdfdi2 ();
-extern rtx gen_fix_truncsfdi2 ();
-extern rtx gen_fix_truncxfsi2 ();
-extern rtx gen_fix_truncdfsi2 ();
-extern rtx gen_fix_truncsfsi2 ();
-extern rtx gen_floatsisf2 ();
-extern rtx gen_floatdisf2 ();
-extern rtx gen_floatsidf2 ();
-extern rtx gen_floatdidf2 ();
-extern rtx gen_floatsixf2 ();
-extern rtx gen_floatdixf2 ();
-extern rtx gen_adddi3 ();
-extern rtx gen_addsi3 ();
-extern rtx gen_addhi3 ();
-extern rtx gen_addqi3 ();
-extern rtx gen_movsi_lea ();
-extern rtx gen_addxf3 ();
-extern rtx gen_adddf3 ();
-extern rtx gen_addsf3 ();
-extern rtx gen_subdi3 ();
-extern rtx gen_subsi3 ();
-extern rtx gen_subhi3 ();
-extern rtx gen_subqi3 ();
-extern rtx gen_subxf3 ();
-extern rtx gen_subdf3 ();
-extern rtx gen_subsf3 ();
-extern rtx gen_mulhi3 ();
-extern rtx gen_mulsi3 ();
-extern rtx gen_umulqihi3 ();
-extern rtx gen_mulqihi3 ();
-extern rtx gen_umulsidi3 ();
-extern rtx gen_mulsidi3 ();
-extern rtx gen_umulsi3_highpart ();
-extern rtx gen_smulsi3_highpart ();
-extern rtx gen_mulxf3 ();
-extern rtx gen_muldf3 ();
-extern rtx gen_mulsf3 ();
-extern rtx gen_divqi3 ();
-extern rtx gen_udivqi3 ();
-extern rtx gen_divxf3 ();
-extern rtx gen_divdf3 ();
-extern rtx gen_divsf3 ();
-extern rtx gen_divmodsi4 ();
-extern rtx gen_divmodhi4 ();
-extern rtx gen_udivmodsi4 ();
-extern rtx gen_udivmodhi4 ();
-extern rtx gen_andsi3 ();
-extern rtx gen_andhi3 ();
-extern rtx gen_andqi3 ();
-extern rtx gen_iorsi3 ();
-extern rtx gen_iorhi3 ();
-extern rtx gen_iorqi3 ();
-extern rtx gen_xorsi3 ();
-extern rtx gen_xorhi3 ();
-extern rtx gen_xorqi3 ();
-extern rtx gen_negdi2 ();
-extern rtx gen_negsi2 ();
-extern rtx gen_neghi2 ();
-extern rtx gen_negqi2 ();
-extern rtx gen_negsf2 ();
-extern rtx gen_negdf2 ();
-extern rtx gen_negxf2 ();
-extern rtx gen_abssf2 ();
-extern rtx gen_absdf2 ();
-extern rtx gen_absxf2 ();
-extern rtx gen_sqrtsf2 ();
-extern rtx gen_sqrtdf2 ();
-extern rtx gen_sqrtxf2 ();
-extern rtx gen_sindf2 ();
-extern rtx gen_sinsf2 ();
-extern rtx gen_cosdf2 ();
-extern rtx gen_cossf2 ();
-extern rtx gen_one_cmplsi2 ();
-extern rtx gen_one_cmplhi2 ();
-extern rtx gen_one_cmplqi2 ();
-extern rtx gen_ashldi3 ();
-extern rtx gen_ashldi3_const_int ();
-extern rtx gen_ashldi3_non_const_int ();
-extern rtx gen_ashlsi3 ();
-extern rtx gen_ashlhi3 ();
-extern rtx gen_ashlqi3 ();
-extern rtx gen_ashrdi3 ();
-extern rtx gen_ashrdi3_const_int ();
-extern rtx gen_ashrdi3_non_const_int ();
-extern rtx gen_ashrsi3 ();
-extern rtx gen_ashrhi3 ();
-extern rtx gen_ashrqi3 ();
-extern rtx gen_lshrdi3 ();
-extern rtx gen_lshrdi3_const_int ();
-extern rtx gen_lshrdi3_non_const_int ();
-extern rtx gen_lshrsi3 ();
-extern rtx gen_lshrhi3 ();
-extern rtx gen_lshrqi3 ();
-extern rtx gen_rotlsi3 ();
-extern rtx gen_rotlhi3 ();
-extern rtx gen_rotlqi3 ();
-extern rtx gen_rotrsi3 ();
-extern rtx gen_rotrhi3 ();
-extern rtx gen_rotrqi3 ();
-extern rtx gen_seq ();
-extern rtx gen_sne ();
-extern rtx gen_sgt ();
-extern rtx gen_sgtu ();
-extern rtx gen_slt ();
-extern rtx gen_sltu ();
-extern rtx gen_sge ();
-extern rtx gen_sgeu ();
-extern rtx gen_sle ();
-extern rtx gen_sleu ();
-extern rtx gen_beq ();
-extern rtx gen_bne ();
-extern rtx gen_bgt ();
-extern rtx gen_bgtu ();
-extern rtx gen_blt ();
-extern rtx gen_bltu ();
-extern rtx gen_bge ();
-extern rtx gen_bgeu ();
-extern rtx gen_ble ();
-extern rtx gen_bleu ();
-extern rtx gen_jump ();
-extern rtx gen_indirect_jump ();
-extern rtx gen_casesi ();
-extern rtx gen_tablejump ();
-extern rtx gen_untyped_call ();
-extern rtx gen_blockage ();
-extern rtx gen_return ();
-extern rtx gen_nop ();
-extern rtx gen_movstrsi ();
-extern rtx gen_cmpstrsi ();
-extern rtx gen_ffssi2 ();
-extern rtx gen_ffshi2 ();
-extern rtx gen_strlensi ();
-extern rtx gen_call_pop ();
-extern rtx gen_call ();
-extern rtx gen_call_value_pop ();
-extern rtx gen_call_value ();
-#endif /* NO_MD_PROTOTYPES */
diff --git a/gnu/usr.bin/cc/include/integrate.h b/gnu/usr.bin/cc/include/integrate.h
deleted file mode 100644
index cb0abf2e859b..000000000000
--- a/gnu/usr.bin/cc/include/integrate.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/* Function integration definitions for GNU C-Compiler
- Copyright (C) 1990 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* This structure is used to remap objects in the function being inlined to
- those belonging to the calling function. It is passed by
- expand_inline_function to its children.
-
- This structure is also used when unrolling loops and otherwise
- replicating code, although not all fields are needed in this case;
- only those fields needed by copy_rtx_and_substitute() and its children
- are used.
-
- This structure is used instead of static variables because
- expand_inline_function may be called recursively via expand_expr. */
-
-struct inline_remap
-{
- /* True if we are doing function integration, false otherwise.
- Used to control whether RTX_UNCHANGING bits are copied by
- copy_rtx_and_substitute. */
- int integrating;
- /* Definition of function be inlined. */
- union tree_node *fndecl;
- /* Place to put insns needed at start of function. */
- rtx insns_at_start;
- /* Mapping from old registers to new registers.
- It is allocated and deallocated in `expand_inline_function' */
- rtx *reg_map;
- /* Mapping from old code-labels to new code-labels.
- The first element of this map is label_map[min_labelno]. */
- rtx *label_map;
- /* Mapping from old insn uid's to copied insns. The first element
- of this map is insn_map[min_insnno]; the last element is
- insn_map[max_insnno]. We keep the bounds here for when the map
- only covers a partial range of insns (such as loop unrolling or
- code replication). */
- rtx *insn_map;
- int min_insnno, max_insnno;
-
- /* Map pseudo reg number in calling function to equivalent constant. We
- cannot in general substitute constants into parameter pseudo registers,
- since some machine descriptions (many RISCs) won't always handle
- the resulting insns. So if an incoming parameter has a constant
- equivalent, we record it here, and if the resulting insn is
- recognizable, we go with it.
-
- We also use this mechanism to convert references to incoming arguments
- and stacked variables. copy_rtx_and_substitute will replace the virtual
- incoming argument and virtual stacked variables registers with new
- pseudos that contain pointers into the replacement area allocated for
- this inline instance. These pseudos are then marked as being equivalent
- to the appropriate address and substituted if valid. */
- rtx *const_equiv_map;
- /* Number of entries in const_equiv_map and const_arg_map. */
- int const_equiv_map_size;
- /* This is incremented for each new basic block.
- It is used to store in const_age_map to record the domain of validity
- of each entry in const_equiv_map.
- A value of -1 indicates an entry for a reg which is a parm.
- All other values are "positive". */
-#define CONST_AGE_PARM (-1)
- unsigned int const_age;
- /* In parallel with const_equiv_map, record the valid age for each entry.
- The entry is invalid if its age is less than const_age. */
- unsigned int *const_age_map;
- /* Target of the inline function being expanded, or NULL if none. */
- rtx inline_target;
- /* When an insn is being copied by copy_rtx_and_substitute,
- this is nonzero if we have copied an ASM_OPERANDS.
- In that case, it is the original input-operand vector. */
- rtvec orig_asm_operands_vector;
- /* When an insn is being copied by copy_rtx_and_substitute,
- this is nonzero if we have copied an ASM_OPERANDS.
- In that case, it is the copied input-operand vector. */
- rtvec copy_asm_operands_vector;
- /* Likewise, this is the copied constraints vector. */
- rtvec copy_asm_constraints_vector;
-
- /* The next few fields are used for subst_constants to record the SETs
- that it saw. */
- int num_sets;
- struct equiv_table
- {
- rtx dest;
- rtx equiv;
- } equiv_sets[MAX_RECOG_OPERANDS];
- /* Record the last thing assigned to pc. This is used for folded
- conditional branch insns. */
- rtx last_pc_value;
-#ifdef HAVE_cc0
- /* Record the last thing assigned to cc0. */
- rtx last_cc0_value;
-#endif
-};
-
-/* Return a copy of an rtx (as needed), substituting pseudo-register,
- labels, and frame-pointer offsets as necessary. */
-extern rtx copy_rtx_and_substitute PROTO((rtx, struct inline_remap *));
-
-extern void try_constants PROTO((rtx, struct inline_remap *));
-
-extern void mark_stores PROTO((rtx, rtx));
-
-/* Unfortunately, we need a global copy of const_equiv map for communication
- with a function called from note_stores. Be *very* careful that this
- is used properly in the presence of recursion. */
-
-extern rtx *global_const_equiv_map;
-extern int global_const_equiv_map_size;
diff --git a/gnu/usr.bin/cc/include/longlong.h b/gnu/usr.bin/cc/include/longlong.h
deleted file mode 100644
index 0380ef7fae6b..000000000000
--- a/gnu/usr.bin/cc/include/longlong.h
+++ /dev/null
@@ -1,1185 +0,0 @@
-/* longlong.h -- definitions for mixed size 32/64 bit arithmetic.
- Copyright (C) 1991, 1992, 1994 Free Software Foundation, Inc.
-
- This definition 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 definition 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 program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#ifndef SI_TYPE_SIZE
-#define SI_TYPE_SIZE 32
-#endif
-
-#define __BITS4 (SI_TYPE_SIZE / 4)
-#define __ll_B (1L << (SI_TYPE_SIZE / 2))
-#define __ll_lowpart(t) ((USItype) (t) % __ll_B)
-#define __ll_highpart(t) ((USItype) (t) / __ll_B)
-
-/* Define auxiliary asm macros.
-
- 1) umul_ppmm(high_prod, low_prod, multipler, multiplicand)
- multiplies two USItype integers MULTIPLER and MULTIPLICAND,
- and generates a two-part USItype product in HIGH_PROD and
- LOW_PROD.
-
- 2) __umulsidi3(a,b) multiplies two USItype integers A and B,
- and returns a UDItype product. This is just a variant of umul_ppmm.
-
- 3) udiv_qrnnd(quotient, remainder, high_numerator, low_numerator,
- denominator) divides a two-word unsigned integer, composed by the
- integers HIGH_NUMERATOR and LOW_NUMERATOR, by DENOMINATOR and
- places the quotient in QUOTIENT and the remainder in REMAINDER.
- HIGH_NUMERATOR must be less than DENOMINATOR for correct operation.
- If, in addition, the most significant bit of DENOMINATOR must be 1,
- then the pre-processor symbol UDIV_NEEDS_NORMALIZATION is defined to 1.
-
- 4) sdiv_qrnnd(quotient, remainder, high_numerator, low_numerator,
- denominator). Like udiv_qrnnd but the numbers are signed. The
- quotient is rounded towards 0.
-
- 5) count_leading_zeros(count, x) counts the number of zero-bits from
- the msb to the first non-zero bit. This is the number of steps X
- needs to be shifted left to set the msb. Undefined for X == 0.
-
- 6) add_ssaaaa(high_sum, low_sum, high_addend_1, low_addend_1,
- high_addend_2, low_addend_2) adds two two-word unsigned integers,
- composed by HIGH_ADDEND_1 and LOW_ADDEND_1, and HIGH_ADDEND_2 and
- LOW_ADDEND_2 respectively. The result is placed in HIGH_SUM and
- LOW_SUM. Overflow (i.e. carry out) is not stored anywhere, and is
- lost.
-
- 7) sub_ddmmss(high_difference, low_difference, high_minuend,
- low_minuend, high_subtrahend, low_subtrahend) subtracts two
- two-word unsigned integers, composed by HIGH_MINUEND_1 and
- LOW_MINUEND_1, and HIGH_SUBTRAHEND_2 and LOW_SUBTRAHEND_2
- respectively. The result is placed in HIGH_DIFFERENCE and
- LOW_DIFFERENCE. Overflow (i.e. carry out) is not stored anywhere,
- and is lost.
-
- If any of these macros are left undefined for a particular CPU,
- C macros are used. */
-
-/* The CPUs come in alphabetical order below.
-
- Please add support for more CPUs here, or improve the current support
- for the CPUs below!
- (E.g. WE32100, IBM360.) */
-
-#if defined (__GNUC__) && !defined (NO_ASM)
-
-/* We sometimes need to clobber "cc" with gcc2, but that would not be
- understood by gcc1. Use cpp to avoid major code duplication. */
-#if __GNUC__ < 2
-#define __CLOBBER_CC
-#define __AND_CLOBBER_CC
-#else /* __GNUC__ >= 2 */
-#define __CLOBBER_CC : "cc"
-#define __AND_CLOBBER_CC , "cc"
-#endif /* __GNUC__ < 2 */
-
-#if defined (__a29k__) || defined (_AM29K)
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("add %1,%4,%5
- addc %0,%2,%3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%r" ((USItype)(ah)), \
- "rI" ((USItype)(bh)), \
- "%r" ((USItype)(al)), \
- "rI" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("sub %1,%4,%5
- subc %0,%2,%3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "r" ((USItype)(ah)), \
- "rI" ((USItype)(bh)), \
- "r" ((USItype)(al)), \
- "rI" ((USItype)(bl)))
-#define umul_ppmm(xh, xl, m0, m1) \
- do { \
- USItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("multiplu %0,%1,%2" \
- : "=r" ((USItype)(xl)) \
- : "r" (__m0), \
- "r" (__m1)); \
- __asm__ ("multmu %0,%1,%2" \
- : "=r" ((USItype)(xh)) \
- : "r" (__m0), \
- "r" (__m1)); \
- } while (0)
-#define udiv_qrnnd(q, r, n1, n0, d) \
- __asm__ ("dividu %0,%3,%4" \
- : "=r" ((USItype)(q)), \
- "=q" ((USItype)(r)) \
- : "1" ((USItype)(n1)), \
- "r" ((USItype)(n0)), \
- "r" ((USItype)(d)))
-#define count_leading_zeros(count, x) \
- __asm__ ("clz %0,%1" \
- : "=r" ((USItype)(count)) \
- : "r" ((USItype)(x)))
-#endif /* __a29k__ */
-
-#if defined (__arm__)
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("adds %1, %4, %5
- adc %0, %2, %3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%r" ((USItype)(ah)), \
- "rI" ((USItype)(bh)), \
- "%r" ((USItype)(al)), \
- "rI" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("subs %1, %4, %5
- sbc %0, %2, %3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "r" ((USItype)(ah)), \
- "rI" ((USItype)(bh)), \
- "r" ((USItype)(al)), \
- "rI" ((USItype)(bl)))
-#define umul_ppmm(xh, xl, a, b) \
-{register USItype __t0, __t1, __t2; \
- __asm__ ("%@ Inlined umul_ppmm
- mov %2, %5, lsr #16
- mov %0, %6, lsr #16
- bic %3, %5, %2, lsl #16
- bic %4, %6, %0, lsl #16
- mul %1, %3, %4
- mul %4, %2, %4
- mul %3, %0, %3
- mul %0, %2, %0
- adds %3, %4, %3
- addcs %0, %0, #65536
- adds %1, %1, %3, lsl #16
- adc %0, %0, %3, lsr #16" \
- : "=&r" ((USItype)(xh)), \
- "=r" ((USItype)(xl)), \
- "=&r" (__t0), "=&r" (__t1), "=r" (__t2) \
- : "r" ((USItype)(a)), \
- "r" ((USItype)(b)));}
-#define UMUL_TIME 20
-#define UDIV_TIME 100
-#endif /* __arm__ */
-
-#if defined (__clipper__)
-#define umul_ppmm(w1, w0, u, v) \
- ({union {UDItype __ll; \
- struct {USItype __l, __h;} __i; \
- } __xx; \
- __asm__ ("mulwux %2,%0" \
- : "=r" (__xx.__ll) \
- : "%0" ((USItype)(u)), \
- "r" ((USItype)(v))); \
- (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
-#define smul_ppmm(w1, w0, u, v) \
- ({union {DItype __ll; \
- struct {SItype __l, __h;} __i; \
- } __xx; \
- __asm__ ("mulwx %2,%0" \
- : "=r" (__xx.__ll) \
- : "%0" ((SItype)(u)), \
- "r" ((SItype)(v))); \
- (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
-#define __umulsidi3(u, v) \
- ({UDItype __w; \
- __asm__ ("mulwux %2,%0" \
- : "=r" (__w) \
- : "%0" ((USItype)(u)), \
- "r" ((USItype)(v))); \
- __w; })
-#endif /* __clipper__ */
-
-#if defined (__gmicro__)
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("add.w %5,%1
- addx %3,%0" \
- : "=g" ((USItype)(sh)), \
- "=&g" ((USItype)(sl)) \
- : "%0" ((USItype)(ah)), \
- "g" ((USItype)(bh)), \
- "%1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("sub.w %5,%1
- subx %3,%0" \
- : "=g" ((USItype)(sh)), \
- "=&g" ((USItype)(sl)) \
- : "0" ((USItype)(ah)), \
- "g" ((USItype)(bh)), \
- "1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#define umul_ppmm(ph, pl, m0, m1) \
- __asm__ ("mulx %3,%0,%1" \
- : "=g" ((USItype)(ph)), \
- "=r" ((USItype)(pl)) \
- : "%0" ((USItype)(m0)), \
- "g" ((USItype)(m1)))
-#define udiv_qrnnd(q, r, nh, nl, d) \
- __asm__ ("divx %4,%0,%1" \
- : "=g" ((USItype)(q)), \
- "=r" ((USItype)(r)) \
- : "1" ((USItype)(nh)), \
- "0" ((USItype)(nl)), \
- "g" ((USItype)(d)))
-#define count_leading_zeros(count, x) \
- __asm__ ("bsch/1 %1,%0" \
- : "=g" (count) \
- : "g" ((USItype)(x)), \
- "0" ((USItype)0))
-#endif
-
-#if defined (__hppa)
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("add %4,%5,%1
- addc %2,%3,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%rM" ((USItype)(ah)), \
- "rM" ((USItype)(bh)), \
- "%rM" ((USItype)(al)), \
- "rM" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("sub %4,%5,%1
- subb %2,%3,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "rM" ((USItype)(ah)), \
- "rM" ((USItype)(bh)), \
- "rM" ((USItype)(al)), \
- "rM" ((USItype)(bl)))
-#if defined (_PA_RISC1_1)
-#define umul_ppmm(w1, w0, u, v) \
- do { \
- union \
- { \
- UDItype __f; \
- struct {USItype __w1, __w0;} __w1w0; \
- } __t; \
- __asm__ ("xmpyu %1,%2,%0" \
- : "=x" (__t.__f) \
- : "x" ((USItype)(u)), \
- "x" ((USItype)(v))); \
- (w1) = __t.__w1w0.__w1; \
- (w0) = __t.__w1w0.__w0; \
- } while (0)
-#define UMUL_TIME 8
-#else
-#define UMUL_TIME 30
-#endif
-#define UDIV_TIME 40
-#define count_leading_zeros(count, x) \
- do { \
- USItype __tmp; \
- __asm__ ( \
- "ldi 1,%0
- extru,= %1,15,16,%%r0 ; Bits 31..16 zero?
- extru,tr %1,15,16,%1 ; No. Shift down, skip add.
- ldo 16(%0),%0 ; Yes. Perform add.
- extru,= %1,23,8,%%r0 ; Bits 15..8 zero?
- extru,tr %1,23,8,%1 ; No. Shift down, skip add.
- ldo 8(%0),%0 ; Yes. Perform add.
- extru,= %1,27,4,%%r0 ; Bits 7..4 zero?
- extru,tr %1,27,4,%1 ; No. Shift down, skip add.
- ldo 4(%0),%0 ; Yes. Perform add.
- extru,= %1,29,2,%%r0 ; Bits 3..2 zero?
- extru,tr %1,29,2,%1 ; No. Shift down, skip add.
- ldo 2(%0),%0 ; Yes. Perform add.
- extru %1,30,1,%1 ; Extract bit 1.
- sub %0,%1,%0 ; Subtract it.
- " : "=r" (count), "=r" (__tmp) : "1" (x)); \
- } while (0)
-#endif
-
-#if defined (__i386__) || defined (__i486__)
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("addl %5,%1
- adcl %3,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%0" ((USItype)(ah)), \
- "g" ((USItype)(bh)), \
- "%1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("subl %5,%1
- sbbl %3,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "0" ((USItype)(ah)), \
- "g" ((USItype)(bh)), \
- "1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("mull %3" \
- : "=a" ((USItype)(w0)), \
- "=d" ((USItype)(w1)) \
- : "%0" ((USItype)(u)), \
- "rm" ((USItype)(v)))
-#define udiv_qrnnd(q, r, n1, n0, d) \
- __asm__ ("divl %4" \
- : "=a" ((USItype)(q)), \
- "=d" ((USItype)(r)) \
- : "0" ((USItype)(n0)), \
- "1" ((USItype)(n1)), \
- "rm" ((USItype)(d)))
-#define count_leading_zeros(count, x) \
- do { \
- USItype __cbtmp; \
- __asm__ ("bsrl %1,%0" \
- : "=r" (__cbtmp) : "rm" ((USItype)(x))); \
- (count) = __cbtmp ^ 31; \
- } while (0)
-#define UMUL_TIME 40
-#define UDIV_TIME 40
-#endif /* 80x86 */
-
-#if defined (__i860__)
-#if 0
-/* Make sure these patterns really improve the code before
- switching them on. */
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- do { \
- union \
- { \
- DItype __ll; \
- struct {USItype __l, __h;} __i; \
- } __a, __b, __s; \
- __a.__i.__l = (al); \
- __a.__i.__h = (ah); \
- __b.__i.__l = (bl); \
- __b.__i.__h = (bh); \
- __asm__ ("fiadd.dd %1,%2,%0" \
- : "=f" (__s.__ll) \
- : "%f" (__a.__ll), "f" (__b.__ll)); \
- (sh) = __s.__i.__h; \
- (sl) = __s.__i.__l; \
- } while (0)
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- do { \
- union \
- { \
- DItype __ll; \
- struct {USItype __l, __h;} __i; \
- } __a, __b, __s; \
- __a.__i.__l = (al); \
- __a.__i.__h = (ah); \
- __b.__i.__l = (bl); \
- __b.__i.__h = (bh); \
- __asm__ ("fisub.dd %1,%2,%0" \
- : "=f" (__s.__ll) \
- : "%f" (__a.__ll), "f" (__b.__ll)); \
- (sh) = __s.__i.__h; \
- (sl) = __s.__i.__l; \
- } while (0)
-#endif
-#endif /* __i860__ */
-
-#if defined (__i960__)
-#define umul_ppmm(w1, w0, u, v) \
- ({union {UDItype __ll; \
- struct {USItype __l, __h;} __i; \
- } __xx; \
- __asm__ ("emul %2,%1,%0" \
- : "=d" (__xx.__ll) \
- : "%dI" ((USItype)(u)), \
- "dI" ((USItype)(v))); \
- (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
-#define __umulsidi3(u, v) \
- ({UDItype __w; \
- __asm__ ("emul %2,%1,%0" \
- : "=d" (__w) \
- : "%dI" ((USItype)(u)), \
- "dI" ((USItype)(v))); \
- __w; })
-#endif /* __i960__ */
-
-#if defined (__mc68000__)
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("add%.l %5,%1
- addx%.l %3,%0" \
- : "=d" ((USItype)(sh)), \
- "=&d" ((USItype)(sl)) \
- : "%0" ((USItype)(ah)), \
- "d" ((USItype)(bh)), \
- "%1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("sub%.l %5,%1
- subx%.l %3,%0" \
- : "=d" ((USItype)(sh)), \
- "=&d" ((USItype)(sl)) \
- : "0" ((USItype)(ah)), \
- "d" ((USItype)(bh)), \
- "1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#if defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("mulu%.l %3,%1:%0" \
- : "=d" ((USItype)(w0)), \
- "=d" ((USItype)(w1)) \
- : "%0" ((USItype)(u)), \
- "dmi" ((USItype)(v)))
-#define UMUL_TIME 45
-#define udiv_qrnnd(q, r, n1, n0, d) \
- __asm__ ("divu%.l %4,%1:%0" \
- : "=d" ((USItype)(q)), \
- "=d" ((USItype)(r)) \
- : "0" ((USItype)(n0)), \
- "1" ((USItype)(n1)), \
- "dmi" ((USItype)(d)))
-#define UDIV_TIME 90
-#define sdiv_qrnnd(q, r, n1, n0, d) \
- __asm__ ("divs%.l %4,%1:%0" \
- : "=d" ((USItype)(q)), \
- "=d" ((USItype)(r)) \
- : "0" ((USItype)(n0)), \
- "1" ((USItype)(n1)), \
- "dmi" ((USItype)(d)))
-#define count_leading_zeros(count, x) \
- __asm__ ("bfffo %1{%b2:%b2},%0" \
- : "=d" ((USItype)(count)) \
- : "od" ((USItype)(x)), "n" (0))
-#else /* not mc68020 */
-/* %/ inserts REGISTER_PREFIX. */
-#define umul_ppmm(xh, xl, a, b) \
- __asm__ ("| Inlined umul_ppmm
- move%.l %2,%/d0
- move%.l %3,%/d1
- move%.l %/d0,%/d2
- swap %/d0
- move%.l %/d1,%/d3
- swap %/d1
- move%.w %/d2,%/d4
- mulu %/d3,%/d4
- mulu %/d1,%/d2
- mulu %/d0,%/d3
- mulu %/d0,%/d1
- move%.l %/d4,%/d0
- eor%.w %/d0,%/d0
- swap %/d0
- add%.l %/d0,%/d2
- add%.l %/d3,%/d2
- jcc 1f
- add%.l #65536,%/d1
-1: swap %/d2
- moveq #0,%/d0
- move%.w %/d2,%/d0
- move%.w %/d4,%/d2
- move%.l %/d2,%1
- add%.l %/d1,%/d0
- move%.l %/d0,%0" \
- : "=g" ((USItype)(xh)), \
- "=g" ((USItype)(xl)) \
- : "g" ((USItype)(a)), \
- "g" ((USItype)(b)) \
- : "d0", "d1", "d2", "d3", "d4")
-#define UMUL_TIME 100
-#define UDIV_TIME 400
-#endif /* not mc68020 */
-#endif /* mc68000 */
-
-#if defined (__m88000__)
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("addu.co %1,%r4,%r5
- addu.ci %0,%r2,%r3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%rJ" ((USItype)(ah)), \
- "rJ" ((USItype)(bh)), \
- "%rJ" ((USItype)(al)), \
- "rJ" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("subu.co %1,%r4,%r5
- subu.ci %0,%r2,%r3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "rJ" ((USItype)(ah)), \
- "rJ" ((USItype)(bh)), \
- "rJ" ((USItype)(al)), \
- "rJ" ((USItype)(bl)))
-#define count_leading_zeros(count, x) \
- do { \
- USItype __cbtmp; \
- __asm__ ("ff1 %0,%1" \
- : "=r" (__cbtmp) \
- : "r" ((USItype)(x))); \
- (count) = __cbtmp ^ 31; \
- } while (0)
-#if defined (__mc88110__)
-#define umul_ppmm(wh, wl, u, v) \
- do { \
- union {UDItype __ll; \
- struct {USItype __h, __l;} __i; \
- } __xx; \
- __asm__ ("mulu.d %0,%1,%2" \
- : "=r" (__xx.__ll) \
- : "r" ((USItype)(u)), \
- "r" ((USItype)(v))); \
- (wh) = __xx.__i.__h; \
- (wl) = __xx.__i.__l; \
- } while (0)
-#define udiv_qrnnd(q, r, n1, n0, d) \
- ({union {UDItype __ll; \
- struct {USItype __h, __l;} __i; \
- } __xx; \
- USItype __q; \
- __xx.__i.__h = (n1); __xx.__i.__l = (n0); \
- __asm__ ("divu.d %0,%1,%2" \
- : "=r" (__q) \
- : "r" (__xx.__ll), \
- "r" ((USItype)(d))); \
- (r) = (n0) - __q * (d); (q) = __q; })
-#define UMUL_TIME 5
-#define UDIV_TIME 25
-#else
-#define UMUL_TIME 17
-#define UDIV_TIME 150
-#endif /* __mc88110__ */
-#endif /* __m88000__ */
-
-#if defined (__mips__)
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("multu %2,%3
- mflo %0
- mfhi %1" \
- : "=d" ((USItype)(w0)), \
- "=d" ((USItype)(w1)) \
- : "d" ((USItype)(u)), \
- "d" ((USItype)(v)))
-#define UMUL_TIME 10
-#define UDIV_TIME 100
-#endif /* __mips__ */
-
-#if defined (__ns32000__)
-#define umul_ppmm(w1, w0, u, v) \
- ({union {UDItype __ll; \
- struct {USItype __l, __h;} __i; \
- } __xx; \
- __asm__ ("meid %2,%0" \
- : "=g" (__xx.__ll) \
- : "%0" ((USItype)(u)), \
- "g" ((USItype)(v))); \
- (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
-#define __umulsidi3(u, v) \
- ({UDItype __w; \
- __asm__ ("meid %2,%0" \
- : "=g" (__w) \
- : "%0" ((USItype)(u)), \
- "g" ((USItype)(v))); \
- __w; })
-#define udiv_qrnnd(q, r, n1, n0, d) \
- ({union {UDItype __ll; \
- struct {USItype __l, __h;} __i; \
- } __xx; \
- __xx.__i.__h = (n1); __xx.__i.__l = (n0); \
- __asm__ ("deid %2,%0" \
- : "=g" (__xx.__ll) \
- : "0" (__xx.__ll), \
- "g" ((USItype)(d))); \
- (r) = __xx.__i.__l; (q) = __xx.__i.__h; })
-#endif /* __ns32000__ */
-
-#if (defined (_ARCH_PPC) || defined (_IBMR2)) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- do { \
- if (__builtin_constant_p (bh) && (bh) == 0) \
- __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%r" ((USItype)(ah)), \
- "%r" ((USItype)(al)), \
- "rI" ((USItype)(bl))); \
- else if (__builtin_constant_p (bh) && (bh) ==~(USItype) 0) \
- __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%r" ((USItype)(ah)), \
- "%r" ((USItype)(al)), \
- "rI" ((USItype)(bl))); \
- else \
- __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%r" ((USItype)(ah)), \
- "r" ((USItype)(bh)), \
- "%r" ((USItype)(al)), \
- "rI" ((USItype)(bl))); \
- } while (0)
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- do { \
- if (__builtin_constant_p (ah) && (ah) == 0) \
- __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfze|subfze} %0,%2" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "r" ((USItype)(bh)), \
- "rI" ((USItype)(al)), \
- "r" ((USItype)(bl))); \
- else if (__builtin_constant_p (ah) && (ah) ==~(USItype) 0) \
- __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfme|subfme} %0,%2" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "r" ((USItype)(bh)), \
- "rI" ((USItype)(al)), \
- "r" ((USItype)(bl))); \
- else if (__builtin_constant_p (bh) && (bh) == 0) \
- __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{ame|addme} %0,%2" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "r" ((USItype)(ah)), \
- "rI" ((USItype)(al)), \
- "r" ((USItype)(bl))); \
- else if (__builtin_constant_p (bh) && (bh) ==~(USItype) 0) \
- __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{aze|addze} %0,%2" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "r" ((USItype)(ah)), \
- "rI" ((USItype)(al)), \
- "r" ((USItype)(bl))); \
- else \
- __asm__ ("{sf%I4|subf%I4c} %1,%5,%4\n\t{sfe|subfe} %0,%3,%2" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "r" ((USItype)(ah)), \
- "r" ((USItype)(bh)), \
- "rI" ((USItype)(al)), \
- "r" ((USItype)(bl))); \
- } while (0)
-#define count_leading_zeros(count, x) \
- __asm__ ("{cntlz|cntlzw} %0,%1" \
- : "=r" ((USItype)(count)) \
- : "r" ((USItype)(x)))
-#if defined (_ARCH_PPC)
-#define umul_ppmm(ph, pl, m0, m1) \
- do { \
- USItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("mulhwu %0,%1,%2" \
- : "=r" ((USItype) ph) \
- : "%r" (__m0), \
- "r" (__m1)); \
- (pl) = __m0 * __m1; \
- } while (0)
-#define UMUL_TIME 15
-#define smul_ppmm(ph, pl, m0, m1) \
- do { \
- SItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("mulhw %0,%1,%2" \
- : "=r" ((SItype) ph) \
- : "%r" (__m0), \
- "r" (__m1)); \
- (pl) = __m0 * __m1; \
- } while (0)
-#define SMUL_TIME 14
-#define UDIV_TIME 120
-#else
-#define umul_ppmm(xh, xl, m0, m1) \
- do { \
- USItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("mul %0,%2,%3" \
- : "=r" ((USItype)(xh)), \
- "=q" ((USItype)(xl)) \
- : "r" (__m0), \
- "r" (__m1)); \
- (xh) += ((((SItype) __m0 >> 31) & __m1) \
- + (((SItype) __m1 >> 31) & __m0)); \
- } while (0)
-#define UMUL_TIME 8
-#define smul_ppmm(xh, xl, m0, m1) \
- __asm__ ("mul %0,%2,%3" \
- : "=r" ((SItype)(xh)), \
- "=q" ((SItype)(xl)) \
- : "r" (m0), \
- "r" (m1))
-#define SMUL_TIME 4
-#define sdiv_qrnnd(q, r, nh, nl, d) \
- __asm__ ("div %0,%2,%4" \
- : "=r" ((SItype)(q)), "=q" ((SItype)(r)) \
- : "r" ((SItype)(nh)), "1" ((SItype)(nl)), "r" ((SItype)(d)))
-#define UDIV_TIME 100
-#endif
-#endif /* Power architecture variants. */
-
-#if defined (__pyr__)
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("addw %5,%1
- addwc %3,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%0" ((USItype)(ah)), \
- "g" ((USItype)(bh)), \
- "%1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("subw %5,%1
- subwb %3,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "0" ((USItype)(ah)), \
- "g" ((USItype)(bh)), \
- "1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-/* This insn doesn't work on ancient pyramids. */
-#define umul_ppmm(w1, w0, u, v) \
- ({union { \
- UDItype __ll; \
- struct {USItype __h, __l;} __i; \
- } __xx; \
- __xx.__i.__l = u; \
- __asm__ ("uemul %3,%0" \
- : "=r" (__xx.__i.__h), \
- "=r" (__xx.__i.__l) \
- : "1" (__xx.__i.__l), \
- "g" ((USItype)(v))); \
- (w1) = __xx.__i.__h; \
- (w0) = __xx.__i.__l;})
-#endif /* __pyr__ */
-
-#if defined (__ibm032__) /* RT/ROMP */
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("a %1,%5
- ae %0,%3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%0" ((USItype)(ah)), \
- "r" ((USItype)(bh)), \
- "%1" ((USItype)(al)), \
- "r" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("s %1,%5
- se %0,%3" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "0" ((USItype)(ah)), \
- "r" ((USItype)(bh)), \
- "1" ((USItype)(al)), \
- "r" ((USItype)(bl)))
-#define umul_ppmm(ph, pl, m0, m1) \
- do { \
- USItype __m0 = (m0), __m1 = (m1); \
- __asm__ ( \
- "s r2,r2
- mts r10,%2
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- m r2,%3
- cas %0,r2,r0
- mfs r10,%1" \
- : "=r" ((USItype)(ph)), \
- "=r" ((USItype)(pl)) \
- : "%r" (__m0), \
- "r" (__m1) \
- : "r2"); \
- (ph) += ((((SItype) __m0 >> 31) & __m1) \
- + (((SItype) __m1 >> 31) & __m0)); \
- } while (0)
-#define UMUL_TIME 20
-#define UDIV_TIME 200
-#define count_leading_zeros(count, x) \
- do { \
- if ((x) >= 0x10000) \
- __asm__ ("clz %0,%1" \
- : "=r" ((USItype)(count)) \
- : "r" ((USItype)(x) >> 16)); \
- else \
- { \
- __asm__ ("clz %0,%1" \
- : "=r" ((USItype)(count)) \
- : "r" ((USItype)(x))); \
- (count) += 16; \
- } \
- } while (0)
-#endif
-
-#if defined (__sparc__)
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("addcc %r4,%5,%1
- addx %r2,%3,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "%rJ" ((USItype)(ah)), \
- "rI" ((USItype)(bh)), \
- "%rJ" ((USItype)(al)), \
- "rI" ((USItype)(bl)) \
- __CLOBBER_CC)
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("subcc %r4,%5,%1
- subx %r2,%3,%0" \
- : "=r" ((USItype)(sh)), \
- "=&r" ((USItype)(sl)) \
- : "rJ" ((USItype)(ah)), \
- "rI" ((USItype)(bh)), \
- "rJ" ((USItype)(al)), \
- "rI" ((USItype)(bl)) \
- __CLOBBER_CC)
-#if defined (__sparc_v8__)
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("umul %2,%3,%1;rd %%y,%0" \
- : "=r" ((USItype)(w1)), \
- "=r" ((USItype)(w0)) \
- : "r" ((USItype)(u)), \
- "r" ((USItype)(v)))
-#define udiv_qrnnd(q, r, n1, n0, d) \
- __asm__ ("mov %2,%%y;nop;nop;nop;udiv %3,%4,%0;umul %0,%4,%1;sub %3,%1,%1"\
- : "=&r" ((USItype)(q)), \
- "=&r" ((USItype)(r)) \
- : "r" ((USItype)(n1)), \
- "r" ((USItype)(n0)), \
- "r" ((USItype)(d)))
-#else
-#if defined (__sparclite__)
-/* This has hardware multiply but not divide. It also has two additional
- instructions scan (ffs from high bit) and divscc. */
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("umul %2,%3,%1;rd %%y,%0" \
- : "=r" ((USItype)(w1)), \
- "=r" ((USItype)(w0)) \
- : "r" ((USItype)(u)), \
- "r" ((USItype)(v)))
-#define udiv_qrnnd(q, r, n1, n0, d) \
- __asm__ ("! Inlined udiv_qrnnd
- wr %%g0,%2,%%y ! Not a delayed write for sparclite
- tst %%g0
- divscc %3,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%%g1
- divscc %%g1,%4,%0
- rd %%y,%1
- bl,a 1f
- add %1,%4,%1
-1: ! End of inline udiv_qrnnd" \
- : "=r" ((USItype)(q)), \
- "=r" ((USItype)(r)) \
- : "r" ((USItype)(n1)), \
- "r" ((USItype)(n0)), \
- "rI" ((USItype)(d)) \
- : "%g1" __AND_CLOBBER_CC)
-#define UDIV_TIME 37
-#define count_leading_zeros(count, x) \
- __asm__ ("scan %1,0,%0" \
- : "=r" ((USItype)(x)) \
- : "r" ((USItype)(count)))
-#else
-/* SPARC without integer multiplication and divide instructions.
- (i.e. at least Sun4/20,40,60,65,75,110,260,280,330,360,380,470,490) */
-#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("! Inlined umul_ppmm
- wr %%g0,%2,%%y ! SPARC has 0-3 delay insn after a wr
- sra %3,31,%%g2 ! Don't move this insn
- and %2,%%g2,%%g2 ! Don't move this insn
- andcc %%g0,0,%%g1 ! Don't move this insn
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,%3,%%g1
- mulscc %%g1,0,%%g1
- add %%g1,%%g2,%0
- rd %%y,%1" \
- : "=r" ((USItype)(w1)), \
- "=r" ((USItype)(w0)) \
- : "%rI" ((USItype)(u)), \
- "r" ((USItype)(v)) \
- : "%g1", "%g2" __AND_CLOBBER_CC)
-#define UMUL_TIME 39 /* 39 instructions */
-/* It's quite necessary to add this much assembler for the sparc.
- The default udiv_qrnnd (in C) is more than 10 times slower! */
-#define udiv_qrnnd(q, r, n1, n0, d) \
- __asm__ ("! Inlined udiv_qrnnd
- mov 32,%%g1
- subcc %1,%2,%%g0
-1: bcs 5f
- addxcc %0,%0,%0 ! shift n1n0 and a q-bit in lsb
- sub %1,%2,%1 ! this kills msb of n
- addx %1,%1,%1 ! so this can't give carry
- subcc %%g1,1,%%g1
-2: bne 1b
- subcc %1,%2,%%g0
- bcs 3f
- addxcc %0,%0,%0 ! shift n1n0 and a q-bit in lsb
- b 3f
- sub %1,%2,%1 ! this kills msb of n
-4: sub %1,%2,%1
-5: addxcc %1,%1,%1
- bcc 2b
- subcc %%g1,1,%%g1
-! Got carry from n. Subtract next step to cancel this carry.
- bne 4b
- addcc %0,%0,%0 ! shift n1n0 and a 0-bit in lsb
- sub %1,%2,%1
-3: xnor %0,0,%0
- ! End of inline udiv_qrnnd" \
- : "=&r" ((USItype)(q)), \
- "=&r" ((USItype)(r)) \
- : "r" ((USItype)(d)), \
- "1" ((USItype)(n1)), \
- "0" ((USItype)(n0)) : "%g1" __AND_CLOBBER_CC)
-#define UDIV_TIME (3+7*32) /* 7 instructions/iteration. 32 iterations. */
-#endif /* __sparclite__ */
-#endif /* __sparc_v8__ */
-#endif /* __sparc__ */
-
-#if defined (__vax__)
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("addl2 %5,%1
- adwc %3,%0" \
- : "=g" ((USItype)(sh)), \
- "=&g" ((USItype)(sl)) \
- : "%0" ((USItype)(ah)), \
- "g" ((USItype)(bh)), \
- "%1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("subl2 %5,%1
- sbwc %3,%0" \
- : "=g" ((USItype)(sh)), \
- "=&g" ((USItype)(sl)) \
- : "0" ((USItype)(ah)), \
- "g" ((USItype)(bh)), \
- "1" ((USItype)(al)), \
- "g" ((USItype)(bl)))
-#define umul_ppmm(xh, xl, m0, m1) \
- do { \
- union { \
- UDItype __ll; \
- struct {USItype __l, __h;} __i; \
- } __xx; \
- USItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("emul %1,%2,$0,%0" \
- : "=r" (__xx.__ll) \
- : "g" (__m0), \
- "g" (__m1)); \
- (xh) = __xx.__i.__h; \
- (xl) = __xx.__i.__l; \
- (xh) += ((((SItype) __m0 >> 31) & __m1) \
- + (((SItype) __m1 >> 31) & __m0)); \
- } while (0)
-#define sdiv_qrnnd(q, r, n1, n0, d) \
- do { \
- union {DItype __ll; \
- struct {SItype __l, __h;} __i; \
- } __xx; \
- __xx.__i.__h = n1; __xx.__i.__l = n0; \
- __asm__ ("ediv %3,%2,%0,%1" \
- : "=g" (q), "=g" (r) \
- : "g" (__xx.__ll), "g" (d)); \
- } while (0)
-#endif /* __vax__ */
-
-#endif /* __GNUC__ */
-
-/* If this machine has no inline assembler, use C macros. */
-
-#if !defined (add_ssaaaa)
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- do { \
- USItype __x; \
- __x = (al) + (bl); \
- (sh) = (ah) + (bh) + (__x < (al)); \
- (sl) = __x; \
- } while (0)
-#endif
-
-#if !defined (sub_ddmmss)
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- do { \
- USItype __x; \
- __x = (al) - (bl); \
- (sh) = (ah) - (bh) - (__x > (al)); \
- (sl) = __x; \
- } while (0)
-#endif
-
-#if !defined (umul_ppmm)
-#define umul_ppmm(w1, w0, u, v) \
- do { \
- USItype __x0, __x1, __x2, __x3; \
- USItype __ul, __vl, __uh, __vh; \
- \
- __ul = __ll_lowpart (u); \
- __uh = __ll_highpart (u); \
- __vl = __ll_lowpart (v); \
- __vh = __ll_highpart (v); \
- \
- __x0 = (USItype) __ul * __vl; \
- __x1 = (USItype) __ul * __vh; \
- __x2 = (USItype) __uh * __vl; \
- __x3 = (USItype) __uh * __vh; \
- \
- __x1 += __ll_highpart (__x0);/* this can't give carry */ \
- __x1 += __x2; /* but this indeed can */ \
- if (__x1 < __x2) /* did we get it? */ \
- __x3 += __ll_B; /* yes, add it in the proper pos. */ \
- \
- (w1) = __x3 + __ll_highpart (__x1); \
- (w0) = __ll_lowpart (__x1) * __ll_B + __ll_lowpart (__x0); \
- } while (0)
-#endif
-
-#if !defined (__umulsidi3)
-#define __umulsidi3(u, v) \
- ({DIunion __w; \
- umul_ppmm (__w.s.high, __w.s.low, u, v); \
- __w.ll; })
-#endif
-
-/* Define this unconditionally, so it can be used for debugging. */
-#define __udiv_qrnnd_c(q, r, n1, n0, d) \
- do { \
- USItype __d1, __d0, __q1, __q0; \
- USItype __r1, __r0, __m; \
- __d1 = __ll_highpart (d); \
- __d0 = __ll_lowpart (d); \
- \
- __r1 = (n1) % __d1; \
- __q1 = (n1) / __d1; \
- __m = (USItype) __q1 * __d0; \
- __r1 = __r1 * __ll_B | __ll_highpart (n0); \
- if (__r1 < __m) \
- { \
- __q1--, __r1 += (d); \
- if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */\
- if (__r1 < __m) \
- __q1--, __r1 += (d); \
- } \
- __r1 -= __m; \
- \
- __r0 = __r1 % __d1; \
- __q0 = __r1 / __d1; \
- __m = (USItype) __q0 * __d0; \
- __r0 = __r0 * __ll_B | __ll_lowpart (n0); \
- if (__r0 < __m) \
- { \
- __q0--, __r0 += (d); \
- if (__r0 >= (d)) \
- if (__r0 < __m) \
- __q0--, __r0 += (d); \
- } \
- __r0 -= __m; \
- \
- (q) = (USItype) __q1 * __ll_B | __q0; \
- (r) = __r0; \
- } while (0)
-
-/* If the processor has no udiv_qrnnd but sdiv_qrnnd, go through
- __udiv_w_sdiv (defined in libgcc or elsewhere). */
-#if !defined (udiv_qrnnd) && defined (sdiv_qrnnd)
-#define udiv_qrnnd(q, r, nh, nl, d) \
- do { \
- USItype __r; \
- (q) = __udiv_w_sdiv (&__r, nh, nl, d); \
- (r) = __r; \
- } while (0)
-#endif
-
-/* If udiv_qrnnd was not defined for this processor, use __udiv_qrnnd_c. */
-#if !defined (udiv_qrnnd)
-#define UDIV_NEEDS_NORMALIZATION 1
-#define udiv_qrnnd __udiv_qrnnd_c
-#endif
-
-#if !defined (count_leading_zeros)
-extern const UQItype __clz_tab[];
-#define count_leading_zeros(count, x) \
- do { \
- USItype __xr = (x); \
- USItype __a; \
- \
- if (SI_TYPE_SIZE <= 32) \
- { \
- __a = __xr < (1<<2*__BITS4) \
- ? (__xr < (1<<__BITS4) ? 0 : __BITS4) \
- : (__xr < (1<<3*__BITS4) ? 2*__BITS4 : 3*__BITS4); \
- } \
- else \
- { \
- for (__a = SI_TYPE_SIZE - 8; __a > 0; __a -= 8) \
- if (((__xr >> __a) & 0xff) != 0) \
- break; \
- } \
- \
- (count) = SI_TYPE_SIZE - (__clz_tab[__xr >> __a] + __a); \
- } while (0)
-#endif
-
-#ifndef UDIV_NEEDS_NORMALIZATION
-#define UDIV_NEEDS_NORMALIZATION 0
-#endif
diff --git a/gnu/usr.bin/cc/include/loop.h b/gnu/usr.bin/cc/include/loop.h
deleted file mode 100644
index bb219c32d210..000000000000
--- a/gnu/usr.bin/cc/include/loop.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/* Loop optimization definitions for GNU C-Compiler
- Copyright (C) 1991 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* Get the luid of an insn. Catch the error of trying to reference the LUID
- of an insn added during loop, since these don't have LUIDs. */
-
-#define INSN_LUID(INSN) \
- (INSN_UID (INSN) < max_uid_for_loop ? uid_luid[INSN_UID (INSN)] \
- : (abort (), -1))
-
-/* A "basic induction variable" or biv is a pseudo reg that is set
- (within this loop) only by incrementing or decrementing it. */
-/* A "general induction variable" or giv is a pseudo reg whose
- value is a linear function of a biv. */
-
-/* Bivs are recognized by `basic_induction_var';
- Givs by `general_induct_var'. */
-
-/* An enum for the two different types of givs, those that are used
- as memory addresses and those that are calculated into registers. */
-enum g_types { DEST_ADDR, DEST_REG };
-
-/* A `struct induction' is created for every instruction that sets
- an induction variable (either a biv or a giv). */
-
-struct induction
-{
- rtx insn; /* The insn that sets a biv or giv */
- rtx new_reg; /* New register, containing strength reduced
- version of this giv. */
- rtx src_reg; /* Biv from which this giv is computed.
- (If this is a biv, then this is the biv.) */
- enum g_types giv_type; /* Indicate whether DEST_ADDR or DEST_REG */
- rtx dest_reg; /* Destination register for insn: this is the
- register which was the biv or giv.
- For a biv, this equals src_reg.
- For a DEST_ADDR type giv, this is 0. */
- rtx *location; /* Place in the insn where this giv occurs.
- If GIV_TYPE is DEST_REG, this is 0. */
- enum machine_mode mode; /* The mode of this biv or giv */
- enum machine_mode mem_mode; /* For DEST_ADDR, mode of the memory object. */
- rtx mult_val; /* Multiplicative factor for src_reg. */
- rtx add_val; /* Additive constant for that product. */
- int benefit; /* Gain from eliminating this insn. */
- rtx final_value; /* If the giv is used outside the loop, and its
- final value could be calculated, it is put
- here, and the giv is made replaceable. Set
- the giv to this value before the loop. */
- unsigned replaceable : 1; /* 1 if we can substitute the strength-reduced
- variable for the original variable.
- 0 means they must be kept separate and the
- new one must be copied into the old pseudo
- reg each time the old one is set. */
- unsigned not_replaceable : 1; /* Used to prevent duplicating work. This is
- 1 if we know that the giv definitely can
- not be made replaceable, in which case we
- don't bother checking the variable again
- even if further info is available.
- Both this and the above can be zero. */
- unsigned ignore : 1; /* 1 prohibits further processing of giv */
- unsigned always_computable : 1;/* 1 if this set occurs each iteration */
- unsigned maybe_multiple : 1; /* Only used for a biv and 1 if this biv
- update may be done multiple times per
- iteration. */
- unsigned cant_derive : 1; /* For giv's, 1 if this giv cannot derive
- another giv. This occurs in many cases
- where a giv's lifetime spans an update to
- a biv. */
- unsigned combined_with : 1; /* 1 if this giv has been combined with. It
- then cannot combine with any other giv. */
- unsigned maybe_dead : 1; /* 1 if this giv might be dead. In that case,
- we won't use it to eliminate a biv, it
- would probably lose. */
- int lifetime; /* Length of life of this giv */
- int times_used; /* # times this giv is used. */
- rtx derive_adjustment; /* If nonzero, is an adjustment to be
- subtracted from add_val when this giv
- derives another. This occurs when the
- giv spans a biv update by incrementation. */
- struct induction *next_iv; /* For givs, links together all givs that are
- based on the same biv. For bivs, links
- together all biv entries that refer to the
- same biv register. */
- struct induction *same; /* If this giv has been combined with another
- giv, this points to the base giv. The base
- giv will have COMBINED_WITH non-zero. */
- HOST_WIDE_INT const_adjust; /* Used by loop unrolling, when an address giv
- is split, and a constant is eliminated from
- the address, the -constant is stored here
- for later use. */
-};
-
-/* A `struct iv_class' is created for each biv. */
-
-struct iv_class {
- int regno; /* Pseudo reg which is the biv. */
- int biv_count; /* Number of insns setting this reg. */
- struct induction *biv; /* List of all insns that set this reg. */
- int giv_count; /* Number of DEST_REG givs computed from this
- biv. The resulting count is only used in
- check_dbra_loop. */
- struct induction *giv; /* List of all insns that compute a giv
- from this reg. */
- int total_benefit; /* Sum of BENEFITs of all those givs */
- rtx initial_value; /* Value of reg at loop start */
- rtx initial_test; /* Test performed on BIV before loop */
- struct iv_class *next; /* Links all class structures together */
- rtx init_insn; /* insn which initializes biv, 0 if none. */
- rtx init_set; /* SET of INIT_INSN, if any. */
- unsigned incremented : 1; /* 1 if somewhere incremented/decremented */
- unsigned eliminable : 1; /* 1 if plausible candidate for elimination. */
- unsigned nonneg : 1; /* 1 if we added a REG_NONNEG note for this. */
- unsigned reversed : 1; /* 1 if we reversed the loop that this
- biv controls. */
-};
-
-/* Definitions used by the basic induction variable discovery code. */
-enum iv_mode { UNKNOWN_INDUCT, BASIC_INDUCT, NOT_BASIC_INDUCT,
- GENERAL_INDUCT };
-
-/* Variables declared in loop.c, but also needed in unroll.c. */
-
-extern int *uid_luid;
-extern int max_uid_for_loop;
-extern int *uid_loop_num;
-extern int *loop_outer_loop;
-extern rtx *loop_number_exit_labels;
-extern unsigned HOST_WIDE_INT loop_n_iterations;
-extern int max_reg_before_loop;
-
-extern FILE *loop_dump_stream;
-
-extern enum iv_mode *reg_iv_type;
-extern struct induction **reg_iv_info;
-extern struct iv_class **reg_biv_class;
-extern struct iv_class *loop_iv_list;
-
-/* Forward declarations for non-static functions declared in loop.c and
- unroll.c. */
-int invariant_p PROTO((rtx));
-rtx get_condition_for_loop PROTO((rtx));
-void emit_iv_add_mult PROTO((rtx, rtx, rtx, rtx, rtx));
-
-/* Forward declarations for non-static functions declared in stmt.c. */
-void find_loop_tree_blocks PROTO((void));
-void unroll_block_trees PROTO((void));
-
-void unroll_loop PROTO((rtx, int, rtx, rtx, int));
-rtx biv_total_increment PROTO((struct iv_class *, rtx, rtx));
-unsigned HOST_WIDE_INT loop_iterations PROTO((rtx, rtx));
-rtx final_biv_value PROTO((struct iv_class *, rtx, rtx));
-rtx final_giv_value PROTO((struct induction *, rtx, rtx));
-void emit_unrolled_add PROTO((rtx, rtx, rtx));
diff --git a/gnu/usr.bin/cc/include/machmode.def b/gnu/usr.bin/cc/include/machmode.def
deleted file mode 100644
index 3fa59aa2006c..000000000000
--- a/gnu/usr.bin/cc/include/machmode.def
+++ /dev/null
@@ -1,118 +0,0 @@
-/* This file contains the definitions and documentation for the
- machine modes used in the the GNU compiler.
- Copyright (C) 1987, 1992, 1994 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-
-/* This file defines all the MACHINE MODES used by GNU CC.
-
- A machine mode specifies a size and format of data
- at the machine level.
-
- Each RTL expression has a machine mode.
-
- At the syntax tree level, each ..._TYPE and each ..._DECL node
- has a machine mode which describes data of that type or the
- data of the variable declared. */
-
-/* The first argument is the internal name of the machine mode
- used in the C source.
- By convention these are in UPPER_CASE, except for the word "mode".
-
- The second argument is the name of the machine mode in the
- external ASCII format used for reading and printing RTL and trees.
- By convention these names in UPPER_CASE.
-
- Third argument states the kind of representation:
- MODE_INT - integer
- MODE_FLOAT - floating
- MODE_PARTIAL_INT - PSImode and PDImode
- MODE_CC - modes used for representing the condition code in a register
- MODE_COMPLEX_INT, MODE_COMPLEX_FLOAT - complex number
- MODE_RANDOM - anything else
-
- Fourth argument is the relative size of the object, in bytes.
- It is zero when the size is meaningless or not determined.
- A byte's size is determined by BITS_PER_UNIT in tm.h.
-
-
- Fifth arg is the relative size of subunits of the object.
- It is same as the fourth argument except for complexes,
- since they are really made of two equal size subunits.
-
- Sixth arg is next wider natural mode of the same class.
- 0 if there is none. */
-
-/* VOIDmode is used when no mode needs to be specified,
- as for example on CONST_INT RTL expressions. */
-DEF_MACHMODE (VOIDmode, "VOID", MODE_RANDOM, 0, 0, VOIDmode)
-
-DEF_MACHMODE (QImode, "QI", MODE_INT, 1, 1, HImode) /* int types */
-DEF_MACHMODE (HImode, "HI", MODE_INT, 2, 2, SImode)
-/* Pointers on some machines use this type to distinguish them from ints.
- Useful if a pointer is 4 bytes but has some bits that are not significant,
- so it is really not quite as wide as an integer. */
-DEF_MACHMODE (PSImode, "PSI", MODE_PARTIAL_INT, 4, 4, PDImode)
-DEF_MACHMODE (SImode, "SI", MODE_INT, 4, 4, DImode)
-DEF_MACHMODE (PDImode, "PDI", MODE_PARTIAL_INT, 8, 8, VOIDmode)
-DEF_MACHMODE (DImode, "DI", MODE_INT, 8, 8, TImode)
-DEF_MACHMODE (TImode, "TI", MODE_INT, 16, 16, OImode)
-DEF_MACHMODE (OImode, "OI", MODE_INT, 32, 32, VOIDmode)
-
-DEF_MACHMODE (QFmode, "QF", MODE_FLOAT, 1, 1, HFmode)
-DEF_MACHMODE (HFmode, "HF", MODE_FLOAT, 2, 2, TQFmode)
-DEF_MACHMODE (TQFmode, "TQF", MODE_FLOAT, 3, 3, SFmode) /* MIL-STD-1750A */
-DEF_MACHMODE (SFmode, "SF", MODE_FLOAT, 4, 4, DFmode)
-DEF_MACHMODE (DFmode, "DF", MODE_FLOAT, 8, 8, XFmode)
-DEF_MACHMODE (XFmode, "XF", MODE_FLOAT, 12, 12, TFmode) /* IEEE extended */
-DEF_MACHMODE (TFmode, "TF", MODE_FLOAT, 16, 16, VOIDmode)
-
-/* Complex modes. */
-DEF_MACHMODE (SCmode, "SC", MODE_COMPLEX_FLOAT, 8, 4, DCmode)
-DEF_MACHMODE (DCmode, "DC", MODE_COMPLEX_FLOAT, 16, 8, XCmode)
-DEF_MACHMODE (XCmode, "XC", MODE_COMPLEX_FLOAT, 24, 12, TCmode)
-DEF_MACHMODE (TCmode, "TC", MODE_COMPLEX_FLOAT, 32, 16, VOIDmode)
-
-DEF_MACHMODE (CQImode, "CQI", MODE_COMPLEX_INT, 2, 1, CHImode)
-DEF_MACHMODE (CHImode, "CHI", MODE_COMPLEX_INT, 4, 2, CSImode)
-DEF_MACHMODE (CSImode, "CSI", MODE_COMPLEX_INT, 8, 4, CDImode)
-DEF_MACHMODE (CDImode, "CDI", MODE_COMPLEX_INT, 16, 8, CTImode)
-DEF_MACHMODE (CTImode, "CTI", MODE_COMPLEX_INT, 32, 16, COImode)
-DEF_MACHMODE (COImode, "COI", MODE_COMPLEX_INT, 64, 32, VOIDmode)
-
-/* BLKmode is used for structures, arrays, etc.
- that fit no more specific mode. */
-DEF_MACHMODE (BLKmode, "BLK", MODE_RANDOM, 0, 0, VOIDmode)
-
-/* The modes for representing the condition codes come last. CCmode is
- always defined. Additional modes for the condition code can be specified
- in the EXTRA_CC_MODES macro. Everything but the names of the modes
- are copied from CCmode. For these modes, GET_MODE_WIDER_MODE points
- to the next defined CC mode, if any. */
-
-DEF_MACHMODE (CCmode, "CC", MODE_CC, 4, 4, VOIDmode)
-
-/* The symbol Pmode stands for one of the above machine modes (usually SImode).
- The tm file specifies which one. It is not a distinct mode. */
-
-/*
-Local variables:
-mode:c
-version-control: t
-End:
-*/
diff --git a/gnu/usr.bin/cc/include/machmode.h b/gnu/usr.bin/cc/include/machmode.h
deleted file mode 100644
index 307422b04525..000000000000
--- a/gnu/usr.bin/cc/include/machmode.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/* Machine mode definitions for GNU C-Compiler; included by rtl.h and tree.h.
- Copyright (C) 1991, 1993 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-
-/* Add prototype support. */
-#ifndef PROTO
-#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__)
-#define PROTO(ARGS) ARGS
-#else
-#define PROTO(ARGS) ()
-#endif
-#endif
-
-#ifndef HAVE_MACHINE_MODES
-
-/* Strictly speaking, this isn't the proper place to include these definitions,
- but this file is included by every GCC file.
-
- Some systems define these in, e.g., param.h. We undefine these names
- here to avoid the warnings. We prefer to use our definitions since we
- know they are correct. */
-
-#undef MIN
-#undef MAX
-
-#define MIN(X,Y) ((X) < (Y) ? (X) : (Y))
-#define MAX(X,Y) ((X) > (Y) ? (X) : (Y))
-
-/* Find the largest host integer type and set its size and type. */
-
-#ifndef HOST_BITS_PER_WIDE_INT
-
-#if HOST_BITS_PER_LONG > HOST_BITS_PER_INT
-#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONG
-#define HOST_WIDE_INT long
-#else
-#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_INT
-#define HOST_WIDE_INT int
-#endif
-
-#endif
-
-/* Provide a default way to print an address in hex via printf. */
-
-#ifndef HOST_PTR_PRINTF
-#define HOST_PTR_PRINTF sizeof (int) == sizeof (char *) ? "%x" : "%lx"
-#endif
-
-/* Make an enum class that gives all the machine modes. */
-
-#define DEF_MACHMODE(SYM, NAME, TYPE, SIZE, UNIT, WIDER) SYM,
-
-enum machine_mode {
-#include "machmode.def"
-
-#ifdef EXTRA_CC_MODES
- EXTRA_CC_MODES,
-#endif
-MAX_MACHINE_MODE };
-
-#undef DEF_MACHMODE
-
-#define HAVE_MACHINE_MODES
-
-#ifndef NUM_MACHINE_MODES
-#define NUM_MACHINE_MODES (int) MAX_MACHINE_MODE
-#endif
-
-/* Get the name of mode MODE as a string. */
-
-extern char *mode_name[];
-#define GET_MODE_NAME(MODE) (mode_name[(int)(MODE)])
-
-enum mode_class { MODE_RANDOM, MODE_INT, MODE_FLOAT, MODE_PARTIAL_INT, MODE_CC,
- MODE_COMPLEX_INT, MODE_COMPLEX_FLOAT, MAX_MODE_CLASS};
-
-/* Get the general kind of object that mode MODE represents
- (integer, floating, complex, etc.) */
-
-extern enum mode_class mode_class[];
-#define GET_MODE_CLASS(MODE) (mode_class[(int)(MODE)])
-
-/* Nonzero if MODE is an integral mode. */
-#define INTEGRAL_MODE_P(MODE) \
- (GET_MODE_CLASS (MODE) == MODE_INT \
- || GET_MODE_CLASS (MODE) == MODE_PARTIAL_INT \
- || GET_MODE_CLASS (MODE) == MODE_COMPLEX_INT)
-
-/* Nonzero if MODE is a floating-point mode. */
-#define FLOAT_MODE_P(MODE) \
- (GET_MODE_CLASS (MODE) == MODE_FLOAT \
- || GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT)
-
-/* Get the size in bytes of an object of mode MODE. */
-
-extern int mode_size[];
-#define GET_MODE_SIZE(MODE) (mode_size[(int)(MODE)])
-
-/* Get the size in bytes of the basic parts of an object of mode MODE. */
-
-extern int mode_unit_size[];
-#define GET_MODE_UNIT_SIZE(MODE) (mode_unit_size[(int)(MODE)])
-
-/* Get the number of units in the object. */
-
-#define GET_MODE_NUNITS(MODE) \
- ((GET_MODE_UNIT_SIZE ((MODE)) == 0) ? 0 \
- : (GET_MODE_SIZE ((MODE)) / GET_MODE_UNIT_SIZE ((MODE))))
-
-/* Get the size in bits of an object of mode MODE. */
-
-#define GET_MODE_BITSIZE(MODE) (BITS_PER_UNIT * mode_size[(int)(MODE)])
-
-/* Get a bitmask containing 1 for all bits in a word
- that fit within mode MODE. */
-
-#define GET_MODE_MASK(MODE) \
- ((GET_MODE_BITSIZE (MODE) >= HOST_BITS_PER_WIDE_INT) \
- ?(HOST_WIDE_INT) ~0 : (((HOST_WIDE_INT) 1 << GET_MODE_BITSIZE (MODE)) - 1))
-
-/* Get the next wider natural mode (eg, QI -> HI -> SI -> DI -> TI). */
-
-extern enum machine_mode mode_wider_mode[];
-#define GET_MODE_WIDER_MODE(MODE) (mode_wider_mode[(int)(MODE)])
-
-/* Return the mode for data of a given size SIZE and mode class CLASS.
- If LIMIT is nonzero, then don't use modes bigger than MAX_FIXED_MODE_SIZE.
- The value is BLKmode if no other mode is found. */
-
-extern enum machine_mode mode_for_size PROTO((unsigned int, enum mode_class, int));
-
-/* Find the best mode to use to access a bit field. */
-
-extern enum machine_mode get_best_mode PROTO((int, int, int, enum machine_mode, int));
-
-/* Determine alignment, 1<=result<=BIGGEST_ALIGNMENT. */
-
-#define GET_MODE_ALIGNMENT(MODE) \
- MIN (BIGGEST_ALIGNMENT, \
- MAX (1, (GET_MODE_UNIT_SIZE (MODE) * BITS_PER_UNIT)))
-
-/* For each class, get the narrowest mode in that class. */
-
-extern enum machine_mode class_narrowest_mode[];
-#define GET_CLASS_NARROWEST_MODE(CLASS) class_narrowest_mode[(int)(CLASS)]
-
-/* Define the integer modes whose sizes are BITS_PER_UNIT
- and BITS_PER_WORD. */
-
-extern enum machine_mode byte_mode;
-extern enum machine_mode word_mode;
-
-#endif /* not HAVE_MACHINE_MODES */
diff --git a/gnu/usr.bin/cc/include/modemap.def b/gnu/usr.bin/cc/include/modemap.def
deleted file mode 100644
index 32576403ef93..000000000000
--- a/gnu/usr.bin/cc/include/modemap.def
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Bytecode specific machine mode info for GNU C-compiler.
- Copyright (C) 1993 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* Map mode to signed, unsigned typecodes, bytecode to push const,
- to load, to store */
-DEF_MODEMAP(QImode, QIcode, QUcode, constQI, loadQI, storeQI)
-DEF_MODEMAP(HImode, HIcode, HUcode, constHI, loadHI, storeHI)
-DEF_MODEMAP(VOIDmode, SIcode, SUcode, constSI, loadSI, storeSI)
-DEF_MODEMAP(SImode, SIcode, SUcode, constSI, loadSI, storeSI)
-DEF_MODEMAP(DImode, DIcode, DUcode, constDI, loadDI, storeDI)
-DEF_MODEMAP(PSImode, Pcode, Pcode, constP, loadP, storeP)
-DEF_MODEMAP(BLKmode, Pcode, Pcode, constP, loadP, neverneverland)
-DEF_MODEMAP(SFmode, SFcode, SFcode, constSF, loadSF, storeSF)
-DEF_MODEMAP(DFmode, DFcode, DFcode, constDF, loadDF, storeDF)
diff --git a/gnu/usr.bin/cc/include/multilib.h b/gnu/usr.bin/cc/include/multilib.h
deleted file mode 100644
index b2a5790b1481..000000000000
--- a/gnu/usr.bin/cc/include/multilib.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#define MULTILIB_SELECT "\
-. ;\
-"
diff --git a/gnu/usr.bin/cc/include/obstack.h b/gnu/usr.bin/cc/include/obstack.h
deleted file mode 100644
index 7b04c906e777..000000000000
--- a/gnu/usr.bin/cc/include/obstack.h
+++ /dev/null
@@ -1,516 +0,0 @@
-/* obstack.h - object stack macros
- Copyright (C) 1988, 89, 90, 91, 92, 93, 94 Free Software Foundation, Inc.
-
-This program 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 program 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 program; if not, write to the Free Software
-Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* Summary:
-
-All the apparent functions defined here are macros. The idea
-is that you would use these pre-tested macros to solve a
-very specific set of problems, and they would run fast.
-Caution: no side-effects in arguments please!! They may be
-evaluated MANY times!!
-
-These macros operate a stack of objects. Each object starts life
-small, and may grow to maturity. (Consider building a word syllable
-by syllable.) An object can move while it is growing. Once it has
-been "finished" it never changes address again. So the "top of the
-stack" is typically an immature growing object, while the rest of the
-stack is of mature, fixed size and fixed address objects.
-
-These routines grab large chunks of memory, using a function you
-supply, called `obstack_chunk_alloc'. On occasion, they free chunks,
-by calling `obstack_chunk_free'. You must define them and declare
-them before using any obstack macros.
-
-Each independent stack is represented by a `struct obstack'.
-Each of the obstack macros expects a pointer to such a structure
-as the first argument.
-
-One motivation for this package is the problem of growing char strings
-in symbol tables. Unless you are "fascist pig with a read-only mind"
---Gosper's immortal quote from HAKMEM item 154, out of context--you
-would not like to put any arbitrary upper limit on the length of your
-symbols.
-
-In practice this often means you will build many short symbols and a
-few long symbols. At the time you are reading a symbol you don't know
-how long it is. One traditional method is to read a symbol into a
-buffer, realloc()ating the buffer every time you try to read a symbol
-that is longer than the buffer. This is beaut, but you still will
-want to copy the symbol from the buffer to a more permanent
-symbol-table entry say about half the time.
-
-With obstacks, you can work differently. Use one obstack for all symbol
-names. As you read a symbol, grow the name in the obstack gradually.
-When the name is complete, finalize it. Then, if the symbol exists already,
-free the newly read name.
-
-The way we do this is to take a large chunk, allocating memory from
-low addresses. When you want to build a symbol in the chunk you just
-add chars above the current "high water mark" in the chunk. When you
-have finished adding chars, because you got to the end of the symbol,
-you know how long the chars are, and you can create a new object.
-Mostly the chars will not burst over the highest address of the chunk,
-because you would typically expect a chunk to be (say) 100 times as
-long as an average object.
-
-In case that isn't clear, when we have enough chars to make up
-the object, THEY ARE ALREADY CONTIGUOUS IN THE CHUNK (guaranteed)
-so we just point to it where it lies. No moving of chars is
-needed and this is the second win: potentially long strings need
-never be explicitly shuffled. Once an object is formed, it does not
-change its address during its lifetime.
-
-When the chars burst over a chunk boundary, we allocate a larger
-chunk, and then copy the partly formed object from the end of the old
-chunk to the beginning of the new larger chunk. We then carry on
-accreting characters to the end of the object as we normally would.
-
-A special macro is provided to add a single char at a time to a
-growing object. This allows the use of register variables, which
-break the ordinary 'growth' macro.
-
-Summary:
- We allocate large chunks.
- We carve out one object at a time from the current chunk.
- Once carved, an object never moves.
- We are free to append data of any size to the currently
- growing object.
- Exactly one object is growing in an obstack at any one time.
- You can run one obstack per control block.
- You may have as many control blocks as you dare.
- Because of the way we do it, you can `unwind' an obstack
- back to a previous state. (You may remove objects much
- as you would with a stack.)
-*/
-
-
-/* Don't do the contents of this file more than once. */
-
-#ifndef __OBSTACK_H__
-#define __OBSTACK_H__
-
-/* We use subtraction of (char *)0 instead of casting to int
- because on word-addressable machines a simple cast to int
- may ignore the byte-within-word field of the pointer. */
-
-#ifndef __PTR_TO_INT
-#define __PTR_TO_INT(P) ((P) - (char *)0)
-#endif
-
-#ifndef __INT_TO_PTR
-#define __INT_TO_PTR(P) ((P) + (char *)0)
-#endif
-
-/* We need the type of the resulting object. In ANSI C it is ptrdiff_t
- but in traditional C it is usually long. If we are in ANSI C and
- don't already have ptrdiff_t get it. */
-
-#if defined (__STDC__) && __STDC__ && ! defined (offsetof)
-#if defined (__GNUC__) && defined (IN_GCC)
-/* On Next machine, the system's stddef.h screws up if included
- after we have defined just ptrdiff_t, so include all of stddef.h.
- Otherwise, define just ptrdiff_t, which is all we need. */
-#ifndef __NeXT__
-#define __need_ptrdiff_t
-#endif
-#endif
-
-#include <stddef.h>
-#endif
-
-#if defined (__STDC__) && __STDC__
-#define PTR_INT_TYPE ptrdiff_t
-#else
-#define PTR_INT_TYPE long
-#endif
-
-struct _obstack_chunk /* Lives at front of each chunk. */
-{
- char *limit; /* 1 past end of this chunk */
- struct _obstack_chunk *prev; /* address of prior chunk or NULL */
- char contents[4]; /* objects begin here */
-};
-
-struct obstack /* control current object in current chunk */
-{
- long chunk_size; /* preferred size to allocate chunks in */
- struct _obstack_chunk* chunk; /* address of current struct obstack_chunk */
- char *object_base; /* address of object we are building */
- char *next_free; /* where to add next char to current object */
- char *chunk_limit; /* address of char after current chunk */
- PTR_INT_TYPE temp; /* Temporary for some macros. */
- int alignment_mask; /* Mask of alignment for each object. */
- struct _obstack_chunk *(*chunkfun) (); /* User's fcn to allocate a chunk. */
- void (*freefun) (); /* User's function to free a chunk. */
- char *extra_arg; /* first arg for chunk alloc/dealloc funcs */
- unsigned use_extra_arg:1; /* chunk alloc/dealloc funcs take extra arg */
- unsigned maybe_empty_object:1;/* There is a possibility that the current
- chunk contains a zero-length object. This
- prevents freeing the chunk if we allocate
- a bigger chunk to replace it. */
- unsigned alloc_failed:1; /* chunk alloc func returned 0 */
-};
-
-/* Declare the external functions we use; they are in obstack.c. */
-
-#if defined (__STDC__) && __STDC__
-extern void _obstack_newchunk (struct obstack *, int);
-extern void _obstack_free (struct obstack *, void *);
-extern int _obstack_begin (struct obstack *, int, int,
- void *(*) (), void (*) ());
-extern int _obstack_begin_1 (struct obstack *, int, int,
- void *(*) (), void (*) (), void *);
-#else
-extern void _obstack_newchunk ();
-extern void _obstack_free ();
-extern int _obstack_begin ();
-extern int _obstack_begin_1 ();
-#endif
-
-#if defined (__STDC__) && __STDC__
-
-/* Do the function-declarations after the structs
- but before defining the macros. */
-
-void obstack_init (struct obstack *obstack);
-
-void * obstack_alloc (struct obstack *obstack, int size);
-
-void * obstack_copy (struct obstack *obstack, void *address, int size);
-void * obstack_copy0 (struct obstack *obstack, void *address, int size);
-
-void obstack_free (struct obstack *obstack, void *block);
-
-void obstack_blank (struct obstack *obstack, int size);
-
-void obstack_grow (struct obstack *obstack, void *data, int size);
-void obstack_grow0 (struct obstack *obstack, void *data, int size);
-
-void obstack_1grow (struct obstack *obstack, int data_char);
-void obstack_ptr_grow (struct obstack *obstack, void *data);
-void obstack_int_grow (struct obstack *obstack, int data);
-
-void * obstack_finish (struct obstack *obstack);
-
-int obstack_object_size (struct obstack *obstack);
-
-int obstack_room (struct obstack *obstack);
-void obstack_1grow_fast (struct obstack *obstack, int data_char);
-void obstack_ptr_grow_fast (struct obstack *obstack, void *data);
-void obstack_int_grow_fast (struct obstack *obstack, int data);
-void obstack_blank_fast (struct obstack *obstack, int size);
-
-void * obstack_base (struct obstack *obstack);
-void * obstack_next_free (struct obstack *obstack);
-int obstack_alignment_mask (struct obstack *obstack);
-int obstack_chunk_size (struct obstack *obstack);
-
-#endif /* __STDC__ */
-
-/* Non-ANSI C cannot really support alternative functions for these macros,
- so we do not declare them. */
-
-/* Pointer to beginning of object being allocated or to be allocated next.
- Note that this might not be the final address of the object
- because a new chunk might be needed to hold the final size. */
-
-#define obstack_base(h) ((h)->alloc_failed ? 0 : (h)->object_base)
-
-/* Size for allocating ordinary chunks. */
-
-#define obstack_chunk_size(h) ((h)->chunk_size)
-
-/* Pointer to next byte not yet allocated in current chunk. */
-
-#define obstack_next_free(h) ((h)->alloc_failed ? 0 : (h)->next_free)
-
-/* Mask specifying low bits that should be clear in address of an object. */
-
-#define obstack_alignment_mask(h) ((h)->alignment_mask)
-
-#define obstack_init(h) \
- _obstack_begin ((h), 0, 0, \
- (void *(*) ()) obstack_chunk_alloc, (void (*) ()) obstack_chunk_free)
-
-#define obstack_begin(h, size) \
- _obstack_begin ((h), (size), 0, \
- (void *(*) ()) obstack_chunk_alloc, (void (*) ()) obstack_chunk_free)
-
-#define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \
- _obstack_begin ((h), (size), (alignment), \
- (void *(*) ()) (chunkfun), (void (*) ()) (freefun))
-
-#define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
- _obstack_begin_1 ((h), (size), (alignment), \
- (void *(*) ()) (chunkfun), (void (*) ()) (freefun), (arg))
-
-#define obstack_chunkfun(h, newchunkfun) \
- ((h) -> chunkfun = (struct _obstack_chunk *(*)()) (newchunkfun))
-
-#define obstack_freefun(h, newfreefun) \
- ((h) -> freefun = (void (*)()) (newfreefun))
-
-#define obstack_1grow_fast(h,achar) (*((h)->next_free)++ = achar)
-
-#define obstack_blank_fast(h,n) ((h)->next_free += (n))
-
-#if defined (__GNUC__) && defined (__STDC__) && __STDC__
-/* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and
- does not implement __extension__. But that compiler doesn't define
- __GNUC_MINOR__. */
-#if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__)
-#define __extension__
-#endif
-
-/* For GNU C, if not -traditional,
- we can define these macros to compute all args only once
- without using a global variable.
- Also, we can avoid using the `temp' slot, to make faster code. */
-
-#define obstack_object_size(OBSTACK) \
- __extension__ \
- ({ struct obstack *__o = (OBSTACK); \
- __o->alloc_failed ? 0 : \
- (unsigned) (__o->next_free - __o->object_base); })
-
-#define obstack_room(OBSTACK) \
- __extension__ \
- ({ struct obstack *__o = (OBSTACK); \
- (unsigned) (__o->chunk_limit - __o->next_free); })
-
-#define obstack_grow(OBSTACK,where,length) \
-__extension__ \
-({ struct obstack *__o = (OBSTACK); \
- int __len = (length); \
- if (__o->next_free + __len > __o->chunk_limit) \
- _obstack_newchunk (__o, __len); \
- if (!__o->alloc_failed) \
- { \
- bcopy ((char *) (where), __o->next_free, __len); \
- __o->next_free += __len; \
- } \
- (void) 0; })
-
-#define obstack_grow0(OBSTACK,where,length) \
-__extension__ \
-({ struct obstack *__o = (OBSTACK); \
- int __len = (length); \
- if (__o->next_free + __len + 1 > __o->chunk_limit) \
- _obstack_newchunk (__o, __len + 1); \
- if (!__o->alloc_failed) \
- { \
- bcopy ((char *) (where), __o->next_free, __len); \
- __o->next_free += __len; \
- *(__o->next_free)++ = 0; \
- } \
- (void) 0; })
-
-#define obstack_1grow(OBSTACK,datum) \
-__extension__ \
-({ struct obstack *__o = (OBSTACK); \
- if (__o->next_free + 1 > __o->chunk_limit) \
- _obstack_newchunk (__o, 1); \
- if (!__o->alloc_failed) \
- *(__o->next_free)++ = (datum); \
- (void) 0; })
-
-/* These assume that the obstack alignment is good enough for pointers or ints,
- and that the data added so far to the current object
- shares that much alignment. */
-
-#define obstack_ptr_grow(OBSTACK,datum) \
-__extension__ \
-({ struct obstack *__o = (OBSTACK); \
- if (__o->next_free + sizeof (void *) > __o->chunk_limit) \
- _obstack_newchunk (__o, sizeof (void *)); \
- if (!__o->alloc_failed) \
- *((void **)__o->next_free)++ = ((void *)datum); \
- (void) 0; })
-
-#define obstack_int_grow(OBSTACK,datum) \
-__extension__ \
-({ struct obstack *__o = (OBSTACK); \
- if (__o->next_free + sizeof (int) > __o->chunk_limit) \
- _obstack_newchunk (__o, sizeof (int)); \
- if (!__o->alloc_failed) \
- *((int *)__o->next_free)++ = ((int)datum); \
- (void) 0; })
-
-#define obstack_ptr_grow_fast(h,aptr) (*((void **)(h)->next_free)++ = (void *)aptr)
-#define obstack_int_grow_fast(h,aint) (*((int *)(h)->next_free)++ = (int)aint)
-
-#define obstack_blank(OBSTACK,length) \
-__extension__ \
-({ struct obstack *__o = (OBSTACK); \
- int __len = (length); \
- if (__o->chunk_limit - __o->next_free < __len) \
- _obstack_newchunk (__o, __len); \
- if (!__o->alloc_failed) \
- __o->next_free += __len; \
- (void) 0; })
-
-#define obstack_alloc(OBSTACK,length) \
-__extension__ \
-({ struct obstack *__h = (OBSTACK); \
- obstack_blank (__h, (length)); \
- obstack_finish (__h); })
-
-#define obstack_copy(OBSTACK,where,length) \
-__extension__ \
-({ struct obstack *__h = (OBSTACK); \
- obstack_grow (__h, (where), (length)); \
- obstack_finish (__h); })
-
-#define obstack_copy0(OBSTACK,where,length) \
-__extension__ \
-({ struct obstack *__h = (OBSTACK); \
- obstack_grow0 (__h, (where), (length)); \
- obstack_finish (__h); })
-
-/* The local variable is named __o1 to avoid a name conflict
- when obstack_blank is called. */
-#define obstack_finish(OBSTACK) \
-__extension__ \
-({ struct obstack *__o1 = (OBSTACK); \
- void *value; \
- if (__o1->alloc_failed) \
- value = 0; \
- else \
- { \
- value = (void *) __o1->object_base; \
- if (__o1->next_free == value) \
- __o1->maybe_empty_object = 1; \
- __o1->next_free \
- = __INT_TO_PTR ((__PTR_TO_INT (__o1->next_free)+__o1->alignment_mask)\
- & ~ (__o1->alignment_mask)); \
- if (__o1->next_free - (char *)__o1->chunk \
- > __o1->chunk_limit - (char *)__o1->chunk) \
- __o1->next_free = __o1->chunk_limit; \
- __o1->object_base = __o1->next_free; \
- } \
- value; })
-
-#define obstack_free(OBSTACK, OBJ) \
-__extension__ \
-({ struct obstack *__o = (OBSTACK); \
- void *__obj = (OBJ); \
- if (__obj > (void *)__o->chunk && __obj < (void *)__o->chunk_limit) \
- __o->next_free = __o->object_base = __obj; \
- else (obstack_free) (__o, __obj); })
-
-#else /* not __GNUC__ or not __STDC__ */
-
-#define obstack_object_size(h) \
- (unsigned) ((h)->alloc_failed ? 0 : (h)->next_free - (h)->object_base)
-
-#define obstack_room(h) \
- (unsigned) ((h)->chunk_limit - (h)->next_free)
-
-/* Note that the call to _obstack_newchunk is enclosed in (..., 0)
- so that we can avoid having void expressions
- in the arms of the conditional expression.
- Casting the third operand to void was tried before,
- but some compilers won't accept it. */
-
-#define obstack_grow(h,where,length) \
-( (h)->temp = (length), \
- (((h)->next_free + (h)->temp > (h)->chunk_limit) \
- ? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \
- ((h)->alloc_failed ? 0 : \
- (bcopy ((char *) (where), (h)->next_free, (h)->temp), \
- (h)->next_free += (h)->temp)))
-
-#define obstack_grow0(h,where,length) \
-( (h)->temp = (length), \
- (((h)->next_free + (h)->temp + 1 > (h)->chunk_limit) \
- ? (_obstack_newchunk ((h), (h)->temp + 1), 0) : 0), \
- ((h)->alloc_failed ? 0 : \
- (bcopy ((char *) (where), (h)->next_free, (h)->temp), \
- (h)->next_free += (h)->temp, \
- *((h)->next_free)++ = 0)))
-
-#define obstack_1grow(h,datum) \
-( (((h)->next_free + 1 > (h)->chunk_limit) \
- ? (_obstack_newchunk ((h), 1), 0) : 0), \
- ((h)->alloc_failed ? 0 : \
- (*((h)->next_free)++ = (datum))))
-
-#define obstack_ptr_grow(h,datum) \
-( (((h)->next_free + sizeof (char *) > (h)->chunk_limit) \
- ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0), \
- ((h)->alloc_failed ? 0 : \
- (*((char **)(((h)->next_free+=sizeof(char *))-sizeof(char *))) = ((char *)datum))))
-
-#define obstack_int_grow(h,datum) \
-( (((h)->next_free + sizeof (int) > (h)->chunk_limit) \
- ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0), \
- ((h)->alloc_failed ? 0 : \
- (*((int *)(((h)->next_free+=sizeof(int))-sizeof(int))) = ((int)datum))))
-
-#define obstack_ptr_grow_fast(h,aptr) (*((char **)(h)->next_free)++ = (char *)aptr)
-#define obstack_int_grow_fast(h,aint) (*((int *)(h)->next_free)++ = (int)aint)
-
-#define obstack_blank(h,length) \
-( (h)->temp = (length), \
- (((h)->chunk_limit - (h)->next_free < (h)->temp) \
- ? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \
- ((h)->alloc_failed ? 0 : \
- ((h)->next_free += (h)->temp)))
-
-#define obstack_alloc(h,length) \
- (obstack_blank ((h), (length)), obstack_finish ((h)))
-
-#define obstack_copy(h,where,length) \
- (obstack_grow ((h), (where), (length)), obstack_finish ((h)))
-
-#define obstack_copy0(h,where,length) \
- (obstack_grow0 ((h), (where), (length)), obstack_finish ((h)))
-
-#define obstack_finish(h) \
-( (h)->alloc_failed ? 0 : \
- (((h)->next_free == (h)->object_base \
- ? (((h)->maybe_empty_object = 1), 0) \
- : 0), \
- (h)->temp = __PTR_TO_INT ((h)->object_base), \
- (h)->next_free \
- = __INT_TO_PTR ((__PTR_TO_INT ((h)->next_free)+(h)->alignment_mask) \
- & ~ ((h)->alignment_mask)), \
- (((h)->next_free - (char *)(h)->chunk \
- > (h)->chunk_limit - (char *)(h)->chunk) \
- ? ((h)->next_free = (h)->chunk_limit) : 0), \
- (h)->object_base = (h)->next_free, \
- __INT_TO_PTR ((h)->temp)))
-
-#if defined (__STDC__) && __STDC__
-#define obstack_free(h,obj) \
-( (h)->temp = (char *)(obj) - (char *) (h)->chunk, \
- (((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\
- ? (int) ((h)->next_free = (h)->object_base \
- = (h)->temp + (char *) (h)->chunk) \
- : (((obstack_free) ((h), (h)->temp + (char *) (h)->chunk), 0), 0)))
-#else
-#define obstack_free(h,obj) \
-( (h)->temp = (char *)(obj) - (char *) (h)->chunk, \
- (((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\
- ? (int) ((h)->next_free = (h)->object_base \
- = (h)->temp + (char *) (h)->chunk) \
- : (_obstack_free ((h), (h)->temp + (char *) (h)->chunk), 0)))
-#endif
-
-#endif /* not __GNUC__ or not __STDC__ */
-
-#endif /* not __OBSTACK_H__ */
diff --git a/gnu/usr.bin/cc/include/output.h b/gnu/usr.bin/cc/include/output.h
deleted file mode 100644
index fc154630373e..000000000000
--- a/gnu/usr.bin/cc/include/output.h
+++ /dev/null
@@ -1,241 +0,0 @@
-/* Declarations for insn-output.c. These functions are defined in recog.c,
- final.c, and varasm.c.
- Copyright (C) 1987, 1991, 1994 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* Initialize data in final at the beginning of a compilation. */
-extern void init_final PROTO((char *));
-
-/* Called at end of source file,
- to output the block-profiling table for this entire compilation. */
-extern void end_final PROTO((char *));
-
-/* Enable APP processing of subsequent output.
- Used before the output from an `asm' statement. */
-extern void app_enable PROTO((void));
-
-/* Disable APP processing of subsequent output.
- Called from varasm.c before most kinds of output. */
-extern void app_disable PROTO((void));
-
-/* Return the number of slots filled in the current
- delayed branch sequence (we don't count the insn needing the
- delay slot). Zero if not in a delayed branch sequence. */
-extern int dbr_sequence_length PROTO((void));
-
-/* Indicate that branch shortening hasn't yet been done. */
-extern void init_insn_lengths PROTO((void));
-
-/* Obtain the current length of an insn. If branch shortening has been done,
- get its actual length. Otherwise, get its maximum length. */
-extern int get_attr_length PROTO((rtx));
-
-/* Make a pass over all insns and compute their actual lengths by shortening
- any branches of variable length if possible. */
-extern void shorten_branches PROTO((rtx));
-
-/* Output assembler code for the start of a function,
- and initialize some of the variables in this file
- for the new function. The label for the function and associated
- assembler pseudo-ops have already been output in
- `assemble_start_function'. */
-extern void final_start_function STDIO_PROTO((rtx, FILE *, int));
-
-/* Output assembler code for the end of a function.
- For clarity, args are same as those of `final_start_function'
- even though not all of them are needed. */
-extern void final_end_function STDIO_PROTO((rtx, FILE *, int));
-
-/* Output assembler code for some insns: all or part of a function. */
-extern void final STDIO_PROTO((rtx, FILE *, int, int));
-
-/* The final scan for one insn, INSN. Args are same as in `final', except
- that INSN is the insn being scanned. Value returned is the next insn to
- be scanned. */
-extern rtx final_scan_insn STDIO_PROTO((rtx, FILE *, int, int, int));
-
-/* Replace a SUBREG with a REG or a MEM, based on the thing it is a
- subreg of. */
-extern rtx alter_subreg PROTO((rtx));
-
-/* Report inconsistency between the assembler template and the operands.
- In an `asm', it's the user's fault; otherwise, the compiler's fault. */
-extern void output_operand_lossage PROTO((char *));
-
-/* Output a string of assembler code, substituting insn operands.
- Defined in final.c. */
-extern void output_asm_insn PROTO((char *, rtx *));
-
-/* Output a LABEL_REF, or a bare CODE_LABEL, as an assembler symbol. */
-extern void output_asm_label PROTO((rtx));
-
-/* Print a memory reference operand for address X
- using machine-dependent assembler syntax. */
-extern void output_address PROTO((rtx));
-
-/* Print an integer constant expression in assembler syntax.
- Addition and subtraction are the only arithmetic
- that may appear in these expressions. */
-extern void output_addr_const STDIO_PROTO((FILE *, rtx));
-
-/* Output a string of assembler code, substituting numbers, strings
- and fixed syntactic prefixes. */
-extern void asm_fprintf STDIO_PROTO(PVPROTO((FILE *file,
- char *p, ...)));
-
-/* Split up a CONST_DOUBLE or integer constant rtx into two rtx's for single
- words. */
-extern void split_double PROTO((rtx, rtx *, rtx *));
-
-/* Return nonzero if this function has no function calls. */
-extern int leaf_function_p PROTO((void));
-
-/* Return 1 if this function uses only the registers that can be
- safely renumbered. */
-extern int only_leaf_regs_used PROTO((void));
-
-/* Scan IN_RTX and its subexpressions, and renumber all regs into those
- available in leaf functions. */
-extern void leaf_renumber_regs_insn PROTO((rtx));
-
-/* Output a name (as found inside a symbol_ref) in assembler syntax. */
-extern void assemble_name STDIO_PROTO((FILE *, char *));
-
-/* When outputting assembler code, indicates which alternative
- of the constraints was actually satisfied. */
-extern int which_alternative;
-
-/* When outputting delayed branch sequences, this rtx holds the
- sequence being output. It is null when no delayed branch
- sequence is being output, so it can be used as a test in the
- insn output code.
-
- This variable is defined in final.c. */
-extern rtx final_sequence;
-
-/* Number of bytes of args popped by function being compiled on its return.
- Zero if no bytes are to be popped.
- May affect compilation of return insn or of function epilogue. */
-
-extern int current_function_pops_args;
-
-/* Nonzero if function being compiled needs to be given an address
- where the value should be stored. */
-
-extern int current_function_returns_struct;
-
-/* Nonzero if function being compiled needs to
- return the address of where it has put a structure value. */
-
-extern int current_function_returns_pcc_struct;
-
-/* Nonzero if function being compiled needs to be passed a static chain. */
-
-extern int current_function_needs_context;
-
-/* Nonzero if function being compiled can call setjmp. */
-
-extern int current_function_calls_setjmp;
-
-/* Nonzero if function being compiled can call longjmp. */
-
-extern int current_function_calls_longjmp;
-
-/* Nonzero if function being compiled can call alloca,
- either as a subroutine or builtin. */
-
-extern int current_function_calls_alloca;
-
-/* Nonzero if function being compiled receives nonlocal gotos
- from nested functions. */
-
-extern int current_function_has_nonlocal_label;
-
-/* Nonzero if function being compiled contains nested functions. */
-
-extern int current_function_contains_functions;
-
-/* Nonzero if the current function returns a pointer type */
-
-extern int current_function_returns_pointer;
-
-/* If function's args have a fixed size, this is that size, in bytes.
- Otherwise, it is -1.
- May affect compilation of return insn or of function epilogue. */
-
-extern int current_function_args_size;
-
-/* # bytes the prologue should push and pretend that the caller pushed them.
- The prologue must do this, but only if parms can be passed in registers. */
-
-extern int current_function_pretend_args_size;
-
-/* # of bytes of outgoing arguments required to be pushed by the prologue.
- If this is non-zero, it means that ACCUMULATE_OUTGOING_ARGS was defined
- and no stack adjusts will be done on function calls. */
-
-extern int current_function_outgoing_args_size;
-
-/* Nonzero if current function uses varargs.h or equivalent.
- Zero for functions that use stdarg.h. */
-
-extern int current_function_varargs;
-
-/* Quantities of various kinds of registers
- used for the current function's args. */
-
-extern CUMULATIVE_ARGS current_function_args_info;
-
-/* Name of function now being compiled. */
-
-extern char *current_function_name;
-
-/* If non-zero, an RTL expression for that location at which the current
- function returns its result. Usually equal to
- DECL_RTL (DECL_RESULT (current_function_decl)). */
-
-extern rtx current_function_return_rtx;
-
-/* If some insns can be deferred to the delay slots of the epilogue, the
- delay list for them is recorded here. */
-
-extern rtx current_function_epilogue_delay_list;
-
-/* Nonzero means generate position-independent code.
- This is not fully implemented yet. */
-
-extern int flag_pic;
-
-/* This is nonzero if the current function uses pic_offset_table_rtx. */
-extern int current_function_uses_pic_offset_table;
-
-/* This is nonzero if the current function uses the constant pool. */
-extern int current_function_uses_const_pool;
-
-/* The line number of the beginning of the current function.
- sdbout.c needs this so that it can output relative linenumbers. */
-
-#ifdef SDB_DEBUGGING_INFO /* Avoid undef sym in certain broken linkers. */
-extern int sdb_begin_function_line;
-#endif
-
-/* File in which assembler code is being written. */
-
-#ifdef BUFSIZ
-extern FILE *asm_out_file;
-#endif
diff --git a/gnu/usr.bin/cc/include/pcp.h b/gnu/usr.bin/cc/include/pcp.h
deleted file mode 100644
index 4ca072759d05..000000000000
--- a/gnu/usr.bin/cc/include/pcp.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/* pcp.h -- Describes the format of a precompiled file
- Copyright (C) 1990 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-
-
-/* Structure allocated for every string in a precompiled file */
-typedef struct stringdef STRINGDEF;
-struct stringdef
-{
- U_CHAR *contents; /* String to include */
- int len; /* Its length */
- int writeflag; /* Whether we write this */
- int lineno; /* Linenumber of source file */
- U_CHAR *filename; /* Name of source file */
- STRINGDEF *chain; /* Global list of strings in natural order */
- int output_mark; /* Where in the output this goes */
-};
-
-typedef struct keydef KEYDEF;
-struct keydef
-{
- STRINGDEF *str;
- KEYDEF *chain;
-};
-
-/* Format: */
-/* A precompiled file starts with a series of #define and #undef
- statements:
- #define MAC DEF --- Indicates MAC must be defined with defn DEF
- #define MAC --- Indicates MAC must be defined with any defn
- #undef MAC --- Indicates MAC cannot be defined
-
-These preconditions must be true for a precompiled file to be used.
-The preconditions section is null terminated. */
-
-/* Then, there is a four byte number (in network byte order) which */
- /* indicates the number of strings the file contains. */
-
-/* Each string contains a STRINGDEF structure. The only component of */
- /* the STRINGDEF structure which is used is the lineno field, which */
- /* should hold the line number in the original header file. */
- /* Then follows the string, followed by a null. Then comes a four */
- /* byte number (again, in network byte order) indicating the number */
- /* of keys for this string. Each key is a KEYDEF structure, with */
- /* irrelevant contents, followed by the null-terminated string. */
-
-/* If the number of keys is 0, then there are no keys for the string, */
- /* in other words, the string will never be included. If the number */
- /* of keys is -1, this is a special flag indicating there are no keys */
- /* in the file, and the string is mandatory (that is, it must be */
- /* included regardless in the included output). */
-
-/* A file, then, looks like this:
-
- Precondition 1
- Precondition 2
- .
- .
- .
- <NUL>
- Number of strings
- STRINGDEF
- String . . . <NUL>
- Number of keys
- KEYDEF
- Key . . . <NUL>
- KEYDEF
- Key . . . <NUL>
- .
- .
- .
- STRINGDEF
- String . . . <NUL>
- Number of keys
- KEYDEF
- Key . . . <NUL>
- .
- .
- .
- .
- .
- .
-
-*/
diff --git a/gnu/usr.bin/cc/include/real.h b/gnu/usr.bin/cc/include/real.h
deleted file mode 100644
index de514488bf79..000000000000
--- a/gnu/usr.bin/cc/include/real.h
+++ /dev/null
@@ -1,437 +0,0 @@
-/* Front-end tree definitions for GNU compiler.
- Copyright (C) 1989, 1991, 1994 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#ifndef REAL_H_INCLUDED
-#define REAL_H_INCLUDED
-
-/* Define codes for all the float formats that we know of. */
-#define UNKNOWN_FLOAT_FORMAT 0
-#define IEEE_FLOAT_FORMAT 1
-#define VAX_FLOAT_FORMAT 2
-#define IBM_FLOAT_FORMAT 3
-
-/* Default to IEEE float if not specified. Nearly all machines use it. */
-
-#ifndef TARGET_FLOAT_FORMAT
-#define TARGET_FLOAT_FORMAT IEEE_FLOAT_FORMAT
-#endif
-
-#ifndef HOST_FLOAT_FORMAT
-#define HOST_FLOAT_FORMAT IEEE_FLOAT_FORMAT
-#endif
-
-#if TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT
-#define REAL_INFINITY
-#endif
-
-/* If FLOAT_WORDS_BIG_ENDIAN and HOST_FLOAT_WORDS_BIG_ENDIAN are not defined
- in the header files, then this implies the word-endianness is the same as
- for integers. */
-
-/* This is defined 0 or 1, like WORDS_BIG_ENDIAN. */
-#ifndef FLOAT_WORDS_BIG_ENDIAN
-#define FLOAT_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN
-#endif
-
-/* This is defined 0 or 1, unlike HOST_WORDS_BIG_ENDIAN. */
-#ifndef HOST_FLOAT_WORDS_BIG_ENDIAN
-#ifdef HOST_WORDS_BIG_ENDIAN
-#define HOST_FLOAT_WORDS_BIG_ENDIAN 1
-#else
-#define HOST_FLOAT_WORDS_BIG_ENDIAN 0
-#endif
-#endif
-
-/* Defining REAL_ARITHMETIC invokes a floating point emulator
- that can produce a target machine format differing by more
- than just endian-ness from the host's format. The emulator
- is also used to support extended real XFmode. */
-#ifndef LONG_DOUBLE_TYPE_SIZE
-#define LONG_DOUBLE_TYPE_SIZE 64
-#endif
-#if (LONG_DOUBLE_TYPE_SIZE == 96) || (LONG_DOUBLE_TYPE_SIZE == 128)
-#ifndef REAL_ARITHMETIC
-#define REAL_ARITHMETIC
-#endif
-#endif
-#ifdef REAL_ARITHMETIC
-/* **** Start of software floating point emulator interface macros **** */
-
-/* Support 80-bit extended real XFmode if LONG_DOUBLE_TYPE_SIZE
- has been defined to be 96 in the tm.h machine file. */
-#if (LONG_DOUBLE_TYPE_SIZE == 96)
-#define REAL_IS_NOT_DOUBLE
-#define REAL_ARITHMETIC
-typedef struct {
- HOST_WIDE_INT r[(11 + sizeof (HOST_WIDE_INT))/(sizeof (HOST_WIDE_INT))];
-} realvaluetype;
-#define REAL_VALUE_TYPE realvaluetype
-
-#else /* no XFmode support */
-
-#if (LONG_DOUBLE_TYPE_SIZE == 128)
-
-#define REAL_IS_NOT_DOUBLE
-#define REAL_ARITHMETIC
-typedef struct {
- HOST_WIDE_INT r[(19 + sizeof (HOST_WIDE_INT))/(sizeof (HOST_WIDE_INT))];
-} realvaluetype;
-#define REAL_VALUE_TYPE realvaluetype
-
-#else /* not TFmode */
-
-#if HOST_FLOAT_FORMAT != TARGET_FLOAT_FORMAT
-/* If no XFmode support, then a REAL_VALUE_TYPE is 64 bits wide
- but it is not necessarily a host machine double. */
-#define REAL_IS_NOT_DOUBLE
-typedef struct {
- HOST_WIDE_INT r[(7 + sizeof (HOST_WIDE_INT))/(sizeof (HOST_WIDE_INT))];
-} realvaluetype;
-#define REAL_VALUE_TYPE realvaluetype
-#else
-/* If host and target formats are compatible, then a REAL_VALUE_TYPE
- is actually a host machine double. */
-#define REAL_VALUE_TYPE double
-#endif
-
-#endif /* no TFmode support */
-#endif /* no XFmode support */
-
-extern int significand_size PROTO((enum machine_mode));
-
-/* If emulation has been enabled by defining REAL_ARITHMETIC or by
- setting LONG_DOUBLE_TYPE_SIZE to 96 or 128, then define macros so that
- they invoke emulator functions. This will succeed only if the machine
- files have been updated to use these macros in place of any
- references to host machine `double' or `float' types. */
-#ifdef REAL_ARITHMETIC
-#undef REAL_ARITHMETIC
-#define REAL_ARITHMETIC(value, code, d1, d2) \
- earith (&(value), (code), &(d1), &(d2))
-
-/* Declare functions in real.c. */
-extern void earith PROTO((REAL_VALUE_TYPE *, int,
- REAL_VALUE_TYPE *, REAL_VALUE_TYPE *));
-extern REAL_VALUE_TYPE etrunci PROTO((REAL_VALUE_TYPE));
-extern REAL_VALUE_TYPE etruncui PROTO((REAL_VALUE_TYPE));
-extern REAL_VALUE_TYPE ereal_atof PROTO((char *, enum machine_mode));
-extern REAL_VALUE_TYPE ereal_negate PROTO((REAL_VALUE_TYPE));
-extern HOST_WIDE_INT efixi PROTO((REAL_VALUE_TYPE));
-extern unsigned HOST_WIDE_INT efixui PROTO((REAL_VALUE_TYPE));
-extern void ereal_from_int PROTO((REAL_VALUE_TYPE *,
- HOST_WIDE_INT, HOST_WIDE_INT));
-extern void ereal_from_uint PROTO((REAL_VALUE_TYPE *,
- unsigned HOST_WIDE_INT,
- unsigned HOST_WIDE_INT));
-extern void ereal_to_int PROTO((HOST_WIDE_INT *, HOST_WIDE_INT *,
- REAL_VALUE_TYPE));
-extern REAL_VALUE_TYPE ereal_ldexp PROTO((REAL_VALUE_TYPE, int));
-
-extern void etartdouble PROTO((REAL_VALUE_TYPE, long *));
-extern void etarldouble PROTO((REAL_VALUE_TYPE, long *));
-extern void etardouble PROTO((REAL_VALUE_TYPE, long *));
-extern long etarsingle PROTO((REAL_VALUE_TYPE));
-extern void ereal_to_decimal PROTO((REAL_VALUE_TYPE, char *));
-extern int ereal_cmp PROTO((REAL_VALUE_TYPE, REAL_VALUE_TYPE));
-extern int ereal_isneg PROTO((REAL_VALUE_TYPE));
-extern REAL_VALUE_TYPE ereal_from_float PROTO((HOST_WIDE_INT));
-extern REAL_VALUE_TYPE ereal_from_double PROTO((HOST_WIDE_INT *));
-
-#define REAL_VALUES_EQUAL(x, y) (ereal_cmp ((x), (y)) == 0)
-/* true if x < y : */
-#define REAL_VALUES_LESS(x, y) (ereal_cmp ((x), (y)) == -1)
-#define REAL_VALUE_LDEXP(x, n) ereal_ldexp (x, n)
-
-/* These return REAL_VALUE_TYPE: */
-#define REAL_VALUE_RNDZINT(x) (etrunci (x))
-#define REAL_VALUE_UNSIGNED_RNDZINT(x) (etruncui (x))
-extern REAL_VALUE_TYPE real_value_truncate ();
-#define REAL_VALUE_TRUNCATE(mode, x) real_value_truncate (mode, x)
-
-/* These return HOST_WIDE_INT: */
-/* Convert a floating-point value to integer, rounding toward zero. */
-#define REAL_VALUE_FIX(x) (efixi (x))
-/* Convert a floating-point value to unsigned integer, rounding
- toward zero. */
-#define REAL_VALUE_UNSIGNED_FIX(x) (efixui (x))
-
-#define REAL_VALUE_ATOF ereal_atof
-#define REAL_VALUE_NEGATE ereal_negate
-
-#define REAL_VALUE_MINUS_ZERO(x) \
- ((ereal_cmp (x, dconst0) == 0) && (ereal_isneg (x) != 0 ))
-
-#define REAL_VALUE_TO_INT ereal_to_int
-
-/* Here the cast to HOST_WIDE_INT sign-extends arguments such as ~0. */
-#define REAL_VALUE_FROM_INT(d, lo, hi) \
- ereal_from_int (&d, (HOST_WIDE_INT) (lo), (HOST_WIDE_INT) (hi))
-
-#define REAL_VALUE_FROM_UNSIGNED_INT(d, lo, hi) (ereal_from_uint (&d, lo, hi))
-
-/* IN is a REAL_VALUE_TYPE. OUT is an array of longs. */
-#if LONG_DOUBLE_TYPE_SIZE == 96
-#define REAL_VALUE_TO_TARGET_LONG_DOUBLE(IN, OUT) (etarldouble ((IN), (OUT)))
-#else
-#define REAL_VALUE_TO_TARGET_LONG_DOUBLE(IN, OUT) (etartdouble ((IN), (OUT)))
-#endif
-#define REAL_VALUE_TO_TARGET_DOUBLE(IN, OUT) (etardouble ((IN), (OUT)))
-
-/* IN is a REAL_VALUE_TYPE. OUT is a long. */
-#define REAL_VALUE_TO_TARGET_SINGLE(IN, OUT) ((OUT) = etarsingle ((IN)))
-
-/* d is an array of HOST_WIDE_INT that holds a double precision
- value in the target computer's floating point format. */
-#define REAL_VALUE_FROM_TARGET_DOUBLE(d) (ereal_from_double (d))
-
-/* f is a HOST_WIDE_INT containing a single precision target float value. */
-#define REAL_VALUE_FROM_TARGET_SINGLE(f) (ereal_from_float (f))
-
-/* Conversions to decimal ASCII string. */
-#define REAL_VALUE_TO_DECIMAL(r, fmt, s) (ereal_to_decimal (r, s))
-
-#endif /* REAL_ARITHMETIC defined */
-
-/* **** End of software floating point emulator interface macros **** */
-#else /* No XFmode or TFmode and REAL_ARITHMETIC not defined */
-
-/* old interface */
-#ifdef REAL_ARITHMETIC
-/* Defining REAL_IS_NOT_DOUBLE breaks certain initializations
- when REAL_ARITHMETIC etc. are not defined. */
-
-/* Now see if the host and target machines use the same format.
- If not, define REAL_IS_NOT_DOUBLE (even if we end up representing
- reals as doubles because we have no better way in this cross compiler.)
- This turns off various optimizations that can happen when we know the
- compiler's float format matches the target's float format.
- */
-#if HOST_FLOAT_FORMAT != TARGET_FLOAT_FORMAT
-#define REAL_IS_NOT_DOUBLE
-#ifndef REAL_VALUE_TYPE
-typedef struct {
- HOST_WIDE_INT r[sizeof (double)/sizeof (HOST_WIDE_INT)];
- } realvaluetype;
-#define REAL_VALUE_TYPE realvaluetype
-#endif /* no REAL_VALUE_TYPE */
-#endif /* formats differ */
-#endif /* 0 */
-
-#endif /* emulator not used */
-
-/* If we are not cross-compiling, use a `double' to represent the
- floating-point value. Otherwise, use some other type
- (probably a struct containing an array of longs). */
-#ifndef REAL_VALUE_TYPE
-#define REAL_VALUE_TYPE double
-#else
-#define REAL_IS_NOT_DOUBLE
-#endif
-
-#if HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT
-
-/* Convert a type `double' value in host format first to a type `float'
- value in host format and then to a single type `long' value which
- is the bitwise equivalent of the `float' value. */
-#ifndef REAL_VALUE_TO_TARGET_SINGLE
-#define REAL_VALUE_TO_TARGET_SINGLE(IN, OUT) \
-do { float f = (float) (IN); \
- (OUT) = *(long *) &f; \
- } while (0)
-#endif
-
-/* Convert a type `double' value in host format to a pair of type `long'
- values which is its bitwise equivalent, but put the two words into
- proper word order for the target. */
-#ifndef REAL_VALUE_TO_TARGET_DOUBLE
-#if HOST_FLOAT_WORDS_BIG_ENDIAN == FLOAT_WORDS_BIG_ENDIAN
-#define REAL_VALUE_TO_TARGET_DOUBLE(IN, OUT) \
-do { REAL_VALUE_TYPE in = (IN); /* Make sure it's not in a register. */\
- (OUT)[0] = ((long *) &in)[0]; \
- (OUT)[1] = ((long *) &in)[1]; \
- } while (0)
-#else
-#define REAL_VALUE_TO_TARGET_DOUBLE(IN, OUT) \
-do { REAL_VALUE_TYPE in = (IN); /* Make sure it's not in a register. */\
- (OUT)[1] = ((long *) &in)[0]; \
- (OUT)[0] = ((long *) &in)[1]; \
- } while (0)
-#endif
-#endif
-#endif /* HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT */
-
-/* In this configuration, double and long double are the same. */
-#ifndef REAL_VALUE_TO_TARGET_LONG_DOUBLE
-#define REAL_VALUE_TO_TARGET_LONG_DOUBLE(a, b) REAL_VALUE_TO_TARGET_DOUBLE (a, b)
-#endif
-
-/* Compare two floating-point values for equality. */
-#ifndef REAL_VALUES_EQUAL
-#define REAL_VALUES_EQUAL(x, y) ((x) == (y))
-#endif
-
-/* Compare two floating-point values for less than. */
-#ifndef REAL_VALUES_LESS
-#define REAL_VALUES_LESS(x, y) ((x) < (y))
-#endif
-
-/* Truncate toward zero to an integer floating-point value. */
-#ifndef REAL_VALUE_RNDZINT
-#define REAL_VALUE_RNDZINT(x) ((double) ((int) (x)))
-#endif
-
-/* Truncate toward zero to an unsigned integer floating-point value. */
-#ifndef REAL_VALUE_UNSIGNED_RNDZINT
-#define REAL_VALUE_UNSIGNED_RNDZINT(x) ((double) ((unsigned int) (x)))
-#endif
-
-/* Convert a floating-point value to integer, rounding toward zero. */
-#ifndef REAL_VALUE_FIX
-#define REAL_VALUE_FIX(x) ((int) (x))
-#endif
-
-/* Convert a floating-point value to unsigned integer, rounding
- toward zero. */
-#ifndef REAL_VALUE_UNSIGNED_FIX
-#define REAL_VALUE_UNSIGNED_FIX(x) ((unsigned int) (x))
-#endif
-
-/* Scale X by Y powers of 2. */
-#ifndef REAL_VALUE_LDEXP
-#define REAL_VALUE_LDEXP(x, y) ldexp (x, y)
-extern double ldexp ();
-#endif
-
-/* Convert the string X to a floating-point value. */
-#ifndef REAL_VALUE_ATOF
-#if 1
-/* Use real.c to convert decimal numbers to binary, ... */
-REAL_VALUE_TYPE ereal_atof ();
-#define REAL_VALUE_ATOF(x, s) ereal_atof (x, s)
-#else
-/* ... or, if you like the host computer's atof, go ahead and use it: */
-#define REAL_VALUE_ATOF(x, s) atof (x)
-#if defined (MIPSEL) || defined (MIPSEB)
-/* MIPS compiler can't handle parens around the function name.
- This problem *does not* appear to be connected with any
- macro definition for atof. It does not seem there is one. */
-extern double atof ();
-#else
-extern double (atof) ();
-#endif
-#endif
-#endif
-
-/* Negate the floating-point value X. */
-#ifndef REAL_VALUE_NEGATE
-#define REAL_VALUE_NEGATE(x) (- (x))
-#endif
-
-/* Truncate the floating-point value X to mode MODE. This is correct only
- for the most common case where the host and target have objects of the same
- size and where `float' is SFmode. */
-
-/* Don't use REAL_VALUE_TRUNCATE directly--always call real_value_truncate. */
-extern REAL_VALUE_TYPE real_value_truncate ();
-
-#ifndef REAL_VALUE_TRUNCATE
-#define REAL_VALUE_TRUNCATE(mode, x) \
- (GET_MODE_BITSIZE (mode) == sizeof (float) * HOST_BITS_PER_CHAR \
- ? (float) (x) : (x))
-#endif
-
-/* Determine whether a floating-point value X is infinite. */
-#ifndef REAL_VALUE_ISINF
-#define REAL_VALUE_ISINF(x) (target_isinf (x))
-#endif
-
-/* Determine whether a floating-point value X is a NaN. */
-#ifndef REAL_VALUE_ISNAN
-#define REAL_VALUE_ISNAN(x) (target_isnan (x))
-#endif
-
-/* Determine whether a floating-point value X is negative. */
-#ifndef REAL_VALUE_NEGATIVE
-#define REAL_VALUE_NEGATIVE(x) (target_negative (x))
-#endif
-
-/* Determine whether a floating-point value X is minus 0. */
-#ifndef REAL_VALUE_MINUS_ZERO
-#define REAL_VALUE_MINUS_ZERO(x) ((x) == 0 && REAL_VALUE_NEGATIVE (x))
-#endif
-
-/* Constant real values 0, 1, 2, and -1. */
-
-extern REAL_VALUE_TYPE dconst0;
-extern REAL_VALUE_TYPE dconst1;
-extern REAL_VALUE_TYPE dconst2;
-extern REAL_VALUE_TYPE dconstm1;
-
-/* Union type used for extracting real values from CONST_DOUBLEs
- or putting them in. */
-
-union real_extract
-{
- REAL_VALUE_TYPE d;
- HOST_WIDE_INT i[sizeof (REAL_VALUE_TYPE) / sizeof (HOST_WIDE_INT)];
-};
-
-/* For a CONST_DOUBLE:
- The usual two ints that hold the value.
- For a DImode, that is all there are;
- and CONST_DOUBLE_LOW is the low-order word and ..._HIGH the high-order.
- For a float, the number of ints varies,
- and CONST_DOUBLE_LOW is the one that should come first *in memory*.
- So use &CONST_DOUBLE_LOW(r) as the address of an array of ints. */
-#define CONST_DOUBLE_LOW(r) XWINT (r, 2)
-#define CONST_DOUBLE_HIGH(r) XWINT (r, 3)
-
-/* Link for chain of all CONST_DOUBLEs in use in current function. */
-#define CONST_DOUBLE_CHAIN(r) XEXP (r, 1)
-/* The MEM which represents this CONST_DOUBLE's value in memory,
- or const0_rtx if no MEM has been made for it yet,
- or cc0_rtx if it is not on the chain. */
-#define CONST_DOUBLE_MEM(r) XEXP (r, 0)
-
-/* Function to return a real value (not a tree node)
- from a given integer constant. */
-REAL_VALUE_TYPE real_value_from_int_cst ();
-
-/* Given a CONST_DOUBLE in FROM, store into TO the value it represents. */
-
-#define REAL_VALUE_FROM_CONST_DOUBLE(to, from) \
-do { union real_extract u; \
- bcopy ((char *) &CONST_DOUBLE_LOW ((from)), (char *) &u, sizeof u); \
- to = u.d; } while (0)
-
-/* Return a CONST_DOUBLE with value R and mode M. */
-
-#define CONST_DOUBLE_FROM_REAL_VALUE(r, m) immed_real_const_1 (r, m)
-extern struct rtx_def *immed_real_const_1 PROTO((REAL_VALUE_TYPE,
- enum machine_mode));
-
-
-/* Convert a floating point value `r', that can be interpreted
- as a host machine float or double, to a decimal ASCII string `s'
- using printf format string `fmt'. */
-#ifndef REAL_VALUE_TO_DECIMAL
-#define REAL_VALUE_TO_DECIMAL(r, fmt, s) (sprintf (s, fmt, r))
-#endif
-
-#endif /* Not REAL_H_INCLUDED */
diff --git a/gnu/usr.bin/cc/include/recog.h b/gnu/usr.bin/cc/include/recog.h
deleted file mode 100644
index 8fc2efb47727..000000000000
--- a/gnu/usr.bin/cc/include/recog.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/* Declarations for interface to insn recognizer and insn-output.c.
- Copyright (C) 1987 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* Add prototype support. */
-#ifndef PROTO
-#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__)
-#define PROTO(ARGS) ARGS
-#else
-#define PROTO(ARGS) ()
-#endif
-#endif
-
-/* Recognize an insn and return its insn-code,
- which is the sequence number of the DEFINE_INSN that it matches.
- If the insn does not match, return -1. */
-
-extern int recog_memoized PROTO((rtx));
-
-/* Determine whether a proposed change to an insn or MEM will make it
- invalid. Make the change if not. */
-
-extern int validate_change PROTO((rtx, rtx *, rtx, int));
-
-/* Apply a group of changes if valid. */
-
-extern int apply_change_group PROTO((void));
-
-/* Return the number of changes so far in the current group. */
-
-extern int num_validated_changes PROTO((void));
-
-/* Retract some changes. */
-
-extern void cancel_changes PROTO((int));
-
-/* Nonzero means volatile operands are recognized. */
-
-extern int volatile_ok;
-
-/* Extract the operands from an insn that has been recognized. */
-
-extern void insn_extract PROTO((rtx));
-
-/* The following vectors hold the results from insn_extract. */
-
-/* Indexed by N, gives value of operand N. */
-extern rtx recog_operand[];
-
-/* Indexed by N, gives location where operand N was found. */
-extern rtx *recog_operand_loc[];
-
-/* Indexed by N, gives location where the Nth duplicate-appearance of
- an operand was found. This is something that matched MATCH_DUP. */
-extern rtx *recog_dup_loc[];
-
-/* Indexed by N, gives the operand number that was duplicated in the
- Nth duplicate-appearance of an operand. */
-extern char recog_dup_num[];
-
-#ifndef __STDC__
-#ifndef const
-#define const
-#endif
-#endif
-
-/* Access the output function for CODE. */
-
-#define OUT_FCN(CODE) (*insn_outfun[(int) (CODE)])
-
-/* Tables defined in insn-output.c that give information about
- each insn-code value. */
-
-/* These are vectors indexed by insn-code. Details in genoutput.c. */
-
-extern char *const insn_template[];
-
-extern char *(*const insn_outfun[]) ();
-
-extern const int insn_n_operands[];
-
-extern const int insn_n_dups[];
-
-/* Indexed by insn code number, gives # of constraint alternatives. */
-
-extern const int insn_n_alternatives[];
-
-/* These are two-dimensional arrays indexed first by the insn-code
- and second by the operand number. Details in genoutput.c. */
-
-#ifdef REGISTER_CONSTRAINTS /* Avoid undef sym in certain broken linkers. */
-extern char *const insn_operand_constraint[][MAX_RECOG_OPERANDS];
-#endif
-
-#ifndef REGISTER_CONSTRAINTS /* Avoid undef sym in certain broken linkers. */
-extern const char insn_operand_address_p[][MAX_RECOG_OPERANDS];
-#endif
-
-extern const enum machine_mode insn_operand_mode[][MAX_RECOG_OPERANDS];
-
-extern const char insn_operand_strict_low[][MAX_RECOG_OPERANDS];
-
-extern int (*const insn_operand_predicate[][MAX_RECOG_OPERANDS]) ();
-
-extern char * insn_name[];
diff --git a/gnu/usr.bin/cc/include/regs.h b/gnu/usr.bin/cc/include/regs.h
deleted file mode 100644
index 1b394b20c6e5..000000000000
--- a/gnu/usr.bin/cc/include/regs.h
+++ /dev/null
@@ -1,174 +0,0 @@
-/* Define per-register tables for data flow info and register allocation.
- Copyright (C) 1987, 1993, 1994 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-
-
-#define REG_BYTES(R) mode_size[(int) GET_MODE (R)]
-
-/* Get the number of consecutive hard regs required to hold the REG rtx R.
- When something may be an explicit hard reg, REG_SIZE is the only
- valid way to get this value. You cannot get it from the regno. */
-
-#define REG_SIZE(R) \
- ((mode_size[(int) GET_MODE (R)] + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
-
-/* Maximum register number used in this function, plus one. */
-
-extern int max_regno;
-
-/* Maximum number of SCRATCH rtx's in each block of this function. */
-
-extern int max_scratch;
-
-/* Indexed by n, gives number of times (REG n) is used or set.
- References within loops may be counted more times. */
-
-extern int *reg_n_refs;
-
-/* Indexed by n, gives number of times (REG n) is set. */
-
-extern short *reg_n_sets;
-
-/* Indexed by N, gives number of insns in which register N dies.
- Note that if register N is live around loops, it can die
- in transitions between basic blocks, and that is not counted here.
- So this is only a reliable indicator of how many regions of life there are
- for registers that are contained in one basic block. */
-
-extern short *reg_n_deaths;
-
-/* Indexed by N; says whether a psuedo register N was ever used
- within a SUBREG that changes the size of the reg. Some machines prohibit
- such objects to be in certain (usually floating-point) registers. */
-
-extern char *reg_changes_size;
-
-/* Get the number of consecutive words required to hold pseudo-reg N. */
-
-#define PSEUDO_REGNO_SIZE(N) \
- ((GET_MODE_SIZE (PSEUDO_REGNO_MODE (N)) + UNITS_PER_WORD - 1) \
- / UNITS_PER_WORD)
-
-/* Get the number of bytes required to hold pseudo-reg N. */
-
-#define PSEUDO_REGNO_BYTES(N) \
- GET_MODE_SIZE (PSEUDO_REGNO_MODE (N))
-
-/* Get the machine mode of pseudo-reg N. */
-
-#define PSEUDO_REGNO_MODE(N) GET_MODE (regno_reg_rtx[N])
-
-/* Indexed by N, gives number of CALL_INSNS across which (REG n) is live. */
-
-extern int *reg_n_calls_crossed;
-
-/* Total number of instructions at which (REG n) is live.
- The larger this is, the less priority (REG n) gets for
- allocation in a hard register (in global-alloc).
- This is set in flow.c and remains valid for the rest of the compilation
- of the function; it is used to control register allocation.
-
- local-alloc.c may alter this number to change the priority.
-
- Negative values are special.
- -1 is used to mark a pseudo reg which has a constant or memory equivalent
- and is used infrequently enough that it should not get a hard register.
- -2 is used to mark a pseudo reg for a parameter, when a frame pointer
- is not required. global.c makes an allocno for this but does
- not try to assign a hard register to it. */
-
-extern int *reg_live_length;
-
-/* Vector of substitutions of register numbers,
- used to map pseudo regs into hardware regs. */
-
-extern short *reg_renumber;
-
-/* Vector indexed by hardware reg
- saying whether that reg is ever used. */
-
-extern char regs_ever_live[FIRST_PSEUDO_REGISTER];
-
-/* Vector indexed by hardware reg giving its name. */
-
-extern char *reg_names[FIRST_PSEUDO_REGISTER];
-
-/* For each hard register, the widest mode object that it can contain.
- This will be a MODE_INT mode if the register can hold integers. Otherwise
- it will be a MODE_FLOAT or a MODE_CC mode, whichever is valid for the
- register. */
-
-extern enum machine_mode reg_raw_mode[FIRST_PSEUDO_REGISTER];
-
-/* Vector indexed by regno; gives uid of first insn using that reg.
- This is computed by reg_scan for use by cse and loop.
- It is sometimes adjusted for subsequent changes during loop,
- but not adjusted by cse even if cse invalidates it. */
-
-extern int *regno_first_uid;
-
-/* Vector indexed by regno; gives uid of last insn using that reg.
- This is computed by reg_scan for use by cse and loop.
- It is sometimes adjusted for subsequent changes during loop,
- but not adjusted by cse even if cse invalidates it.
- This is harmless since cse won't scan through a loop end. */
-
-extern int *regno_last_uid;
-
-/* Similar, but includes insns that mention the reg in their notes. */
-
-extern int *regno_last_note_uid;
-
-/* Vector indexed by regno; contains 1 for a register is considered a pointer.
- Reloading, etc. will use a pointer register rather than a non-pointer
- as the base register in an address, when there is a choice of two regs. */
-
-extern char *regno_pointer_flag;
-#define REGNO_POINTER_FLAG(REGNO) regno_pointer_flag[REGNO]
-
-/* List made of EXPR_LIST rtx's which gives pairs of pseudo registers
- that have to go in the same hard reg. */
-extern rtx regs_may_share;
-
-/* Vector mapping pseudo regno into the REG rtx for that register.
- This is computed by reg_scan. */
-
-extern rtx *regno_reg_rtx;
-
-/* Flag set by local-alloc or global-alloc if they decide to allocate
- something in a call-clobbered register. */
-
-extern int caller_save_needed;
-
-/* Predicate to decide whether to give a hard reg to a pseudo which
- is referenced REFS times and would need to be saved and restored
- around a call CALLS times. */
-
-#ifndef CALLER_SAVE_PROFITABLE
-#define CALLER_SAVE_PROFITABLE(REFS, CALLS) (4 * (CALLS) < (REFS))
-#endif
-
-/* Allocated in local_alloc. */
-
-/* A list of SCRATCH rtl allocated by local-alloc. */
-extern rtx *scratch_list;
-/* The basic block in which each SCRATCH is used. */
-extern int *scratch_block;
-/* The length of the arrays pointed to by scratch_block and scratch_list. */
-extern int scratch_list_length;
diff --git a/gnu/usr.bin/cc/include/reload.h b/gnu/usr.bin/cc/include/reload.h
deleted file mode 100644
index d033db71935f..000000000000
--- a/gnu/usr.bin/cc/include/reload.h
+++ /dev/null
@@ -1,236 +0,0 @@
-/* Communication between reload.c and reload1.c.
- Copyright (C) 1987, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-
-/* If secondary reloads are the same for inputs and outputs, define those
- macros here. */
-
-#ifdef SECONDARY_RELOAD_CLASS
-#define SECONDARY_INPUT_RELOAD_CLASS(CLASS, MODE, X) \
- SECONDARY_RELOAD_CLASS (CLASS, MODE, X)
-#define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS, MODE, X) \
- SECONDARY_RELOAD_CLASS (CLASS, MODE, X)
-#endif
-
-/* If either macro is defined, show that we need secondary reloads. */
-#if defined(SECONDARY_INPUT_RELOAD_CLASS) || defined(SECONDARY_OUTPUT_RELOAD_CLASS)
-#define HAVE_SECONDARY_RELOADS
-#endif
-
-/* See reload.c and reload1.c for comments on these variables. */
-
-/* Maximum number of reloads we can need. */
-#define MAX_RELOADS (2 * MAX_RECOG_OPERANDS * (MAX_REGS_PER_ADDRESS + 1))
-
-extern rtx reload_in[MAX_RELOADS];
-extern rtx reload_out[MAX_RELOADS];
-extern rtx reload_in_reg[MAX_RELOADS];
-extern enum reg_class reload_reg_class[MAX_RELOADS];
-extern enum machine_mode reload_inmode[MAX_RELOADS];
-extern enum machine_mode reload_outmode[MAX_RELOADS];
-extern char reload_optional[MAX_RELOADS];
-extern int reload_inc[MAX_RELOADS];
-extern int reload_opnum[MAX_RELOADS];
-extern int reload_secondary_p[MAX_RELOADS];
-extern int reload_secondary_in_reload[MAX_RELOADS];
-extern int reload_secondary_out_reload[MAX_RELOADS];
-#ifdef MAX_INSN_CODE
-extern enum insn_code reload_secondary_in_icode[MAX_RELOADS];
-extern enum insn_code reload_secondary_out_icode[MAX_RELOADS];
-#endif
-extern int n_reloads;
-
-extern rtx reload_reg_rtx[MAX_RELOADS];
-
-/* Encode the usage of a reload. The following codes are supported:
-
- RELOAD_FOR_INPUT reload of an input operand
- RELOAD_FOR_OUTPUT likewise, for output
- RELOAD_FOR_INSN a reload that must not conflict with anything
- used in the insn, but may conflict with
- something used before or after the insn
- RELOAD_FOR_INPUT_ADDRESS reload for parts of the address of an object
- that is an input reload
- RELOAD_FOR_OUTPUT_ADDRESS likewise, for output reload
- RELOAD_FOR_OPERAND_ADDRESS reload for the address of a non-reloaded
- operand; these don't conflict with
- any other addresses.
- RELOAD_FOR_OPADDR_ADDR reload needed for RELOAD_FOR_OPERAND_ADDRESS
- reloads; usually secondary reloads
- RELOAD_OTHER none of the above, usually multiple uses
- RELOAD_FOR_OTHER_ADDRESS reload for part of the address of an input
- that is marked RELOAD_OTHER.
-
- This used to be "enum reload_when_needed" but some debuggers have trouble
- with an enum tag and variable of the same name. */
-
-enum reload_type
-{
- RELOAD_FOR_INPUT, RELOAD_FOR_OUTPUT, RELOAD_FOR_INSN,
- RELOAD_FOR_INPUT_ADDRESS, RELOAD_FOR_OUTPUT_ADDRESS,
- RELOAD_FOR_OPERAND_ADDRESS, RELOAD_FOR_OPADDR_ADDR,
- RELOAD_OTHER, RELOAD_FOR_OTHER_ADDRESS
-};
-
-extern enum reload_type reload_when_needed[MAX_RELOADS];
-
-extern rtx *reg_equiv_constant;
-extern rtx *reg_equiv_memory_loc;
-extern rtx *reg_equiv_address;
-extern rtx *reg_equiv_mem;
-
-/* All the "earlyclobber" operands of the current insn
- are recorded here. */
-extern int n_earlyclobbers;
-extern rtx reload_earlyclobbers[MAX_RECOG_OPERANDS];
-
-/* Save the number of operands. */
-extern int reload_n_operands;
-
-/* First uid used by insns created by reload in this function.
- Used in find_equiv_reg. */
-extern int reload_first_uid;
-
-/* Nonzero if indirect addressing is supported when the innermost MEM is
- of the form (MEM (SYMBOL_REF sym)). It is assumed that the level to
- which these are valid is the same as spill_indirect_levels, above. */
-
-extern char indirect_symref_ok;
-
-/* Nonzero if an address (plus (reg frame_pointer) (reg ...)) is valid. */
-extern char double_reg_address_ok;
-
-#ifdef MAX_INSN_CODE
-/* These arrays record the insn_code of insns that may be needed to
- perform input and output reloads of special objects. They provide a
- place to pass a scratch register. */
-extern enum insn_code reload_in_optab[];
-extern enum insn_code reload_out_optab[];
-#endif
-
-/* Functions from reload.c: */
-
-/* Return a memory location that will be used to copy X in mode MODE.
- If we haven't already made a location for this mode in this insn,
- call find_reloads_address on the location being returned. */
-extern rtx get_secondary_mem PROTO((rtx, enum machine_mode,
- int, enum reload_type));
-
-/* Clear any secondary memory locations we've made. */
-extern void clear_secondary_mem PROTO((void));
-
-/* Transfer all replacements that used to be in reload FROM to be in
- reload TO. */
-extern void transfer_replacements PROTO((int, int));
-
-/* Return 1 if ADDR is a valid memory address for mode MODE,
- and check that each pseudo reg has the proper kind of
- hard reg. */
-extern int strict_memory_address_p PROTO((enum machine_mode, rtx));
-
-/* Like rtx_equal_p except that it allows a REG and a SUBREG to match
- if they are the same hard reg, and has special hacks for
- autoincrement and autodecrement. */
-extern int operands_match_p PROTO((rtx, rtx));
-
-/* Return the number of times character C occurs in string S. */
-extern int n_occurrences PROTO((int, char *));
-
-/* Return 1 if altering OP will not modify the value of CLOBBER. */
-extern int safe_from_earlyclobber PROTO((rtx, rtx));
-
-/* Search the body of INSN for values that need reloading and record them
- with push_reload. REPLACE nonzero means record also where the values occur
- so that subst_reloads can be used. */
-extern void find_reloads PROTO((rtx, int, int, int, short *));
-
-/* Compute the sum of X and Y, making canonicalizations assumed in an
- address, namely: sum constant integers, surround the sum of two
- constants with a CONST, put the constant as the second operand, and
- group the constant on the outermost sum. */
-extern rtx form_sum PROTO((rtx, rtx));
-
-/* Substitute into the current INSN the registers into which we have reloaded
- the things that need reloading. */
-extern void subst_reloads PROTO((void));
-
-/* Make a copy of any replacements being done into X and move those copies
- to locations in Y, a copy of X. We only look at the highest level of
- the RTL. */
-extern void copy_replacements PROTO((rtx, rtx));
-
-/* If LOC was scheduled to be replaced by something, return the replacement.
- Otherwise, return *LOC. */
-extern rtx find_replacement PROTO((rtx *));
-
-/* Return nonzero if register in range [REGNO, ENDREGNO)
- appears either explicitly or implicitly in X
- other than being stored into. */
-extern int refers_to_regno_for_reload_p PROTO((int, int, rtx, rtx *));
-
-/* Nonzero if modifying X will affect IN. */
-extern int reg_overlap_mentioned_for_reload_p PROTO((rtx, rtx));
-
-/* Return nonzero if anything in X contains a MEM. Look also for pseudo
- registers. */
-extern int refers_to_mem_for_reload_p PROTO((rtx));
-
-/* Check the insns before INSN to see if there is a suitable register
- containing the same value as GOAL. */
-extern rtx find_equiv_reg PROTO((rtx, rtx, enum reg_class, int, short *,
- int, enum machine_mode));
-
-/* Return 1 if register REGNO is the subject of a clobber in insn INSN. */
-extern int regno_clobbered_p PROTO((int, rtx));
-
-
-/* Functions in reload1.c: */
-
-/* Initialize the reload pass once per compilation. */
-extern void init_reload PROTO((void));
-
-/* The reload pass itself. */
-extern int reload STDIO_PROTO((rtx, int, FILE *));
-
-/* Mark the slots in regs_ever_live for the hard regs
- used by pseudo-reg number REGNO. */
-extern void mark_home_live PROTO((int));
-
-/* Scan X and replace any eliminable registers (such as fp) with a
- replacement (such as sp), plus an offset. */
-extern rtx eliminate_regs PROTO((rtx, enum machine_mode, rtx));
-
-/* Emit code to perform a reload from IN (which may be a reload register) to
- OUT (which may also be a reload register). IN or OUT is from operand
- OPNUM with reload type TYPE. */
-extern rtx gen_reload PROTO((rtx, rtx, int, enum reload_type));
-
-/* Functions in caller-save.c: */
-
-/* Initialize for caller-save. */
-extern void init_caller_save PROTO((void));
-
-/* Initialize save areas by showing that we haven't allocated any yet. */
-extern void init_save_areas PROTO((void));
-
-/* Allocate save areas for any hard registers that might need saving. */
-extern int setup_save_areas PROTO((int *));
-
-/* Find the places where hard regs are live across calls and save them. */
-extern void save_call_clobbered_regs PROTO((enum machine_mode));
diff --git a/gnu/usr.bin/cc/include/rtl.def b/gnu/usr.bin/cc/include/rtl.def
deleted file mode 100644
index 686ad21cb236..000000000000
--- a/gnu/usr.bin/cc/include/rtl.def
+++ /dev/null
@@ -1,764 +0,0 @@
-/* This file contains the definitions and documentation for the
- Register Transfer Expressions (rtx's) that make up the
- Register Transfer Language (rtl) used in the Back End of the GNU compiler.
- Copyright (C) 1987, 1988, 1992, 1994 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-
-/* Expression definitions and descriptions for all targets are in this file.
- Some will not be used for some targets.
-
- The fields in the cpp macro call "DEF_RTL_EXPR()"
- are used to create declarations in the C source of the compiler.
-
- The fields are:
-
- 1. The internal name of the rtx used in the C source.
- It is a tag in the enumeration "enum rtx_code" defined in "rtl.h".
- By convention these are in UPPER_CASE.
-
- 2. The name of the rtx in the external ASCII format read by
- read_rtx(), and printed by print_rtx().
- These names are stored in rtx_name[].
- By convention these are the internal (field 1) names in lower_case.
-
- 3. The print format, and type of each rtx->fld[] (field) in this rtx.
- These formats are stored in rtx_format[].
- The meaning of the formats is documented in front of this array in rtl.c
-
- 4. The class of the rtx. These are stored in rtx_class and are accessed
- via the GET_RTX_CLASS macro. They are defined as follows:
-
- "o" an rtx code that can be used to represent an object (e.g, REG, MEM)
- "<" an rtx code for a comparison (e.g, EQ, NE, LT)
- "1" an rtx code for a unary arithmetic expression (e.g, NEG, NOT)
- "c" an rtx code for a commutative binary operation (e.g,, PLUS, MULT)
- "3" an rtx code for a non-bitfield three input operation (IF_THEN_ELSE)
- "2" an rtx code for a non-commutative binary operation (e.g., MINUS, DIV)
- "b" an rtx code for a bit-field operation (ZERO_EXTRACT, SIGN_EXTRACT)
- "i" an rtx code for a machine insn (INSN, JUMP_INSN, CALL_INSN)
- "m" an rtx code for something that matches in insns (e.g, MATCH_DUP)
- "x" everything else
-
- */
-
-/* ---------------------------------------------------------------------
- Expressions (and "meta" expressions) used for structuring the
- rtl representation of a program.
- --------------------------------------------------------------------- */
-
-/* an expression code name unknown to the reader */
-DEF_RTL_EXPR(UNKNOWN, "UnKnown", "*", 'x')
-
-/* (NIL) is used by rtl reader and printer to represent a null pointer. */
-
-DEF_RTL_EXPR(NIL, "nil", "*", 'x')
-
-/* ---------------------------------------------------------------------
- Expressions used in constructing lists.
- --------------------------------------------------------------------- */
-
-/* a linked list of expressions */
-DEF_RTL_EXPR(EXPR_LIST, "expr_list", "ee", 'x')
-
-/* a linked list of instructions.
- The insns are represented in print by their uids. */
-DEF_RTL_EXPR(INSN_LIST, "insn_list", "ue", 'x')
-
-/* ----------------------------------------------------------------------
- Expression types for machine descriptions.
- These do not appear in actual rtl code in the compiler.
- ---------------------------------------------------------------------- */
-
-/* Appears only in machine descriptions.
- Means use the function named by the second arg (the string)
- as a predicate; if matched, store the structure that was matched
- in the operand table at index specified by the first arg (the integer).
- If the second arg is the null string, the structure is just stored.
-
- A third string argument indicates to the register allocator restrictions
- on where the operand can be allocated.
-
- If the target needs no restriction on any instruction this field should
- be the null string.
-
- The string is prepended by:
- '=' to indicate the operand is only written to.
- '+' to indicate the operand is both read and written to.
-
- Each character in the string represents an allocatable class for an operand.
- 'g' indicates the operand can be any valid class.
- 'i' indicates the operand can be immediate (in the instruction) data.
- 'r' indicates the operand can be in a register.
- 'm' indicates the operand can be in memory.
- 'o' a subset of the 'm' class. Those memory addressing modes that
- can be offset at compile time (have a constant added to them).
-
- Other characters indicate target dependent operand classes and
- are described in each target's machine description.
-
- For instructions with more than one operand, sets of classes can be
- separated by a comma to indicate the appropriate multi-operand constraints.
- There must be a 1 to 1 correspondence between these sets of classes in
- all operands for an instruction.
- */
-DEF_RTL_EXPR(MATCH_OPERAND, "match_operand", "iss", 'm')
-
-/* Appears only in machine descriptions.
- Means match a SCRATCH or a register. When used to generate rtl, a
- SCRATCH is generated. As for MATCH_OPERAND, the mode specifies
- the desired mode and the first argument is the operand number.
- The second argument is the constraint. */
-DEF_RTL_EXPR(MATCH_SCRATCH, "match_scratch", "is", 'm')
-
-/* Appears only in machine descriptions.
- Means match only something equal to what is stored in the operand table
- at the index specified by the argument. */
-DEF_RTL_EXPR(MATCH_DUP, "match_dup", "i", 'm')
-
-/* Appears only in machine descriptions.
- Means apply a predicate, AND match recursively the operands of the rtx.
- Operand 0 is the operand-number, as in match_operand.
- Operand 1 is a predicate to apply (as a string, a function name).
- Operand 2 is a vector of expressions, each of which must match
- one subexpression of the rtx this construct is matching. */
-DEF_RTL_EXPR(MATCH_OPERATOR, "match_operator", "isE", 'm')
-
-/* Appears only in machine descriptions.
- Means to match a PARALLEL of arbitrary length. The predicate is applied
- to the PARALLEL and the initial expressions in the PARALLEL are matched.
- Operand 0 is the operand-number, as in match_operand.
- Operand 1 is a predicate to apply to the PARALLEL.
- Operand 2 is a vector of expressions, each of which must match the
- corresponding element in the PARALLEL. */
-DEF_RTL_EXPR(MATCH_PARALLEL, "match_parallel", "isE", 'm')
-
-/* Appears only in machine descriptions.
- Means match only something equal to what is stored in the operand table
- at the index specified by the argument. For MATCH_OPERATOR. */
-DEF_RTL_EXPR(MATCH_OP_DUP, "match_op_dup", "iE", 'm')
-
-/* Appears only in machine descriptions.
- Means match only something equal to what is stored in the operand table
- at the index specified by the argument. For MATCH_PARALLEL. */
-DEF_RTL_EXPR(MATCH_PAR_DUP, "match_par_dup", "iE", 'm')
-
-/* Appears only in machine descriptions.
- Defines the pattern for one kind of instruction.
- Operand:
- 0: names this instruction.
- If the name is the null string, the instruction is in the
- machine description just to be recognized, and will never be emitted by
- the tree to rtl expander.
- 1: is the pattern.
- 2: is a string which is a C expression
- giving an additional condition for recognizing this pattern.
- A null string means no extra condition.
- 3: is the action to execute if this pattern is matched.
- If this assembler code template starts with a * then it is a fragment of
- C code to run to decide on a template to use. Otherwise, it is the
- template to use.
- 4: optionally, a vector of attributes for this insn.
- */
-DEF_RTL_EXPR(DEFINE_INSN, "define_insn", "sEssV", 'x')
-
-/* Definition of a peephole optimization.
- 1st operand: vector of insn patterns to match
- 2nd operand: C expression that must be true
- 3rd operand: template or C code to produce assembler output.
- 4: optionally, a vector of attributes for this insn.
- */
-DEF_RTL_EXPR(DEFINE_PEEPHOLE, "define_peephole", "EssV", 'x')
-
-/* Definition of a split operation.
- 1st operand: insn pattern to match
- 2nd operand: C expression that must be true
- 3rd operand: vector of insn patterns to place into a SEQUENCE
- 4th operand: optionally, some C code to execute before generating the
- insns. This might, for example, create some RTX's and store them in
- elements of `recog_operand' for use by the vector of insn-patterns.
- (`operands' is an alias here for `recog_operand'). */
-DEF_RTL_EXPR(DEFINE_SPLIT, "define_split", "EsES", 'x')
-
-/* Definition of a combiner pattern.
- Operands not defined yet. */
-DEF_RTL_EXPR(DEFINE_COMBINE, "define_combine", "Ess", 'x')
-
-/* Define how to generate multiple insns for a standard insn name.
- 1st operand: the insn name.
- 2nd operand: vector of insn-patterns.
- Use match_operand to substitute an element of `recog_operand'.
- 3rd operand: C expression that must be true for this to be available.
- This may not test any operands.
- 4th operand: Extra C code to execute before generating the insns.
- This might, for example, create some RTX's and store them in
- elements of `recog_operand' for use by the vector of insn-patterns.
- (`operands' is an alias here for `recog_operand'). */
-DEF_RTL_EXPR(DEFINE_EXPAND, "define_expand", "sEss", 'x')
-
-/* Define a requirement for delay slots.
- 1st operand: Condition involving insn attributes that, if true,
- indicates that the insn requires the number of delay slots
- shown.
- 2nd operand: Vector whose length is the three times the number of delay
- slots required.
- Each entry gives three conditions, each involving attributes.
- The first must be true for an insn to occupy that delay slot
- location. The second is true for all insns that can be
- annulled if the branch is true and the third is true for all
- insns that can be annulled if the branch is false.
-
- Multiple DEFINE_DELAYs may be present. They indicate differing
- requirements for delay slots. */
-DEF_RTL_EXPR(DEFINE_DELAY, "define_delay", "eE", 'x')
-
-/* Define a set of insns that requires a function unit. This means that
- these insns produce their result after a delay and that there may be
- restrictions on the number of insns of this type that can be scheduled
- simultaneously.
-
- More than one DEFINE_FUNCTION_UNIT can be specified for a function unit.
- Each gives a set of operations and associated delays. The first three
- operands must be the same for each operation for the same function unit.
-
- All delays are specified in cycles.
-
- 1st operand: Name of function unit (mostly for documentation)
- 2nd operand: Number of identical function units in CPU
- 3rd operand: Total number of simultaneous insns that can execute on this
- function unit; 0 if unlimited.
- 4th operand: Condition involving insn attribute, that, if true, specifies
- those insns that this expression applies to.
- 5th operand: Constant delay after which insn result will be
- available.
- 6th operand: Delay until next insn can be scheduled on the function unit
- executing this operation. The meaning depends on whether or
- not the next operand is supplied.
- 7th operand: If this operand is not specified, the 6th operand gives the
- number of cycles after the instruction matching the 4th
- operand begins using the function unit until a subsequent
- insn can begin. A value of zero should be used for a
- unit with no issue constraints. If only one operation can
- be executed a time and the unit is busy for the entire time,
- the 3rd operand should be specified as 1, the 6th operand
- sould be specified as 0, and the 7th operand should not
- be specified.
-
- If this operand is specified, it is a list of attribute
- expressions. If an insn for which any of these expressions
- is true is currently executing on the function unit, the
- issue delay will be given by the 6th operand. Otherwise,
- the insn can be immediately scheduled (subject to the limit
- on the number of simultaneous operations executing on the
- unit.) */
-DEF_RTL_EXPR(DEFINE_FUNCTION_UNIT, "define_function_unit", "siieiiV", 'x')
-
-/* Define attribute computation for `asm' instructions. */
-DEF_RTL_EXPR(DEFINE_ASM_ATTRIBUTES, "define_asm_attributes", "V", 'x' )
-
-/* SEQUENCE appears in the result of a `gen_...' function
- for a DEFINE_EXPAND that wants to make several insns.
- Its elements are the bodies of the insns that should be made.
- `emit_insn' takes the SEQUENCE apart and makes separate insns. */
-DEF_RTL_EXPR(SEQUENCE, "sequence", "E", 'x')
-
-/* Refers to the address of its argument.
- This appears only in machine descriptions, indicating that
- any expression that would be acceptable as the operand of MEM
- should be matched. */
-DEF_RTL_EXPR(ADDRESS, "address", "e", 'm')
-
-/* ----------------------------------------------------------------------
- Expressions used for insn attributes. These also do not appear in
- actual rtl code in the compiler.
- ---------------------------------------------------------------------- */
-
-/* Definition of an insn attribute.
- 1st operand: name of the attribute
- 2nd operand: comma-separated list of possible attribute values
- 3rd operand: expression for the default value of the attribute. */
-DEF_RTL_EXPR(DEFINE_ATTR, "define_attr", "sse", 'x')
-
-/* Marker for the name of an attribute. */
-DEF_RTL_EXPR(ATTR, "attr", "s", 'x')
-
-/* For use in the last (optional) operand of DEFINE_INSN or DEFINE_PEEPHOLE and
- in DEFINE_ASM_INSN to specify an attribute to assign to insns matching that
- pattern.
-
- (set_attr "name" "value") is equivalent to
- (set (attr "name") (const_string "value")) */
-DEF_RTL_EXPR(SET_ATTR, "set_attr", "ss", 'x')
-
-/* In the last operand of DEFINE_INSN and DEFINE_PEEPHOLE, this can be used to
- specify that attribute values are to be assigned according to the
- alternative matched.
-
- The following three expressions are equivalent:
-
- (set (attr "att") (cond [(eq_attrq "alternative" "1") (const_string "a1")
- (eq_attrq "alternative" "2") (const_string "a2")]
- (const_string "a3")))
- (set_attr_alternative "att" [(const_string "a1") (const_string "a2")
- (const_string "a3")])
- (set_attr "att" "a1,a2,a3")
- */
-DEF_RTL_EXPR(SET_ATTR_ALTERNATIVE, "set_attr_alternative", "sE", 'x')
-
-/* A conditional expression true if the value of the specified attribute of
- the current insn equals the specified value. The first operand is the
- attribute name and the second is the comparison value. */
-DEF_RTL_EXPR(EQ_ATTR, "eq_attr", "ss", 'x')
-
-/* A conditional expression which is true if the specified flag is
- true for the insn being scheduled in reorg.
-
- genattr.c defines the following flags which can be tested by
- (attr_flag "foo") expressions in eligible_for_delay.
-
- forward, backward, very_likely, likely, very_unlikely, and unlikely. */
-
-DEF_RTL_EXPR (ATTR_FLAG, "attr_flag", "s", 'x')
-
-/* ----------------------------------------------------------------------
- Expression types used for things in the instruction chain.
-
- All formats must start with "iuu" to handle the chain.
- Each insn expression holds an rtl instruction and its semantics
- during back-end processing.
- See macros's in "rtl.h" for the meaning of each rtx->fld[].
-
- ---------------------------------------------------------------------- */
-
-/* An instruction that cannot jump. */
-DEF_RTL_EXPR(INSN, "insn", "iuueiee", 'i')
-
-/* An instruction that can possibly jump.
- Fields ( rtx->fld[] ) have exact same meaning as INSN's. */
-DEF_RTL_EXPR(JUMP_INSN, "jump_insn", "iuueiee0", 'i')
-
-/* An instruction that can possibly call a subroutine
- but which will not change which instruction comes next
- in the current function.
- Field ( rtx->fld[7] ) is CALL_INSN_FUNCTION_USAGE.
- All other fields ( rtx->fld[] ) have exact same meaning as INSN's. */
-DEF_RTL_EXPR(CALL_INSN, "call_insn", "iuueieee", 'i')
-
-/* A marker that indicates that control will not flow through. */
-DEF_RTL_EXPR(BARRIER, "barrier", "iuu", 'x')
-
-/* Holds a label that is followed by instructions.
- Operand:
- 3: is a number that is unique in the entire compilation.
- 4: is the user-given name of the label, if any.
- 5: is used in jump.c for the use-count of the label.
- and in flow.c to point to the chain of label_ref's to this label. */
-DEF_RTL_EXPR(CODE_LABEL, "code_label", "iuuis0", 'x')
-
-/* Say where in the code a source line starts, for symbol table's sake.
- Contains a filename and a line number. Line numbers <= 0 are special:
- 0 is used in a dummy placed at the front of every function
- just so there will never be a need to delete the first insn;
- -1 indicates a dummy; insns to be deleted by flow analysis and combining
- are really changed to NOTEs with a number of -1.
- -2 means beginning of a name binding contour; output N_LBRAC.
- -3 means end of a contour; output N_RBRAC. */
-DEF_RTL_EXPR(NOTE, "note", "iuusn", 'x')
-
-/* INLINE_HEADER is use by inline function machinery. The information
- it contains helps to build the mapping function between the rtx's of
- the function to be inlined and the current function being expanded. */
-
-DEF_RTL_EXPR(INLINE_HEADER, "inline_header", "iuuuiiiiiieiiEe", 'x')
-
-/* ----------------------------------------------------------------------
- Top level constituents of INSN, JUMP_INSN and CALL_INSN.
- ---------------------------------------------------------------------- */
-
-/* Several operations to be done in parallel. */
-DEF_RTL_EXPR(PARALLEL, "parallel", "E", 'x')
-
-/* A string that is passed through to the assembler as input.
- One can obviously pass comments through by using the
- assembler comment syntax.
- These occur in an insn all by themselves as the PATTERN.
- They also appear inside an ASM_OPERANDS
- as a convenient way to hold a string. */
-DEF_RTL_EXPR(ASM_INPUT, "asm_input", "s", 'x')
-
-/* An assembler instruction with operands.
- 1st operand is the instruction template.
- 2nd operand is the constraint for the output.
- 3rd operand is the number of the output this expression refers to.
- When an insn stores more than one value, a separate ASM_OPERANDS
- is made for each output; this integer distinguishes them.
- 4th is a vector of values of input operands.
- 5th is a vector of modes and constraints for the input operands.
- Each element is an ASM_INPUT containing a constraint string
- and whose mode indicates the mode of the input operand.
- 6th is the name of the containing source file.
- 7th is the source line number. */
-DEF_RTL_EXPR(ASM_OPERANDS, "asm_operands", "ssiEEsi", 'x')
-
-/* A machine-specific operation.
- 1st operand is a vector of operands being used by the operation so that
- any needed reloads can be done.
- 2nd operand is a unique value saying which of a number of machine-specific
- operations is to be performed.
- (Note that the vector must be the first operand because of the way that
- genrecog.c record positions within an insn.)
- This can occur all by itself in a PATTERN, as a component of a PARALLEL,
- or inside an expression. */
-DEF_RTL_EXPR(UNSPEC, "unspec", "Ei", 'x')
-
-/* Similar, but a volatile operation and one which may trap. */
-DEF_RTL_EXPR(UNSPEC_VOLATILE, "unspec_volatile", "Ei", 'x')
-
-/* Vector of addresses, stored as full words. */
-/* Each element is a LABEL_REF to a CODE_LABEL whose address we want. */
-DEF_RTL_EXPR(ADDR_VEC, "addr_vec", "E", 'x')
-
-/* Vector of address differences X0 - BASE, X1 - BASE, ...
- First operand is BASE; the vector contains the X's.
- The machine mode of this rtx says how much space to leave
- for each difference. */
-DEF_RTL_EXPR(ADDR_DIFF_VEC, "addr_diff_vec", "eE", 'x')
-
-/* ----------------------------------------------------------------------
- At the top level of an instruction (perhaps under PARALLEL).
- ---------------------------------------------------------------------- */
-
-/* Assignment.
- Operand 1 is the location (REG, MEM, PC, CC0 or whatever) assigned to.
- Operand 2 is the value stored there.
- ALL assignment must use SET.
- Instructions that do multiple assignments must use multiple SET,
- under PARALLEL. */
-DEF_RTL_EXPR(SET, "set", "ee", 'x')
-
-/* Indicate something is used in a way that we don't want to explain.
- For example, subroutine calls will use the register
- in which the static chain is passed. */
-DEF_RTL_EXPR(USE, "use", "e", 'x')
-
-/* Indicate something is clobbered in a way that we don't want to explain.
- For example, subroutine calls will clobber some physical registers
- (the ones that are by convention not saved). */
-DEF_RTL_EXPR(CLOBBER, "clobber", "e", 'x')
-
-/* Call a subroutine.
- Operand 1 is the address to call.
- Operand 2 is the number of arguments. */
-
-DEF_RTL_EXPR(CALL, "call", "ee", 'x')
-
-/* Return from a subroutine. */
-
-DEF_RTL_EXPR(RETURN, "return", "", 'x')
-
-/* Conditional trap.
- Operand 1 is the condition.
- Operand 2 is the trap code.
- For an unconditional trap, make the condition (const_int 1). */
-DEF_RTL_EXPR(TRAP_IF, "trap_if", "ei", 'x')
-
-/* ----------------------------------------------------------------------
- Primitive values for use in expressions.
- ---------------------------------------------------------------------- */
-
-/* numeric integer constant */
-DEF_RTL_EXPR(CONST_INT, "const_int", "w", 'o')
-
-/* numeric double constant.
- Operand 0 is the MEM that stores this constant in memory,
- or various other things (see comments at immed_double_const in varasm.c).
- Operand 1 is a chain of all CONST_DOUBLEs in use in the current function.
- Remaining operands hold the actual value.
- The number of operands may be more than 2 if cross-compiling;
- see init_rtl. */
-DEF_RTL_EXPR(CONST_DOUBLE, "const_double", "e0ww", 'o')
-
-/* String constant. Used only for attributes right now. */
-DEF_RTL_EXPR(CONST_STRING, "const_string", "s", 'o')
-
-/* This is used to encapsulate an expression whose value is constant
- (such as the sum of a SYMBOL_REF and a CONST_INT) so that it will be
- recognized as a constant operand rather than by arithmetic instructions. */
-
-DEF_RTL_EXPR(CONST, "const", "e", 'o')
-
-/* program counter. Ordinary jumps are represented
- by a SET whose first operand is (PC). */
-DEF_RTL_EXPR(PC, "pc", "", 'o')
-
-/* A register. The "operand" is the register number, accessed
- with the REGNO macro. If this number is less than FIRST_PSEUDO_REGISTER
- than a hardware register is being referred to. */
-DEF_RTL_EXPR(REG, "reg", "i", 'o')
-
-/* A scratch register. This represents a register used only within a
- single insn. It will be turned into a REG during register allocation
- or reload unless the constraint indicates that the register won't be
- needed, in which case it can remain a SCRATCH. This code is
- marked as having one operand so it can be turned into a REG. */
-DEF_RTL_EXPR(SCRATCH, "scratch", "0", 'o')
-
-/* One word of a multi-word value.
- The first operand is the complete value; the second says which word.
- The WORDS_BIG_ENDIAN flag controls whether word number 0
- (as numbered in a SUBREG) is the most or least significant word.
-
- This is also used to refer to a value in a different machine mode.
- For example, it can be used to refer to a SImode value as if it were
- Qimode, or vice versa. Then the word number is always 0. */
-DEF_RTL_EXPR(SUBREG, "subreg", "ei", 'x')
-
-/* This one-argument rtx is used for move instructions
- that are guaranteed to alter only the low part of a destination.
- Thus, (SET (SUBREG:HI (REG...)) (MEM:HI ...))
- has an unspecified effect on the high part of REG,
- but (SET (STRICT_LOW_PART (SUBREG:HI (REG...))) (MEM:HI ...))
- is guaranteed to alter only the bits of REG that are in HImode.
-
- The actual instruction used is probably the same in both cases,
- but the register constraints may be tighter when STRICT_LOW_PART
- is in use. */
-
-DEF_RTL_EXPR(STRICT_LOW_PART, "strict_low_part", "e", 'x')
-
-/* (CONCAT a b) represents the virtual concatenation of a and b
- to make a value that has as many bits as a and b put together.
- This is used for complex values. Normally it appears only
- in DECL_RTLs and during RTL generation, but not in the insn chain. */
-DEF_RTL_EXPR(CONCAT, "concat", "ee", 'o')
-
-/* A memory location; operand is the address.
- Can be nested inside a VOLATILE. */
-DEF_RTL_EXPR(MEM, "mem", "e", 'o')
-
-/* Reference to an assembler label in the code for this function.
- The operand is a CODE_LABEL found in the insn chain.
- The unprinted fields 1 and 2 are used in flow.c for the
- LABEL_NEXTREF and CONTAINING_INSN. */
-DEF_RTL_EXPR(LABEL_REF, "label_ref", "u00", 'o')
-
-/* Reference to a named label: the string that is the first operand,
- with `_' added implicitly in front.
- Exception: if the first character explicitly given is `*',
- to give it to the assembler, remove the `*' and do not add `_'. */
-DEF_RTL_EXPR(SYMBOL_REF, "symbol_ref", "s", 'o')
-
-/* The condition code register is represented, in our imagination,
- as a register holding a value that can be compared to zero.
- In fact, the machine has already compared them and recorded the
- results; but instructions that look at the condition code
- pretend to be looking at the entire value and comparing it. */
-DEF_RTL_EXPR(CC0, "cc0", "", 'o')
-
-/* =====================================================================
- A QUEUED expression really points to a member of the queue of instructions
- to be output later for postincrement/postdecrement.
- QUEUED expressions never become part of instructions.
- When a QUEUED expression would be put into an instruction,
- instead either the incremented variable or a copy of its previous
- value is used.
-
- Operands are:
- 0. the variable to be incremented (a REG rtx).
- 1. the incrementing instruction, or 0 if it hasn't been output yet.
- 2. A REG rtx for a copy of the old value of the variable, or 0 if none yet.
- 3. the body to use for the incrementing instruction
- 4. the next QUEUED expression in the queue.
- ====================================================================== */
-
-DEF_RTL_EXPR(QUEUED, "queued", "eeeee", 'x')
-
-/* ----------------------------------------------------------------------
- Expressions for operators in an rtl pattern
- ---------------------------------------------------------------------- */
-
-/* if_then_else. This is used in representing ordinary
- conditional jump instructions.
- Operand:
- 0: condition
- 1: then expr
- 2: else expr */
-DEF_RTL_EXPR(IF_THEN_ELSE, "if_then_else", "eee", '3')
-
-/* General conditional. The first operand is a vector composed of pairs of
- expressions. The first element of each pair is evaluated, in turn.
- The value of the conditional is the second expression of the first pair
- whose first expression evaluates non-zero. If none of the expressions is
- true, the second operand will be used as the value of the conditional.
-
- This should be replaced with use of IF_THEN_ELSE. */
-DEF_RTL_EXPR(COND, "cond", "Ee", 'x')
-
-/* Comparison, produces a condition code result. */
-DEF_RTL_EXPR(COMPARE, "compare", "ee", '2')
-
-/* plus */
-DEF_RTL_EXPR(PLUS, "plus", "ee", 'c')
-
-/* Operand 0 minus operand 1. */
-DEF_RTL_EXPR(MINUS, "minus", "ee", '2')
-
-/* Minus operand 0. */
-DEF_RTL_EXPR(NEG, "neg", "e", '1')
-
-DEF_RTL_EXPR(MULT, "mult", "ee", 'c')
-
-/* Operand 0 divided by operand 1. */
-DEF_RTL_EXPR(DIV, "div", "ee", '2')
-/* Remainder of operand 0 divided by operand 1. */
-DEF_RTL_EXPR(MOD, "mod", "ee", '2')
-
-/* Unsigned divide and remainder. */
-DEF_RTL_EXPR(UDIV, "udiv", "ee", '2')
-DEF_RTL_EXPR(UMOD, "umod", "ee", '2')
-
-/* Bitwise operations. */
-DEF_RTL_EXPR(AND, "and", "ee", 'c')
-
-DEF_RTL_EXPR(IOR, "ior", "ee", 'c')
-
-DEF_RTL_EXPR(XOR, "xor", "ee", 'c')
-
-DEF_RTL_EXPR(NOT, "not", "e", '1')
-
-/* Operand:
- 0: value to be shifted.
- 1: number of bits. */
-DEF_RTL_EXPR(ASHIFT, "ashift", "ee", '2')
-DEF_RTL_EXPR(ROTATE, "rotate", "ee", '2')
-
-/* Right shift operations, for machines where these are not the same
- as left shifting with a negative argument. */
-
-DEF_RTL_EXPR(ASHIFTRT, "ashiftrt", "ee", '2')
-DEF_RTL_EXPR(LSHIFTRT, "lshiftrt", "ee", '2')
-DEF_RTL_EXPR(ROTATERT, "rotatert", "ee", '2')
-
-/* Minimum and maximum values of two operands. We need both signed and
- unsigned forms. (We cannot use MIN for SMIN because it conflicts
- with a macro of the same name.) */
-
-DEF_RTL_EXPR(SMIN, "smin", "ee", 'c')
-DEF_RTL_EXPR(SMAX, "smax", "ee", 'c')
-DEF_RTL_EXPR(UMIN, "umin", "ee", 'c')
-DEF_RTL_EXPR(UMAX, "umax", "ee", 'c')
-
-/* These unary operations are used to represent incrementation
- and decrementation as they occur in memory addresses.
- The amount of increment or decrement are not represented
- because they can be understood from the machine-mode of the
- containing MEM. These operations exist in only two cases:
- 1. pushes onto the stack.
- 2. created automatically by the life_analysis pass in flow.c. */
-DEF_RTL_EXPR(PRE_DEC, "pre_dec", "e", 'x')
-DEF_RTL_EXPR(PRE_INC, "pre_inc", "e", 'x')
-DEF_RTL_EXPR(POST_DEC, "post_dec", "e", 'x')
-DEF_RTL_EXPR(POST_INC, "post_inc", "e", 'x')
-
-/* Comparison operations. The ordered comparisons exist in two
- flavors, signed and unsigned. */
-DEF_RTL_EXPR(NE, "ne", "ee", '<')
-DEF_RTL_EXPR(EQ, "eq", "ee", '<')
-DEF_RTL_EXPR(GE, "ge", "ee", '<')
-DEF_RTL_EXPR(GT, "gt", "ee", '<')
-DEF_RTL_EXPR(LE, "le", "ee", '<')
-DEF_RTL_EXPR(LT, "lt", "ee", '<')
-DEF_RTL_EXPR(GEU, "geu", "ee", '<')
-DEF_RTL_EXPR(GTU, "gtu", "ee", '<')
-DEF_RTL_EXPR(LEU, "leu", "ee", '<')
-DEF_RTL_EXPR(LTU, "ltu", "ee", '<')
-
-/* Represents the result of sign-extending the sole operand.
- The machine modes of the operand and of the SIGN_EXTEND expression
- determine how much sign-extension is going on. */
-DEF_RTL_EXPR(SIGN_EXTEND, "sign_extend", "e", '1')
-
-/* Similar for zero-extension (such as unsigned short to int). */
-DEF_RTL_EXPR(ZERO_EXTEND, "zero_extend", "e", '1')
-
-/* Similar but here the operand has a wider mode. */
-DEF_RTL_EXPR(TRUNCATE, "truncate", "e", '1')
-
-/* Similar for extending floating-point values (such as SFmode to DFmode). */
-DEF_RTL_EXPR(FLOAT_EXTEND, "float_extend", "e", '1')
-DEF_RTL_EXPR(FLOAT_TRUNCATE, "float_truncate", "e", '1')
-
-/* Conversion of fixed point operand to floating point value. */
-DEF_RTL_EXPR(FLOAT, "float", "e", '1')
-
-/* With fixed-point machine mode:
- Conversion of floating point operand to fixed point value.
- Value is defined only when the operand's value is an integer.
- With floating-point machine mode (and operand with same mode):
- Operand is rounded toward zero to produce an integer value
- represented in floating point. */
-DEF_RTL_EXPR(FIX, "fix", "e", '1')
-
-/* Conversion of unsigned fixed point operand to floating point value. */
-DEF_RTL_EXPR(UNSIGNED_FLOAT, "unsigned_float", "e", '1')
-
-/* With fixed-point machine mode:
- Conversion of floating point operand to *unsigned* fixed point value.
- Value is defined only when the operand's value is an integer. */
-DEF_RTL_EXPR(UNSIGNED_FIX, "unsigned_fix", "e", '1')
-
-/* Absolute value */
-DEF_RTL_EXPR(ABS, "abs", "e", '1')
-
-/* Square root */
-DEF_RTL_EXPR(SQRT, "sqrt", "e", '1')
-
-/* Find first bit that is set.
- Value is 1 + number of trailing zeros in the arg.,
- or 0 if arg is 0. */
-DEF_RTL_EXPR(FFS, "ffs", "e", '1')
-
-/* Reference to a signed bit-field of specified size and position.
- Operand 0 is the memory unit (usually SImode or QImode) which
- contains the field's first bit. Operand 1 is the width, in bits.
- Operand 2 is the number of bits in the memory unit before the
- first bit of this field.
- If BITS_BIG_ENDIAN is defined, the first bit is the msb and
- operand 2 counts from the msb of the memory unit.
- Otherwise, the first bit is the lsb and operand 2 counts from
- the lsb of the memory unit. */
-DEF_RTL_EXPR(SIGN_EXTRACT, "sign_extract", "eee", 'b')
-
-/* Similar for unsigned bit-field. */
-DEF_RTL_EXPR(ZERO_EXTRACT, "zero_extract", "eee", 'b')
-
-/* For RISC machines. These save memory when splitting insns. */
-
-/* HIGH are the high-order bits of a constant expression. */
-DEF_RTL_EXPR(HIGH, "high", "e", 'o')
-
-/* LO_SUM is the sum of a register and the low-order bits
- of a constant expression. */
-DEF_RTL_EXPR(LO_SUM, "lo_sum", "ee", 'o')
-
-/*
-Local variables:
-mode:c
-version-control: t
-End:
-*/
diff --git a/gnu/usr.bin/cc/include/rtl.h b/gnu/usr.bin/cc/include/rtl.h
deleted file mode 100644
index 1701dd57e1ff..000000000000
--- a/gnu/usr.bin/cc/include/rtl.h
+++ /dev/null
@@ -1,961 +0,0 @@
-/* Register Transfer Language (RTL) definitions for GNU C-Compiler
- Copyright (C) 1987, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-
-#include "machmode.h"
-
-#undef FFS /* Some systems predefine this symbol; don't let it interfere. */
-#undef FLOAT /* Likewise. */
-#undef ABS /* Likewise. */
-#undef PC /* Likewise. */
-
-#ifndef TREE_CODE
-union tree_node;
-#endif
-
-/* Register Transfer Language EXPRESSIONS CODES */
-
-#define RTX_CODE enum rtx_code
-enum rtx_code {
-
-#define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) ENUM ,
-#include "rtl.def" /* rtl expressions are documented here */
-#undef DEF_RTL_EXPR
-
- LAST_AND_UNUSED_RTX_CODE}; /* A convenient way to get a value for
- NUM_RTX_CODE.
- Assumes default enum value assignment. */
-
-#define NUM_RTX_CODE ((int)LAST_AND_UNUSED_RTX_CODE)
- /* The cast here, saves many elsewhere. */
-
-extern int rtx_length[];
-#define GET_RTX_LENGTH(CODE) (rtx_length[(int)(CODE)])
-
-extern char *rtx_name[];
-#define GET_RTX_NAME(CODE) (rtx_name[(int)(CODE)])
-
-extern char *rtx_format[];
-#define GET_RTX_FORMAT(CODE) (rtx_format[(int)(CODE)])
-
-extern char rtx_class[];
-#define GET_RTX_CLASS(CODE) (rtx_class[(int)(CODE)])
-
-/* Common union for an element of an rtx. */
-
-typedef union rtunion_def
-{
- HOST_WIDE_INT rtwint;
- int rtint;
- char *rtstr;
- struct rtx_def *rtx;
- struct rtvec_def *rtvec;
- enum machine_mode rttype;
-} rtunion;
-
-/* RTL expression ("rtx"). */
-
-typedef struct rtx_def
-{
-#ifdef ONLY_INT_FIELDS
-#ifdef CODE_FIELD_BUG
- unsigned int code : 16;
-#else
- unsigned short code;
-#endif
-#else
- /* The kind of expression this is. */
- enum rtx_code code : 16;
-#endif
- /* The kind of value the expression has. */
-#ifdef ONLY_INT_FIELDS
- int mode : 8;
-#else
- enum machine_mode mode : 8;
-#endif
- /* 1 in an INSN if it can alter flow of control
- within this function. Not yet used! */
- unsigned int jump : 1;
- /* 1 in an INSN if it can call another function. Not yet used! */
- unsigned int call : 1;
- /* 1 in a MEM or REG if value of this expression will never change
- during the current function, even though it is not
- manifestly constant.
- 1 in a SUBREG if it is from a promoted variable that is unsigned.
- 1 in a SYMBOL_REF if it addresses something in the per-function
- constants pool.
- 1 in a CALL_INSN if it is a const call.
- 1 in a JUMP_INSN if it is a branch that should be annulled. Valid from
- reorg until end of compilation; cleared before used. */
- unsigned int unchanging : 1;
- /* 1 in a MEM expression if contents of memory are volatile.
- 1 in an INSN, CALL_INSN, JUMP_INSN, CODE_LABEL or BARRIER
- if it is deleted.
- 1 in a REG expression if corresponds to a variable declared by the user.
- 0 for an internally generated temporary.
- In a SYMBOL_REF, this flag is used for machine-specific purposes.
- In a LABEL_REF or in a REG_LABEL note, this is LABEL_REF_NONLOCAL_P. */
- unsigned int volatil : 1;
- /* 1 in a MEM referring to a field of a structure (not a union!).
- 0 if the MEM was a variable or the result of a * operator in C;
- 1 if it was the result of a . or -> operator (on a struct) in C.
- 1 in a REG if the register is used only in exit code a loop.
- 1 in a SUBREG expression if was generated from a variable with a
- promoted mode.
- 1 in a CODE_LABEL if the label is used for nonlocal gotos
- and must not be deleted even if its count is zero.
- 1 in a LABEL_REF if this is a reference to a label outside the
- current loop.
- 1 in an INSN, JUMP_INSN, or CALL_INSN if this insn must be scheduled
- together with the preceding insn. Valid only within sched.
- 1 in an INSN, JUMP_INSN, or CALL_INSN if insn is in a delay slot and
- from the target of a branch. Valid from reorg until end of compilation;
- cleared before used. */
- unsigned int in_struct : 1;
- /* 1 if this rtx is used. This is used for copying shared structure.
- See `unshare_all_rtl'.
- In a REG, this is not needed for that purpose, and used instead
- in `leaf_renumber_regs_insn'.
- In a SYMBOL_REF, means that emit_library_call
- has used it as the function. */
- unsigned int used : 1;
- /* Nonzero if this rtx came from procedure integration.
- In a REG, nonzero means this reg refers to the return value
- of the current function. */
- unsigned integrated : 1;
- /* The first element of the operands of this rtx.
- The number of operands and their types are controlled
- by the `code' field, according to rtl.def. */
- rtunion fld[1];
-} *rtx;
-
-
-/* Add prototype support. */
-#ifndef PROTO
-#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__)
-#define PROTO(ARGS) ARGS
-#else
-#define PROTO(ARGS) ()
-#endif
-#endif
-
-#ifndef VPROTO
-#ifdef __STDC__
-#define PVPROTO(ARGS) ARGS
-#define VPROTO(ARGS) ARGS
-#define VA_START(va_list,var) va_start(va_list,var)
-#else
-#define PVPROTO(ARGS) ()
-#define VPROTO(ARGS) (va_alist) va_dcl
-#define VA_START(va_list,var) va_start(va_list)
-#endif
-#endif
-
-#ifndef STDIO_PROTO
-#ifdef BUFSIZ
-#define STDIO_PROTO(ARGS) PROTO(ARGS)
-#else
-#define STDIO_PROTO(ARGS) ()
-#endif
-#endif
-
-#define NULL_RTX (rtx) 0
-
-/* Define a generic NULL if one hasn't already been defined. */
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-#ifndef GENERIC_PTR
-#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__)
-#define GENERIC_PTR void *
-#else
-#define GENERIC_PTR char *
-#endif
-#endif
-
-#ifndef NULL_PTR
-#define NULL_PTR ((GENERIC_PTR)0)
-#endif
-
-/* Define macros to access the `code' field of the rtx. */
-
-#ifdef SHORT_ENUM_BUG
-#define GET_CODE(RTX) ((enum rtx_code) ((RTX)->code))
-#define PUT_CODE(RTX, CODE) ((RTX)->code = ((short) (CODE)))
-#else
-#define GET_CODE(RTX) ((RTX)->code)
-#define PUT_CODE(RTX, CODE) ((RTX)->code = (CODE))
-#endif
-
-#define GET_MODE(RTX) ((RTX)->mode)
-#define PUT_MODE(RTX, MODE) ((RTX)->mode = (MODE))
-
-#define RTX_INTEGRATED_P(RTX) ((RTX)->integrated)
-#define RTX_UNCHANGING_P(RTX) ((RTX)->unchanging)
-
-/* RTL vector. These appear inside RTX's when there is a need
- for a variable number of things. The principle use is inside
- PARALLEL expressions. */
-
-typedef struct rtvec_def{
- unsigned num_elem; /* number of elements */
- rtunion elem[1];
-} *rtvec;
-
-#define NULL_RTVEC (rtvec) 0
-
-#define GET_NUM_ELEM(RTVEC) ((RTVEC)->num_elem)
-#define PUT_NUM_ELEM(RTVEC, NUM) ((RTVEC)->num_elem = (unsigned) NUM)
-
-#define RTVEC_ELT(RTVEC, I) ((RTVEC)->elem[(I)].rtx)
-
-/* 1 if X is a REG. */
-
-#define REG_P(X) (GET_CODE (X) == REG)
-
-/* 1 if X is a constant value that is an integer. */
-
-#define CONSTANT_P(X) \
- (GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF \
- || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST_DOUBLE \
- || GET_CODE (X) == CONST || GET_CODE (X) == HIGH)
-
-/* General accessor macros for accessing the fields of an rtx. */
-
-#define XEXP(RTX, N) ((RTX)->fld[N].rtx)
-#define XINT(RTX, N) ((RTX)->fld[N].rtint)
-#define XWINT(RTX, N) ((RTX)->fld[N].rtwint)
-#define XSTR(RTX, N) ((RTX)->fld[N].rtstr)
-#define XVEC(RTX, N) ((RTX)->fld[N].rtvec)
-#define XVECLEN(RTX, N) ((RTX)->fld[N].rtvec->num_elem)
-#define XVECEXP(RTX,N,M)((RTX)->fld[N].rtvec->elem[M].rtx)
-
-/* ACCESS MACROS for particular fields of insns. */
-
-/* Holds a unique number for each insn.
- These are not necessarily sequentially increasing. */
-#define INSN_UID(INSN) ((INSN)->fld[0].rtint)
-
-/* Chain insns together in sequence. */
-#define PREV_INSN(INSN) ((INSN)->fld[1].rtx)
-#define NEXT_INSN(INSN) ((INSN)->fld[2].rtx)
-
-/* The body of an insn. */
-#define PATTERN(INSN) ((INSN)->fld[3].rtx)
-
-/* Code number of instruction, from when it was recognized.
- -1 means this instruction has not been recognized yet. */
-#define INSN_CODE(INSN) ((INSN)->fld[4].rtint)
-
-/* Set up in flow.c; empty before then.
- Holds a chain of INSN_LIST rtx's whose first operands point at
- previous insns with direct data-flow connections to this one.
- That means that those insns set variables whose next use is in this insn.
- They are always in the same basic block as this insn. */
-#define LOG_LINKS(INSN) ((INSN)->fld[5].rtx)
-
-/* 1 if insn has been deleted. */
-#define INSN_DELETED_P(INSN) ((INSN)->volatil)
-
-/* 1 if insn is a call to a const function. */
-#define CONST_CALL_P(INSN) ((INSN)->unchanging)
-
-/* 1 if insn is a branch that should not unconditionally execute its
- delay slots, i.e., it is an annulled branch. */
-#define INSN_ANNULLED_BRANCH_P(INSN) ((INSN)->unchanging)
-
-/* 1 if insn is in a delay slot and is from the target of the branch. If
- the branch insn has INSN_ANNULLED_BRANCH_P set, this insn should only be
- executed if the branch is taken. For annulled branches with this bit
- clear, the insn should be executed only if the branch is not taken. */
-#define INSN_FROM_TARGET_P(INSN) ((INSN)->in_struct)
-
-/* Holds a list of notes on what this insn does to various REGs.
- It is a chain of EXPR_LIST rtx's, where the second operand
- is the chain pointer and the first operand is the REG being described.
- The mode field of the EXPR_LIST contains not a real machine mode
- but a value that says what this note says about the REG:
- REG_DEAD means that the value in REG dies in this insn (i.e., it is
- not needed past this insn). If REG is set in this insn, the REG_DEAD
- note may, but need not, be omitted.
- REG_INC means that the REG is autoincremented or autodecremented.
- REG_EQUIV describes the insn as a whole; it says that the
- insn sets a register to a constant value or to be equivalent to
- a memory address. If the
- register is spilled to the stack then the constant value
- should be substituted for it. The contents of the REG_EQUIV
- is the constant value or memory address, which may be different
- from the source of the SET although it has the same value.
- REG_EQUAL is like REG_EQUIV except that the destination
- is only momentarily equal to the specified rtx. Therefore, it
- cannot be used for substitution; but it can be used for cse.
- REG_RETVAL means that this insn copies the return-value of
- a library call out of the hard reg for return values. This note
- is actually an INSN_LIST and it points to the first insn involved
- in setting up arguments for the call. flow.c uses this to delete
- the entire library call when its result is dead.
- REG_LIBCALL is the inverse of REG_RETVAL: it goes on the first insn
- of the library call and points at the one that has the REG_RETVAL.
- REG_WAS_0 says that the register set in this insn held 0 before the insn.
- The contents of the note is the insn that stored the 0.
- If that insn is deleted or patched to a NOTE, the REG_WAS_0 is inoperative.
- The REG_WAS_0 note is actually an INSN_LIST, not an EXPR_LIST.
- REG_NONNEG means that the register is always nonnegative during
- the containing loop. This is used in branches so that decrement and
- branch instructions terminating on zero can be matched. There must be
- an insn pattern in the md file named `decrement_and_branch_until_zero'
- or else this will never be added to any instructions.
- REG_NO_CONFLICT means there is no conflict *after this insn*
- between the register in the note and the destination of this insn.
- REG_UNUSED identifies a register set in this insn and never used.
- REG_CC_SETTER and REG_CC_USER link a pair of insns that set and use
- CC0, respectively. Normally, these are required to be consecutive insns,
- but we permit putting a cc0-setting insn in the delay slot of a branch
- as long as only one copy of the insn exists. In that case, these notes
- point from one to the other to allow code generation to determine what
- any require information and to properly update CC_STATUS.
- REG_LABEL points to a CODE_LABEL. Used by non-JUMP_INSNs to
- say that the CODE_LABEL contained in the REG_LABEL note is used
- by the insn.
- REG_DEP_ANTI is used in LOG_LINKS which represent anti (write after read)
- dependencies. REG_DEP_OUTPUT is used in LOG_LINKS which represent output
- (write after write) dependencies. Data dependencies, which are the only
- type of LOG_LINK created by flow, are represented by a 0 reg note kind. */
-
-#define REG_NOTES(INSN) ((INSN)->fld[6].rtx)
-
-/* Don't forget to change reg_note_name in rtl.c. */
-enum reg_note { REG_DEAD = 1, REG_INC = 2, REG_EQUIV = 3, REG_WAS_0 = 4,
- REG_EQUAL = 5, REG_RETVAL = 6, REG_LIBCALL = 7,
- REG_NONNEG = 8, REG_NO_CONFLICT = 9, REG_UNUSED = 10,
- REG_CC_SETTER = 11, REG_CC_USER = 12, REG_LABEL = 13,
- REG_DEP_ANTI = 14, REG_DEP_OUTPUT = 15 };
-
-/* Define macros to extract and insert the reg-note kind in an EXPR_LIST. */
-#define REG_NOTE_KIND(LINK) ((enum reg_note) GET_MODE (LINK))
-#define PUT_REG_NOTE_KIND(LINK,KIND) PUT_MODE(LINK, (enum machine_mode) (KIND))
-
-/* Names for REG_NOTE's in EXPR_LIST insn's. */
-
-extern char *reg_note_name[];
-#define GET_REG_NOTE_NAME(MODE) (reg_note_name[(int)(MODE)])
-
-/* This field is only present on CALL_INSNs. It holds a chain of EXPR_LIST of
- USE and CLOBBER expressions.
- USE expressions list the registers filled with arguments that
- are passed to the function.
- CLOBBER expressions document the registers explicitly clobbered
- by this CALL_INSN.
- Pseudo registers can not be mentioned in this list. */
-#define CALL_INSN_FUNCTION_USAGE(INSN) ((INSN)->fld[7].rtx)
-
-/* The label-number of a code-label. The assembler label
- is made from `L' and the label-number printed in decimal.
- Label numbers are unique in a compilation. */
-#define CODE_LABEL_NUMBER(INSN) ((INSN)->fld[3].rtint)
-
-#define LINE_NUMBER NOTE
-
-/* In a NOTE that is a line number, this is a string for the file name
- that the line is in. We use the same field to record block numbers
- temporarily in NOTE_INSN_BLOCK_BEG and NOTE_INSN_BLOCK_END notes.
- (We avoid lots of casts between ints and pointers if we use a
- different macro for the bock number.) */
-
-#define NOTE_SOURCE_FILE(INSN) ((INSN)->fld[3].rtstr)
-#define NOTE_BLOCK_NUMBER(INSN) ((INSN)->fld[3].rtint)
-
-/* In a NOTE that is a line number, this is the line number.
- Other kinds of NOTEs are identified by negative numbers here. */
-#define NOTE_LINE_NUMBER(INSN) ((INSN)->fld[4].rtint)
-
-/* Codes that appear in the NOTE_LINE_NUMBER field
- for kinds of notes that are not line numbers.
-
- Notice that we do not try to use zero here for any of
- the special note codes because sometimes the source line
- actually can be zero! This happens (for example) when we
- are generating code for the per-translation-unit constructor
- and destructor routines for some C++ translation unit.
-
- If you should change any of the following values, or if you
- should add a new value here, don't forget to change the
- note_insn_name array in rtl.c. */
-
-/* This note is used to get rid of an insn
- when it isn't safe to patch the insn out of the chain. */
-#define NOTE_INSN_DELETED -1
-#define NOTE_INSN_BLOCK_BEG -2
-#define NOTE_INSN_BLOCK_END -3
-#define NOTE_INSN_LOOP_BEG -4
-#define NOTE_INSN_LOOP_END -5
-/* This kind of note is generated at the end of the function body,
- just before the return insn or return label.
- In an optimizing compilation it is deleted by the first jump optimization,
- after enabling that optimizer to determine whether control can fall
- off the end of the function body without a return statement. */
-#define NOTE_INSN_FUNCTION_END -6
-/* This kind of note is generated just after each call to `setjmp', et al. */
-#define NOTE_INSN_SETJMP -7
-/* Generated at the place in a loop that `continue' jumps to. */
-#define NOTE_INSN_LOOP_CONT -8
-/* Generated at the start of a duplicated exit test. */
-#define NOTE_INSN_LOOP_VTOP -9
-/* This marks the point immediately after the last prologue insn. */
-#define NOTE_INSN_PROLOGUE_END -10
-/* This marks the point immediately prior to the first epilogue insn. */
-#define NOTE_INSN_EPILOGUE_BEG -11
-/* Generated in place of user-declared labels when they are deleted. */
-#define NOTE_INSN_DELETED_LABEL -12
-/* This note indicates the start of the real body of the function,
- i.e. the point just after all of the parms have been moved into
- their homes, etc. */
-#define NOTE_INSN_FUNCTION_BEG -13
-
-
-#if 0 /* These are not used, and I don't know what they were for. --rms. */
-#define NOTE_DECL_NAME(INSN) ((INSN)->fld[3].rtstr)
-#define NOTE_DECL_CODE(INSN) ((INSN)->fld[4].rtint)
-#define NOTE_DECL_RTL(INSN) ((INSN)->fld[5].rtx)
-#define NOTE_DECL_IDENTIFIER(INSN) ((INSN)->fld[6].rtint)
-#define NOTE_DECL_TYPE(INSN) ((INSN)->fld[7].rtint)
-#endif /* 0 */
-
-/* Names for NOTE insn's other than line numbers. */
-
-extern char *note_insn_name[];
-#define GET_NOTE_INSN_NAME(NOTE_CODE) (note_insn_name[-(NOTE_CODE)])
-
-/* The name of a label, in case it corresponds to an explicit label
- in the input source code. */
-#define LABEL_NAME(LABEL) ((LABEL)->fld[4].rtstr)
-
-/* In jump.c, each label contains a count of the number
- of LABEL_REFs that point at it, so unused labels can be deleted. */
-#define LABEL_NUSES(LABEL) ((LABEL)->fld[5].rtint)
-
-/* The rest is used instead of the above, in a CODE_LABEL,
- if bytecode is being output.
- We make the slightly klugy assumption that a LABEL has enough slots
- to hold these things. That happens to be true. */
-
-/* For static or external objects. */
-#define BYTECODE_LABEL(X) (XEXP ((X), 0))
-
-/* For goto labels inside bytecode functions. */
-#define BYTECODE_BC_LABEL(X) (*(struct bc_label **) &XEXP ((X), 1))
-
-/* In jump.c, each JUMP_INSN can point to a label that it can jump to,
- so that if the JUMP_INSN is deleted, the label's LABEL_NUSES can
- be decremented and possibly the label can be deleted. */
-#define JUMP_LABEL(INSN) ((INSN)->fld[7].rtx)
-
-/* Once basic blocks are found in flow.c,
- each CODE_LABEL starts a chain that goes through
- all the LABEL_REFs that jump to that label.
- The chain eventually winds up at the CODE_LABEL; it is circular. */
-#define LABEL_REFS(LABEL) ((LABEL)->fld[5].rtx)
-
-/* This is the field in the LABEL_REF through which the circular chain
- of references to a particular label is linked.
- This chain is set up in flow.c. */
-
-#define LABEL_NEXTREF(REF) ((REF)->fld[1].rtx)
-
-/* Once basic blocks are found in flow.c,
- Each LABEL_REF points to its containing instruction with this field. */
-
-#define CONTAINING_INSN(RTX) ((RTX)->fld[2].rtx)
-
-/* For a REG rtx, REGNO extracts the register number. */
-
-#define REGNO(RTX) ((RTX)->fld[0].rtint)
-
-/* For a REG rtx, REG_FUNCTION_VALUE_P is nonzero if the reg
- is the current function's return value. */
-
-#define REG_FUNCTION_VALUE_P(RTX) ((RTX)->integrated)
-
-/* 1 in a REG rtx if it corresponds to a variable declared by the user. */
-#define REG_USERVAR_P(RTX) ((RTX)->volatil)
-
-/* For a CONST_INT rtx, INTVAL extracts the integer. */
-
-#define INTVAL(RTX) ((RTX)->fld[0].rtwint)
-
-/* For a SUBREG rtx, SUBREG_REG extracts the value we want a subreg of.
- SUBREG_WORD extracts the word-number. */
-
-#define SUBREG_REG(RTX) ((RTX)->fld[0].rtx)
-#define SUBREG_WORD(RTX) ((RTX)->fld[1].rtint)
-
-/* 1 if the REG contained in SUBREG_REG is already known to be
- sign- or zero-extended from the mode of the SUBREG to the mode of
- the reg. SUBREG_PROMOTED_UNSIGNED_P gives the signedness of the
- extension.
-
- When used as a LHS, is means that this extension must be done
- when assigning to SUBREG_REG. */
-
-#define SUBREG_PROMOTED_VAR_P(RTX) ((RTX)->in_struct)
-#define SUBREG_PROMOTED_UNSIGNED_P(RTX) ((RTX)->unchanging)
-
-/* Access various components of an ASM_OPERANDS rtx. */
-
-#define ASM_OPERANDS_TEMPLATE(RTX) XSTR ((RTX), 0)
-#define ASM_OPERANDS_OUTPUT_CONSTRAINT(RTX) XSTR ((RTX), 1)
-#define ASM_OPERANDS_OUTPUT_IDX(RTX) XINT ((RTX), 2)
-#define ASM_OPERANDS_INPUT_VEC(RTX) XVEC ((RTX), 3)
-#define ASM_OPERANDS_INPUT_CONSTRAINT_VEC(RTX) XVEC ((RTX), 4)
-#define ASM_OPERANDS_INPUT(RTX, N) XVECEXP ((RTX), 3, (N))
-#define ASM_OPERANDS_INPUT_LENGTH(RTX) XVECLEN ((RTX), 3)
-#define ASM_OPERANDS_INPUT_CONSTRAINT(RTX, N) XSTR (XVECEXP ((RTX), 4, (N)), 0)
-#define ASM_OPERANDS_INPUT_MODE(RTX, N) GET_MODE (XVECEXP ((RTX), 4, (N)))
-#define ASM_OPERANDS_SOURCE_FILE(RTX) XSTR ((RTX), 5)
-#define ASM_OPERANDS_SOURCE_LINE(RTX) XINT ((RTX), 6)
-
-/* For a MEM rtx, 1 if it's a volatile reference.
- Also in an ASM_OPERANDS rtx. */
-#define MEM_VOLATILE_P(RTX) ((RTX)->volatil)
-
-/* For a MEM rtx, 1 if it refers to a structure or union component. */
-#define MEM_IN_STRUCT_P(RTX) ((RTX)->in_struct)
-
-/* For a LABEL_REF, 1 means that this reference is to a label outside the
- loop containing the reference. */
-#define LABEL_OUTSIDE_LOOP_P(RTX) ((RTX)->in_struct)
-
-/* For a LABEL_REF, 1 means it is for a nonlocal label. */
-/* Likewise in an EXPR_LIST for a REG_LABEL note. */
-#define LABEL_REF_NONLOCAL_P(RTX) ((RTX)->volatil)
-
-/* For a CODE_LABEL, 1 means always consider this label to be needed. */
-#define LABEL_PRESERVE_P(RTX) ((RTX)->in_struct)
-
-/* For a REG, 1 means the register is used only in an exit test of a loop. */
-#define REG_LOOP_TEST_P(RTX) ((RTX)->in_struct)
-
-/* During sched, for an insn, 1 means that the insn must be scheduled together
- with the preceding insn. */
-#define SCHED_GROUP_P(INSN) ((INSN)->in_struct)
-
-/* During sched, for the LOG_LINKS of an insn, these cache the adjusted
- cost of the dependence link. The cost of executing an instruction
- may vary based on how the results are used. LINK_COST_ZERO is 1 when
- the cost through the link varies and is unchanged (i.e., the link has
- zero additional cost). LINK_COST_FREE is 1 when the cost through the
- link is zero (i.e., the link makes the cost free). In other cases,
- the adjustment to the cost is recomputed each time it is needed. */
-#define LINK_COST_ZERO(X) ((X)->jump)
-#define LINK_COST_FREE(X) ((X)->call)
-
-/* For a SET rtx, SET_DEST is the place that is set
- and SET_SRC is the value it is set to. */
-#define SET_DEST(RTX) ((RTX)->fld[0].rtx)
-#define SET_SRC(RTX) ((RTX)->fld[1].rtx)
-
-/* For a TRAP_IF rtx, TRAP_CONDITION is an expression. */
-#define TRAP_CONDITION(RTX) ((RTX)->fld[0].rtx)
-
-/* 1 in a SYMBOL_REF if it addresses this function's constants pool. */
-#define CONSTANT_POOL_ADDRESS_P(RTX) ((RTX)->unchanging)
-
-/* Flag in a SYMBOL_REF for machine-specific purposes. */
-#define SYMBOL_REF_FLAG(RTX) ((RTX)->volatil)
-
-/* 1 means a SYMBOL_REF has been the library function in emit_library_call. */
-#define SYMBOL_REF_USED(RTX) ((RTX)->used)
-
-/* For an INLINE_HEADER rtx, FIRST_FUNCTION_INSN is the first insn
- of the function that is not involved in copying parameters to
- pseudo-registers. FIRST_PARM_INSN is the very first insn of
- the function, including the parameter copying.
- We keep this around in case we must splice
- this function into the assembly code at the end of the file.
- FIRST_LABELNO is the first label number used by the function (inclusive).
- LAST_LABELNO is the last label used by the function (exclusive).
- MAX_REGNUM is the largest pseudo-register used by that function.
- FUNCTION_ARGS_SIZE is the size of the argument block in the stack.
- POPS_ARGS is the number of bytes of input arguments popped by the function
- STACK_SLOT_LIST is the list of stack slots.
- FUNCTION_FLAGS are where single-bit flags are saved.
- OUTGOING_ARGS_SIZE is the size of the largest outgoing stack parameter list.
- ORIGINAL_ARG_VECTOR is a vector of the original DECL_RTX values
- for the function arguments.
- ORIGINAL_DECL_INITIAL is a pointer to the original DECL_INITIAL for the
- function.
-
- We want this to lay down like an INSN. The PREV_INSN field
- is always NULL. The NEXT_INSN field always points to the
- first function insn of the function being squirreled away. */
-
-#define FIRST_FUNCTION_INSN(RTX) ((RTX)->fld[2].rtx)
-#define FIRST_PARM_INSN(RTX) ((RTX)->fld[3].rtx)
-#define FIRST_LABELNO(RTX) ((RTX)->fld[4].rtint)
-#define LAST_LABELNO(RTX) ((RTX)->fld[5].rtint)
-#define MAX_PARMREG(RTX) ((RTX)->fld[6].rtint)
-#define MAX_REGNUM(RTX) ((RTX)->fld[7].rtint)
-#define FUNCTION_ARGS_SIZE(RTX) ((RTX)->fld[8].rtint)
-#define POPS_ARGS(RTX) ((RTX)->fld[9].rtint)
-#define STACK_SLOT_LIST(RTX) ((RTX)->fld[10].rtx)
-#define FUNCTION_FLAGS(RTX) ((RTX)->fld[11].rtint)
-#define OUTGOING_ARGS_SIZE(RTX) ((RTX)->fld[12].rtint)
-#define ORIGINAL_ARG_VECTOR(RTX) ((RTX)->fld[13].rtvec)
-#define ORIGINAL_DECL_INITIAL(RTX) ((RTX)->fld[14].rtx)
-
-/* In FUNCTION_FLAGS we save some variables computed when emitting the code
- for the function and which must be `or'ed into the current flag values when
- insns from that function are being inlined. */
-
-/* These ought to be an enum, but non-ANSI compilers don't like that. */
-#define FUNCTION_FLAGS_CALLS_ALLOCA 01
-#define FUNCTION_FLAGS_CALLS_SETJMP 02
-#define FUNCTION_FLAGS_RETURNS_STRUCT 04
-#define FUNCTION_FLAGS_RETURNS_PCC_STRUCT 010
-#define FUNCTION_FLAGS_NEEDS_CONTEXT 020
-#define FUNCTION_FLAGS_HAS_NONLOCAL_LABEL 040
-#define FUNCTION_FLAGS_RETURNS_POINTER 0100
-#define FUNCTION_FLAGS_USES_CONST_POOL 0200
-#define FUNCTION_FLAGS_CALLS_LONGJMP 0400
-#define FUNCTION_FLAGS_USES_PIC_OFFSET_TABLE 01000
-
-/* Define a macro to look for REG_INC notes,
- but save time on machines where they never exist. */
-
-/* Don't continue this line--convex cc version 4.1 would lose. */
-#if (defined (HAVE_PRE_INCREMENT) || defined (HAVE_PRE_DECREMENT) || defined (HAVE_POST_INCREMENT) || defined (HAVE_POST_DECREMENT))
-#define FIND_REG_INC_NOTE(insn, reg) (find_reg_note ((insn), REG_INC, (reg)))
-#else
-#define FIND_REG_INC_NOTE(insn, reg) 0
-#endif
-
-/* Indicate whether the machine has any sort of auto increment addressing.
- If not, we can avoid checking for REG_INC notes. */
-
-/* Don't continue this line--convex cc version 4.1 would lose. */
-#if (defined (HAVE_PRE_INCREMENT) || defined (HAVE_PRE_DECREMENT) || defined (HAVE_POST_INCREMENT) || defined (HAVE_POST_DECREMENT))
-#define AUTO_INC_DEC
-#endif
-
-/* Generally useful functions. */
-
-/* The following functions accept a wide integer argument. Rather than
- having to cast on every function call, we use a macro instead, that is
- defined here and in tree.h. */
-
-#ifndef exact_log2
-#define exact_log2(N) exact_log2_wide ((HOST_WIDE_INT) (N))
-#define floor_log2(N) floor_log2_wide ((HOST_WIDE_INT) (N))
-#endif
-
-#define plus_constant(X,C) plus_constant_wide (X, (HOST_WIDE_INT) (C))
-
-#define plus_constant_for_output(X,C) \
- plus_constant_for_output_wide (X, (HOST_WIDE_INT) (C))
-
-extern rtx plus_constant_wide PROTO((rtx, HOST_WIDE_INT));
-extern rtx plus_constant_for_output_wide PROTO((rtx, HOST_WIDE_INT));
-
-#define GEN_INT(N) gen_rtx (CONST_INT, VOIDmode, (HOST_WIDE_INT) (N))
-
-extern rtx bc_gen_rtx ();
-
-extern rtx gen_rtx PVPROTO((enum rtx_code,
- enum machine_mode, ...));
-extern rtvec gen_rtvec PVPROTO((int, ...));
-
-extern rtx read_rtx STDIO_PROTO((FILE *));
-
-#if 0
-/* At present, don't prototype xrealloc, since all of the callers don't
- cast their pointers to char *, and all of the xrealloc's don't use
- void * yet. */
-extern char *xmalloc PROTO((size_t));
-extern char *xrealloc PROTO((void *, size_t));
-#else
-extern char *xmalloc ();
-extern char *xrealloc ();
-#endif
-
-extern char *oballoc PROTO((int));
-extern char *permalloc PROTO((int));
-extern void free PROTO((void *));
-extern rtx rtx_alloc PROTO((RTX_CODE));
-extern rtvec rtvec_alloc PROTO((int));
-extern rtx find_reg_note PROTO((rtx, enum reg_note, rtx));
-extern rtx find_regno_note PROTO((rtx, enum reg_note, int));
-extern int find_reg_fusage PROTO((rtx, enum rtx_code, rtx));
-extern int find_regno_fusage PROTO((rtx, enum rtx_code, int));
-extern HOST_WIDE_INT get_integer_term PROTO((rtx));
-extern rtx get_related_value PROTO((rtx));
-extern rtx single_set PROTO((rtx));
-extern rtx find_last_value PROTO((rtx, rtx *, rtx));
-extern rtx copy_rtx PROTO((rtx));
-extern rtx copy_rtx_if_shared PROTO((rtx));
-extern rtx copy_most_rtx PROTO((rtx, rtx));
-extern rtx replace_rtx PROTO((rtx, rtx, rtx));
-extern rtvec gen_rtvec_v PROTO((int, rtx *));
-extern rtx gen_reg_rtx PROTO((enum machine_mode));
-extern rtx gen_label_rtx PROTO((void));
-extern rtx gen_inline_header_rtx PROTO((rtx, rtx, int, int, int, int, int, int, rtx, int, int, rtvec, rtx));
-extern rtx gen_lowpart_common PROTO((enum machine_mode, rtx));
-extern rtx gen_lowpart PROTO((enum machine_mode, rtx));
-extern rtx gen_lowpart_if_possible PROTO((enum machine_mode, rtx));
-extern rtx gen_highpart PROTO((enum machine_mode, rtx));
-extern rtx gen_realpart PROTO((enum machine_mode, rtx));
-extern rtx gen_imagpart PROTO((enum machine_mode, rtx));
-extern rtx operand_subword PROTO((rtx, int, int, enum machine_mode));
-extern rtx operand_subword_force PROTO((rtx, int, enum machine_mode));
-extern int subreg_lowpart_p PROTO((rtx));
-extern rtx make_safe_from PROTO((rtx, rtx));
-extern rtx memory_address PROTO((enum machine_mode, rtx));
-extern rtx get_insns PROTO((void));
-extern rtx get_last_insn PROTO((void));
-extern rtx get_last_insn_anywhere PROTO((void));
-extern void start_sequence PROTO((void));
-extern void push_to_sequence PROTO((rtx));
-extern void end_sequence PROTO((void));
-extern rtx gen_sequence PROTO((void));
-extern rtx immed_double_const PROTO((HOST_WIDE_INT, HOST_WIDE_INT, enum machine_mode));
-extern rtx force_const_mem PROTO((enum machine_mode, rtx));
-extern rtx force_reg PROTO((enum machine_mode, rtx));
-extern rtx get_pool_constant PROTO((rtx));
-extern enum machine_mode get_pool_mode PROTO((rtx));
-extern int get_pool_offset PROTO((rtx));
-extern rtx simplify_subtraction PROTO((rtx));
-extern rtx assign_stack_local PROTO((enum machine_mode, int, int));
-extern rtx assign_stack_temp PROTO((enum machine_mode, int, int));
-extern rtx protect_from_queue PROTO((rtx, int));
-extern void emit_queue PROTO((void));
-extern rtx emit_move_insn PROTO((rtx, rtx));
-extern rtx emit_insn_before PROTO((rtx, rtx));
-extern rtx emit_jump_insn_before PROTO((rtx, rtx));
-extern rtx emit_call_insn_before PROTO((rtx, rtx));
-extern rtx emit_barrier_before PROTO((rtx));
-extern rtx emit_note_before PROTO((int, rtx));
-extern rtx emit_insn_after PROTO((rtx, rtx));
-extern rtx emit_jump_insn_after PROTO((rtx, rtx));
-extern rtx emit_barrier_after PROTO((rtx));
-extern rtx emit_label_after PROTO((rtx, rtx));
-extern rtx emit_note_after PROTO((int, rtx));
-extern rtx emit_line_note_after PROTO((char *, int, rtx));
-extern rtx emit_insn PROTO((rtx));
-extern rtx emit_insns PROTO((rtx));
-extern rtx emit_insns_before PROTO((rtx, rtx));
-extern rtx emit_jump_insn PROTO((rtx));
-extern rtx emit_call_insn PROTO((rtx));
-extern rtx emit_label PROTO((rtx));
-extern rtx emit_barrier PROTO((void));
-extern rtx emit_line_note PROTO((char *, int));
-extern rtx emit_note PROTO((char *, int));
-extern rtx emit_line_note_force PROTO((char *, int));
-extern rtx make_insn_raw PROTO((rtx));
-extern rtx previous_insn PROTO((rtx));
-extern rtx next_insn PROTO((rtx));
-extern rtx prev_nonnote_insn PROTO((rtx));
-extern rtx next_nonnote_insn PROTO((rtx));
-extern rtx prev_real_insn PROTO((rtx));
-extern rtx next_real_insn PROTO((rtx));
-extern rtx prev_active_insn PROTO((rtx));
-extern rtx next_active_insn PROTO((rtx));
-extern rtx prev_label PROTO((rtx));
-extern rtx next_label PROTO((rtx));
-extern rtx next_cc0_user PROTO((rtx));
-extern rtx prev_cc0_setter PROTO((rtx));
-extern rtx reg_set_last PROTO((rtx, rtx));
-extern rtx next_nondeleted_insn PROTO((rtx));
-extern enum rtx_code reverse_condition PROTO((enum rtx_code));
-extern enum rtx_code swap_condition PROTO((enum rtx_code));
-extern enum rtx_code unsigned_condition PROTO((enum rtx_code));
-extern enum rtx_code signed_condition PROTO((enum rtx_code));
-extern rtx find_equiv_reg PROTO((rtx, rtx, enum reg_class, int, short *, int, enum machine_mode));
-extern rtx squeeze_notes PROTO((rtx, rtx));
-extern rtx delete_insn PROTO((rtx));
-extern void delete_jump PROTO((rtx));
-extern rtx get_label_before PROTO((rtx));
-extern rtx get_label_after PROTO((rtx));
-extern rtx follow_jumps PROTO((rtx));
-extern rtx adj_offsettable_operand PROTO((rtx, int));
-extern rtx try_split PROTO((rtx, rtx, int));
-extern rtx split_insns PROTO((rtx, rtx));
-extern rtx simplify_unary_operation PROTO((enum rtx_code, enum machine_mode, rtx, enum machine_mode));
-extern rtx simplify_binary_operation PROTO((enum rtx_code, enum machine_mode, rtx, rtx));
-extern rtx simplify_ternary_operation PROTO((enum rtx_code, enum machine_mode, enum machine_mode, rtx, rtx, rtx));
-extern rtx simplify_relational_operation PROTO((enum rtx_code, enum machine_mode, rtx, rtx));
-extern rtx nonlocal_label_rtx_list PROTO((void));
-extern rtx gen_move_insn PROTO((rtx, rtx));
-extern rtx gen_jump PROTO((rtx));
-extern rtx gen_beq PROTO((rtx));
-extern rtx gen_bge PROTO((rtx));
-extern rtx gen_ble PROTO((rtx));
-extern rtx eliminate_constant_term PROTO((rtx, rtx *));
-extern rtx expand_complex_abs PROTO((enum machine_mode, rtx, rtx, int));
-extern enum machine_mode choose_hard_reg_mode PROTO((int, int));
-
-/* Maximum number of parallel sets and clobbers in any insn in this fn.
- Always at least 3, since the combiner could put that many togetherm
- and we want this to remain correct for all the remaining passes. */
-
-extern int max_parallel;
-
-extern int asm_noperands PROTO((rtx));
-extern char *decode_asm_operands PROTO((rtx, rtx *, rtx **, char **, enum machine_mode *));
-
-extern enum reg_class reg_preferred_class PROTO((int));
-extern enum reg_class reg_alternate_class PROTO((int));
-
-extern rtx get_first_nonparm_insn PROTO((void));
-
-/* Standard pieces of rtx, to be substituted directly into things. */
-extern rtx pc_rtx;
-extern rtx cc0_rtx;
-extern rtx const0_rtx;
-extern rtx const1_rtx;
-extern rtx const2_rtx;
-extern rtx constm1_rtx;
-extern rtx const_true_rtx;
-
-extern rtx const_tiny_rtx[3][(int) MAX_MACHINE_MODE];
-
-/* Returns a constant 0 rtx in mode MODE. Integer modes are treated the
- same as VOIDmode. */
-
-#define CONST0_RTX(MODE) (const_tiny_rtx[0][(int) (MODE)])
-
-/* Likewise, for the constants 1 and 2. */
-
-#define CONST1_RTX(MODE) (const_tiny_rtx[1][(int) (MODE)])
-#define CONST2_RTX(MODE) (const_tiny_rtx[2][(int) (MODE)])
-
-/* All references to certain hard regs, except those created
- by allocating pseudo regs into them (when that's possible),
- go through these unique rtx objects. */
-extern rtx stack_pointer_rtx;
-extern rtx frame_pointer_rtx;
-extern rtx hard_frame_pointer_rtx;
-extern rtx arg_pointer_rtx;
-extern rtx pic_offset_table_rtx;
-extern rtx struct_value_rtx;
-extern rtx struct_value_incoming_rtx;
-extern rtx static_chain_rtx;
-extern rtx static_chain_incoming_rtx;
-
-/* If HARD_FRAME_POINTER_REGNUM is defined, then a special dummy reg
- is used to represent the frame pointer. This is because the
- hard frame pointer and the automatic variables are separated by an amount
- that cannot be determined until after register allocation. We can assume
- that in this case ELIMINABLE_REGS will be defined, one action of which
- will be to eliminate FRAME_POINTER_REGNUM into HARD_FRAME_POINTER_REGNUM. */
-#ifndef HARD_FRAME_POINTER_REGNUM
-#define HARD_FRAME_POINTER_REGNUM FRAME_POINTER_REGNUM
-#endif
-
-/* Virtual registers are used during RTL generation to refer to locations into
- the stack frame when the actual location isn't known until RTL generation
- is complete. The routine instantiate_virtual_regs replaces these with
- the proper value, which is normally {frame,arg,stack}_pointer_rtx plus
- a constant. */
-
-#define FIRST_VIRTUAL_REGISTER (FIRST_PSEUDO_REGISTER)
-
-/* This points to the first word of the incoming arguments passed on the stack,
- either by the caller or by the callee when pretending it was passed by the
- caller. */
-
-extern rtx virtual_incoming_args_rtx;
-
-#define VIRTUAL_INCOMING_ARGS_REGNUM (FIRST_VIRTUAL_REGISTER)
-
-/* If FRAME_GROWS_DOWNWARD, this points to immediately above the first
- variable on the stack. Otherwise, it points to the first variable on
- the stack. */
-
-extern rtx virtual_stack_vars_rtx;
-
-#define VIRTUAL_STACK_VARS_REGNUM ((FIRST_VIRTUAL_REGISTER) + 1)
-
-/* This points to the location of dynamically-allocated memory on the stack
- immediately after the stack pointer has been adjusted by the amount
- desired. */
-
-extern rtx virtual_stack_dynamic_rtx;
-
-#define VIRTUAL_STACK_DYNAMIC_REGNUM ((FIRST_VIRTUAL_REGISTER) + 2)
-
-/* This points to the location in the stack at which outgoing arguments should
- be written when the stack is pre-pushed (arguments pushed using push
- insns always use sp). */
-
-extern rtx virtual_outgoing_args_rtx;
-
-#define VIRTUAL_OUTGOING_ARGS_REGNUM ((FIRST_VIRTUAL_REGISTER) + 3)
-
-#define LAST_VIRTUAL_REGISTER ((FIRST_VIRTUAL_REGISTER) + 3)
-
-extern rtx find_next_ref PROTO((rtx, rtx));
-extern rtx *find_single_use PROTO((rtx, rtx, rtx *));
-
-/* It is hard to write the prototype for expand_expr, since it needs
- expr.h to be included for the enumeration. */
-
-extern rtx expand_expr ();
-
-extern rtx output_constant_def PROTO((union tree_node *));
-extern rtx immed_real_const PROTO((union tree_node *));
-extern union tree_node *make_tree PROTO((union tree_node *, rtx));
-
-/* Abort routines */
-extern void fatal_insn_not_found PROTO((rtx));
-extern void fatal_insn PROTO((char *, rtx));
-
-/* Define a default value for STORE_FLAG_VALUE. */
-
-#ifndef STORE_FLAG_VALUE
-#define STORE_FLAG_VALUE 1
-#endif
-
-/* Nonzero after end of reload pass.
- Set to 1 or 0 by toplev.c. */
-
-extern int reload_completed;
-
-/* Set to 1 while reload_as_needed is operating.
- Required by some machines to handle any generated moves differently. */
-
-extern int reload_in_progress;
-
-/* If this is nonzero, we do not bother generating VOLATILE
- around volatile memory references, and we are willing to
- output indirect addresses. If cse is to follow, we reject
- indirect addresses so a useful potential cse is generated;
- if it is used only once, instruction combination will produce
- the same indirect address eventually. */
-extern int cse_not_expected;
-
-/* Indexed by pseudo register number, gives the rtx for that pseudo.
- Allocated in parallel with regno_pointer_flag. */
-extern rtx *regno_reg_rtx;
-
-/* Translates rtx code to tree code, for those codes needed by
- REAL_ARITHMETIC. The function returns an int because the caller may not
- know what `enum tree_code' means. */
-
-extern int rtx_to_tree_code PROTO((enum rtx_code));
diff --git a/gnu/usr.bin/cc/include/stack.h b/gnu/usr.bin/cc/include/stack.h
deleted file mode 100644
index da4a54d12fd5..000000000000
--- a/gnu/usr.bin/cc/include/stack.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* stack.h - structed access to object stacks
- Copyright (C) 1988 Free Software Foundation, Inc.
- Contributed by Michael Tiemann (tiemann@cygnus.com).
-
-This program 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 program 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 program; if not, write to the Free Software
-Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* Summary: this file contains additional structures that layer
- on top of obstacks for GNU C++. */
-
-/* Stack of data placed on obstacks. */
-
-struct stack_level
-{
- /* Pointer back to previous such level. */
- struct stack_level *prev;
-
- /* Point to obstack we should return to. */
- struct obstack *obstack;
-
- /* First place we start putting data. */
- tree *first;
-
- /* Number of entries we can have from `first'.
- Right now we are dumb: if we overflow, abort. */
- int limit;
-};
-
-struct stack_level *push_stack_level PROTO((struct obstack *, char *, int));
-struct stack_level *pop_stack_level PROTO((struct stack_level *));
diff --git a/gnu/usr.bin/cc/include/tconfig.h b/gnu/usr.bin/cc/include/tconfig.h
deleted file mode 100644
index 78867243fcfc..000000000000
--- a/gnu/usr.bin/cc/include/tconfig.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Configuration for GNU C-compiler for Intel 80386.
- Copyright (C) 1988, 1993 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#ifndef i386
-#define i386
-#endif
-
-/* #defines that need visibility everywhere. */
-#define FALSE 0
-#define TRUE 1
-
-/* This describes the machine the compiler is hosted on. */
-#define HOST_BITS_PER_CHAR 8
-#define HOST_BITS_PER_SHORT 16
-#define HOST_BITS_PER_INT 32
-#define HOST_BITS_PER_LONG 32
-#define HOST_BITS_PER_LONGLONG 64
-
-/* Arguments to use with `exit'. */
-#define SUCCESS_EXIT_CODE 0
-#define FATAL_EXIT_CODE 33
-
-/* target machine dependencies.
- tm.h is a symbolic link to the actual target specific file. */
-
-#include "tm.h"
diff --git a/gnu/usr.bin/cc/include/tm.h b/gnu/usr.bin/cc/include/tm.h
deleted file mode 100644
index 14aa504879b5..000000000000
--- a/gnu/usr.bin/cc/include/tm.h
+++ /dev/null
@@ -1,251 +0,0 @@
-/* Definitions of target machine for GNU compiler for Intel 80386
- running FreeBSD.
- Copyright (C) 1988, 1992, 1994 Free Software Foundation, Inc.
- Contributed by Poul-Henning Kamp <phk@login.dkuug.dk>
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* This is tested by i386gas.h. */
-#define YES_UNDERSCORES
-
-#include "i386/gstabs.h"
-
-/* Get perform_* macros to build libgcc.a. */
-#include "i386/perform.h"
-
-#define MASK_PROFILER_EPILOGUE 010000000000
-
-#define TARGET_PROFILER_EPILOGUE (target_flags & MASK_PROFILER_EPILOGUE)
-
-#undef SUBTARGET_SWITCHES
-#define SUBTARGET_SWITCHES \
- { "profiler-epilogue", MASK_PROFILER_EPILOGUE}, \
- { "no-profiler-epilogue", -MASK_PROFILER_EPILOGUE},
-
-#undef CPP_PREDEFINES
-#define CPP_PREDEFINES "-Dunix -Di386 -D__FreeBSD__=2 -Asystem(unix) -Asystem(FreeBSD) -Acpu(i386) -Amachine(i386)"
-
-#define STARTFILE_SPEC \
- "%{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:%{static:scrt0.o%s}%{!static:crt0.o%s}}}"
-
-#define INCLUDE_DEFAULTS { \
- { "/usr/include", 0 }, \
- { "/usr/include/g++", 1 }, \
- { 0, 0} \
- }
-
-#define ASM_SPEC " %| %{fpic:-k} %{fPIC:-k}"
-
-/* Like the default, except no -lg. */
-#define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}"
-
-#define LINK_SPEC \
- "%{!nostdlib:%{!r:%{!e*:-e start}}} -dc -dp %{static:-Bstatic} %{assert*} \
- %{p:-Bstatic} %{pg:-Bstatic} %{Z}"
-
-/* This goes away when the math emulator is fixed. */
-#undef TARGET_DEFAULT
-#define TARGET_DEFAULT (MASK_NO_FANCY_MATH_387 | 0301)
-
-#undef SIZE_TYPE
-#define SIZE_TYPE "unsigned int"
-
-#undef PTRDIFF_TYPE
-#define PTRDIFF_TYPE "int"
-
-#undef WCHAR_TYPE
-#define WCHAR_TYPE "int"
-
-#define WCHAR_UNSIGNED 0
-
-#undef WCHAR_TYPE_SIZE
-#define WCHAR_TYPE_SIZE BITS_PER_WORD
-
-#define HAVE_ATEXIT
-
-/* Tell final.c that we don't need a label passed to mcount. */
-
-#define NO_PROFILE_DATA
-
-/* Redefine this to not pass an unused label in %edx. */
-
-#undef FUNCTION_PROFILER
-#define FUNCTION_PROFILER(FILE, LABELNO) \
-{ \
- if (flag_pic) \
- fprintf (FILE, "\tcall *mcount@GOT(%%ebx)\n"); \
- else \
- fprintf (FILE, "\tcall mcount\n"); \
-}
-
-#define FUNCTION_PROFILER_EPILOGUE(FILE) \
-{ \
- if (TARGET_PROFILER_EPILOGUE) \
- { \
- if (flag_pic) \
- fprintf (FILE, "\tcall *mexitcount@GOT(%%ebx)\n"); \
- else \
- fprintf (FILE, "\tcall mexitcount\n"); \
- } \
-}
-
-/* Override the default comment-starter of "/". */
-
-#undef ASM_COMMENT_START
-#define ASM_COMMENT_START "#"
-
-#undef ASM_APP_ON
-#define ASM_APP_ON "#APP\n"
-
-#undef ASM_APP_OFF
-#define ASM_APP_OFF "#NO_APP\n"
-
-/* The following macros are stolen from i386v4.h */
-/* These have to be defined to get PIC code correct */
-
-/* This is how to output an element of a case-vector that is relative.
- This is only used for PIC code. See comments by the `casesi' insn in
- i386.md for an explanation of the expression this outputs. */
-
-#undef ASM_OUTPUT_ADDR_DIFF_ELT
-#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \
- fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE)
-
-/* Indicate that jump tables go in the text section. This is
- necessary when compiling PIC code. */
-
-#define JUMP_TABLES_IN_TEXT_SECTION
-
-/* Don't default to pcc-struct-return, because gcc is the only compiler, and
- we want to retain compatibility with older gcc versions. */
-#define DEFAULT_PCC_STRUCT_RETURN 0
-
-/*
- * Some imports from svr4.h in support of shared libraries.
- * Currently, we need the DECLARE_OBJECT_SIZE stuff.
- */
-
-#define HANDLE_SYSV_PRAGMA
-
-/* 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. */
-
-#define TYPE_ASM_OP ".type"
-#define SIZE_ASM_OP ".size"
-#define WEAK_ASM_OP ".weak"
-#define SET_ASM_OP ".set"
-
-/* 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). */
-
-#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. */
-
-#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. */
-
-#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. */
-
-#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) \
- { \
- 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. */
-
-#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)
diff --git a/gnu/usr.bin/cc/include/tree.def b/gnu/usr.bin/cc/include/tree.def
deleted file mode 100644
index 71d638640eb6..000000000000
--- a/gnu/usr.bin/cc/include/tree.def
+++ /dev/null
@@ -1,695 +0,0 @@
-/* This file contains the definitions and documentation for the
- tree codes used in the GNU C compiler.
- Copyright (C) 1987, 1988, 1993 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-
-/* The third argument can be:
- "x" for an exceptional code (fits no category).
- "t" for a type object code.
- "b" for a lexical block.
- "c" for codes for constants.
- "d" for codes for declarations (also serving as variable refs).
- "r" for codes for references to storage.
- "<" for codes for comparison expressions.
- "1" for codes for unary arithmetic expressions.
- "2" for codes for binary arithmetic expressions.
- "s" for codes for expressions with inherent side effects.
- "e" for codes for other kinds of expressions. */
-
-/* For `r', `e', `<', `1', `2', `s' and `x' nodes,
- the 4th element is the number of argument slots to allocate.
- This determines the size of the tree node object. */
-
-/* Any erroneous construct is parsed into a node of this type.
- This type of node is accepted without complaint in all contexts
- by later parsing activities, to avoid multiple error messages
- for one error.
- No fields in these nodes are used except the TREE_CODE. */
-DEFTREECODE (ERROR_MARK, "error_mark", "x", 0)
-
-/* Used to represent a name (such as, in the DECL_NAME of a decl node).
- Internally it looks like a STRING_CST node.
- There is only one IDENTIFIER_NODE ever made for any particular name.
- Use `get_identifier' to get it (or create it, the first time). */
-DEFTREECODE (IDENTIFIER_NODE, "identifier_node", "x", -1)
-
-/* Used to hold information to identify an operator (or combination
- of two operators) considered as a `noun' rather than a `verb'.
- The first operand is encoded in the TREE_TYPE field. */
-DEFTREECODE (OP_IDENTIFIER, "op_identifier", "x", 2)
-
-/* Has the TREE_VALUE and TREE_PURPOSE fields. */
-/* These nodes are made into lists by chaining through the
- TREE_CHAIN field. The elements of the list live in the
- TREE_VALUE fields, while TREE_PURPOSE fields are occasionally
- used as well to get the effect of Lisp association lists. */
-DEFTREECODE (TREE_LIST, "tree_list", "x", 2)
-
-/* These nodes contain an array of tree nodes. */
-DEFTREECODE (TREE_VEC, "tree_vec", "x", 2)
-
-/* A symbol binding block. These are arranged in a tree,
- where the BLOCK_SUBBLOCKS field contains a chain of subblocks
- chained through the BLOCK_CHAIN field.
- BLOCK_SUPERCONTEXT points to the parent block.
- For a block which represents the outermost scope of a function, it
- points to the FUNCTION_DECL node.
- BLOCK_VARS points to a chain of decl nodes.
- BLOCK_TYPE_TAGS points to a chain of types which have their own names.
- BLOCK_CHAIN points to the next BLOCK at the same level.
- BLOCK_ABSTRACT_ORIGIN points to the original (abstract) tree node which
- this block is an instance of, or else is NULL to indicate that this
- block is not an instance of anything else. When non-NULL, the value
- could either point to another BLOCK node or it could point to a
- FUNCTION_DECL node (e.g. in the case of a block representing the
- outermost scope of a particular inlining of a function).
- BLOCK_ABSTRACT is non-zero if the block represents an abstract
- instance of a block (i.e. one which is nested within an abstract
- instance of a inline function. */
-DEFTREECODE (BLOCK, "block", "b", 0)
-
-/* Each data type is represented by a tree node whose code is one of
- the following: */
-/* Each node that represents a data type has a component TYPE_SIZE
- containing a tree that is an expression for the size in bits.
- The TYPE_MODE contains the machine mode for values of this type.
- The TYPE_POINTER_TO field contains a type for a pointer to this type,
- or zero if no such has been created yet.
- The TYPE_NEXT_VARIANT field is used to chain together types
- that are variants made by type modifiers such as "const" and "volatile".
- The TYPE_MAIN_VARIANT field, in any member of such a chain,
- points to the start of the chain.
- The TYPE_NONCOPIED_PARTS field is a list specifying which parts
- of an object of this type should *not* be copied by assignment.
- The TREE_PURPOSE of each element is the offset of the part
- and the TREE_VALUE is the size in bits of the part.
- The TYPE_NAME field contains info on the name used in the program
- for this type (for GDB symbol table output). It is either a
- TYPE_DECL node, for types that are typedefs, or an IDENTIFIER_NODE
- in the case of structs, unions or enums that are known with a tag,
- or zero for types that have no special name.
- The TYPE_CONTEXT for any sort of type which could have a name or
- which could have named members (e.g. tagged types in C/C++) will
- point to the node which represents the scope of the given type, or
- will be NULL_TREE if the type has "file scope". For most types, this
- will point to a BLOCK node or a FUNCTION_DECL node, but it could also
- point to a FUNCTION_TYPE node (for types whose scope is limited to the
- formal parameter list of some function type specification) or it
- could point to a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE node
- (for C++ "member" types).
- For non-tagged-types, TYPE_CONTEXT need not be set to anything in
- particular, since any type which is of some type category (e.g.
- an array type or a function type) which cannot either have a name
- itself or have named members doesn't really have a "scope" per se.
- The TREE_CHAIN field is used as a forward-references to names for
- ENUMERAL_TYPE, RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE nodes;
- see below. */
-
-DEFTREECODE (VOID_TYPE, "void_type", "t", 0) /* The void type in C */
-
-/* Integer types in all languages, including char in C.
- Also used for sub-ranges of other discrete types.
- Has components TYPE_MIN_VALUE, TYPE_MAX_VALUE (expressions, inclusive)
- and TYPE_PRECISION (number of bits used by this type).
- In the case of a subrange type in Pascal, the TREE_TYPE
- of this will point at the supertype (another INTEGER_TYPE,
- or an ENUMERAL_TYPE, CHAR_TYPE, or BOOLEAN_TYPE).
- Otherwise, the TREE_TYPE is zero. */
-DEFTREECODE (INTEGER_TYPE, "integer_type", "t", 0)
-
-/* C's float and double. Different floating types are distinguished
- by machine mode and by the TYPE_SIZE and the TYPE_PRECISION. */
-DEFTREECODE (REAL_TYPE, "real_type", "t", 0)
-
-/* Complex number types. The TREE_TYPE field is the data type
- of the real and imaginary parts. */
-DEFTREECODE (COMPLEX_TYPE, "complex_type", "t", 0)
-
-/* C enums. The type node looks just like an INTEGER_TYPE node.
- The symbols for the values of the enum type are defined by
- CONST_DECL nodes, but the type does not point to them;
- however, the TYPE_VALUES is a list in which each element's TREE_PURPOSE
- is a name and the TREE_VALUE is the value (an INTEGER_CST node). */
-/* A forward reference `enum foo' when no enum named foo is defined yet
- has zero (a null pointer) in its TYPE_SIZE. The tag name is in
- the TYPE_NAME field. If the type is later defined, the normal
- fields are filled in.
- RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE forward refs are
- treated similarly. */
-DEFTREECODE (ENUMERAL_TYPE, "enumeral_type", "t", 0)
-
-/* Pascal's boolean type (true or false are the only values);
- no special fields needed. */
-DEFTREECODE (BOOLEAN_TYPE, "boolean_type", "t", 0)
-
-/* CHAR in Pascal; not used in C.
- No special fields needed. */
-DEFTREECODE (CHAR_TYPE, "char_type", "t", 0)
-
-/* All pointer-to-x types have code POINTER_TYPE.
- The TREE_TYPE points to the node for the type pointed to. */
-DEFTREECODE (POINTER_TYPE, "pointer_type", "t", 0)
-
-/* An offset is a pointer relative to an object.
- The TREE_TYPE field is the type of the object at the offset.
- The TYPE_OFFSET_BASETYPE points to the node for the type of object
- that the offset is relative to. */
-DEFTREECODE (OFFSET_TYPE, "offset_type", "t", 0)
-
-/* A reference is like a pointer except that it is coerced
- automatically to the value it points to. Used in C++. */
-DEFTREECODE (REFERENCE_TYPE, "reference_type", "t", 0)
-
-/* METHOD_TYPE is the type of a function which takes an extra first
- argument for "self", which is not present in the declared argument list.
- The TREE_TYPE is the return type of the method. The TYPE_METHOD_BASETYPE
- is the type of "self". TYPE_ARG_TYPES is the real argument list, which
- includes the hidden argument for "self". */
-DEFTREECODE (METHOD_TYPE, "method_type", "t", 0)
-
-/* Used for Pascal; details not determined right now. */
-DEFTREECODE (FILE_TYPE, "file_type", "t", 0)
-
-/* Types of arrays. Special fields:
- TREE_TYPE Type of an array element.
- TYPE_DOMAIN Type to index by.
- Its range of values specifies the array length.
- TYPE_SEP Expression for units from one elt to the next.
- TYPE_SEP_UNIT Number of bits in a unit for previous.
- The field TYPE_POINTER_TO (TREE_TYPE (array_type)) is always nonzero
- and holds the type to coerce a value of that array type to in C.
- TYPE_STRING_FLAG indicates a string (in contrast to an array of chars)
- in languages (such as Chill) that make a distinction. */
-/* Array types in C or Pascal */
-DEFTREECODE (ARRAY_TYPE, "array_type", "t", 0)
-
-/* Types of sets for Pascal. Special fields are the same as
- in an array type. The target type is always a boolean type. */
-DEFTREECODE (SET_TYPE, "set_type", "t", 0)
-
-/* Struct in C, or record in Pascal. */
-/* Special fields:
- TYPE_FIELDS chain of FIELD_DECLs for the fields of the struct.
- A few may need to be added for Pascal. */
-/* See the comment above, before ENUMERAL_TYPE, for how
- forward references to struct tags are handled in C. */
-DEFTREECODE (RECORD_TYPE, "record_type", "t", 0)
-
-/* Union in C. Like a struct, except that the offsets of the fields
- will all be zero. */
-/* See the comment above, before ENUMERAL_TYPE, for how
- forward references to union tags are handled in C. */
-DEFTREECODE (UNION_TYPE, "union_type", "t", 0) /* C union type */
-
-/* Similar to UNION_TYPE, except that the expressions in DECL_QUALIFIER
- in each FIELD_DECL determine what the union contains. The first
- field whose DECL_QUALIFIER expression is true is deemed to occupy
- the union. */
-DEFTREECODE (QUAL_UNION_TYPE, "qual_union_type", "t", 0)
-
-/* Type of functions. Special fields:
- TREE_TYPE type of value returned.
- TYPE_ARG_TYPES list of types of arguments expected.
- this list is made of TREE_LIST nodes.
- Types of "Procedures" in languages where they are different from functions
- have code FUNCTION_TYPE also, but then TREE_TYPE is zero or void type. */
-DEFTREECODE (FUNCTION_TYPE, "function_type", "t", 0)
-
-/* This is a language-specific kind of type.
- Its meaning is defined by the language front end.
- layout_type does not know how to lay this out,
- so the front-end must do so manually. */
-DEFTREECODE (LANG_TYPE, "lang_type", "t", 0)
-
-/* Expressions */
-
-/* First, the constants. */
-
-/* Contents are in TREE_INT_CST_LOW and TREE_INT_CST_HIGH fields,
- 32 bits each, giving us a 64 bit constant capability.
- Note: constants of type char in Pascal are INTEGER_CST,
- and so are pointer constants such as nil in Pascal or NULL in C.
- `(int *) 1' in C also results in an INTEGER_CST. */
-DEFTREECODE (INTEGER_CST, "integer_cst", "c", 2)
-
-/* Contents are in TREE_REAL_CST field. Also there is TREE_CST_RTL. */
-DEFTREECODE (REAL_CST, "real_cst", "c", 3)
-
-/* Contents are in TREE_REALPART and TREE_IMAGPART fields,
- whose contents are other constant nodes.
- Also there is TREE_CST_RTL. */
-DEFTREECODE (COMPLEX_CST, "complex_cst", "c", 3)
-
-/* Contents are TREE_STRING_LENGTH and TREE_STRING_POINTER fields.
- Also there is TREE_CST_RTL. */
-DEFTREECODE (STRING_CST, "string_cst", "c", 3)
-
-/* Declarations. All references to names are represented as ..._DECL nodes.
- The decls in one binding context are chained through the TREE_CHAIN field.
- Each DECL has a DECL_NAME field which contains an IDENTIFIER_NODE.
- (Some decls, most often labels, may have zero as the DECL_NAME).
- DECL_CONTEXT points to the node representing the context in which
- this declaration has its scope. For FIELD_DECLs, this is the
- RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE node that the field
- is a member of. For VAR_DECL, PARM_DECL, FUNCTION_DECL, LABEL_DECL,
- and CONST_DECL nodes, this points to the FUNCTION_DECL for the
- containing function, or else yields NULL_TREE if the given decl
- has "file scope".
- DECL_ABSTRACT_ORIGIN, if non-NULL, points to the original (abstract)
- ..._DECL node of which this decl is an (inlined or template expanded)
- instance.
- The TREE_TYPE field holds the data type of the object, when relevant.
- LABEL_DECLs have no data type. For TYPE_DECL, the TREE_TYPE field
- contents are the type whose name is being declared.
- The DECL_ALIGN, DECL_SIZE,
- and DECL_MODE fields exist in decl nodes just as in type nodes.
- They are unused in LABEL_DECL, TYPE_DECL and CONST_DECL nodes.
-
- DECL_OFFSET holds an integer number of bits offset for the location.
- DECL_VOFFSET holds an expression for a variable offset; it is
- to be multiplied by DECL_VOFFSET_UNIT (an integer).
- These fields are relevant only in FIELD_DECLs and PARM_DECLs.
-
- DECL_INITIAL holds the value to initialize a variable to,
- or the value of a constant. For a function, it holds the body
- (a node of type BLOCK representing the function's binding contour
- and whose body contains the function's statements.) For a LABEL_DECL
- in C, it is a flag, nonzero if the label's definition has been seen.
-
- PARM_DECLs use a special field:
- DECL_ARG_TYPE is the type in which the argument is actually
- passed, which may be different from its type within the function.
-
- FUNCTION_DECLs use four special fields:
- DECL_ARGUMENTS holds a chain of PARM_DECL nodes for the arguments.
- DECL_RESULT holds a RESULT_DECL node for the value of a function,
- or it is 0 for a function that returns no value.
- (C functions returning void have zero here.)
- DECL_RESULT_TYPE holds the type in which the result is actually
- returned. This is usually the same as the type of DECL_RESULT,
- but (1) it may be a wider integer type and
- (2) it remains valid, for the sake of inlining, even after the
- function's compilation is done.
- DECL_FUNCTION_CODE is a code number that is nonzero for
- built-in functions. Its value is an enum built_in_function
- that says which built-in function it is.
-
- DECL_SOURCE_FILE holds a filename string and DECL_SOURCE_LINE
- holds a line number. In some cases these can be the location of
- a reference, if no definition has been seen.
-
- DECL_ABSTRACT is non-zero if the decl represents an abstract instance
- of a decl (i.e. one which is nested within an abstract instance of a
- inline function. */
-
-DEFTREECODE (FUNCTION_DECL, "function_decl", "d", 0)
-DEFTREECODE (LABEL_DECL, "label_decl", "d", 0)
-DEFTREECODE (CONST_DECL, "const_decl", "d", 0)
-DEFTREECODE (TYPE_DECL, "type_decl", "d", 0)
-DEFTREECODE (VAR_DECL, "var_decl", "d", 0)
-DEFTREECODE (PARM_DECL, "parm_decl", "d", 0)
-DEFTREECODE (RESULT_DECL, "result_decl", "d", 0)
-DEFTREECODE (FIELD_DECL, "field_decl", "d", 0)
-
-/* References to storage. */
-
-/* Value is structure or union component.
- Operand 0 is the structure or union (an expression);
- operand 1 is the field (a node of type FIELD_DECL). */
-DEFTREECODE (COMPONENT_REF, "component_ref", "r", 2)
-
-/* Reference to a group of bits within an object. Similar to COMPONENT_REF
- except the position is given explicitly rather than via a FIELD_DECL.
- Operand 0 is the structure or union expression;
- operand 1 is a tree giving the number of bits being referenced;
- operand 2 is a tree giving the position of the first referenced bit.
- The field can be either a signed or unsigned field;
- TREE_UNSIGNED says which. */
-DEFTREECODE (BIT_FIELD_REF, "bit_field_ref", "r", 3)
-
-/* C unary `*' or Pascal `^'. One operand, an expression for a pointer. */
-DEFTREECODE (INDIRECT_REF, "indirect_ref", "r", 1)
-
-/* Reference to the contents of an offset
- (a value whose type is an OFFSET_TYPE).
- Operand 0 is the object within which the offset is taken.
- Operand 1 is the offset. */
-DEFTREECODE (OFFSET_REF, "offset_ref", "r", 2)
-
-/* Pascal `^` on a file. One operand, an expression for the file. */
-DEFTREECODE (BUFFER_REF, "buffer_ref", "r", 1)
-
-/* Array indexing in languages other than C.
- Operand 0 is the array; operand 1 is a list of indices
- stored as a chain of TREE_LIST nodes. */
-DEFTREECODE (ARRAY_REF, "array_ref", "r", 2)
-
-/* Constructor: return an aggregate value made from specified components.
- In C, this is used only for structure and array initializers.
- The first "operand" is really a pointer to the RTL,
- for constant constructors only.
- The second operand is a list of component values
- made out of a chain of TREE_LIST nodes. */
-DEFTREECODE (CONSTRUCTOR, "constructor", "e", 2)
-
-/* The expression types are mostly straightforward,
- with the fourth argument of DEFTREECODE saying
- how many operands there are.
- Unless otherwise specified, the operands are expressions. */
-
-/* Contains two expressions to compute, one followed by the other.
- the first value is ignored. The second one's value is used. */
-DEFTREECODE (COMPOUND_EXPR, "compound_expr", "e", 2)
-
-/* Assignment expression. Operand 0 is the what to set; 1, the new value. */
-DEFTREECODE (MODIFY_EXPR, "modify_expr", "e", 2)
-
-/* Initialization expression. Operand 0 is the variable to initialize;
- Operand 1 is the initializer. */
-DEFTREECODE (INIT_EXPR, "init_expr", "e", 2)
-
-/* For TARGET_EXPR, operand 0 is the target of an initialization,
- operand 1 is the initializer for the target,
- and operand 2 is the cleanup for this node, if any. */
-DEFTREECODE (TARGET_EXPR, "target_expr", "e", 3)
-
-/* Conditional expression ( ... ? ... : ... in C).
- Operand 0 is the condition.
- Operand 1 is the then-value.
- Operand 2 is the else-value. */
-DEFTREECODE (COND_EXPR, "cond_expr", "e", 3)
-
-/* Declare local variables, including making RTL and allocating space.
- Operand 0 is a chain of VAR_DECL nodes for the variables.
- Operand 1 is the body, the expression to be computed using
- the variables. The value of operand 1 becomes that of the BIND_EXPR.
- Operand 2 is the BLOCK that corresponds to these bindings
- for debugging purposes. If this BIND_EXPR is actually expanded,
- that sets the TREE_USED flag in the BLOCK.
-
- The BIND_EXPR is not responsible for informing parsers
- about these variables. If the body is coming from the input file,
- then the code that creates the BIND_EXPR is also responsible for
- informing the parser of the variables.
-
- If the BIND_EXPR is ever expanded, its TREE_USED flag is set.
- This tells the code for debugging symbol tables not to ignore the BIND_EXPR.
- If the BIND_EXPR should be output for debugging but will not be expanded,
- set the TREE_USED flag by hand.
-
- In order for the BIND_EXPR to be known at all, the code that creates it
- must also install it as a subblock in the tree of BLOCK
- nodes for the function. */
-DEFTREECODE (BIND_EXPR, "bind_expr", "e", 3)
-
-/* Function call. Operand 0 is the function.
- Operand 1 is the argument list, a list of expressions
- made out of a chain of TREE_LIST nodes.
- There is no operand 2. That slot is used for the
- CALL_EXPR_RTL macro (see preexpand_calls). */
-DEFTREECODE (CALL_EXPR, "call_expr", "e", 3)
-
-/* Call a method. Operand 0 is the method, whose type is a METHOD_TYPE.
- Operand 1 is the expression for "self".
- Operand 2 is the list of explicit arguments. */
-DEFTREECODE (METHOD_CALL_EXPR, "method_call_expr", "e", 4)
-
-/* Specify a value to compute along with its corresponding cleanup.
- Operand 0 argument is an expression whose value needs a cleanup.
- Operand 1 is an RTL_EXPR which will eventually represent that value.
- Operand 2 is the cleanup expression for the object.
- The RTL_EXPR is used in this expression, which is how the expression
- manages to act on the proper value.
- The cleanup is executed by the first enclosing CLEANUP_POINT_EXPR, if
- it exists, otherwise it is the responsibility of the caller to manually
- call expand_cleanups_to, as needed. */
-DEFTREECODE (WITH_CLEANUP_EXPR, "with_cleanup_expr", "e", 3)
-
-/* Specify a cleanup point.
- Operand 0 is the expression that has cleanups that we want ensure are
- cleaned up. */
-DEFTREECODE (CLEANUP_POINT_EXPR, "cleanup_point_expr", "e", 1)
-
-/* The following two codes are used in languages that have types where
- the position and/or sizes of fields vary from object to object of the
- same type, i.e., where some other field in the object contains a value
- that is used in the computation of another field's offset or size.
-
- For example, a record type with a discriminant in Ada is such a type.
- This mechanism is also used to create "fat pointers" for unconstrained
- array types in Ada; the fat pointer is a structure one of whose fields is
- a pointer to the actual array type and the other field is a pointer to a
- template, which is a structure containing the bounds of the array. The
- bounds in the type pointed to by the first field in the fat pointer refer
- to the values in the template.
-
- These "self-references" are doing using a PLACEHOLDER_EXPR. This is a
- node that will later be replaced with the object being referenced. Its type
- is that of the object and selects which object to use from a chain of
- references (see below).
-
- When we wish to evaluate a size or offset, we check it is contains a
- placeholder. If it does, we construct a WITH_RECORD_EXPR that contains
- both the expression we wish to evaluate and an expression within which the
- object may be found. The latter expression is the object itself in
- the simple case of an Ada record with discriminant, but it can be the
- array in the case of an unconstrained array.
-
- In the latter case, we need the fat pointer, because the bounds of the
- array can only be accessed from it. However, we rely here on the fact that
- the expression for the array contains the dereference of the fat pointer
- that obtained the array pointer.
-
- Accordingly, when looking for the object to substitute in place of
- a PLACEHOLDER_EXPR, we look down the first operand of the expression
- passed as the second operand to WITH_RECORD_EXPR until we find something
- of the desired type or reach a constant. */
-
-/* Denotes a record to later be supplied with a WITH_RECORD_EXPR when
- evaluating this expression. The type of this expression is used to
- find the record to replace it. */
-DEFTREECODE (PLACEHOLDER_EXPR, "placeholder_expr", "x", 0)
-
-/* Provide an expression that references a record to be used in place
- of a PLACEHOLDER_EXPR. The record to be used is the record within
- operand 1 that has the same type as the PLACEHOLDER_EXPR in
- operand 0. */
-DEFTREECODE (WITH_RECORD_EXPR, "with_record_expr", "e", 2)
-
-/* Simple arithmetic. Operands must have the same machine mode
- and the value shares that mode. */
-DEFTREECODE (PLUS_EXPR, "plus_expr", "2", 2)
-DEFTREECODE (MINUS_EXPR, "minus_expr", "2", 2)
-DEFTREECODE (MULT_EXPR, "mult_expr", "2", 2)
-
-/* Division for integer result that rounds the quotient toward zero. */
-/* Operands must have the same machine mode.
- In principle they may be real, but that is not currently supported.
- The result is always fixed point, and it has the same type as the
- operands if they are fixed point. */
-DEFTREECODE (TRUNC_DIV_EXPR, "trunc_div_expr", "2", 2)
-
-/* Division for integer result that rounds the quotient toward infinity. */
-DEFTREECODE (CEIL_DIV_EXPR, "ceil_div_expr", "2", 2)
-
-/* Division for integer result that rounds toward minus infinity. */
-DEFTREECODE (FLOOR_DIV_EXPR, "floor_div_expr", "2", 2)
-
-/* Division for integer result that rounds toward nearest integer. */
-DEFTREECODE (ROUND_DIV_EXPR, "round_div_expr", "2", 2)
-
-/* Four kinds of remainder that go with the four kinds of division. */
-DEFTREECODE (TRUNC_MOD_EXPR, "trunc_mod_expr", "2", 2)
-DEFTREECODE (CEIL_MOD_EXPR, "ceil_mod_expr", "2", 2)
-DEFTREECODE (FLOOR_MOD_EXPR, "floor_mod_expr", "2", 2)
-DEFTREECODE (ROUND_MOD_EXPR, "round_mod_expr", "2", 2)
-
-/* Division for real result. The two operands must have the same type.
- In principle they could be integers, but currently only real
- operands are supported. The result must have the same type
- as the operands. */
-DEFTREECODE (RDIV_EXPR, "rdiv_expr", "2", 2)
-
-/* Division which is not supposed to need rounding.
- Used for pointer subtraction in C. */
-DEFTREECODE (EXACT_DIV_EXPR, "exact_div_expr", "2", 2)
-
-/* Conversion of real to fixed point: four ways to round,
- like the four ways to divide.
- CONVERT_EXPR can also be used to convert a real to an integer,
- and that is what is used in languages that do not have ways of
- specifying which of these is wanted. Maybe these are not needed. */
-DEFTREECODE (FIX_TRUNC_EXPR, "fix_trunc_expr", "1", 1)
-DEFTREECODE (FIX_CEIL_EXPR, "fix_ceil_expr", "1", 1)
-DEFTREECODE (FIX_FLOOR_EXPR, "fix_floor_expr", "1", 1)
-DEFTREECODE (FIX_ROUND_EXPR, "fix_round_expr", "1", 1)
-
-/* Conversion of an integer to a real. */
-DEFTREECODE (FLOAT_EXPR, "float_expr", "1", 1)
-
-/* Exponentiation. Operands may have any types;
- constraints on value type are not known yet. */
-DEFTREECODE (EXPON_EXPR, "expon_expr", "2", 2)
-
-/* Unary negation. Value has same type as operand. */
-DEFTREECODE (NEGATE_EXPR, "negate_expr", "1", 1)
-
-DEFTREECODE (MIN_EXPR, "min_expr", "2", 2)
-DEFTREECODE (MAX_EXPR, "max_expr", "2", 2)
-DEFTREECODE (ABS_EXPR, "abs_expr", "1", 1)
-DEFTREECODE (FFS_EXPR, "ffs_expr", "1", 1)
-
-/* Shift operations for shift and rotate.
- Shift is supposed to mean logical shift if done on an
- unsigned type, arithmetic shift on a signed type.
- The second operand is the number of bits to
- shift by, and must always have mode SImode.
- The result has the same mode as the first operand. */
-DEFTREECODE (LSHIFT_EXPR, "alshift_expr", "2", 2)
-DEFTREECODE (RSHIFT_EXPR, "arshift_expr", "2", 2)
-DEFTREECODE (LROTATE_EXPR, "lrotate_expr", "2", 2)
-DEFTREECODE (RROTATE_EXPR, "rrotate_expr", "2", 2)
-
-/* Bitwise operations. Operands have same mode as result. */
-DEFTREECODE (BIT_IOR_EXPR, "bit_ior_expr", "2", 2)
-DEFTREECODE (BIT_XOR_EXPR, "bit_xor_expr", "2", 2)
-DEFTREECODE (BIT_AND_EXPR, "bit_and_expr", "2", 2)
-DEFTREECODE (BIT_ANDTC_EXPR, "bit_andtc_expr", "2", 2)
-DEFTREECODE (BIT_NOT_EXPR, "bit_not_expr", "1", 1)
-
-/* Combination of boolean values or of integers considered only
- as zero or nonzero. ANDIF and ORIF allow the second operand
- not to be computed if the value of the expression is determined
- from the first operand. AND, OR, and XOR always compute the second
- operand whether its value is needed or not (for side effects). */
-DEFTREECODE (TRUTH_ANDIF_EXPR, "truth_andif_expr", "e", 2)
-DEFTREECODE (TRUTH_ORIF_EXPR, "truth_orif_expr", "e", 2)
-DEFTREECODE (TRUTH_AND_EXPR, "truth_and_expr", "e", 2)
-DEFTREECODE (TRUTH_OR_EXPR, "truth_or_expr", "e", 2)
-DEFTREECODE (TRUTH_XOR_EXPR, "truth_xor_expr", "e", 2)
-DEFTREECODE (TRUTH_NOT_EXPR, "truth_not_expr", "e", 1)
-
-/* Relational operators.
- `EQ_EXPR' and `NE_EXPR' are allowed for any types.
- The others are allowed only for integer (or pointer or enumeral)
- or real types.
- In all cases the operands will have the same type,
- and the value is always the type used by the language for booleans. */
-DEFTREECODE (LT_EXPR, "lt_expr", "<", 2)
-DEFTREECODE (LE_EXPR, "le_expr", "<", 2)
-DEFTREECODE (GT_EXPR, "gt_expr", "<", 2)
-DEFTREECODE (GE_EXPR, "ge_expr", "<", 2)
-DEFTREECODE (EQ_EXPR, "eq_expr", "<", 2)
-DEFTREECODE (NE_EXPR, "ne_expr", "<", 2)
-
-/* Operations for Pascal sets. Not used now. */
-DEFTREECODE (IN_EXPR, "in_expr", "2", 2)
-DEFTREECODE (SET_LE_EXPR, "set_le_expr", "<", 2)
-DEFTREECODE (CARD_EXPR, "card_expr", "1", 1)
-DEFTREECODE (RANGE_EXPR, "range_expr", "2", 2)
-
-/* Represents a conversion of type of a value.
- All conversions, including implicit ones, must be
- represented by CONVERT_EXPR nodes. */
-DEFTREECODE (CONVERT_EXPR, "convert_expr", "1", 1)
-
-/* Represents a conversion expected to require no code to be generated. */
-DEFTREECODE (NOP_EXPR, "nop_expr", "1", 1)
-
-/* Value is same as argument, but guaranteed not an lvalue. */
-DEFTREECODE (NON_LVALUE_EXPR, "non_lvalue_expr", "1", 1)
-
-/* Represents something we computed once and will use multiple times.
- First operand is that expression. Second is the function decl
- in which the SAVE_EXPR was created. The third operand is the RTL,
- nonzero only after the expression has been computed. */
-DEFTREECODE (SAVE_EXPR, "save_expr", "e", 3)
-
-/* Represents something whose RTL has already been expanded
- as a sequence which should be emitted when this expression is expanded.
- The first operand is the RTL to emit. It is the first of a chain of insns.
- The second is the RTL expression for the result. */
-DEFTREECODE (RTL_EXPR, "rtl_expr", "e", 2)
-
-/* & in C. Value is the address at which the operand's value resides.
- Operand may have any mode. Result mode is Pmode. */
-DEFTREECODE (ADDR_EXPR, "addr_expr", "e", 1)
-
-/* Non-lvalue reference or pointer to an object. */
-DEFTREECODE (REFERENCE_EXPR, "reference_expr", "e", 1)
-
-/* Operand is a function constant; result is a function variable value
- of typeEPmode. Used only for languages that need static chains. */
-DEFTREECODE (ENTRY_VALUE_EXPR, "entry_value_expr", "e", 1)
-
-/* Given two real or integer operands of the same type,
- returns a complex value of the corresponding complex type. */
-DEFTREECODE (COMPLEX_EXPR, "complex_expr", "2", 2)
-
-/* Complex conjugate of operand. Used only on complex types.
- The value has the same type as the operand. */
-DEFTREECODE (CONJ_EXPR, "conj_expr", "1", 1)
-
-/* Used only on an operand of complex type, these return
- a value of the corresponding component type. */
-DEFTREECODE (REALPART_EXPR, "realpart_expr", "1", 1)
-DEFTREECODE (IMAGPART_EXPR, "imagpart_expr", "1", 1)
-
-/* Nodes for ++ and -- in C.
- The second arg is how much to increment or decrement by.
- For a pointer, it would be the size of the object pointed to. */
-DEFTREECODE (PREDECREMENT_EXPR, "predecrement_expr", "e", 2)
-DEFTREECODE (PREINCREMENT_EXPR, "preincrement_expr", "e", 2)
-DEFTREECODE (POSTDECREMENT_EXPR, "postdecrement_expr", "e", 2)
-DEFTREECODE (POSTINCREMENT_EXPR, "postincrement_expr", "e", 2)
-
-/* These types of expressions have no useful value,
- and always have side effects. */
-
-/* A label definition, encapsulated as a statement.
- Operand 0 is the LABEL_DECL node for the label that appears here.
- The type should be void and the value should be ignored. */
-DEFTREECODE (LABEL_EXPR, "label_expr", "s", 1)
-
-/* GOTO. Operand 0 is a LABEL_DECL node.
- The type should be void and the value should be ignored. */
-DEFTREECODE (GOTO_EXPR, "goto_expr", "s", 1)
-
-/* RETURN. Evaluates operand 0, then returns from the current function.
- Presumably that operand is an assignment that stores into the
- RESULT_DECL that hold the value to be returned.
- The operand may be null.
- The type should be void and the value should be ignored. */
-DEFTREECODE (RETURN_EXPR, "return_expr", "s", 1)
-
-/* Exit the inner most loop conditionally. Operand 0 is the condition.
- The type should be void and the value should be ignored. */
-DEFTREECODE (EXIT_EXPR, "exit_expr", "s", 1)
-
-/* A loop. Operand 0 is the body of the loop.
- It must contain an EXIT_EXPR or is an infinite loop.
- The type should be void and the value should be ignored. */
-DEFTREECODE (LOOP_EXPR, "loop_expr", "s", 1)
-
-/*
-Local variables:
-mode:c
-version-control: t
-End:
-*/
diff --git a/gnu/usr.bin/cc/include/tree.h b/gnu/usr.bin/cc/include/tree.h
deleted file mode 100644
index 0955ad14bba2..000000000000
--- a/gnu/usr.bin/cc/include/tree.h
+++ /dev/null
@@ -1,1658 +0,0 @@
-/* Front-end tree definitions for GNU compiler.
- Copyright (C) 1989, 1993, 1994 Free Software Foundation, Inc.
-
-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, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#include "machmode.h"
-
-#ifndef RTX_CODE
-struct rtx_def;
-#endif
-
-/* Codes of tree nodes */
-
-#define DEFTREECODE(SYM, STRING, TYPE, NARGS) SYM,
-
-enum tree_code {
-#include "tree.def"
-
- LAST_AND_UNUSED_TREE_CODE /* A convenient way to get a value for
- NUM_TREE_CODE. */
-};
-
-#undef DEFTREECODE
-
-/* Number of tree codes. */
-#define NUM_TREE_CODES ((int)LAST_AND_UNUSED_TREE_CODE)
-
-/* Indexed by enum tree_code, contains a character which is
- `<' for a comparison expression, `1', for a unary arithmetic
- expression, `2' for a binary arithmetic expression, `e' for
- other types of expressions, `r' for a reference, `c' for a
- constant, `d' for a decl, `t' for a type, `s' for a statement,
- and `x' for anything else (TREE_LIST, IDENTIFIER, etc). */
-
-extern char **tree_code_type;
-#define TREE_CODE_CLASS(CODE) (*tree_code_type[(int) (CODE)])
-
-/* Number of argument-words in each kind of tree-node. */
-
-extern int *tree_code_length;
-
-/* Names of tree components. */
-
-extern char **tree_code_name;
-
-/* Codes that identify the various built in functions
- so that expand_call can identify them quickly. */
-
-enum built_in_function
-{
- NOT_BUILT_IN,
- BUILT_IN_ALLOCA,
- BUILT_IN_ABS,
- BUILT_IN_FABS,
- BUILT_IN_LABS,
- BUILT_IN_FFS,
- BUILT_IN_DIV,
- BUILT_IN_LDIV,
- BUILT_IN_FFLOOR,
- BUILT_IN_FCEIL,
- BUILT_IN_FMOD,
- BUILT_IN_FREM,
- BUILT_IN_MEMCPY,
- BUILT_IN_MEMCMP,
- BUILT_IN_MEMSET,
- BUILT_IN_STRCPY,
- BUILT_IN_STRCMP,
- BUILT_IN_STRLEN,
- BUILT_IN_FSQRT,
- BUILT_IN_SIN,
- BUILT_IN_COS,
- BUILT_IN_GETEXP,
- BUILT_IN_GETMAN,
- BUILT_IN_SAVEREGS,
- BUILT_IN_CLASSIFY_TYPE,
- BUILT_IN_NEXT_ARG,
- BUILT_IN_ARGS_INFO,
- BUILT_IN_CONSTANT_P,
- BUILT_IN_FRAME_ADDRESS,
- BUILT_IN_RETURN_ADDRESS,
- BUILT_IN_CALLER_RETURN_ADDRESS,
- BUILT_IN_APPLY_ARGS,
- BUILT_IN_APPLY,
- BUILT_IN_RETURN,
-
- /* C++ extensions */
- BUILT_IN_NEW,
- BUILT_IN_VEC_NEW,
- BUILT_IN_DELETE,
- BUILT_IN_VEC_DELETE,
-
- /* Upper bound on non-language-specific builtins. */
- END_BUILTINS
-};
-
-/* The definition of tree nodes fills the next several pages. */
-
-/* A tree node can represent a data type, a variable, an expression
- or a statement. Each node has a TREE_CODE which says what kind of
- thing it represents. Some common codes are:
- INTEGER_TYPE -- represents a type of integers.
- ARRAY_TYPE -- represents a type of pointer.
- VAR_DECL -- represents a declared variable.
- INTEGER_CST -- represents a constant integer value.
- PLUS_EXPR -- represents a sum (an expression).
-
- As for the contents of a tree node: there are some fields
- that all nodes share. Each TREE_CODE has various special-purpose
- fields as well. The fields of a node are never accessed directly,
- always through accessor macros. */
-
-/* This type is used everywhere to refer to a tree node. */
-
-typedef union tree_node *tree;
-
-/* Every kind of tree node starts with this structure,
- so all nodes have these fields.
-
- See the accessor macros, defined below, for documentation of the fields. */
-
-struct tree_common
-{
- union tree_node *chain;
- union tree_node *type;
-#ifdef ONLY_INT_FIELDS
- unsigned int code : 8;
-#else
- enum tree_code code : 8;
-#endif
-
- unsigned side_effects_flag : 1;
- unsigned constant_flag : 1;
- unsigned permanent_flag : 1;
- unsigned addressable_flag : 1;
- unsigned volatile_flag : 1;
- unsigned readonly_flag : 1;
- unsigned unsigned_flag : 1;
- unsigned asm_written_flag: 1;
-
- unsigned used_flag : 1;
- unsigned raises_flag : 1;
- unsigned static_flag : 1;
- unsigned public_flag : 1;
- unsigned private_flag : 1;
- unsigned protected_flag : 1;
-
- unsigned lang_flag_0 : 1;
- unsigned lang_flag_1 : 1;
- unsigned lang_flag_2 : 1;
- unsigned lang_flag_3 : 1;
- unsigned lang_flag_4 : 1;
- unsigned lang_flag_5 : 1;
- unsigned lang_flag_6 : 1;
- /* There is room for two more flags. */
-};
-
-/* Define accessors for the fields that all tree nodes have
- (though some fields are not used for all kinds of nodes). */
-
-/* The tree-code says what kind of node it is.
- Codes are defined in tree.def. */
-#define TREE_CODE(NODE) ((enum tree_code) (NODE)->common.code)
-#define TREE_SET_CODE(NODE, VALUE) ((NODE)->common.code = (int) (VALUE))
-
-/* In all nodes that are expressions, this is the data type of the expression.
- In POINTER_TYPE nodes, this is the type that the pointer points to.
- In ARRAY_TYPE nodes, this is the type of the elements. */
-#define TREE_TYPE(NODE) ((NODE)->common.type)
-
-/* Nodes are chained together for many purposes.
- Types are chained together to record them for being output to the debugger
- (see the function `chain_type').
- Decls in the same scope are chained together to record the contents
- of the scope.
- Statement nodes for successive statements used to be chained together.
- Often lists of things are represented by TREE_LIST nodes that
- are chained together. */
-
-#define TREE_CHAIN(NODE) ((NODE)->common.chain)
-
-/* Given an expression as a tree, strip any NON_LVALUE_EXPRs and NOP_EXPRs
- that don't change the machine mode. */
-
-#define STRIP_NOPS(EXP) \
- while ((TREE_CODE (EXP) == NOP_EXPR \
- || TREE_CODE (EXP) == CONVERT_EXPR \
- || TREE_CODE (EXP) == NON_LVALUE_EXPR) \
- && (TYPE_MODE (TREE_TYPE (EXP)) \
- == TYPE_MODE (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \
- (EXP) = TREE_OPERAND (EXP, 0);
-
-/* Like STRIP_NOPS, but don't alter the TREE_TYPE either. */
-
-#define STRIP_TYPE_NOPS(EXP) \
- while ((TREE_CODE (EXP) == NOP_EXPR \
- || TREE_CODE (EXP) == CONVERT_EXPR \
- || TREE_CODE (EXP) == NON_LVALUE_EXPR) \
- && (TREE_TYPE (EXP) \
- == TREE_TYPE (TREE_OPERAND (EXP, 0)))) \
- (EXP) = TREE_OPERAND (EXP, 0);
-
-/* Nonzero if TYPE represents an integral type. Note that we do not
- include COMPLEX types here. */
-
-#define INTEGRAL_TYPE_P(TYPE) \
- (TREE_CODE (TYPE) == INTEGER_TYPE || TREE_CODE (TYPE) == ENUMERAL_TYPE \
- || TREE_CODE (TYPE) == BOOLEAN_TYPE || TREE_CODE (TYPE) == CHAR_TYPE)
-
-/* Nonzero if TYPE represents a floating-point type, including complex
- floating-point types. */
-
-#define FLOAT_TYPE_P(TYPE) \
- (TREE_CODE (TYPE) == REAL_TYPE \
- || (TREE_CODE (TYPE) == COMPLEX_TYPE \
- && TREE_CODE (TREE_TYPE (TYPE)) == REAL_TYPE))
-
-/* Nonzero if TYPE represents an aggregate (multi-component) type. */
-
-#define AGGREGATE_TYPE_P(TYPE) \
- (TREE_CODE (TYPE) == ARRAY_TYPE || TREE_CODE (TYPE) == RECORD_TYPE \
- || TREE_CODE (TYPE) == UNION_TYPE || TREE_CODE (TYPE) == QUAL_UNION_TYPE \
- || TREE_CODE (TYPE) == SET_TYPE)
-
-/* Define many boolean fields that all tree nodes have. */
-
-/* In VAR_DECL nodes, nonzero means address of this is needed.
- So it cannot be in a register.
- In a FUNCTION_DECL, nonzero means its address is needed.
- So it must be compiled even if it is an inline function.
- In CONSTRUCTOR nodes, it means object constructed must be in memory.
- In LABEL_DECL nodes, it means a goto for this label has been seen
- from a place outside all binding contours that restore stack levels.
- In ..._TYPE nodes, it means that objects of this type must
- be fully addressable. This means that pieces of this
- object cannot go into register parameters, for example.
- In IDENTIFIER_NODEs, this means that some extern decl for this name
- had its address taken. That matters for inline functions. */
-#define TREE_ADDRESSABLE(NODE) ((NODE)->common.addressable_flag)
-
-/* In a VAR_DECL, nonzero means allocate static storage.
- In a FUNCTION_DECL, nonzero if function has been defined.
- In a CONSTRUCTOR, nonzero means allocate static storage. */
-#define TREE_STATIC(NODE) ((NODE)->common.static_flag)
-
-/* In a CONVERT_EXPR, NOP_EXPR or COMPOUND_EXPR, this means the node was
- made implicitly and should not lead to an "unused value" warning. */
-#define TREE_NO_UNUSED_WARNING(NODE) ((NODE)->common.static_flag)
-
-/* Nonzero for a TREE_LIST or TREE_VEC node means that the derivation
- chain is via a `virtual' declaration. */
-#define TREE_VIA_VIRTUAL(NODE) ((NODE)->common.static_flag)
-
-/* In an INTEGER_CST, REAL_CST, or COMPLEX_CST, this means there was an
- overflow in folding. This is distinct from TREE_OVERFLOW because ANSI C
- requires a diagnostic when overflows occur in constant expressions. */
-#define TREE_CONSTANT_OVERFLOW(NODE) ((NODE)->common.static_flag)
-
-/* In an IDENTIFIER_NODE, this means that assemble_name was called with
- this string as an argument. */
-#define TREE_SYMBOL_REFERENCED(NODE) ((NODE)->common.static_flag)
-
-/* In an INTEGER_CST, REAL_CST, of COMPLEX_CST, this means there was an
- overflow in folding, and no warning has been issued for this subexpression.
- TREE_OVERFLOW implies TREE_CONSTANT_OVERFLOW, but not vice versa. */
-#define TREE_OVERFLOW(NODE) ((NODE)->common.public_flag)
-
-/* In a VAR_DECL or FUNCTION_DECL,
- nonzero means name is to be accessible from outside this module.
- In an identifier node, nonzero means an external declaration
- accessible from outside this module was previously seen
- for this name in an inner scope. */
-#define TREE_PUBLIC(NODE) ((NODE)->common.public_flag)
-
-/* Nonzero for TREE_LIST or TREE_VEC node means that the path to the
- base class is via a `public' declaration, which preserves public
- fields from the base class as public. */
-#define TREE_VIA_PUBLIC(NODE) ((NODE)->common.public_flag)
-
-/* Ditto, for `private' declarations. */
-#define TREE_VIA_PRIVATE(NODE) ((NODE)->common.private_flag)
-
-/* Nonzero for TREE_LIST node means that the path to the
- base class is via a `protected' declaration, which preserves
- protected fields from the base class as protected.
- OVERLOADED. */
-#define TREE_VIA_PROTECTED(NODE) ((NODE)->common.protected_flag)
-
-/* In any expression, nonzero means it has side effects or reevaluation
- of the whole expression could produce a different value.
- This is set if any subexpression is a function call, a side effect
- or a reference to a volatile variable.
- In a ..._DECL, this is set only if the declaration said `volatile'. */
-#define TREE_SIDE_EFFECTS(NODE) ((NODE)->common.side_effects_flag)
-
-/* Nonzero means this expression is volatile in the C sense:
- its address should be of type `volatile WHATEVER *'.
- In other words, the declared item is volatile qualified.
- This is used in _DECL nodes and _REF nodes.
-
- In a ..._TYPE node, means this type is volatile-qualified.
- But use TYPE_VOLATILE instead of this macro when the node is a type,
- because eventually we may make that a different bit.
-
- If this bit is set in an expression, so is TREE_SIDE_EFFECTS. */
-#define TREE_THIS_VOLATILE(NODE) ((NODE)->common.volatile_flag)
-
-/* In a VAR_DECL, PARM_DECL or FIELD_DECL, or any kind of ..._REF node,
- nonzero means it may not be the lhs of an assignment.
- In a ..._TYPE node, means this type is const-qualified
- (but the macro TYPE_READONLY should be used instead of this macro
- when the node is a type). */
-#define TREE_READONLY(NODE) ((NODE)->common.readonly_flag)
-
-/* Value of expression is constant.
- Always appears in all ..._CST nodes.
- May also appear in an arithmetic expression, an ADDR_EXPR or a CONSTRUCTOR
- if the value is constant. */
-#define TREE_CONSTANT(NODE) ((NODE)->common.constant_flag)
-
-/* Nonzero means permanent node;
- node will continue to exist for the entire compiler run.
- Otherwise it will be recycled at the end of the function. */
-#define TREE_PERMANENT(NODE) ((NODE)->common.permanent_flag)
-
-/* In INTEGER_TYPE or ENUMERAL_TYPE nodes, means an unsigned type.
- In FIELD_DECL nodes, means an unsigned bit field.
- The same bit is used in functions as DECL_BUILT_IN_NONANSI. */
-#define TREE_UNSIGNED(NODE) ((NODE)->common.unsigned_flag)
-
-/* Nonzero in a VAR_DECL means assembler code has been written.
- Nonzero in a FUNCTION_DECL means that the function has been compiled.
- This is interesting in an inline function, since it might not need
- to be compiled separately.
- Nonzero in a RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE or ENUMERAL_TYPE
- if the sdb debugging info for the type has been written.
- In a BLOCK node, nonzero if reorder_blocks has already seen this block. */
-#define TREE_ASM_WRITTEN(NODE) ((NODE)->common.asm_written_flag)
-
-/* Nonzero in a _DECL if the name is used in its scope.
- Nonzero in an expr node means inhibit warning if value is unused.
- In IDENTIFIER_NODEs, this means that some extern decl for this name
- was used. */
-#define TREE_USED(NODE) ((NODE)->common.used_flag)
-
-/* Nonzero for a tree node whose evaluation could result
- in the raising of an exception. Not implemented yet. */
-#define TREE_RAISES(NODE) ((NODE)->common.raises_flag)
-
-/* Used in classes in C++. */
-#define TREE_PRIVATE(NODE) ((NODE)->common.private_flag)
-/* Used in classes in C++.
- In a BLOCK node, this is BLOCK_HANDLER_BLOCK. */
-#define TREE_PROTECTED(NODE) ((NODE)->common.protected_flag)
-
-/* These flags are available for each language front end to use internally. */
-#define TREE_LANG_FLAG_0(NODE) ((NODE)->common.lang_flag_0)
-#define TREE_LANG_FLAG_1(NODE) ((NODE)->common.lang_flag_1)
-#define TREE_LANG_FLAG_2(NODE) ((NODE)->common.lang_flag_2)
-#define TREE_LANG_FLAG_3(NODE) ((NODE)->common.lang_flag_3)
-#define TREE_LANG_FLAG_4(NODE) ((NODE)->common.lang_flag_4)
-#define TREE_LANG_FLAG_5(NODE) ((NODE)->common.lang_flag_5)
-#define TREE_LANG_FLAG_6(NODE) ((NODE)->common.lang_flag_6)
-
-/* Define additional fields and accessors for nodes representing constants. */
-
-/* In an INTEGER_CST node. These two together make a 2-word integer.
- If the data type is signed, the value is sign-extended to 2 words
- even though not all of them may really be in use.
- In an unsigned constant shorter than 2 words, the extra bits are 0. */
-#define TREE_INT_CST_LOW(NODE) ((NODE)->int_cst.int_cst_low)
-#define TREE_INT_CST_HIGH(NODE) ((NODE)->int_cst.int_cst_high)
-
-#define INT_CST_LT(A, B) \
-(TREE_INT_CST_HIGH (A) < TREE_INT_CST_HIGH (B) \
- || (TREE_INT_CST_HIGH (A) == TREE_INT_CST_HIGH (B) \
- && ((unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (A) \
- < (unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (B))))
-
-#define INT_CST_LT_UNSIGNED(A, B) \
-(((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (A) \
- < (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (B)) \
- || (((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (A) \
- == (unsigned HOST_WIDE_INT ) TREE_INT_CST_HIGH (B)) \
- && (((unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (A) \
- < (unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (B)))))
-
-struct tree_int_cst
-{
- char common[sizeof (struct tree_common)];
- HOST_WIDE_INT int_cst_low;
- HOST_WIDE_INT int_cst_high;
-};
-
-/* In REAL_CST, STRING_CST, COMPLEX_CST nodes, and CONSTRUCTOR nodes,
- and generally in all kinds of constants that could
- be given labels (rather than being immediate). */
-
-#define TREE_CST_RTL(NODE) ((NODE)->real_cst.rtl)
-
-/* In a REAL_CST node. */
-/* We can represent a real value as either a `double' or a string.
- Strings don't allow for any optimization, but they do allow
- for cross-compilation. */
-
-#define TREE_REAL_CST(NODE) ((NODE)->real_cst.real_cst)
-
-#include "real.h"
-
-struct tree_real_cst
-{
- char common[sizeof (struct tree_common)];
- struct rtx_def *rtl; /* acts as link to register transfer language
- (rtl) info */
- REAL_VALUE_TYPE real_cst;
-};
-
-/* In a STRING_CST */
-#define TREE_STRING_LENGTH(NODE) ((NODE)->string.length)
-#define TREE_STRING_POINTER(NODE) ((NODE)->string.pointer)
-
-struct tree_string
-{
- char common[sizeof (struct tree_common)];
- struct rtx_def *rtl; /* acts as link to register transfer language
- (rtl) info */
- int length;
- char *pointer;
-};
-
-/* In a COMPLEX_CST node. */
-#define TREE_REALPART(NODE) ((NODE)->complex.real)
-#define TREE_IMAGPART(NODE) ((NODE)->complex.imag)
-
-struct tree_complex
-{
- char common[sizeof (struct tree_common)];
- struct rtx_def *rtl; /* acts as link to register transfer language
- (rtl) info */
- union tree_node *real;
- union tree_node *imag;
-};
-
-/* Define fields and accessors for some special-purpose tree nodes. */
-
-#define IDENTIFIER_LENGTH(NODE) ((NODE)->identifier.length)
-#define IDENTIFIER_POINTER(NODE) ((NODE)->identifier.pointer)
-
-struct tree_identifier
-{
- char common[sizeof (struct tree_common)];
- int length;
- char *pointer;
-};
-
-/* In a TREE_LIST node. */
-#define TREE_PURPOSE(NODE) ((NODE)->list.purpose)
-#define TREE_VALUE(NODE) ((NODE)->list.value)
-
-struct tree_list
-{
- char common[sizeof (struct tree_common)];
- union tree_node *purpose;
- union tree_node *value;
-};
-
-/* In a TREE_VEC node. */
-#define TREE_VEC_LENGTH(NODE) ((NODE)->vec.length)
-#define TREE_VEC_ELT(NODE,I) ((NODE)->vec.a[I])
-#define TREE_VEC_END(NODE) (&((NODE)->vec.a[(NODE)->vec.length]))
-
-struct tree_vec
-{
- char common[sizeof (struct tree_common)];
- int length;
- union tree_node *a[1];
-};
-
-/* Define fields and accessors for some nodes that represent expressions. */
-
-/* In a SAVE_EXPR node. */
-#define SAVE_EXPR_CONTEXT(NODE) TREE_OPERAND(NODE, 1)
-#define SAVE_EXPR_RTL(NODE) (*(struct rtx_def **) &(NODE)->exp.operands[2])
-
-/* In a RTL_EXPR node. */
-#define RTL_EXPR_SEQUENCE(NODE) (*(struct rtx_def **) &(NODE)->exp.operands[0])
-#define RTL_EXPR_RTL(NODE) (*(struct rtx_def **) &(NODE)->exp.operands[1])
-
-/* In a CALL_EXPR node. */
-#define CALL_EXPR_RTL(NODE) (*(struct rtx_def **) &(NODE)->exp.operands[2])
-
-/* In a CONSTRUCTOR node. */
-#define CONSTRUCTOR_ELTS(NODE) TREE_OPERAND (NODE, 1)
-
-/* In ordinary expression nodes. */
-#define TREE_OPERAND(NODE, I) ((NODE)->exp.operands[I])
-#define TREE_COMPLEXITY(NODE) ((NODE)->exp.complexity)
-
-struct tree_exp
-{
- char common[sizeof (struct tree_common)];
- int complexity;
- union tree_node *operands[1];
-};
-
-/* In a BLOCK node. */
-#define BLOCK_VARS(NODE) ((NODE)->block.vars)
-#define BLOCK_TYPE_TAGS(NODE) ((NODE)->block.type_tags)
-#define BLOCK_SUBBLOCKS(NODE) ((NODE)->block.subblocks)
-#define BLOCK_SUPERCONTEXT(NODE) ((NODE)->block.supercontext)
-/* Note: when changing this, make sure to find the places
- that use chainon or nreverse. */
-#define BLOCK_CHAIN(NODE) TREE_CHAIN (NODE)
-#define BLOCK_ABSTRACT_ORIGIN(NODE) ((NODE)->block.abstract_origin)
-#define BLOCK_ABSTRACT(NODE) ((NODE)->block.abstract_flag)
-#define BLOCK_END_NOTE(NODE) ((NODE)->block.end_note)
-
-/* Nonzero means that this block is prepared to handle exceptions
- listed in the BLOCK_VARS slot. */
-#define BLOCK_HANDLER_BLOCK(NODE) ((NODE)->block.handler_block_flag)
-
-struct tree_block
-{
- char common[sizeof (struct tree_common)];
-
- unsigned handler_block_flag : 1;
- unsigned abstract_flag : 1;
-
- union tree_node *vars;
- union tree_node *type_tags;
- union tree_node *subblocks;
- union tree_node *supercontext;
- union tree_node *abstract_origin;
- struct rtx_def *end_note;
-};
-
-/* Define fields and accessors for nodes representing data types. */
-
-/* See tree.def for documentation of the use of these fields.
- Look at the documentation of the various ..._TYPE tree codes. */
-
-#define TYPE_UID(NODE) ((NODE)->type.uid)
-#define TYPE_SIZE(NODE) ((NODE)->type.size)
-#define TYPE_MODE(NODE) ((NODE)->type.mode)
-#define TYPE_VALUES(NODE) ((NODE)->type.values)
-#define TYPE_DOMAIN(NODE) ((NODE)->type.values)
-#define TYPE_FIELDS(NODE) ((NODE)->type.values)
-#define TYPE_METHODS(NODE) ((NODE)->type.maxval)
-#define TYPE_VFIELD(NODE) ((NODE)->type.minval)
-#define TYPE_ARG_TYPES(NODE) ((NODE)->type.values)
-#define TYPE_METHOD_BASETYPE(NODE) ((NODE)->type.maxval)
-#define TYPE_OFFSET_BASETYPE(NODE) ((NODE)->type.maxval)
-#define TYPE_POINTER_TO(NODE) ((NODE)->type.pointer_to)
-#define TYPE_REFERENCE_TO(NODE) ((NODE)->type.reference_to)
-#define TYPE_MIN_VALUE(NODE) ((NODE)->type.minval)
-#define TYPE_MAX_VALUE(NODE) ((NODE)->type.maxval)
-#define TYPE_PRECISION(NODE) ((NODE)->type.precision)
-#define TYPE_PARSE_INFO(NODE) ((NODE)->type.parse_info)
-#define TYPE_SYMTAB_ADDRESS(NODE) ((NODE)->type.symtab.address)
-#define TYPE_SYMTAB_POINTER(NODE) ((NODE)->type.symtab.pointer)
-#define TYPE_NAME(NODE) ((NODE)->type.name)
-#define TYPE_NEXT_VARIANT(NODE) ((NODE)->type.next_variant)
-#define TYPE_MAIN_VARIANT(NODE) ((NODE)->type.main_variant)
-#define TYPE_BINFO(NODE) ((NODE)->type.binfo)
-#define TYPE_NONCOPIED_PARTS(NODE) ((NODE)->type.noncopied_parts)
-#define TYPE_CONTEXT(NODE) ((NODE)->type.context)
-#define TYPE_OBSTACK(NODE) ((NODE)->type.obstack)
-#define TYPE_LANG_SPECIFIC(NODE) ((NODE)->type.lang_specific)
-
-/* A TREE_LIST of IDENTIFIER nodes of the attributes that apply
- to this type. */
-#define TYPE_ATTRIBUTES(NODE) ((NODE)->type.attributes)
-
-/* The alignment necessary for objects of this type.
- The value is an int, measured in bits. */
-#define TYPE_ALIGN(NODE) ((NODE)->type.align)
-
-#define TYPE_STUB_DECL(NODE) (TREE_CHAIN (NODE))
-
-/* In a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, it means the type
- has BLKmode only because it lacks the alignment requirement for
- its size. */
-#define TYPE_NO_FORCE_BLK(NODE) ((NODE)->type.no_force_blk_flag)
-
-/* Nonzero in a type considered volatile as a whole. */
-#define TYPE_VOLATILE(NODE) ((NODE)->common.volatile_flag)
-
-/* Means this type is const-qualified. */
-#define TYPE_READONLY(NODE) ((NODE)->common.readonly_flag)
-
-/* These flags are available for each language front end to use internally. */
-#define TYPE_LANG_FLAG_0(NODE) ((NODE)->type.lang_flag_0)
-#define TYPE_LANG_FLAG_1(NODE) ((NODE)->type.lang_flag_1)
-#define TYPE_LANG_FLAG_2(NODE) ((NODE)->type.lang_flag_2)
-#define TYPE_LANG_FLAG_3(NODE) ((NODE)->type.lang_flag_3)
-#define TYPE_LANG_FLAG_4(NODE) ((NODE)->type.lang_flag_4)
-#define TYPE_LANG_FLAG_5(NODE) ((NODE)->type.lang_flag_5)
-#define TYPE_LANG_FLAG_6(NODE) ((NODE)->type.lang_flag_6)
-
-/* If set in an ARRAY_TYPE, indicates a string type (for languages
- that distinguish string from array of char).
- If set in a SET_TYPE, indicates a bitstring type. */
-#define TYPE_STRING_FLAG(NODE) ((NODE)->type.string_flag)
-
-/* Indicates that objects of this type must be initialized by calling a
- function when they are created. */
-#define TYPE_NEEDS_CONSTRUCTING(NODE) ((NODE)->type.needs_constructing_flag)
-
-/* Indicates that objects of this type (a UNION_TYPE), should be passed
- the same way that the first union alternative would be passed. */
-#define TYPE_TRANSPARENT_UNION(NODE) ((NODE)->type.transparent_union_flag)
-
-struct tree_type
-{
- char common[sizeof (struct tree_common)];
- union tree_node *values;
- union tree_node *size;
- union tree_node *attributes;
- unsigned uid;
-
- unsigned char precision;
-#ifdef ONLY_INT_FIELDS
- int mode : 8;
-#else
- enum machine_mode mode : 8;
-#endif
-
- unsigned string_flag : 1;
- unsigned no_force_blk_flag : 1;
- unsigned needs_constructing_flag : 1;
- unsigned transparent_union_flag : 1;
- unsigned lang_flag_0 : 1;
- unsigned lang_flag_1 : 1;
- unsigned lang_flag_2 : 1;
- unsigned lang_flag_3 : 1;
- unsigned lang_flag_4 : 1;
- unsigned lang_flag_5 : 1;
- unsigned lang_flag_6 : 1;
- /* room for 5 more bits */
-
- unsigned int align;
- union tree_node *pointer_to;
- union tree_node *reference_to;
- int parse_info;
- union {int address; char *pointer; } symtab;
- union tree_node *name;
- union tree_node *minval;
- union tree_node *maxval;
- union tree_node *next_variant;
- union tree_node *main_variant;
- union tree_node *binfo;
- union tree_node *noncopied_parts;
- union tree_node *context;
- struct obstack *obstack;
- /* Points to a structure whose details depend on the language in use. */
- struct lang_type *lang_specific;
-};
-
-/* Define accessor macros for information about type inheritance
- and basetypes.
-
- A "basetype" means a particular usage of a data type for inheritance
- in another type. Each such basetype usage has its own "binfo"
- object to describe it. The binfo object is a TREE_VEC node.
-
- Inheritance is represented by the binfo nodes allocated for a
- given type. For example, given types C and D, such that D is
- inherited by C, 3 binfo nodes will be allocated: one for describing
- the binfo properties of C, similarly one for D, and one for
- describing the binfo properties of D as a base type for C.
- Thus, given a pointer to class C, one can get a pointer to the binfo
- of D acting as a basetype for C by looking at C's binfo's basetypes. */
-
-/* The actual data type node being inherited in this basetype. */
-#define BINFO_TYPE(NODE) TREE_TYPE (NODE)
-
-/* The offset where this basetype appears in its containing type.
- BINFO_OFFSET slot holds the offset (in bytes)
- from the base of the complete object to the base of the part of the
- object that is allocated on behalf of this `type'.
- This is always 0 except when there is multiple inheritance. */
-
-#define BINFO_OFFSET(NODE) TREE_VEC_ELT ((NODE), 1)
-#define TYPE_BINFO_OFFSET(NODE) BINFO_OFFSET (TYPE_BINFO (NODE))
-#define BINFO_OFFSET_ZEROP(NODE) (BINFO_OFFSET (NODE) == integer_zero_node)
-
-/* The virtual function table belonging to this basetype. Virtual
- function tables provide a mechanism for run-time method dispatching.
- The entries of a virtual function table are language-dependent. */
-
-#define BINFO_VTABLE(NODE) TREE_VEC_ELT ((NODE), 2)
-#define TYPE_BINFO_VTABLE(NODE) BINFO_VTABLE (TYPE_BINFO (NODE))
-
-/* The virtual functions in the virtual function table. This is
- a TREE_LIST that is used as an initial approximation for building
- a virtual function table for this basetype. */
-#define BINFO_VIRTUALS(NODE) TREE_VEC_ELT ((NODE), 3)
-#define TYPE_BINFO_VIRTUALS(NODE) BINFO_VIRTUALS (TYPE_BINFO (NODE))
-
-/* A vector of additional binfos for the types inherited by this basetype.
-
- If this basetype describes type D as inherited in C,
- and if the basetypes of D are E anf F,
- then this vector contains binfos for inheritance of E and F by C.
-
- ??? This could probably be done by just allocating the
- base types at the end of this TREE_VEC (instead of using
- another TREE_VEC). This would simplify the calculation
- of how many basetypes a given type had. */
-#define BINFO_BASETYPES(NODE) TREE_VEC_ELT ((NODE), 4)
-#define TYPE_BINFO_BASETYPES(NODE) TREE_VEC_ELT (TYPE_BINFO (NODE), 4)
-
-/* For a BINFO record describing an inheritance, this yields a pointer
- to the artificial FIELD_DECL node which contains the "virtual base
- class pointer" for the given inheritance. */
-
-#define BINFO_VPTR_FIELD(NODE) TREE_VEC_ELT ((NODE), 5)
-
-/* Accessor macro to get to the Nth basetype of this basetype. */
-#define BINFO_BASETYPE(NODE,N) TREE_VEC_ELT (BINFO_BASETYPES (NODE), (N))
-#define TYPE_BINFO_BASETYPE(NODE,N) BINFO_TYPE (TREE_VEC_ELT (BINFO_BASETYPES (TYPE_BINFO (NODE)), (N)))
-
-/* Slot used to build a chain that represents a use of inheritance.
- For example, if X is derived from Y, and Y is derived from Z,
- then this field can be used to link the binfo node for X to
- the binfo node for X's Y to represent the use of inheritance
- from X to Y. Similarly, this slot of the binfo node for X's Y
- can point to the Z from which Y is inherited (in X's inheritance
- hierarchy). In this fashion, one can represent and traverse specific
- uses of inheritance using the binfo nodes themselves (instead of
- consing new space pointing to binfo nodes).
- It is up to the language-dependent front-ends to maintain
- this information as necessary. */
-#define BINFO_INHERITANCE_CHAIN(NODE) TREE_VEC_ELT ((NODE), 0)
-
-/* Define fields and accessors for nodes representing declared names. */
-
-/* This is the name of the object as written by the user.
- It is an IDENTIFIER_NODE. */
-#define DECL_NAME(NODE) ((NODE)->decl.name)
-/* This is the name of the object as the assembler will see it
- (but before any translations made by ASM_OUTPUT_LABELREF).
- Often this is the same as DECL_NAME.
- It is an IDENTIFIER_NODE. */
-#define DECL_ASSEMBLER_NAME(NODE) ((NODE)->decl.assembler_name)
-/* Records the section name in a section attribute. Used to pass
- the name from decl_attributes to make_function_rtl and make_decl_rtl. */
-#define DECL_SECTION_NAME(NODE) ((NODE)->decl.section_name)
-/* For FIELD_DECLs, this is the
- RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE node that the field is
- a member of. For VAR_DECL, PARM_DECL, FUNCTION_DECL, LABEL_DECL,
- and CONST_DECL nodes, this points to the FUNCTION_DECL for the
- containing function, or else yields NULL_TREE if the given decl has "file scope". */
-#define DECL_CONTEXT(NODE) ((NODE)->decl.context)
-#define DECL_FIELD_CONTEXT(NODE) ((NODE)->decl.context)
-/* In a FIELD_DECL, this is the field position, counting in bits,
- of the bit closest to the beginning of the structure. */
-#define DECL_FIELD_BITPOS(NODE) ((NODE)->decl.arguments)
-/* In a FIELD_DECL, this indicates whether the field was a bit-field and
- if so, the type that was originally specified for it.
- TREE_TYPE may have been modified (in finish_struct). */
-#define DECL_BIT_FIELD_TYPE(NODE) ((NODE)->decl.result)
-/* In FUNCTION_DECL, a chain of ..._DECL nodes. */
-/* VAR_DECL and PARM_DECL reserve the arguments slot
- for language-specific uses. */
-#define DECL_ARGUMENTS(NODE) ((NODE)->decl.arguments)
-/* In FUNCTION_DECL, holds the decl for the return value. */
-#define DECL_RESULT(NODE) ((NODE)->decl.result)
-/* In PARM_DECL, holds the type as written (perhaps a function or array). */
-#define DECL_ARG_TYPE_AS_WRITTEN(NODE) ((NODE)->decl.result)
-/* For a FUNCTION_DECL, holds the tree of BINDINGs.
- For a VAR_DECL, holds the initial value.
- For a PARM_DECL, not used--default
- values for parameters are encoded in the type of the function,
- not in the PARM_DECL slot. */
-#define DECL_INITIAL(NODE) ((NODE)->decl.initial)
-/* For a PARM_DECL, records the data type used to pass the argument,
- which may be different from the type seen in the program. */
-#define DECL_ARG_TYPE(NODE) ((NODE)->decl.initial) /* In PARM_DECL. */
-/* For a FIELD_DECL in a QUAL_UNION_TYPE, records the expression, which
- if nonzero, indicates that the field occupies the type. */
-#define DECL_QUALIFIER(NODE) ((NODE)->decl.initial)
-/* These two fields describe where in the source code the declaration was. */
-#define DECL_SOURCE_FILE(NODE) ((NODE)->decl.filename)
-#define DECL_SOURCE_LINE(NODE) ((NODE)->decl.linenum)
-/* Holds the size of the datum, as a tree expression.
- Need not be constant. */
-#define DECL_SIZE(NODE) ((NODE)->decl.size)
-/* Holds the alignment required for the datum. */
-#define DECL_ALIGN(NODE) ((NODE)->decl.frame_size.u)
-/* Holds the machine mode corresponding to the declaration of a variable or
- field. Always equal to TYPE_MODE (TREE_TYPE (decl)) except for a
- FIELD_DECL. */
-#define DECL_MODE(NODE) ((NODE)->decl.mode)
-/* Holds the RTL expression for the value of a variable or function. If
- PROMOTED_MODE is defined, the mode of this expression may not be same
- as DECL_MODE. In that case, DECL_MODE contains the mode corresponding
- to the variable's data type, while the mode
- of DECL_RTL is the mode actually used to contain the data. */
-#define DECL_RTL(NODE) ((NODE)->decl.rtl)
-/* For PARM_DECL, holds an RTL for the stack slot or register
- where the data was actually passed. */
-#define DECL_INCOMING_RTL(NODE) ((NODE)->decl.saved_insns.r)
-/* For FUNCTION_DECL, if it is inline, holds the saved insn chain. */
-#define DECL_SAVED_INSNS(NODE) ((NODE)->decl.saved_insns.r)
-/* For FUNCTION_DECL, if it is inline,
- holds the size of the stack frame, as an integer. */
-#define DECL_FRAME_SIZE(NODE) ((NODE)->decl.frame_size.i)
-/* For FUNCTION_DECL, if it is built-in,
- this identifies which built-in operation it is. */
-#define DECL_FUNCTION_CODE(NODE) ((NODE)->decl.frame_size.f)
-#define DECL_SET_FUNCTION_CODE(NODE,VAL) ((NODE)->decl.frame_size.f = (VAL))
-/* For a FIELD_DECL, holds the size of the member as an integer. */
-#define DECL_FIELD_SIZE(NODE) ((NODE)->decl.saved_insns.i)
-
-/* The DECL_VINDEX is used for FUNCTION_DECLS in two different ways.
- Before the struct containing the FUNCTION_DECL is laid out,
- DECL_VINDEX may point to a FUNCTION_DECL in a base class which
- is the FUNCTION_DECL which this FUNCTION_DECL will replace as a virtual
- function. When the class is laid out, this pointer is changed
- to an INTEGER_CST node which is suitable for use as an index
- into the virtual function table. */
-#define DECL_VINDEX(NODE) ((NODE)->decl.vindex)
-/* For FIELD_DECLS, DECL_FCONTEXT is the *first* baseclass in
- which this FIELD_DECL is defined. This information is needed when
- writing debugging information about vfield and vbase decls for C++. */
-#define DECL_FCONTEXT(NODE) ((NODE)->decl.vindex)
-
-/* Every ..._DECL node gets a unique number. */
-#define DECL_UID(NODE) ((NODE)->decl.uid)
-
-/* For any sort of a ..._DECL node, this points to the original (abstract)
- decl node which this decl is an instance of, or else it is NULL indicating
- that this decl is not an instance of some other decl. */
-#define DECL_ABSTRACT_ORIGIN(NODE) ((NODE)->decl.abstract_origin)
-
-/* Nonzero for any sort of ..._DECL node means this decl node represents
- an inline instance of some original (abstract) decl from an inline function;
- suppress any warnings about shadowing some other variable. */
-#define DECL_FROM_INLINE(NODE) (DECL_ABSTRACT_ORIGIN (NODE) != (tree) 0)
-
-/* Nonzero if a _DECL means that the name of this decl should be ignored
- for symbolic debug purposes. */
-#define DECL_IGNORED_P(NODE) ((NODE)->decl.ignored_flag)
-
-/* Nonzero for a given ..._DECL node means that this node represents an
- "abstract instance" of the given declaration (e.g. in the original
- declaration of an inline function). When generating symbolic debugging
- information, we musn't try to generate any address information for nodes
- marked as "abstract instances" because we don't actually generate
- any code or allocate any data space for such instances. */
-#define DECL_ABSTRACT(NODE) ((NODE)->decl.abstract_flag)
-
-/* Nonzero if a _DECL means that no warnings should be generated just
- because this decl is unused. */
-#define DECL_IN_SYSTEM_HEADER(NODE) ((NODE)->decl.in_system_header_flag)
-
-/* Nonzero for a given ..._DECL node means that this node should be
- put in .common, if possible. If a DECL_INITIAL is given, and it
- is not error_mark_node, then the decl cannot be put in .common. */
-#define DECL_COMMON(NODE) ((NODE)->decl.common_flag)
-
-/* Language-specific decl information. */
-#define DECL_LANG_SPECIFIC(NODE) ((NODE)->decl.lang_specific)
-
-/* In a VAR_DECL or FUNCTION_DECL,
- nonzero means external reference:
- do not allocate storage, and refer to a definition elsewhere. */
-#define DECL_EXTERNAL(NODE) ((NODE)->decl.external_flag)
-
-/* In a TYPE_DECL
- nonzero means the detail info about this type is not dumped into stabs.
- Instead it will generate cross reference ('x') of names.
- This uses the same flag as DECL_EXTERNAL. */
-#define TYPE_DECL_SUPPRESS_DEBUG(NODE) ((NODE)->decl.external_flag)
-
-
-/* In VAR_DECL and PARM_DECL nodes, nonzero means declared `register'.
- In LABEL_DECL nodes, nonzero means that an error message about
- jumping into such a binding contour has been printed for this label. */
-#define DECL_REGISTER(NODE) ((NODE)->decl.regdecl_flag)
-/* In a FIELD_DECL, indicates this field should be bit-packed. */
-#define DECL_PACKED(NODE) ((NODE)->decl.regdecl_flag)
-
-/* Nonzero in a ..._DECL means this variable is ref'd from a nested function.
- For VAR_DECL nodes, PARM_DECL nodes, and FUNCTION_DECL nodes.
-
- For LABEL_DECL nodes, nonzero if nonlocal gotos to the label are permitted.
-
- Also set in some languages for variables, etc., outside the normal
- lexical scope, such as class instance variables. */
-#define DECL_NONLOCAL(NODE) ((NODE)->decl.nonlocal_flag)
-
-/* Nonzero in a FUNCTION_DECL means this function can be substituted
- where it is called. */
-#define DECL_INLINE(NODE) ((NODE)->decl.inline_flag)
-
-/* Nonzero in a FUNCTION_DECL means this is a built-in function
- that is not specified by ansi C and that users are supposed to be allowed
- to redefine for any purpose whatever. */
-#define DECL_BUILT_IN_NONANSI(NODE) ((NODE)->common.unsigned_flag)
-
-/* Nonzero in a FIELD_DECL means it is a bit field, and must be accessed
- specially. */
-#define DECL_BIT_FIELD(NODE) ((NODE)->decl.bit_field_flag)
-/* In a LABEL_DECL, nonzero means label was defined inside a binding
- contour that restored a stack level and which is now exited. */
-#define DECL_TOO_LATE(NODE) ((NODE)->decl.bit_field_flag)
-/* In a FUNCTION_DECL, nonzero means a built in function. */
-#define DECL_BUILT_IN(NODE) ((NODE)->decl.bit_field_flag)
-/* In a VAR_DECL that's static,
- nonzero if the space is in the text section. */
-#define DECL_IN_TEXT_SECTION(NODE) ((NODE)->decl.bit_field_flag)
-
-/* Used in VAR_DECLs to indicate that the variable is a vtable.
- It is also used in FIELD_DECLs for vtable pointers. */
-#define DECL_VIRTUAL_P(NODE) ((NODE)->decl.virtual_flag)
-
-/* Used to indicate that the linkage status of this DECL is not yet known,
- so it should not be output now. */
-#define DECL_DEFER_OUTPUT(NODE) ((NODE)->decl.defer_output)
-
-/* Used in PARM_DECLs whose type are unions to indicate that the
- argument should be passed in the same way that the first union
- alternative would be passed. */
-#define DECL_TRANSPARENT_UNION(NODE) ((NODE)->decl.transparent_union)
-
-/* Additional flags for language-specific uses. */
-#define DECL_LANG_FLAG_0(NODE) ((NODE)->decl.lang_flag_0)
-#define DECL_LANG_FLAG_1(NODE) ((NODE)->decl.lang_flag_1)
-#define DECL_LANG_FLAG_2(NODE) ((NODE)->decl.lang_flag_2)
-#define DECL_LANG_FLAG_3(NODE) ((NODE)->decl.lang_flag_3)
-#define DECL_LANG_FLAG_4(NODE) ((NODE)->decl.lang_flag_4)
-#define DECL_LANG_FLAG_5(NODE) ((NODE)->decl.lang_flag_5)
-#define DECL_LANG_FLAG_6(NODE) ((NODE)->decl.lang_flag_6)
-#define DECL_LANG_FLAG_7(NODE) ((NODE)->decl.lang_flag_7)
-
-struct tree_decl
-{
- char common[sizeof (struct tree_common)];
- char *filename;
- int linenum;
- union tree_node *size;
- unsigned int uid;
-#ifdef ONLY_INT_FIELDS
- int mode : 8;
-#else
- enum machine_mode mode : 8;
-#endif
-
- unsigned external_flag : 1;
- unsigned nonlocal_flag : 1;
- unsigned regdecl_flag : 1;
- unsigned inline_flag : 1;
- unsigned bit_field_flag : 1;
- unsigned virtual_flag : 1;
- unsigned ignored_flag : 1;
- unsigned abstract_flag : 1;
-
- unsigned in_system_header_flag : 1;
- unsigned common_flag : 1;
- unsigned defer_output : 1;
- unsigned transparent_union : 1;
- /* room for four more */
-
- unsigned lang_flag_0 : 1;
- unsigned lang_flag_1 : 1;
- unsigned lang_flag_2 : 1;
- unsigned lang_flag_3 : 1;
- unsigned lang_flag_4 : 1;
- unsigned lang_flag_5 : 1;
- unsigned lang_flag_6 : 1;
- unsigned lang_flag_7 : 1;
-
- union tree_node *name;
- union tree_node *context;
- union tree_node *arguments;
- union tree_node *result;
- union tree_node *initial;
- union tree_node *abstract_origin;
- union tree_node *assembler_name;
- union tree_node *section_name;
- struct rtx_def *rtl; /* acts as link to register transfer language
- (rtl) info */
- /* For a FUNCTION_DECL, if inline, this is the size of frame needed.
- If built-in, this is the code for which built-in function.
- For other kinds of decls, this is DECL_ALIGN. */
- union {
- int i;
- unsigned int u;
- enum built_in_function f;
- } frame_size;
- /* For FUNCTION_DECLs: points to insn that constitutes its definition
- on the permanent obstack. For any other kind of decl, this is the
- alignment. */
- union {
- struct rtx_def *r;
- int i;
- } saved_insns;
- union tree_node *vindex;
- /* Points to a structure whose details depend on the language in use. */
- struct lang_decl *lang_specific;
-};
-
-/* Define the overall contents of a tree node.
- It may be any of the structures declared above
- for various types of node. */
-
-union tree_node
-{
- struct tree_common common;
- struct tree_int_cst int_cst;
- struct tree_real_cst real_cst;
- struct tree_string string;
- struct tree_complex complex;
- struct tree_identifier identifier;
- struct tree_decl decl;
- struct tree_type type;
- struct tree_list list;
- struct tree_vec vec;
- struct tree_exp exp;
- struct tree_block block;
- };
-
-/* Add prototype support. */
-#ifndef PROTO
-#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__)
-#define PROTO(ARGS) ARGS
-#else
-#define PROTO(ARGS) ()
-#endif
-#endif
-
-#ifndef VPROTO
-#ifdef __STDC__
-#define PVPROTO(ARGS) ARGS
-#define VPROTO(ARGS) ARGS
-#define VA_START(va_list,var) va_start(va_list,var)
-#else
-#define PVPROTO(ARGS) ()
-#define VPROTO(ARGS) (va_alist) va_dcl
-#define VA_START(va_list,var) va_start(va_list)
-#endif
-#endif
-
-#ifndef STDIO_PROTO
-#ifdef BUFSIZ
-#define STDIO_PROTO(ARGS) PROTO(ARGS)
-#else
-#define STDIO_PROTO(ARGS) ()
-#endif
-#endif
-
-#define NULL_TREE (tree) NULL
-
-/* Define a generic NULL if one hasn't already been defined. */
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-#ifndef GENERIC_PTR
-#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__)
-#define GENERIC_PTR void *
-#else
-#define GENERIC_PTR char *
-#endif
-#endif
-
-#ifndef NULL_PTR
-#define NULL_PTR ((GENERIC_PTR)0)
-#endif
-
-/* The following functions accept a wide integer argument. Rather than
- having to cast on every function call, we use a macro instead, that is
- defined here and in rtl.h. */
-
-#ifndef exact_log2
-#define exact_log2(N) exact_log2_wide ((HOST_WIDE_INT) (N))
-#define floor_log2(N) floor_log2_wide ((HOST_WIDE_INT) (N))
-#endif
-
-#if 0
-/* At present, don't prototype xrealloc, since all of the callers don't
- cast their pointers to char *, and all of the xrealloc's don't use
- void * yet. */
-extern char *xmalloc PROTO((size_t));
-extern char *xrealloc PROTO((void *, size_t));
-#else
-extern char *xmalloc ();
-extern char *xrealloc ();
-#endif
-
-extern char *oballoc PROTO((int));
-extern char *permalloc PROTO((int));
-extern char *savealloc PROTO((int));
-extern void free PROTO((void *));
-
-/* Lowest level primitive for allocating a node.
- The TREE_CODE is the only argument. Contents are initialized
- to zero except for a few of the common fields. */
-
-extern tree make_node PROTO((enum tree_code));
-
-/* Make a copy of a node, with all the same contents except
- for TREE_PERMANENT. (The copy is permanent
- iff nodes being made now are permanent.) */
-
-extern tree copy_node PROTO((tree));
-
-/* Make a copy of a chain of TREE_LIST nodes. */
-
-extern tree copy_list PROTO((tree));
-
-/* Make a TREE_VEC. */
-
-extern tree make_tree_vec PROTO((int));
-
-/* Return the (unique) IDENTIFIER_NODE node for a given name.
- The name is supplied as a char *. */
-
-extern tree get_identifier PROTO((char *));
-
-/* Construct various types of nodes. */
-
-#define build_int_2(LO,HI) \
- build_int_2_wide ((HOST_WIDE_INT) (LO), (HOST_WIDE_INT) (HI))
-
-extern tree build PVPROTO((enum tree_code, tree, ...));
-extern tree build_nt PVPROTO((enum tree_code, ...));
-extern tree build_parse_node PVPROTO((enum tree_code, ...));
-
-extern tree build_int_2_wide PROTO((HOST_WIDE_INT, HOST_WIDE_INT));
-extern tree build_real PROTO((tree, REAL_VALUE_TYPE));
-extern tree build_real_from_int_cst PROTO((tree, tree));
-extern tree build_complex PROTO((tree, tree));
-extern tree build_string PROTO((int, char *));
-extern tree build1 PROTO((enum tree_code, tree, tree));
-extern tree build_tree_list PROTO((tree, tree));
-extern tree build_decl_list PROTO((tree, tree));
-extern tree build_decl PROTO((enum tree_code, tree, tree));
-extern tree build_block PROTO((tree, tree, tree, tree, tree));
-
-/* Construct various nodes representing data types. */
-
-extern tree make_signed_type PROTO((int));
-extern tree make_unsigned_type PROTO((int));
-extern tree signed_or_unsigned_type PROTO((int, tree));
-extern void fixup_unsigned_type PROTO((tree));
-extern tree build_pointer_type PROTO((tree));
-extern tree build_reference_type PROTO((tree));
-extern tree build_index_type PROTO((tree));
-extern tree build_index_2_type PROTO((tree, tree));
-extern tree build_array_type PROTO((tree, tree));
-extern tree build_function_type PROTO((tree, tree));
-extern tree build_method_type PROTO((tree, tree));
-extern tree build_offset_type PROTO((tree, tree));
-extern tree build_complex_type PROTO((tree));
-extern tree array_type_nelts PROTO((tree));
-
-extern tree value_member PROTO((tree, tree));
-extern tree purpose_member PROTO((tree, tree));
-extern tree binfo_member PROTO((tree, tree));
-extern int attribute_list_equal PROTO((tree, tree));
-extern int attribute_list_contained PROTO((tree, tree));
-extern int tree_int_cst_equal PROTO((tree, tree));
-extern int tree_int_cst_lt PROTO((tree, tree));
-extern int tree_int_cst_sgn PROTO((tree));
-extern int index_type_equal PROTO((tree, tree));
-
-/* From expmed.c. Since rtl.h is included after tree.h, we can't
- put the prototype here. Rtl.h does declare the prototype if
- tree.h had been included. */
-
-extern tree make_tree ();
-
-/* Return a type like TTYPE except that its TYPE_ATTRIBUTES
- is ATTRIBUTE.
-
- Such modified types already made are recorded so that duplicates
- are not made. */
-
-extern tree build_type_attribute_variant PROTO((tree, tree));
-
-/* Given a type node TYPE, and CONSTP and VOLATILEP, return a type
- for the same kind of data as TYPE describes.
- Variants point to the "main variant" (which has neither CONST nor VOLATILE)
- via TYPE_MAIN_VARIANT, and it points to a chain of other variants
- so that duplicate variants are never made.
- Only main variants should ever appear as types of expressions. */
-
-extern tree build_type_variant PROTO((tree, int, int));
-
-/* Make a copy of a type node. */
-
-extern tree build_type_copy PROTO((tree));
-
-/* Given a ..._TYPE node, calculate the TYPE_SIZE, TYPE_SIZE_UNIT,
- TYPE_ALIGN and TYPE_MODE fields.
- If called more than once on one node, does nothing except
- for the first time. */
-
-extern void layout_type PROTO((tree));
-
-/* Given a hashcode and a ..._TYPE node (for which the hashcode was made),
- return a canonicalized ..._TYPE node, so that duplicates are not made.
- How the hash code is computed is up to the caller, as long as any two
- callers that could hash identical-looking type nodes agree. */
-
-extern tree type_hash_canon PROTO((int, tree));
-
-/* Given a VAR_DECL, PARM_DECL, RESULT_DECL or FIELD_DECL node,
- calculates the DECL_SIZE, DECL_SIZE_UNIT, DECL_ALIGN and DECL_MODE
- fields. Call this only once for any given decl node.
-
- Second argument is the boundary that this field can be assumed to
- be starting at (in bits). Zero means it can be assumed aligned
- on any boundary that may be needed. */
-
-extern void layout_decl PROTO((tree, unsigned));
-
-/* Return an expr equal to X but certainly not valid as an lvalue. */
-
-extern tree non_lvalue PROTO((tree));
-extern tree pedantic_non_lvalue PROTO((tree));
-
-extern tree convert PROTO((tree, tree));
-extern tree size_in_bytes PROTO((tree));
-extern int int_size_in_bytes PROTO((tree));
-extern tree size_binop PROTO((enum tree_code, tree, tree));
-extern tree size_int PROTO((unsigned));
-extern tree round_up PROTO((tree, int));
-extern tree get_pending_sizes PROTO((void));
-
-/* Type for sizes of data-type. */
-
-extern tree sizetype;
-
-/* If nonzero, an upper limit on alignment of structure fields, in bits. */
-extern int maximum_field_alignment;
-
-/* If non-zero, the alignment of a bitsting or (power-)set value, in bits. */
-extern int set_alignment;
-
-/* Concatenate two lists (chains of TREE_LIST nodes) X and Y
- by making the last node in X point to Y.
- Returns X, except if X is 0 returns Y. */
-
-extern tree chainon PROTO((tree, tree));
-
-/* Make a new TREE_LIST node from specified PURPOSE, VALUE and CHAIN. */
-
-extern tree tree_cons PROTO((tree, tree, tree));
-extern tree perm_tree_cons PROTO((tree, tree, tree));
-extern tree temp_tree_cons PROTO((tree, tree, tree));
-extern tree saveable_tree_cons PROTO((tree, tree, tree));
-extern tree decl_tree_cons PROTO((tree, tree, tree));
-
-/* Return the last tree node in a chain. */
-
-extern tree tree_last PROTO((tree));
-
-/* Reverse the order of elements in a chain, and return the new head. */
-
-extern tree nreverse PROTO((tree));
-
-/* Returns the length of a chain of nodes
- (number of chain pointers to follow before reaching a null pointer). */
-
-extern int list_length PROTO((tree));
-
-/* integer_zerop (tree x) is nonzero if X is an integer constant of value 0 */
-
-extern int integer_zerop PROTO((tree));
-
-/* integer_onep (tree x) is nonzero if X is an integer constant of value 1 */
-
-extern int integer_onep PROTO((tree));
-
-/* integer_all_onesp (tree x) is nonzero if X is an integer constant
- all of whose significant bits are 1. */
-
-extern int integer_all_onesp PROTO((tree));
-
-/* integer_pow2p (tree x) is nonzero is X is an integer constant with
- exactly one bit 1. */
-
-extern int integer_pow2p PROTO((tree));
-
-/* staticp (tree x) is nonzero if X is a reference to data allocated
- at a fixed address in memory. */
-
-extern int staticp PROTO((tree));
-
-/* Gets an error if argument X is not an lvalue.
- Also returns 1 if X is an lvalue, 0 if not. */
-
-extern int lvalue_or_else PROTO((tree, char *));
-
-/* save_expr (EXP) returns an expression equivalent to EXP
- but it can be used multiple times within context CTX
- and only evaluate EXP once. */
-
-extern tree save_expr PROTO((tree));
-
-/* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
- or offset that depends on a field within a record.
-
- Note that we only allow such expressions within simple arithmetic
- or a COND_EXPR. */
-
-extern int contains_placeholder_p PROTO((tree));
-
-/* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
- return a tree with all occurrences of references to F in a
- PLACEHOLDER_EXPR replaced by R. Note that we assume here that EXP
- contains only arithmetic expressions. */
-
-extern tree substitute_in_expr PROTO((tree, tree, tree));
-
-/* Given a type T, a FIELD_DECL F, and a replacement value R,
- return a new type with all size expressions that contain F
- updated by replacing the reference to F with R. */
-
-extern tree substitute_in_type PROTO((tree, tree, tree));
-
-/* variable_size (EXP) is like save_expr (EXP) except that it
- is for the special case of something that is part of a
- variable size for a data type. It makes special arrangements
- to compute the value at the right time when the data type
- belongs to a function parameter. */
-
-extern tree variable_size PROTO((tree));
-
-/* stabilize_reference (EXP) returns an reference equivalent to EXP
- but it can be used multiple times
- and only evaluate the subexpressions once. */
-
-extern tree stabilize_reference PROTO((tree));
-
-/* Return EXP, stripped of any conversions to wider types
- in such a way that the result of converting to type FOR_TYPE
- is the same as if EXP were converted to FOR_TYPE.
- If FOR_TYPE is 0, it signifies EXP's type. */
-
-extern tree get_unwidened PROTO((tree, tree));
-
-/* Return OP or a simpler expression for a narrower value
- which can be sign-extended or zero-extended to give back OP.
- Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
- or 0 if the value should be sign-extended. */
-
-extern tree get_narrower PROTO((tree, int *));
-
-/* Given MODE and UNSIGNEDP, return a suitable type-tree
- with that mode.
- The definition of this resides in language-specific code
- as the repertoire of available types may vary. */
-
-extern tree type_for_mode PROTO((enum machine_mode, int));
-
-/* Given PRECISION and UNSIGNEDP, return a suitable type-tree
- for an integer type with at least that precision.
- The definition of this resides in language-specific code
- as the repertoire of available types may vary. */
-
-extern tree type_for_size PROTO((unsigned, int));
-
-/* Given an integer type T, return a type like T but unsigned.
- If T is unsigned, the value is T.
- The definition of this resides in language-specific code
- as the repertoire of available types may vary. */
-
-extern tree unsigned_type PROTO((tree));
-
-/* Given an integer type T, return a type like T but signed.
- If T is signed, the value is T.
- The definition of this resides in language-specific code
- as the repertoire of available types may vary. */
-
-extern tree signed_type PROTO((tree));
-
-/* This function must be defined in the language-specific files.
- expand_expr calls it to build the cleanup-expression for a TARGET_EXPR.
- This is defined in a language-specific file. */
-
-extern tree maybe_build_cleanup PROTO((tree));
-
-/* Given an expression EXP that may be a COMPONENT_REF or an ARRAY_REF,
- look for nested component-refs or array-refs at constant positions
- and find the ultimate containing object, which is returned. */
-
-extern tree get_inner_reference PROTO((tree, int *, int *, tree *, enum machine_mode *, int *, int *));
-
-/* Return the FUNCTION_DECL which provides this _DECL with its context,
- or zero if none. */
-extern tree decl_function_context PROTO((tree));
-
-/* Return the RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE which provides
- this _DECL with its context, or zero if none. */
-extern tree decl_type_context PROTO((tree));
-
-/* Given the FUNCTION_DECL for the current function,
- return zero if it is ok for this function to be inline.
- Otherwise return a warning message with a single %s
- for the function's name. */
-
-extern char *function_cannot_inline_p PROTO((tree));
-
-/* Return 1 if EXPR is the real constant zero. */
-extern int real_zerop PROTO((tree));
-
-/* Declare commonly used variables for tree structure. */
-
-/* An integer constant with value 0 */
-extern tree integer_zero_node;
-
-/* An integer constant with value 1 */
-extern tree integer_one_node;
-
-/* An integer constant with value 0 whose type is sizetype. */
-extern tree size_zero_node;
-
-/* An integer constant with value 1 whose type is sizetype. */
-extern tree size_one_node;
-
-/* A constant of type pointer-to-int and value 0 */
-extern tree null_pointer_node;
-
-/* A node of type ERROR_MARK. */
-extern tree error_mark_node;
-
-/* The type node for the void type. */
-extern tree void_type_node;
-
-/* The type node for the ordinary (signed) integer type. */
-extern tree integer_type_node;
-
-/* The type node for the unsigned integer type. */
-extern tree unsigned_type_node;
-
-/* The type node for the ordinary character type. */
-extern tree char_type_node;
-
-/* Points to the name of the input file from which the current input
- being parsed originally came (before it went into cpp). */
-extern char *input_filename;
-
-/* Current line number in input file. */
-extern int lineno;
-
-/* Nonzero for -pedantic switch: warn about anything
- that standard C forbids. */
-extern int pedantic;
-
-/* Nonzero means can safely call expand_expr now;
- otherwise layout_type puts variable sizes onto `pending_sizes' instead. */
-
-extern int immediate_size_expand;
-
-/* Points to the FUNCTION_DECL of the function whose body we are reading. */
-
-extern tree current_function_decl;
-
-/* Nonzero if function being compiled can call setjmp. */
-
-extern int current_function_calls_setjmp;
-
-/* Nonzero if function being compiled can call longjmp. */
-
-extern int current_function_calls_longjmp;
-
-/* Nonzero means all ..._TYPE nodes should be allocated permanently. */
-
-extern int all_types_permanent;
-
-/* Pointer to function to compute the name to use to print a declaration. */
-
-extern char *(*decl_printable_name) ();
-
-/* Pointer to function to finish handling an incomplete decl at the
- end of compilation. */
-
-extern void (*incomplete_decl_finalize_hook) ();
-
-/* In tree.c */
-extern char *perm_calloc PROTO((int, long));
-extern tree get_set_constructor_bits PROTO((tree, char*, int));
-extern tree get_set_constructor_words PROTO((tree,
- HOST_WIDE_INT*, int));
-
-/* In stmt.c */
-
-extern void expand_fixups PROTO((struct rtx_def *));
-extern tree expand_start_stmt_expr PROTO((void));
-extern tree expand_end_stmt_expr PROTO((tree));
-extern void expand_expr_stmt PROTO((tree));
-extern void expand_decl_init PROTO((tree));
-extern void clear_last_expr PROTO((void));
-extern void expand_label PROTO((tree));
-extern void expand_goto PROTO((tree));
-extern void expand_asm PROTO((tree));
-extern void expand_start_cond PROTO((tree, int));
-extern void expand_end_cond PROTO((void));
-extern void expand_start_else PROTO((void));
-extern void expand_start_elseif PROTO((tree));
-extern struct nesting *expand_start_loop PROTO((int));
-extern struct nesting *expand_start_loop_continue_elsewhere PROTO((int));
-extern void expand_loop_continue_here PROTO((void));
-extern void expand_end_loop PROTO((void));
-extern int expand_continue_loop PROTO((struct nesting *));
-extern int expand_exit_loop PROTO((struct nesting *));
-extern int expand_exit_loop_if_false PROTO((struct nesting *,
- tree));
-extern int expand_exit_something PROTO((void));
-
-extern void expand_null_return PROTO((void));
-extern void expand_return PROTO((tree));
-extern void expand_start_bindings PROTO((int));
-extern void expand_end_bindings PROTO((tree, int, int));
-extern tree last_cleanup_this_contour PROTO((void));
-extern void expand_start_case PROTO((int, tree, tree,
- char *));
-extern void expand_end_case PROTO((tree));
-extern int pushcase PROTO((tree,
- tree (*) (tree, tree),
- tree, tree *));
-extern int pushcase_range PROTO((tree, tree,
- tree (*) (tree, tree),
- tree, tree *));
-
-/* In fold-const.c */
-
-/* Fold constants as much as possible in an expression.
- Returns the simplified expression.
- Acts only on the top level of the expression;
- if the argument itself cannot be simplified, its
- subexpressions are not changed. */
-
-extern tree fold PROTO((tree));
-
-extern int force_fit_type PROTO((tree, int));
-extern int add_double PROTO((HOST_WIDE_INT, HOST_WIDE_INT,
- HOST_WIDE_INT, HOST_WIDE_INT,
- HOST_WIDE_INT *, HOST_WIDE_INT *));
-extern int neg_double PROTO((HOST_WIDE_INT, HOST_WIDE_INT,
- HOST_WIDE_INT *, HOST_WIDE_INT *));
-extern int mul_double PROTO((HOST_WIDE_INT, HOST_WIDE_INT,
- HOST_WIDE_INT, HOST_WIDE_INT,
- HOST_WIDE_INT *, HOST_WIDE_INT *));
-extern void lshift_double PROTO((HOST_WIDE_INT, HOST_WIDE_INT,
- HOST_WIDE_INT, int, HOST_WIDE_INT *,
- HOST_WIDE_INT *, int));
-extern void rshift_double PROTO((HOST_WIDE_INT, HOST_WIDE_INT,
- HOST_WIDE_INT, int,
- HOST_WIDE_INT *, HOST_WIDE_INT *, int));
-extern void lrotate_double PROTO((HOST_WIDE_INT, HOST_WIDE_INT,
- HOST_WIDE_INT, int, HOST_WIDE_INT *,
- HOST_WIDE_INT *));
-extern void rrotate_double PROTO((HOST_WIDE_INT, HOST_WIDE_INT,
- HOST_WIDE_INT, int, HOST_WIDE_INT *,
- HOST_WIDE_INT *));
-extern int operand_equal_p PROTO((tree, tree, int));
-extern tree invert_truthvalue PROTO((tree));
-
-/* The language front-end must define these functions. */
-
-/* Function of no arguments for initializing lexical scanning. */
-extern void init_lex PROTO((void));
-/* Function of no arguments for initializing the symbol table. */
-extern void init_decl_processing PROTO((void));
-
-/* Functions called with no arguments at the beginning and end or processing
- the input source file. */
-extern void lang_init PROTO((void));
-extern void lang_finish PROTO((void));
-
-/* Funtion to identify which front-end produced the output file. */
-extern char *lang_identify PROTO((void));
-
-/* Function to replace the DECL_LANG_SPECIFIC field of a DECL with a copy. */
-extern void copy_lang_decl PROTO((tree));
-
-/* Function called with no arguments to parse and compile the input. */
-extern int yyparse PROTO((void));
-/* Function called with option as argument
- to decode options starting with -f or -W or +.
- It should return nonzero if it handles the option. */
-extern int lang_decode_option PROTO((char *));
-
-/* Functions for processing symbol declarations. */
-/* Function to enter a new lexical scope.
- Takes one argument: always zero when called from outside the front end. */
-extern void pushlevel PROTO((int));
-/* Function to exit a lexical scope. It returns a BINDING for that scope.
- Takes three arguments:
- KEEP -- nonzero if there were declarations in this scope.
- REVERSE -- reverse the order of decls before returning them.
- FUNCTIONBODY -- nonzero if this level is the body of a function. */
-extern tree poplevel PROTO((int, int, int));
-/* Set the BLOCK node for the current scope level. */
-extern void set_block PROTO((tree));
-/* Function to add a decl to the current scope level.
- Takes one argument, a decl to add.
- Returns that decl, or, if the same symbol is already declared, may
- return a different decl for that name. */
-extern tree pushdecl PROTO((tree));
-/* Function to return the chain of decls so far in the current scope level. */
-extern tree getdecls PROTO((void));
-/* Function to return the chain of structure tags in the current scope level. */
-extern tree gettags PROTO((void));
-
-extern tree build_range_type PROTO((tree, tree, tree));
-
-/* Call when starting to parse a declaration:
- make expressions in the declaration last the length of the function.
- Returns an argument that should be passed to resume_momentary later. */
-extern int suspend_momentary PROTO((void));
-
-extern int allocation_temporary_p PROTO((void));
-
-/* Call when finished parsing a declaration:
- restore the treatment of node-allocation that was
- in effect before the suspension.
- YES should be the value previously returned by suspend_momentary. */
-extern void resume_momentary PROTO((int));
-
-/* Called after finishing a record, union or enumeral type. */
-extern void rest_of_type_compilation PROTO((tree, int));
-
-/* Save the current set of obstacks, but don't change them. */
-extern void push_obstacks_nochange PROTO((void));
-
-extern void permanent_allocation PROTO((int));
-
-extern void push_momentary PROTO((void));
-
-extern void clear_momentary PROTO((void));
-
-extern void pop_momentary PROTO((void));
-
-extern void end_temporary_allocation PROTO((void));
-
-/* Pop the obstack selection stack. */
-extern void pop_obstacks PROTO((void));
diff --git a/gnu/usr.bin/cc/include/typeclass.h b/gnu/usr.bin/cc/include/typeclass.h
deleted file mode 100644
index b16604253617..000000000000
--- a/gnu/usr.bin/cc/include/typeclass.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Values returned by __builtin_classify_type. */
-
-enum type_class
-{
- no_type_class = -1,
- void_type_class, integer_type_class, char_type_class,
- enumeral_type_class, boolean_type_class,
- pointer_type_class, reference_type_class, offset_type_class,
- real_type_class, complex_type_class,
- function_type_class, method_type_class,
- record_type_class, union_type_class,
- array_type_class, string_type_class, set_type_class, file_type_class,
- lang_type_class
-};