home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 5 / FreshFish_July-August1994.bin / bbs / gnu / gnat-1.80-diffs.lha / src / diffs / gnat-1.80.diffs
Text File  |  1994-07-12  |  1MB  |  31,399 lines

  1. diff -rc --new-file /src/baseline/gnat-1.80/Product-Info gnat-1.80/Product-Info
  2. *** /src/baseline/gnat-1.80/Product-Info    Thu Jan  1 00:00:00 1970
  3. --- gnat-1.80/Product-Info    Tue Jul 12 17:21:10 1994
  4. ***************
  5. *** 0 ****
  6. --- 1,20 ----
  7. + .name
  8. + gnat
  9. + .fullname
  10. + GNU Ada compiler
  11. + .type
  12. + Programmer Tool
  13. + .short
  14. + GNU Ada compiler.
  15. + .description
  16. + Port of the GNU Ada compiler.  Requires matching gcc 2.5.8 distribution.
  17. + .version
  18. + 1.80
  19. + .author
  20. + .requirements
  21. + Amiga binaries require ixemul.library.
  22. + Requires gcc 2.5.8.
  23. + .distribution
  24. + GNU Public License
  25. + .described-by
  26. + Fred Fish (fnf@amigalib.com)
  27. diff -rc --new-file /src/baseline/gnat-1.80/README-amiga gnat-1.80/README-amiga
  28. *** /src/baseline/gnat-1.80/README-amiga    Thu Jan  1 00:00:00 1970
  29. --- gnat-1.80/README-amiga    Thu Jul  7 10:36:24 1994
  30. ***************
  31. *** 0 ****
  32. --- 1,136 ----
  33. + This is the GNU Ada compiler, GNAT.  The compiler is in a 'hacker  
  34. + state', ie. it is complete and certainly not bug free.  But you it can
  35. + compile itself, more than 110,000 lines of Ada, and many other 
  36. + programs.
  37. + I have compiled the entire thing, including the compilers, the library
  38. + and the other utility program that came with it.  I have not test any
  39. + of it extensively, except for compiling itself and a few old programs
  40. + I had from school.
  41. + The only mandatory files you need are gnat1 and gnatbind for the amiga
  42. + and the source, if you want to compile it yourself.
  43. +     those files are
  44. +         gnat1-gnatbind.lha
  45. +         and gnat-1.80-src.lha
  46. +                 and of course, the gcc-2.5.8 source
  47. + There is a third file, gnat-1.80-bin.lha, it contains everything
  48. + needed to run compile ada programs, but not the source to recompile
  49. + GNAT. 
  50. + In gnat-1.80-src.lha there is a directory called corrections, these
  51. + are some thing that needed to be done to gnat to get it to compile,
  52. + just *ruff* notes. ( don't trust the diffs , they be backward ).
  53. + The problem I ran into were:
  54. +     1. the compiler generates bad code for the parser (par.o)
  55. +        the statement that it compiles wrong is something like
  56. +         
  57. +                   exit when SS_FLAG.uncd
  58. +        par.s.diff will show you where the problem is, and a
  59. +            working alternative.
  60. +         2. The compiler craps out with an interanl error, on two
  61. +            code statement in uintp.adb.
  62. +        Unitp.adb.diff shows a workaround that seem to work.
  63. +         3. The compiler bombs on some code in atree.adb.
  64. +                Atree.adb.changes shows how to change the code,
  65. +                but it must be repeated a couple of time.
  66. +         4. There is also a problem with the 'md' file. A replacement
  67. +            is in the correction directory along with the original.
  68. + I also had a few other problem compiling the sytem, most seem to be
  69. + related to memory constraints. Plan on a lot of memory to recompile
  70. + this thing, > 14meg. ( most of the files do not need that much memory
  71. + but there are a couple that do, par-*.ad?. Also *lots* of disk space.
  72. + Another problem for amiga owners seems to be the stack.  I compiled
  73. + one old program and ran it, it needed 470,000 stack to run. I have no
  74. + idea how to work around this.
  75. + Happy ADAing.
  76. + Pass Travis
  77. + ptravis@rs6.tcs.tulane.edu
  78. + ======================================================================
  79. + These notes added by Fred Fish.
  80. +     *    This file has been renamed README-amiga
  81. +     *    There is a new directory, "amiga", containing amiga specific
  82. +     notes and such.
  83. +     *    The "corrections" directory refered to above has been moved
  84. +     to amiga/corrections, and is not used.
  85. + ===============
  86. + REBUILDING GNAT
  87. + ===============
  88. + (1)    Start with the baseline FSF gcc 2.5.8 archive gcc-2.5.8.tar.gz.
  89. +     Ungzip it, and then untar it:
  90. +         gzip -d gcc-2.5.8.tar.gz
  91. +         tar -xvf gcc-2.5.8.tar
  92. +         rm gcc-2.5.8.tar
  93. +         Note: if you are starting with my CD distribution, you
  94. +         can skip steps 1 and 2, and simply clone the gcc-2.5.8
  95. +         tree under gnu:src/amiga to use as a starting point with
  96. +         step 3.
  97. + (2)    Cd to the gcc root directory and apply the diffs that turn the
  98. +     baseline FSF gcc into Amiga gcc:
  99. +         cd gcc-2.5.8
  100. +         patch -p1 <gnu:src/amiga/gnat-1.80/amiga/gcc-2.5.8.diffs
  101. +         delete #?.orig
  102. +         delete config/m68k/#?.orig
  103. + (3)    Now apply the diffs that are needed to amiga gcc files for amiga
  104. +     gnat.  These diffs don't add any files, just change the gcc ones:
  105. +         patch -p1 <gnu:src/amiga/gnat-1.80/amiga/gcc-gnat.diffs
  106. +         delete #?.orig
  107. +         delete #?/#?/#?.orig
  108. + (4)    Now copy the new ada specific source files from the gnat
  109. +     distribution into the gcc source directory:
  110. +         copy gnu:src/amiga/gnat-1.80/src "" all clone
  111. + (5)    Delete the diff files provided with gnat, they are already taken
  112. +     care of by the patches applied above.
  113. +         delete #?.diff
  114. + (6)    Configure gcc/gnat for amigados:
  115. +         sh configure amigados
  116. + (7)    Build just the ada portions:
  117. +         make LANGUAGES=ada
  118. + (8)    Build the ada runtime
  119. +         make tmp-adainclude
  120. + (9)    Install the ada binaries:
  121. +         copy gnat1 gnu:lib/gcc-lib/amigados/2.5.8/gnat1
  122. +         copy gnatbind gnu:bin/gnatbind
  123. +         copy gnatbl gnu:bin/gnatbl
  124. +         copy gnatchop gnu:bin/gnatchop
  125. +         copy gnatf gnu:bin/gnatf
  126. +         copy gnatk8 gnu:bin/gnatk8
  127. +         copy gnatsplit gnu:bin/gnatsplit
  128. + (10)    Install the ada runtime:
  129. +         make install-gnatlib
  130. diff -rc --new-file /src/baseline/gnat-1.80/amiga/corrections/Makefile gnat-1.80/amiga/corrections/Makefile
  131. *** /src/baseline/gnat-1.80/amiga/corrections/Makefile    Thu Jan  1 00:00:00 1970
  132. --- gnat-1.80/amiga/corrections/Makefile    Thu Jun 23 13:13:15 1994
  133. ***************
  134. *** 0 ****
  135. --- 1,3326 ----
  136. + VPATH = /Work/projects/gcc/gcc-2.5.8
  137. + VPATH = /Work/projects/gcc/gcc-2.5.8
  138. + # Makefile for GNU C compiler.
  139. + #   Copyright (C) 1987, 88, 90, 91, 92, 1993 Free Software Foundation, Inc.
  140. + #This file is part of GNU CC.
  141. + #GNU CC is free software; you can redistribute it and/or modify
  142. + #it under the terms of the GNU General Public License as published by
  143. + #the Free Software Foundation; either version 2, or (at your option)
  144. + #any later version.
  145. + #GNU CC is distributed in the hope that it will be useful,
  146. + #but WITHOUT ANY WARRANTY; without even the implied warranty of
  147. + #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  148. + #GNU General Public License for more details.
  149. + #You should have received a copy of the GNU General Public License
  150. + #along with GNU CC; see the file COPYING.  If not, write to
  151. + #the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  152. + # The targets for external use include:
  153. + # all, doc, proto, install, install-cross, install-cross-rest,
  154. + # uninstall, TAGS, mostlyclean, clean, distclean, realclean,
  155. + # stage1, stage2, stage3, stage4.
  156. + # Suppress smart makes who think they know how to automake Yacc files
  157. + .y.c:
  158. + # Variables that exist for you to override.
  159. + # See below for how to change them for certain systems.
  160. + # Selection of languages to be made.
  161. + LANGUAGES = c c++ objective-c ada proto
  162. + ALLOCA =
  163. + ALLOCA_FLAGS =
  164. + ALLOCA_FINISH = true
  165. + # Various ways of specifying flags for compilations:  
  166. + # CFLAGS is for the user to override to, e.g., do a bootstrap with -O2.
  167. + # BOOT_CFLAGS is the value of CFLAGS to pass
  168. + # to the stage2 and stage3 compilations
  169. + # XCFLAGS is used for most compilations but not when using the GCC just built.
  170. + XCFLAGS =
  171. + CFLAGS = -g
  172. + BOOT_CFLAGS = -O $(CFLAGS)
  173. + # These exists to be overridden by the x-* and t-* files, respectively.
  174. + X_CFLAGS =
  175. + T_CFLAGS =
  176. + X_CPPFLAGS =
  177. + T_CPPFLAGS =
  178. + CC = cc
  179. + BISON = bison
  180. + BISONFLAGS =
  181. + AR = ar
  182. + OLDAR_FLAGS = qc
  183. + AR_FLAGS = rc
  184. + SHELL = /bin/sh
  185. + # on sysV, define this as cp.
  186. + INSTALL = cp
  187. + # These permit overriding just for certain files.
  188. + INSTALL_PROGRAM = $(INSTALL)
  189. + INSTALL_DATA = $(INSTALL)
  190. + SYMLINK = ln -s
  191. + MAKEINFO = makeinfo
  192. + TEXI2DVI = texi2dvi
  193. + # Define this as & to perform parallel make on a Sequent.
  194. + # Note that this has some bugs, and it seems currently necessary 
  195. + # to compile all the gen* files first by hand to avoid erroneous results.
  196. + P =
  197. + # How to invoke ranlib.
  198. + RANLIB = ranlib
  199. + # Test to use to see whether ranlib exists on the system.
  200. + RANLIB_TEST = [ -f /usr/bin/ranlib -o -f /bin/ranlib ]
  201. + # Compiler to use for compiling libgcc1.a.
  202. + # OLDCC should not be the GNU C compiler,
  203. + # since that would compile typical libgcc1.a functions such as mulsi3
  204. + # into infinite recursions.
  205. + OLDCC = cc
  206. + # CFLAGS for use with OLDCC, for compiling libgcc1.a.
  207. + # NOTE: -O does not work on some Unix systems!
  208. + CCLIBFLAGS = -O
  209. + # Version of ar to use when compiling libgcc1.a.
  210. + OLDAR = ar
  211. + # Target to use when installing include directory.  Either
  212. + # install-headers-tar or install-headers-cpio.
  213. + INSTALL_HEADERS_DIR = install-headers-cp
  214. + # The GCC to use for compiling libgcc2.a, enquire, and cross-test.
  215. + # Usually the one we just built.
  216. + # Don't use this as a dependency--use $(GCC_PASSES) or $(GCC_PARTS).
  217. + GCC_FOR_TARGET = ./xgcc -B./
  218. + # This is used instead of ALL_CFLAGS when compiling with GCC_FOR_TARGET.
  219. + # It omits XCFLAGS, and specifies -B./.
  220. + # It also specifies -B$(tooldir)/ to find as and ld for a cross compiler.
  221. + GCC_CFLAGS=$(INTERNAL_CFLAGS) $(X_CFLAGS) $(T_CFLAGS) $(CFLAGS)
  222. + # Special flags for compiling enquire.
  223. + # We disable optimization to make floating point more reliable.
  224. + ENQUIRE_CFLAGS = -DNO_MEM -DNO_STDDEF -DNO_LONG_DOUBLE_IO -O0
  225. + ENQUIRE_LDFLAGS = $(LDFLAGS)
  226. + # Tools to use when building a cross-compiler.
  227. + # These are used because `configure' appends `cross-make'
  228. + # to the makefile when making a cross-compiler.
  229. + TARGET_TOOLPREFIX = $(tooldir)/bin/
  230. + AR_FOR_TARGET = $(TARGET_TOOLPREFIX)ar
  231. + AR_FOR_TARGET_FLAGS = rc
  232. + RANLIB_FOR_TARGET = $(TARGET_TOOLPREFIX)ranlib
  233. + RANLIB_TEST_FOR_TARGET = [ -f $(TARGET_TOOLPREFIX)ranlib ]
  234. + # Dir to search for system headers.  Overridden by cross-make.
  235. + SYSTEM_HEADER_DIR = /usr/include
  236. + # Control whether to run fixproto.
  237. + STMP_FIXPROTO = stmp-fixproto
  238. + # There may be a premade insn-attrtab.c for this machine.
  239. + # (You could rebuild it with genattrtab as usual, but it takes a long time.)
  240. + # PREMADE_ATTRTAB is the file name of the file to use.
  241. + # PREMADE_ATTRTAB_MD is the md file it corresponds to.
  242. + PREMADE_ATTRTAB_MD = Makefile  # Guaranteed not to cmp equal to md.
  243. + PREMADE_ATTRTAB = 
  244. + target=amiga
  245. + xmake_file=m68k/x-amigados
  246. + tmake_file=../Makefile.in
  247. + version=2.5.8
  248. + mainversion=`sed -e 's/.*\"\([0-9]*\.[0-9]*\).*/\1/' < $(srcdir)/version.c`
  249. + # Directory where sources are, from where we are.
  250. + srcdir = /Work/projects/gcc/gcc-2.5.8
  251. + # Common prefix for installation directories.
  252. + # NOTE: This directory must exist when you start installation.
  253. + prefix = /gnu
  254. + # Directory in which to put localized header files. On the systems with
  255. + # gcc as the native cc, `local_prefix' may not be `prefix' which is
  256. + # `/usr'.
  257. + # NOTE: local_prefix *should not* default from prefix.
  258. + local_prefix = /local
  259. + # Directory in which to put host dependent programs and libraries
  260. + exec_prefix = $(prefix)
  261. + # Directory in which to put the executable for the command `gcc'
  262. + bindir = $(exec_prefix)/bin
  263. + # Directory in which to put the directories used by the compiler.
  264. + libdir = $(exec_prefix)/lib
  265. + # Directory in which the compiler finds executables, libraries, etc.
  266. + libsubdir = $(libdir)/gcc-lib/$(target)/$(version)
  267. + # Directory to search for site-specific includes.
  268. + includedir = $(local_prefix)/include
  269. + # assertdir is overridden in cross-make.
  270. + # (But this currently agrees with what is in cross-make.)
  271. + assertdir = $(tooldir)/include
  272. + # where the info files go
  273. + infodir = $(prefix)/info
  274. + # Extension (if any) to put in installed man-page filename.
  275. + manext = .1
  276. + # Directory in which to put man pages.
  277. + mandir = $(prefix)/man/man1
  278. + # Directory in which to find other cross-compilation tools and headers.
  279. + # Used in install-cross.
  280. + tooldir = $(exec_prefix)/$(target)
  281. + # Dir for temp files.
  282. + tmpdir = /tmp
  283. + # Additional system libraries to link with.
  284. + CLIB=
  285. + # Change this to a null string if obstacks are installed in the
  286. + # system library.
  287. + OBSTACK=obstack.o
  288. + # Specify the rule for actually making libgcc.a,
  289. + LIBGCC = libgcc.a
  290. + # and the rule for installing it.
  291. + INSTALL_LIBGCC = install-libgcc
  292. + # Specify the rule for actually making libgcc1.a.
  293. + # The value may be empty; that means to do absolutely nothing
  294. + # with or for libgcc1.a.
  295. + LIBGCC1 = libgcc1.a
  296. + # Specify the rule for making libgcc1.a for a cross-compiler.
  297. + # The default rule assumes that libgcc1.a is supplied by the user.
  298. + CROSS_LIBGCC1 = libgcc1.cross
  299. + # Specify the rule for actually making libgcc2.a.
  300. + LIBGCC2 = libgcc2.a
  301. + # Options to use when compiling libgcc2.a.
  302. + # -g1 causes output of debug info only for file-scope entities.
  303. + # we use this here because that should be enough, and also
  304. + # so that -g1 will be tested.
  305. + LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) -g1
  306. + # Additional options to use when compiling libgcc2.a.
  307. + # Some targets override this to -Iinclude
  308. + LIBGCC2_INCLUDES =
  309. + # Things which must be built before building libgcc2.a.
  310. + # Some targets override this to stmp-int-hdrs
  311. + LIBGCC2_DEPS =
  312. + # Enquire target (This is a variable so that a target can choose not to
  313. + # build it.)
  314. + ENQUIRE = enquire
  315. + # Cross-test target (must also be overridable for a target)
  316. + CROSS_TEST = cross-test
  317. + # List of extra executables that should be compiled for this target machine
  318. + # that are used for compiling from source code to object code.
  319. + # The rules for compiling them should be in the t-* file for the machine.
  320. + EXTRA_PASSES =
  321. + # Like EXTRA_PASSES, but these are used when linking.
  322. + EXTRA_PROGRAMS = 
  323. + # List of extra object files that should be compiled for this target machine.
  324. + # The rules for compiling them should be in the t-* file for the machine.
  325. + EXTRA_PARTS =
  326. + # List of extra object files that should be compiled and linked with
  327. + # compiler proper (cc1, cc1obj, cc1plus, gnat1).
  328. + EXTRA_OBJS =
  329. + # List of additional header files to install.
  330. + # Often this is edited directly by `configure'.
  331. + EXTRA_HEADERS =
  332. + # Set this to `ld' to enable use of collect2.
  333. + # USE_COLLECT2 =
  334. + # It is convenient for configure to add the assignment at the beginning,
  335. + # so don't override it here.
  336. + # List of extra C and assembler files to add to libgcc1.a.
  337. + # Assembler files should have names ending in `.asm'.
  338. + LIB1FUNCS_EXTRA = 
  339. + # List of extra C and assembler files to add to libgcc2.a.
  340. + # Assembler files should have names ending in `.asm'.
  341. + LIB2FUNCS_EXTRA = 
  342. + # Default float.h source to use for cross-compiler.
  343. + CROSS_FLOAT_H=float.h-cross
  344. + # Program to convert libraries.
  345. + LIBCONVERT = 
  346. + # Control whether header files are installed.
  347. + INSTALL_HEADERS=install-headers
  348. + # Options for tar when copying trees.  So HPUX can override it.
  349. + TAROUTOPTS = xpBf
  350. + # Select which version of fixincludes to use (I.E. regular versus SVR4)
  351. + # This value is overridden directly by configure.
  352. + FIXINCLUDES = Makefile.in
  353. + # Additional directories of header files to run fixincludes on.
  354. + # These should be directories searched automatically by default
  355. + # just as /usr/include is.
  356. + # *Do not* use this for directories that happen to contain 
  357. + # header files, but are not searched automatically by default.
  358. + # On most systems, this is empty.
  359. + OTHER_FIXINCLUDES_DIRS=
  360. + # List of things which should already be built whenever we try to use xgcc
  361. + # to compile anything (without linking).
  362. + GCC_PASSES=xgcc cc1 cpp $(EXTRA_PASSES)
  363. + # List of things which should already be built whenever we try to use xgcc
  364. + # to link anything.
  365. + GCC_PARTS=$(GCC_PASSES) $(LIBGCC) $(EXTRA_PROGRAMS) $(USE_COLLECT2) $(EXTRA_PARTS)
  366. + # Directory to link to, when using the target `maketest'.
  367. + DIR = ../gcc
  368. + # Guaranteed to not exist when not passing md through cpp.
  369. + MD_FILE = md-cpp-not-used
  370. + # Flags to use when cross-building GCC.
  371. + # Prefix to apply to names of object files when using them
  372. + # to run on the machine we are compiling on.
  373. + HOST_PREFIX=
  374. + # Prefix to apply to names of object files when compiling them
  375. + # to run on the machine we are compiling on.
  376. + # The default for this variable is chosen to keep these rules 
  377. + # out of the way of the other rules for compiling the same source files.
  378. + HOST_PREFIX_1=loser-
  379. + HOST_CC=$(CC)
  380. + HOST_CFLAGS=$(ALL_CFLAGS)
  381. + HOST_CLIB=$(CLIB)
  382. + HOST_LDFLAGS=$(LDFLAGS)
  383. + HOST_CPPFLAGS=$(ALL_CPPFLAGS)
  384. + HOST_ALLOCA=$(ALLOCA)
  385. + HOST_MALLOC=$(MALLOC)
  386. + HOST_OBSTACK=$(OBSTACK)
  387. + # Choose the real default target.
  388. + ALL=all.internal
  389. + # Choose the real install target.
  390. + INSTALL_TARGET=install-normal
  391. + # Source for float.h.  Overridden by cross-make.
  392. + FLOAT_H=float.h-nat
  393. + # End of variables for you to override.
  394. + # Definition of `all' is here so that new rules inserted by sed
  395. + # do not specify the default target.
  396. + # The real definition is under `all.internal' (for native compilers)
  397. + # or `all.cross' (for cross compilers).
  398. + all: all.indirect
  399. + # This tells GNU Make version 3 not to put all variables in the environment.
  400. + .NOEXPORT:
  401. + # sed inserts variable overrides after the following line.
  402. + ####target overrides
  403. + ####host overrides
  404. + # Note: It doesn't do any good to try to define prefix or local_prefix
  405. + # in the host overrides because configure will just change them back.
  406. + # You either have to give an appropriate option to configure or live with
  407. + # an Amiga specific patch to configure.  See the note in configure.  -fnf
  408. + # Building under amigados almost certainly requires an already working gcc.
  409. + # Use gccv, which is a gcc compiled with AMIGADOS_FORK_GCC so "-pipe" will
  410. + # work and get exercised.  To bootstrap with the regular gcc just do
  411. + # "make CC=gcc".  To bootstrap without "-pipe" do "make PIPE=".
  412. + CC = gcc
  413. + # Disable -pipe for now since I had problems bootstrapping gcc 2.5.5 with
  414. + # it. (fnf)
  415. + #PIPE = -pipe
  416. + # Allow the user to override the default host optimization with gcc, or if the
  417. + # host compiler is not gcc and doesn't understand -O<N>.
  418. + X_OPTIMIZE = -O2
  419. + # The standard additional host flags for the compiler.
  420. + X_CFLAGS = $(X_OPTIMIZE)
  421. + # Man pages get a wierd suffix...
  422. + manext = .0
  423. + # We really shouldn't specify CFLAGS from here, but there's no other way
  424. + # to get rid of the `-g' indoctrinated by Makefile.in.  Note this becomes
  425. + # part of both the host compilation CFLAGS and the target compilation
  426. + # CFLAGS.
  427. + CFLAGS =
  428. + # Ranlib does exist, but may not be in a path where the default RANLIB_TEST
  429. + # expects it, so just force it to true.
  430. + RANLIB_TEST = true
  431. + # My current version of ln doesn't work, so use cp instead.  -fnf
  432. + HARDLINK = cp
  433. + # Note: It doesn't do any good to try to define prefix or local_prefix
  434. + # in the host overrides because configure will just change them back.
  435. + # You either have to give an appropriate option to configure or live with
  436. + # an Amiga specific patch to configure.  See the note in configure.  -fnf
  437. + # Building under amigados almost certainly requires an already working gcc.
  438. + # Use gccv, which is a gcc compiled with AMIGADOS_FORK_GCC so "-pipe" will
  439. + # work and get exercised.  To bootstrap with the regular gcc just do
  440. + # "make CC=gcc".  To bootstrap without "-pipe" do "make PIPE=".
  441. + CC = gcc
  442. + # Disable -pipe for now since I had problems bootstrapping gcc 2.5.5 with
  443. + # it. (fnf)
  444. + #PIPE = -pipe
  445. + # Allow the user to override the default host optimization with gcc, or if the
  446. + # host compiler is not gcc and doesn't understand -O<N>.
  447. + X_OPTIMIZE = -O2
  448. + # The standard additional host flags for the compiler.
  449. + X_CFLAGS = $(X_OPTIMIZE)
  450. + # Man pages get a wierd suffix...
  451. + manext = .0
  452. + # We really shouldn't specify CFLAGS from here, but there's no other way
  453. + # to get rid of the `-g' indoctrinated by Makefile.in.  Note this becomes
  454. + # part of both the host compilation CFLAGS and the target compilation
  455. + # CFLAGS.
  456. + CFLAGS =
  457. + # Ranlib does exist, but may not be in a path where the default RANLIB_TEST
  458. + # expects it, so just force it to true.
  459. + RANLIB_TEST = true
  460. + # My current version of ln doesn't work, so use cp instead.  -fnf
  461. + HARDLINK = cp
  462. + ####cross overrides
  463. + ####build overrides
  464. + # Now figure out from those variables how to compile and link.
  465. + all.indirect: $(ALL)
  466. + # IN_GCC tells obstack.h to use gstddef.h.
  467. + INTERNAL_CFLAGS = $(CROSS) -DIN_GCC
  468. + # This is the variable actually used when we compile.
  469. + ALL_CFLAGS = $(INTERNAL_CFLAGS) $(X_CFLAGS) $(T_CFLAGS) $(CFLAGS) $(XCFLAGS)
  470. + # Likewise.
  471. + ALL_CPPFLAGS = $(CPPFLAGS) $(X_CPPFLAGS) $(T_CPPFLAGS)
  472. + # Even if ALLOCA is set, don't use it if compiling with GCC.
  473. + USE_ALLOCA= ` case "${CC}" in "${OLDCC}") echo ${ALLOCA} ;; esac `
  474. + USE_HOST_ALLOCA= ` case "${HOST_CC}"@"${HOST_ALLOCA}" in "${OLDCC}"@?*) echo ${HOST_PREFIX}${HOST_ALLOCA} ;; esac `
  475. + USE_HOST_MALLOC= ` case "${HOST_MALLOC}" in ?*) echo ${HOST_PREFIX}${HOST_MALLOC} ;; esac `
  476. + USE_HOST_OBSTACK= ` case "${HOST_OBSTACK}" in ?*) echo ${HOST_PREFIX}${HOST_OBSTACK} ;; esac `
  477. + # Dependency on obstack, alloca, malloc or whatever library facilities
  478. + # are not installed in the system libraries.
  479. + # We don't use USE_ALLOCA because backquote expansion doesn't work in deps.
  480. + LIBDEPS= $(OBSTACK) $(ALLOCA) $(MALLOC)
  481. + # Likewise, for use in the tools that must run on this machine
  482. + # even if we are cross-building GCC.
  483. + # We don't use USE_ALLOCA because backquote expansion doesn't work in deps.
  484. + HOST_LIBDEPS= $(HOST_PREFIX)$(HOST_OBSTACK) $(HOST_PREFIX)$(HOST_ALLOCA) $(HOST_PREFIX)$(HOST_MALLOC)
  485. + # How to link with both our special library facilities
  486. + # and the system's installed libraries.
  487. + LIBS = $(OBSTACK) $(USE_ALLOCA) $(MALLOC) $(CLIB)
  488. + # Likewise, for use in the tools that must run on this machine
  489. + # even if we are cross-building GCC.
  490. + HOST_LIBS = $(USE_HOST_OBSTACK) $(USE_HOST_ALLOCA) $(USE_HOST_MALLOC)  \
  491. +         $(HOST_CLIB)
  492. + HOST_RTL = $(HOST_PREFIX)rtl.o
  493. + HOST_RTLANAL = $(HOST_PREFIX)rtlanal.o
  494. + HOST_PRINT = $(HOST_PREFIX)print-rtl.o
  495. + # Specify the directories to be searched for header files.
  496. + # Both . and srcdir are used, in that order,
  497. + # so that tm.h and config.h will be found in the compilation
  498. + # subdirectory rather than in the source directory.
  499. + INCLUDES = -I. -I$(srcdir) -I$(srcdir)/config
  500. + SUBDIR_INCLUDES = -I.. -I../$(srcdir) -I../$(srcdir)/config
  501. + # Always use -I$(srcdir)/config when compiling.
  502. + .c.o:
  503. +     $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
  504. + # This tells GNU make version 3 not to export all the variables
  505. + # defined in this file into the environment.
  506. + .NOEXPORT:
  507. + # Lists of files for various purposes.
  508. + # A list of all the language-specific executables.
  509. + COMPILERS = cc1 cc1plus cc1obj gnat1
  510. + # Language-specific object files for C.
  511. + C_OBJS = c-parse.o c-lang.o c-lex.o c-pragma.o \
  512. +    c-decl.o c-typeck.o c-convert.o c-aux-info.o c-common.o c-iterate.o
  513. + # Language-specific object files for Objective C.
  514. + OBJC_OBJS = objc-parse.o objc-act.o c-lex.o c-pragma.o \
  515. +    c-decl.o c-typeck.o c-convert.o c-aux-info.o c-common.o c-iterate.o
  516. + # Language-specific object files for C++.
  517. + CPLUS_OBJS = cp-parse.o cp-decl.o cp-decl2.o \
  518. +    cp-typeck.o cp-type2.o cp-tree.o cp-ptree.o \
  519. +    cp-cvt.o cp-search.o cp-lex.o cp-gc.o cp-call.o \
  520. +    cp-class.o cp-init.o cp-method.o cp-except.o \
  521. +    cp-expr.o cp-pt.o cp-edsel.o cp-xref.o \
  522. +    $(CPLUS_INPUT) cp-spew.o c-common.o cp-error.o cp-errfn.o
  523. + # Languages-specific object files for Ada.
  524. + # Object files for gnat1 from C sources.
  525. + GNAT1_C_OBJS = b_gnat1.o a-adaint.o a-gettty.o a-gtran3.o a-misc.o a-trans3.o \
  526. +  a-trans4.o a-trans.o a-uintp.o
  527. + # Object files from Ada sources that are used by gnat1 and gnatf
  528. + GNAT_ADA_OBJS = alloc.o atree.o casing.o comperr.o csets.o debug.o \
  529. +  debug_a.o einfo.o elists.o errout.o excep.o expand.o \
  530. +  exp_attr.o exp_ch2.o exp_ch3.o \
  531. +  exp_ch4.o exp_ch5.o exp_ch6.o exp_ch7.o exp_ch8.o exp_ch9.o exp_ch10.o \
  532. +  exp_ch11.o exp_ch12.o exp_ch13.o exp_intr.o exp_prag.o exp_util.o fname.o \
  533. +  frontend.o \
  534. +  get_targ.o gnatvsn.o itypes.o krunch.o lib.o limits.o namet.o nlists.o \
  535. +  nmake.o  opt.o osint.o output.o par.o  rat.o rtsfind.o scans.o scn.o \
  536. +  sdefault.o sem.o sem_attr.o sem_ch3.o sem_ch4.o \
  537. +  sem_ch5.o sem_ch6.o sem_ch7.o sem_ch8.o sem_ch9.o sem_ch10.o sem_ch11.o \
  538. +  sem_ch12.o sem_ch13.o sem_disp.o sem_eval.o sem_intr.o sem_prag.o \
  539. +  sem_res.o sem_type.o \
  540. +  sem_util.o sinfo.o sinfo-cn.o sinput.o snames.o sprint.o stand.o \
  541. +  stringt.o style.o switch.o system.o s-assert.o  s-secsta.o \
  542. +  s-stalib.o s-stoele.o s-strcon.o s-strequ.o s-tasoli.o s-taspda.o s-traceb.o \
  543. +  s-enviro.o tbuild.o treepr.o treeprs.o ttypes.o ttypef.o types.o \
  544. +  uintp.o uname.o unixlib.o usage.o widechar.o 
  545. + # Object files for gnat executables
  546. + GNATF_OBJS =  $(GNAT_ADA_OBJS) gnatfdrv.o xref.o xref_tab.o a-adaint.o \
  547. +  a-gettty.o
  548. + GNAT1_ADA_OBJS = $(GNAT_ADA_OBJS) back_end.o gnat1drv.o
  549. + GNAT1_OBJS = $(GNAT1_C_OBJS) $(GNAT1_ADA_OBJS)
  550. + GNATBIND_OBJS = gnatbind.o ali.o alloc.o bcheck.o binde.o binderr.o bindgen.o \
  551. +   bindusg.o butil.o debug.o excep.o gnatvsn.o limits.o namet.o \
  552. +   opt.o osint.o output.o sdefault.o switch.o system.o \
  553. +   s-assert.o s-strequ.o s-tasoli.o s-taspda.o s-traceb.o s-secsta.o \
  554. +   s-stalib.o s-stoele.o s-enviro.o types.o unixlib.o widechar.o a-adaint.o
  555. + # ??? should this include all the s-*.o files explicitly?
  556. + GKRUNCH_OBJS = ada.o a-ioexce.o a-teioau.o a-textio.o gkrunch.o krunch.o \
  557. +   system.o s-enviro.o s-stoele.o s-secsta.o s-taspda.o s-tasoli.o \
  558. +   s-stalib.o $(LIBGNAT_OBJS)
  559. + # The runtime library for gnat comprises two directories.  One contains the
  560. + # Ada source files that the compiler (gnat1) needs -- these files are listed
  561. + # by ADA_INCLUDE_SRCS -- and the other contains the object files and their
  562. + # corresponding .ali files for the parts written in Ada, libgnat.a for
  563. + # the parts of the runtime written in C, and libpthreads.a for the pthreads
  564. + # emulation library.  LIBGNAT_OBJS lists the objects that go into libgnat.a,
  565. + # while GNAT_RTL_OBJS lists the object files compiled from Ada sources that
  566. + # go into the directory.  The pthreads emulation is built in the threads
  567. + # subdirectory and copied.
  568. + LIBGNAT_SRCS = io-aux.c a-cio.c get_errno.c
  569. + LIBGNAT_OBJS = io-aux.o a-cio.o get_errno.o
  570. + # NOTE ??? - when the -I option for compiling Ada code is made to work,
  571. + #  the library installation will change and there will be a
  572. + #  GNAT_RTL_SRCS.  Right now we count on being able to build GNAT_RTL_OBJS
  573. + #  from ADA_INCLUDE_SRCS.
  574. + GNAT_RTL_OBJS = ada.o a-calend.o \
  575. + a-chlat1.o a-cwila1.o a-finali.o \
  576. + a-charac.o \
  577. + a-ioexce.o \
  578. + a-numeri.o \
  579. + a-numaux.o \
  580. + a-nlelfu.o \
  581. + a-nllefu.o \
  582. + a-nselfu.o \
  583. + a-nuelfu.o a-nuranu.o \
  584. + a-string.o a-strmap.o a-strbou.o a-strcon.o\
  585. + a-strfix.o a-strsea.o a-tags.o \
  586. + a-taside.o \
  587. + a-textio.o \
  588. + a-teioau.o calendar.o interfac.o ioexcept.o \
  589. + system.o \
  590. + s-addima.o \
  591. + s-assert.o \
  592. + s-enviro.o \
  593. + s-errrep.o \
  594. + s-cconst.o \
  595. + s-comexc.o \
  596. + s-finimp.o \
  597. + s-poscon.o \
  598. + s-poserr.o \
  599. + s-posrte.o \
  600. + s-postim.o \
  601. + s-pthrea.o \
  602. + s-img_b.o \
  603. + s-img_c.o s-img_i.o s-imglli.o \
  604. + s-img_f.o s-img_lf.o s-imgllf.o s-img_sf.o \
  605. + s-img_wc.o \
  606. + s-secsta.o \
  607. + s-stalib.o \
  608. + s-std.o s-stoele.o \
  609. + s-strcon.o s-strequ.o \
  610. + s-taprob.o \
  611. + s-taruty.o \
  612. + s-tasabo.o \
  613. + s-tasoli.o \
  614. + s-tasclo.o \
  615. + s-taskin.o \
  616. + s-tasmem.o \
  617. + s-taspda.o \
  618. + s-taspri.o \
  619. + s-tasque.o \
  620. + s-tasren.o \
  621. + s-tassta.o \
  622. + s-tastal.o \
  623. + s-tatise.o \
  624. + s-tcmasp.o \
  625. + s-timtyp.o \
  626. + s-unstyp.o \
  627. + s-xp.o \
  628. + s-xp_bml.o \
  629. + s-xp_bmi.o \
  630. + s-xp_f.o s-xp_i.o \
  631. + s-xp_lf.o s-xp_li.o s-xp_llf.o s-xp_lli.o \
  632. + s-xp_nbm.o \
  633. + s-xp_sf.o s-xp_si.o s-xp_ssi.o \
  634. + text_io.o \
  635. + io.o a-cio.o get_errno.o
  636. + ADA_INCLUDE_SRCS = ada.ads \
  637. +   a-astaco.ads \
  638. +   a-calend.ads a-calend.adb \
  639. +   a-calcon.ads a-calcon.adb \
  640. +   a-caldel.adb \
  641. +   a-charac.ads a-charac.adb \
  642. +   a-chlat1.ads a-cwila1.ads \
  643. +   a-decima.ads \
  644. +   a-direio.ads a-direio.adb \
  645. +   a-dynpri.ads \
  646. +   a-except.ads a-finali.ads a-finali.adb \
  647. +   a-interr.ads \
  648. +   a-intnam.ads \
  649. +   a-ioexce.ads \
  650. +   a-numeri.ads \
  651. +   a-numaux.ads \
  652. +   a-nuelfu.ads \
  653. +   a-ngelfu.ads \
  654. +   a-ngelfu.adb \
  655. +   a-ngcoty.ads \
  656. +   a-ngcoty.adb \
  657. +   a-ngcefu.ads \
  658. +   a-ngcefu.adb \
  659. +   a-nlelfu.ads \
  660. +   a-nllefu.ads \
  661. +   a-nuranu.ads \
  662. +   a-nuranu.adb \
  663. +   a-nselfu.ads \
  664. +   a-reatim.ads \
  665. +   a-sequio.ads a-sequio.adb\
  666. +   a-string.ads \
  667. +   a-strcon.ads \
  668. +   a-strbou.ads a-strbou.adb \
  669. +   a-strfix.ads a-strfix.adb \
  670. +   a-strsea.ads a-strsea.adb \
  671. +   a-strmap.ads a-strmap.adb \
  672. +   a-stwibo.ads a-stwibo.adb \
  673. +   a-stwico.ads \
  674. +   a-stwifi.ads a-stwifi.adb \
  675. +   a-stwima.ads a-stwima.adb \
  676. +   a-stwise.ads a-stwise.adb \
  677. +   a-stwiun.ads a-stwiun.adb \
  678. +   a-strunb.ads a-strunb.adb \
  679. +   a-storio.ads a-storio.adb \
  680. +   a-stream.ads a-ststio.ads \
  681. +   a-tags.adb a-tags.ads \
  682. +   a-sytaco.ads \
  683. +   a-tasatt.ads a-tasatt.adb \
  684. +   a-taside.ads a-taside.adb \
  685. +   a-textio.ads a-textio.adb \
  686. +   a-teioau.ads a-teioau.adb \
  687. +   a-ticoio.ads a-ticoio.adb \
  688. +   a-teiopi.ads \
  689. +   a-unccon.ads a-unccon.adb \
  690. +   a-uncdea.ads a-uncdea.adb \
  691. +   a-witeio.ads \
  692. +   a-wticio.ads a-wticio.adb \
  693. +   a-wtiopi.ads \
  694. +   calendar.ads \
  695. +   directio.ads \
  696. +   interfac.ads \
  697. +   i-c.ads i-c.adb \
  698. +   i-cpoint.ads \
  699. +   i-cstrin.ads i-cstrin.adb\
  700. +   i-cobol.ads i-fortra.ads \
  701. +   ioexcept.ads \
  702. +   sequenio.ads \
  703. +   s-assert.ads \
  704. +   s-addima.ads s-addima.adb \
  705. +   s-errrep.ads s-errrep.adb \
  706. +   s-cconst.ads \
  707. +   s-comexc.ads s-comexc.adb \
  708. +   s-enviro.ads s-enviro.adb \
  709. +   s-finimp.ads s-finimp.adb \
  710. +   s-img_b.adb s-img_b.ads \
  711. +   s-img_c.adb s-img_c.ads s-img_f.ads s-img_f.adb \
  712. +   s-img_i.ads s-img_i.adb s-img_lf.adb s-img_lf.ads \
  713. +   s-imgllf.adb s-imgllf.ads s-imglli.adb s-imglli.ads \
  714. +   s-img_sf.adb s-img_sf.ads s-img_wc.ads s-img_wc.adb \
  715. +   s-poscon.ads \
  716. +   s-poserr.ads \
  717. +   s-posrte.ads s-posrte.adb \
  718. +   s-postim.ads s-postim.adb \
  719. +   s-pthrea.ads s-pthrea.adb \
  720. +   s-reatim.ads s-reatim.adb \
  721. +   s-retico.ads s-retico.adb \
  722. +   s-retide.ads s-retide.adb \
  723. +   s-secsta.ads s-secsta.adb \
  724. +   s-stalib.ads \
  725. +   s-std.ads s-std.adb \
  726. +   s-stoele.ads s-stoele.adb \
  727. +   s-strcon.adb s-strcon.ads \
  728. +   s-strequ.adb s-strequ.ads \
  729. +   s-taprob.adb s-taprob.ads \
  730. +   s-taruty.adb s-taruty.ads \
  731. +   s-tasabo.adb s-tasabo.ads \
  732. +   s-tasoli.adb s-tasoli.ads \
  733. +   s-taspda.adb s-taspda.ads \
  734. +   s-tasclo.adb s-tasclo.ads \
  735. +   s-taskin.adb s-taskin.ads \
  736. +   s-tasmem.adb s-tasmem.ads \
  737. +   s-taspri.adb s-taspri.ads \
  738. +   s-tasque.adb s-tasque.ads \
  739. +   s-tasren.adb s-tasren.ads \
  740. +   s-tassta.adb s-tassta.ads \
  741. +   s-tastal.adb s-tastal.ads \
  742. +   s-tatise.adb s-tatise.ads \
  743. +   s-tcmasp.adb s-tcmasp.ads \
  744. +   s-timtyp.ads \
  745. +   system.ads \
  746. +   s-xp.adb s-xp.ads \
  747. +   s-xp_bml.ads s-xp_bml.adb \
  748. +   s-xp_bmi.ads s-xp_bmi.adb \
  749. +   s-xp_f.ads s-xp_i.ads s-xp_lf.ads s-xp_li.ads \
  750. +   s-xp_llf.ads s-xp_lli.ads \
  751. +   s-xp_nbm.adb s-xp_nbm.ads \
  752. +   s-xp_sf.ads s-xp_si.ads \
  753. +   s-xp_ssi.ads \
  754. +   s-unstyp.ads \
  755. +   text_io.ads \
  756. +   unchconv.adb unchconv.ads \
  757. +   unchdeal.adb unchdeal.ads \
  758. +   io.ads io.adb
  759. + # Files specific to the C interpreter bytecode compiler(s).
  760. + BC_OBJS = bc-emit.o bc-optab.o
  761. + # Language-independent object files.
  762. + OBJS = toplev.o version.o tree.o print-tree.o stor-layout.o fold-const.o \
  763. +  function.o stmt.o expr.o calls.o expmed.o explow.o optabs.o varasm.o \
  764. +  rtl.o print-rtl.o rtlanal.o emit-rtl.o real.o \
  765. +  dbxout.o sdbout.o dwarfout.o xcoffout.o \
  766. +  integrate.o jump.o cse.o loop.o unroll.o flow.o stupid.o combine.o \
  767. +  regclass.o local-alloc.o global.o reload.o reload1.o caller-save.o \
  768. +  insn-peep.o reorg.o sched.o final.o recog.o reg-stack.o \
  769. +  insn-opinit.o insn-recog.o insn-extract.o insn-output.o insn-emit.o \
  770. +  insn-attrtab.o aux-output.o getpwd.o convert.o $(EXTRA_OBJS)
  771. + # GEN files are listed separately, so they can be built before doing parallel
  772. + #  makes for cc1 or cc1plus.  Otherwise sequent parallel make attempts to load
  773. + #  them before rtl.o is compiled.
  774. + GEN= genemit genoutput genrecog genextract genflags gencodes genconfig genpeep
  775. + # Files to be copied away after each stage in building.
  776. + STAGESTUFF = *.o insn-flags.h insn-config.h insn-codes.h \
  777. +  insn-output.c insn-recog.c insn-emit.c insn-extract.c insn-peep.c \
  778. +  insn-attr.h insn-attrtab.c insn-opinit.c \
  779. +  stamp-flags stamp-config stamp-codes \
  780. +  stamp-output stamp-recog stamp-emit stamp-extract stamp-peep \
  781. +  stamp-attr stamp-attrtab stamp-opinit stamp-proto \
  782. +  genemit genoutput genrecog genextract genflags gencodes genconfig genpeep \
  783. +  genattrtab genattr genopinit \
  784. +  bc-arity.h bc-opcode.h bc-opname.h \
  785. +  stamp-bcarity stamp-bcopcode stamp-bcopname \
  786. +  bi-arity bi-opcode bi-opname \
  787. +  $(GCC_PASSES) $(EXTRA_PARTS) $(EXTRA_PROGRAMS) gcc-cross cccp g++ g++-cross \
  788. +  cc1plus cc1obj enquire protoize unprotoize specs collect2 $(USE_COLLECT2)
  789. + # Members of libgcc1.a.
  790. + LIB1FUNCS = _mulsi3 _udivsi3 _divsi3 _umodsi3 _modsi3 \
  791. +    _lshrsi3 _lshlsi3 _ashrsi3 _ashlsi3 \
  792. +    _divdf3 _muldf3 _negdf2 _adddf3 _subdf3 \
  793. +    _fixdfsi _fixsfsi _floatsidf _floatsisf _truncdfsf2 _extendsfdf2 \
  794. +    _addsf3 _negsf2 _subsf3 _mulsf3 _divsf3 \
  795. +    _eqdf2 _nedf2 _gtdf2 _gedf2 _ltdf2 _ledf2 \
  796. +    _eqsf2 _nesf2 _gtsf2 _gesf2 _ltsf2 _lesf2
  797. + # Library members defined in libgcc2.c.
  798. + LIB2FUNCS = _muldi3 _divdi3 _moddi3 _udivdi3 _umoddi3 _negdi2 \
  799. +      _lshrdi3 _lshldi3 _ashldi3 _ashrdi3 _ffsdi2 \
  800. +     _udiv_w_sdiv _udivmoddi4 _cmpdi2 _ucmpdi2 _floatdidf _floatdisf \
  801. +     _fixunsdfsi _fixunssfsi _fixunsdfdi _fixdfdi _fixunssfdi _fixsfdi \
  802. +     _fixxfdi _fixunsxfdi _floatdixf _fixunsxfsi \
  803. +     _fixtfdi _fixunstfdi _floatditf \
  804. +     __gcc_bcmp _varargs _eprintf _op_new _new_handler _op_delete \
  805. +     _bb _shtab _clear_cache _trampoline __main _exit _ctors
  806. + # Header files that are made available under the same name
  807. + # to programs compiled with GCC.
  808. + USER_H = va-alpha.h va-h8300.h va-i860.h va-i960.h va-mips.h va-m88k.h \
  809. +     va-pa.h va-pyr.h va-sparc.h va-clipper.h va-spur.h proto.h $(EXTRA_HEADERS)
  810. + # The files that "belong" in CONFIG_H are deliberately omitted
  811. + # because having them there would not be useful in actual practice.
  812. + # All they would do is cause complete recompilation every time
  813. + # one of the machine description files is edited.
  814. + # That may or may not be what one wants to do.
  815. + # If it is, rm *.o is an easy way to do it.
  816. + # CONFIG_H = config.h tm.h
  817. + CONFIG_H =
  818. + RTL_H = rtl.h rtl.def machmode.h machmode.def
  819. + TREE_H = tree.h real.h tree.def machmode.h machmode.def
  820. + CPLUS_TREE_H = $(TREE_H) cp-tree.h cp-tree.def
  821. + BYTECODE_H = bytecode.h bc-emit.h bc-optab.h
  822. + # Avoid a lot of time thinking about remaking Makefile.in and *.def.
  823. + .SUFFIXES: .in .def
  824. + # Say how to compile Ada programs.
  825. + .SUFFIXES: .ada .adb .ads
  826. + ADA_CC=$(CC)
  827. + ADAFLAGS= -gnatg -gnata
  828. + BOOT_ADAFLAGS= $(ADAFLAGS)
  829. + ALL_ADAFLAGS= $(CFLAGS) $(ADAFLAGS)
  830. + GNATBIND= gnatbind
  831. + .ada.o:
  832. +     $(ADA_CC) -c $(ALL_ADAFLAGS) $<
  833. + .adb.o:
  834. +     $(ADA_CC) -c $(ALL_ADAFLAGS) $<
  835. + .ads.o:
  836. +     $(ADA_CC) -c $(ALL_ADAFLAGS) $<
  837. + Makefile: $(srcdir)/Makefile.in $(srcdir)/configure $(srcdir)/version.c \
  838. +    $(srcdir)/config/$(xmake_file) $(srcdir)/config/$(tmake_file)
  839. +     sh config.status
  840. + all.internal: start.encap rest.encap
  841. + # This is what to compile if making a cross-compiler.
  842. + # Note that we can compile enquire using the cross-compiler just built,
  843. + # although we can't run it on this machine.
  844. + all.cross: native gcc-cross g++-cross specs $(LIBGCC) stmp-headers $(STMP_FIXPROTO) $(CROSS_TEST) $(ENQUIRE) $(EXTRA_PARTS)
  845. + # This is what to compile if making gcc with a cross-compiler.
  846. + all.build: native xgcc g++ $(EXTRA_PARTS)
  847. + # This is what must be made before installing GCC and converting libraries.
  848. + start.encap: native xgcc g++ specs $(LIBGCC1) xlimits.h
  849. + # Use this to make a GCC that will be used only to recompile GCC.
  850. + for-bootstrap: start.encap $(LIBGCC)
  851. + # These can't be made, with COFF encapsulation, until after GCC can run.
  852. + rest.encap: $(LIBGCC) stmp-headers $(STMP_FIXPROTO) $(EXTRA_PARTS)
  853. + # This is what is made with the host's compiler
  854. + # whether making a cross compiler or not.
  855. + native: config.status cpp $(LANGUAGES) $(EXTRA_PASSES) $(EXTRA_PROGRAMS) $(USE_COLLECT2)
  856. + # Define the names for selecting languages in LANGUAGES.
  857. + # Note that it would be nice to move the dependency on g++
  858. + # into the C++ rule, but that needs a little bit of work
  859. + # to do the right thing within all.cross.
  860. + C c: cc1
  861. + C++ c++: cc1plus
  862. + # The next two ought to depend on objc-runtime, but that doesn't work yet.
  863. + OBJC objc: cc1obj
  864. + OBJECTIVE-C objective-c: cc1obj
  865. + Ada ada: gnat1 gnatbind gnatbl gnatf gkrunch gnatchop
  866. +     true
  867. + PROTO: proto
  868. + # Really, really stupid make features, such as SUN's KEEP_STATE, may force
  869. + # a target to build even if it is up-to-date.  So we must verify that
  870. + # config.status does not exist before failing.
  871. + config.status:
  872. +     @if [ ! -f config.status ] ; then \
  873. +       echo You must configure gcc.  Look at the INSTALL file for details.; \
  874. +       false; \
  875. +     else \
  876. +       true; \
  877. +     fi
  878. + # On the target machine, finish building a cross compiler.
  879. + # This does the things that can't be done on the host machine.
  880. + rest.cross: $(LIBGCC) gfloat.h specs
  881. + # Verify that it works to compile and link cross-test.
  882. + # If it does, then there are sufficient replacements for libgcc1.a.
  883. + cross-test: cross-test.o native gcc-cross $(LIBGCC) $(GCC_PARTS)
  884. +     $(GCC_FOR_TARGET) $(GCC_CFLAGS) cross-test.o -o $@
  885. + cross-test.o: cross-test.c native gcc-cross
  886. +     $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) -c $(srcdir)/cross-test.c
  887. + # Recompile all the language-independent object files.
  888. + # This is used only if the user explicitly asks for it.
  889. + compilations: ${OBJS}
  890. + # We call this executable `xgcc' rather than `gcc'
  891. + # to avoid confusion if the current directory is in the path
  892. + # and CC is `gcc'.  It is renamed to `gcc' when it is installed.
  893. + xgcc: gcc.o version.o $(LIBDEPS)
  894. +     $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o xgcc gcc.o version.o $(LIBS)
  895. + # Dump a specs file to make -B./ read these specs over installed ones.
  896. + specs: xgcc
  897. +     $(GCC_FOR_TARGET) -dumpspecs > specs
  898. + # Create the compiler driver for g++.
  899. + g++: g++.o $(LIBDEPS)
  900. +     $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o g++ g++.o $(LIBS)
  901. + # We do want to create an executable named `xgcc', so we can use it to
  902. + # compile libgcc2.a.
  903. + # Also create gcc-cross, so that install-common will install properly.
  904. + gcc-cross: xgcc
  905. +     cp xgcc gcc-cross
  906. + # Create a version of the g++ driver which calls the cross-compiler.
  907. + g++-cross: $(srcdir)/g++.c
  908. +     $(CC) $(ALL_CFLAGS) $(INCLUDES) $(LDFLAGS) -o g++-cross \
  909. +        -DGCC_NAME=\"$(target)-gcc\" $(srcdir)/g++.c version.o $(LIBS)
  910. + cc1: $(P) $(C_OBJS) $(OBJS) $(BC_OBJS) $(LIBDEPS)
  911. +     $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cc1 $(C_OBJS) $(OBJS) $(BC_OBJS) $(LIBS)
  912. + cc1plus: $(P) $(CPLUS_OBJS) $(OBJS) $(BC_OBJS) $(LIBDEPS)
  913. +     $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cc1plus $(CPLUS_OBJS) $(BC_OBJS) $(OBJS) $(LIBS)
  914. + cc1obj: $(P) $(OBJC_OBJS) $(OBJS) $(BC_OBJS) $(LIBDEPS)
  915. +     $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cc1obj $(OBJC_OBJS) $(OBJS) $(BC_OBJS) $(LIBS)
  916. + # Needs to be built with CC=gcc
  917. + gnat1: $(P) $(GNAT1_OBJS) $(OBJS) $(BC_OBJS) $(LIBDEPS)
  918. +     $(ADA_CC) $(ALL_CFLAGS) $(LDFLAGS) -o gnat1 $(GNAT1_OBJS) $(OBJS) $(BC_OBJS) $(LIBS)
  919. + gnatf: $(P) $(GNATF_OBJS) b_gnatf.o
  920. +     $(ADA_CC) $(ALL_CFLAGS) $(LDFLAGS) -o gnatf $(GNATF_OBJS) b_gnatf.o
  921. + gnatbind: $(P) $(GNATBIND_OBJS) b_gnatb.o
  922. +     $(ADA_CC) $(ALL_CFLAGS) $(LDFLAGS) -o gnatbind $(GNATBIND_OBJS)\
  923. +                b_gnatb.o
  924. + gkrunch: $(P) $(GKRUNCH_OBJS) b_gkrun.o
  925. +     $(ADA_CC) $(ALL_CFLAGS) $(LDFLAGS) -o gkrunch $(GKRUNCH_OBJS) b_gkrun.o
  926. + gnatchop: $(P) gnatchop.o
  927. +     $(ADA_CC) $(ALL_CFLAGS) $(LDFLAGS) -o gnatchop gnatchop.o
  928. + gnatbl.o: gnatbl.c config.status
  929. +     $(ADA_CC) -c $(ALL_CFLAGS) $(INCLUDES) \
  930. +            -DADA_RTL_OBJ_DIR="\"$(ADA_RTL_OBJ_DIR)\"" gnatbl.c
  931. + gnatbl: gnatbl.o
  932. +     $(ADA_CC) -o gnatbl $(ALL_CFLAGS) $(LDFLAGS) gnatbl.o
  933. + # .s files for cross-building
  934. + gnat-cross: force
  935. +     make $(GNAT1_ADA_OBJS) CC="gcc -Bstage1/" CFLAGS="-S -gnatp"
  936. + # Copy float.h from its source.
  937. + gfloat.h: $(FLOAT_H)
  938. +     cp $(FLOAT_H) gfloat.h
  939. + # Create float.h source for the native machine.
  940. + float.h-nat: enquire
  941. +     -./enquire -f > tmp-float.h
  942. +     mv tmp-float.h float.h-nat
  943. + # Create a dummy float.h source for a cross-compiler.
  944. + float.h-cross:
  945. +     echo "#error float.h values not known for cross-compiler" > float.h-cross
  946. + # Used to compile enquire with standard cc, but have forgotten why.
  947. + # Let's try with GCC.
  948. + enquire: enquire.o $(GCC_PARTS)
  949. +     $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ENQUIRE_LDFLAGS) enquire.o -o $@
  950. + enquire.o: $(srcdir)/enquire.c $(GCC_PASSES)
  951. + #    -if [ "$(srcdir)" != "." ]; then rm -f ./enquire.c; else true; fi
  952. + #    -cp $(srcdir)/enquire.c . > /dev/null 2>&1
  953. + # Breaking this line caused a problem with one version of GNU make.
  954. +     $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) $(ENQUIRE_CFLAGS) -I. -c $(srcdir)/enquire.c
  955. + # Build the version of limits.h that we will install.
  956. + xlimits.h: glimits.h limitx.h limity.h
  957. +     if [ -f $(SYSTEM_HEADER_DIR)/limits.h ] ; then \
  958. +       cat $(srcdir)/limitx.h $(srcdir)/glimits.h $(srcdir)/limity.h > xlimits.h; \
  959. +     else \
  960. +       cat $(srcdir)/glimits.h > xlimits.h; \
  961. +     fi
  962. + # Build libgcc.a.
  963. + # This is done in two parts because some functions, in libgcc1.c,
  964. + # must be compiled with something other than GCC,
  965. + # while the rest, in libgcc2.c, must be compiled with xgcc.
  966. + # That means we can't do libgcc2.c until after xgcc, cc1, etc.
  967. + # Use this as value of LIBGCC1 to cause conversion to GNU library format.
  968. + # LIBCONVERT should put its output in libgcc1.conv.
  969. + libgcc1.conv: libgcc1.a
  970. +     $(LIBCONVERT) libgcc1.a libgcc1.conv
  971. + # Use this as value of LIBGCC1 to inhibit use of libgcc1.c entirely.
  972. + # Make an empty file instead.
  973. + libgcc1.null: $(GCC_PASSES)
  974. +     echo "__foo () {}" > dummy.c
  975. +     $(GCC_FOR_TARGET) $(GCC_CFLAGS) -c dummy.c
  976. +     $(OLDAR) $(OLDAR_FLAGS) libgcc1.null dummy.o
  977. +     rm -f dummy.o dummy.c
  978. + # This is $(LIBGCC1) for a cross-compiler.
  979. + # We have no automatic way of building libgcc1.a, 
  980. + # so it's up to the installer to find a way to do that.
  981. + # This rule deliberately does not depend on libgcc1.a
  982. + # so that it will fail if the installer hasn't provided it.
  983. + libgcc1.cross:
  984. +     mv libgcc1.a libgcc1.cross || (echo You must find a way to make libgcc1.a; false)
  985. + # Compile the library of arithmetic subroutines with the native compiler.
  986. + # Don't compile it with GCC!
  987. + # (That would cause most arithmetic functions to call themselves.)
  988. + libgcc1.a: libgcc1.c $(CONFIG_H) $(LIB1FUNCS_EXTRA) config.status
  989. +     -rm -f tmplibgcc1.a
  990. + # Actually build it in tmplibgcc1.a, then rename at end,
  991. + # so that libgcc1.a itself remains nonexistent if compilation is aborted.
  992. + # -e causes any failing command to make this rule fail.
  993. + # -e doesn't work in certain shells, so we test $$? as well.
  994. + # lynx has a broken ar, it always complains when the initial library is
  995. + # empty, thus this command works only if we don't do -e
  996. + # There is a trailing backslash (\) deleted from the following line.
  997. + #    set -e;
  998. +     for name in $(LIB1FUNCS); \
  999. +     do \
  1000. +       echo $${name}; \
  1001. +       rm -f $${name}.o; \
  1002. +       $(OLDCC) $(CCLIBFLAGS) $(INCLUDES) -c -DL$${name} $(srcdir)/libgcc1.c; \
  1003. +       if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
  1004. +       mv libgcc1.o $${name}.o; \
  1005. +       $(OLDAR) $(OLDAR_FLAGS) tmplibgcc1.a $${name}.o; \
  1006. +       rm -f $${name}.o; \
  1007. +     done
  1008. + # Some shells crash when a loop has no items.
  1009. + # So make sure there is always at least one--`..'.
  1010. + # Then ignore it.
  1011. + # We don't use -e here because there are if statements
  1012. + # that should not make the command give up when the if condition is false.
  1013. + # Instead, we test for failure after each command where it matters.
  1014. +     -for file in .. $(LIB1FUNCS_EXTRA); \
  1015. +     do \
  1016. +       if [ x$${file} != x.. ]; then \
  1017. +         name=`echo $${file} | sed -e 's/[.]c$$//' -e 's/[.]asm$$//'`; \
  1018. +         echo $${name}; \
  1019. +         if [ $${name}.asm = $${file} ]; then \
  1020. +           cp $${file} $${name}.s || exit 1; file=$${name}.s; \
  1021. +         else true; fi; \
  1022. +         $(OLDCC) $(CCLIBFLAGS) $(INCLUDES) -c $${file}; \
  1023. +         if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
  1024. +         $(OLDAR) $(OLDAR_FLAGS) tmplibgcc1.a $${name}.o; \
  1025. +         if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
  1026. +         rm -f $${name}.[so]; \
  1027. +       else true; \
  1028. +       fi; \
  1029. +     done
  1030. +     mv tmplibgcc1.a libgcc1.a
  1031. + # Compiling libgcc2.a requires making sure that cc1, etc. have been compiled.
  1032. + # But recompiling cc1 should not force recompilation of libgcc2.a.
  1033. + # If you want to force recompilation, delete libgcc2.a.
  1034. + libgcc2.ready: $(GCC_PASSES) $(LIBGCC2_DEPS)
  1035. +     -if [ -f libgcc2.ready ] ; then \
  1036. +         true; \
  1037. +     else \
  1038. +         touch libgcc2.ready; \
  1039. +     fi
  1040. + libgcc2.a: libgcc2.c libgcc2.ready $(CONFIG_H) $(LIB2FUNCS_EXTRA) \
  1041. +    machmode.h longlong.h gbl-ctors.h config.status
  1042. + # Actually build it in tmplibgcc2.a, then rename at end,
  1043. + # so that libgcc2.a itself remains nonexistent if compilation is aborted.
  1044. +     -rm -f tmplibgcc2.a
  1045. + # -e causes any failing command to make this rule fail.
  1046. + # -e doesn't work in certain shells, so we test $$? as well.
  1047. + # lynx has a broken ar, it always complains when the initial library is
  1048. + # empty, thus this command works only if we don't do -e
  1049. + # There is a trailing backslash (\) deleted from the following line.
  1050. + #    set -e;
  1051. +     for name in $(LIB2FUNCS); \
  1052. +     do \
  1053. +       echo $${name}; \
  1054. +       $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) -c -DL$${name} \
  1055. +           $(srcdir)/libgcc2.c -o $${name}.o; \
  1056. +       if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
  1057. +       $(AR) $(AR_FLAGS) tmplibgcc2.a $${name}.o; \
  1058. +       rm -f $${name}.o; \
  1059. +     done
  1060. + # Some shells crash when a loop has no items.
  1061. + # So make sure there is always at least one--`..'.
  1062. + # Then ignore it.
  1063. + # We don't use -e here because there are if statements
  1064. + # that should not make the command give up when the if condition is false.
  1065. + # Instead, we test for failure after each command where it matters.
  1066. +     -for file in .. $(LIB2FUNCS_EXTRA); \
  1067. +     do \
  1068. +       if [ x$${file} != x.. ]; then \
  1069. +         name=`echo $${file} | sed -e 's/[.]c$$//' -e 's/[.]asm$$//'`; \
  1070. +         echo $${name}; \
  1071. +         if [ $${name}.asm = $${file} ]; then \
  1072. +           cp $${file} $${name}.s || exit 1; file=$${name}.s; \
  1073. +         else true; fi; \
  1074. +         $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) -c $${file}; \
  1075. +         if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
  1076. +         $(AR) $(AR_FLAGS) tmplibgcc2.a $${name}.o; \
  1077. +         rm -f $${name}.[so]; \
  1078. +       else true; \
  1079. +       fi; \
  1080. +     done
  1081. +     mv tmplibgcc2.a libgcc2.a
  1082. + # These lines were deleted from above the mv command
  1083. + # because ranlibing libgcc.a itself should suffice.
  1084. + #    -if [ x${HPUX_GAS} = x ] ; then \
  1085. + #      if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc2.a; else true; fi \
  1086. + #    else true; fi
  1087. + # Combine the various libraries into a single library, libgcc.a.
  1088. + libgcc.a: $(LIBGCC1) $(LIBGCC2)
  1089. +     -rm -rf tmplibgcc.a libgcc.a tmpcopy
  1090. +     mkdir tmpcopy
  1091. +     -if [ x$(LIBGCC1) != x ];            \
  1092. +     then (cd tmpcopy; $(AR) x ../$(LIBGCC1));    \
  1093. +     else true;                    \
  1094. +     fi
  1095. + # Some versions of ar (specifically the one in RISC/os 5.x), create an
  1096. + # unwritable table of contents file, and then print an error message when
  1097. + # the second ar command tries to overwrite this file.  To avoid the error
  1098. + # message from ar, we make sure all files are writable.
  1099. +     (cd tmpcopy; chmod +w * > /dev/null 2>&1)
  1100. +     (cd tmpcopy; $(AR) x ../$(LIBGCC2))
  1101. +     (cd tmpcopy; $(AR) $(AR_FLAGS) ../tmplibgcc.a *.o)
  1102. +     rm -rf tmpcopy
  1103. +     -if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc.a; else true; fi
  1104. + # Actually build it in tmplibgcc.a, then rename at end,
  1105. + # so that libgcc.a itself remains nonexistent if compilation is aborted.
  1106. +     mv tmplibgcc.a libgcc.a
  1107. + objc-runtime: libobjc.a
  1108. + # Build the Objective C runtime library.
  1109. + libobjc.a: cc1obj libgcc2.ready $(USE_COLLECT2) $(EXTRA_PARTS)
  1110. +     if [ -d objc ]; then true; else mkdir objc; fi
  1111. +     thisdir1=`pwd`; \
  1112. +     srcdir1=`cd $(srcdir); pwd`; \
  1113. +     cd objc; \
  1114. +     $(MAKE) -f $${srcdir1}/objc/Makefile libobjc.a \
  1115. +       srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
  1116. +       GCC_FOR_TARGET="$${thisdir1}/xgcc -B$${thisdir1}/" \
  1117. +       GCC_CFLAGS="$(GCC_CFLAGS)"
  1118. +     -rm -f libobjc.a
  1119. +     ln objc/libobjc.a . >/dev/null 2>&1 || cp objc/libobjc.a .
  1120. +     -if $(RANLIB_TEST) ; then $(RANLIB) libobjc.a; else true; fi
  1121. + # This is used by objc/Makefile if the user runs that directly.
  1122. + sublibobjc.a: cc1obj libgcc2.ready
  1123. +     thisdir1=`pwd`; \
  1124. +     srcdir1=`cd $(srcdir); pwd`; \
  1125. +     cd objc; \
  1126. +     $(MAKE) -f $$srcdir1/objc/Makefile libobjc.a \
  1127. +       srcdir=$$srcdir1 tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
  1128. +       GCC_FOR_TARGET="$$thisdir1/xgcc -B$$thisdir1/" \
  1129. +       GCC_CFLAGS="$(GCC_CFLAGS)"
  1130. + ada-runtime : $(GNAT_RTL_OBJS) libgnat.a
  1131. + libgnat.a : $(LIBGNAT_OBJS)
  1132. +     -rm -f libgnat.a
  1133. +     $(AR) rc libgnat.a $(LIBGNAT_OBJS)
  1134. + # The pthreads emulation is presumed to only work for sunos4.1
  1135. + # Create a dummy (links will fail) in other cases
  1136. + stamp-pthreads :
  1137. +     (cd threads/src; \
  1138. +          $(MAKE) clean; \
  1139. +          $(MAKE) CC="../../xgcc -B../../" `case $(target) in sparc-sun-sunos4.1*) true;; \
  1140. +          *) echo OBJS=fake.o ;; esac`)
  1141. +     touch stamp-pthreads
  1142. + # Compile two additional files that are linked with every program
  1143. + # linked using GCC on system V, for the sake of C++ constructors.
  1144. + crtbegin.o:    crtstuff.c $(GCC_PASSES) $(CONFIG_H) gbl-ctors.h
  1145. +     $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) -DCRT_BEGIN \
  1146. +       -finhibit-size-directive -fno-inline-functions \
  1147. +       -g0 -c $(srcdir)/crtstuff.c -o crtbegin.o
  1148. + crtend.o:    crtstuff.c $(GCC_PASSES) $(CONFIG_H) gbl-ctors.h
  1149. +     $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) -DCRT_END \
  1150. +       -finhibit-size-directive -fno-inline-functions \
  1151. +       -g0 -c $(srcdir)/crtstuff.c -o crtend.o
  1152. + # Compiling object files from source files.
  1153. + # Note that dependencies on obstack.h are not written
  1154. + # because that file is not part of GCC.
  1155. + # Dependencies on gvarargs.h are not written
  1156. + # because all that file does, when not compiling with GCC,
  1157. + # is include the system varargs.h.
  1158. + # C language specific files.
  1159. + c-parse.o : $(srcdir)/c-parse.c $(CONFIG_H) $(TREE_H) c-lex.h c-parse.h \
  1160. +     c-tree.h input.h flags.h
  1161. +     $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c $(srcdir)/c-parse.c
  1162. + $(srcdir)/c-parse.c $(srcdir)/c-parse.h: $(srcdir)/c-parse.y
  1163. +     cd $(srcdir); $(BISON) $(BISONFLAGS) -d c-parse.y -o c-parse.c
  1164. + $(srcdir)/c-parse.y: $(srcdir)/c-parse.in
  1165. +     sed -e "/^ifobjc$$/,/^end ifobjc$$/d" \
  1166. +       -e "/^ifc$$/d" -e "/^end ifc$$/d" \
  1167. +       $(srcdir)/c-parse.in > $(srcdir)/c-parse.y
  1168. + c-decl.o : c-decl.c $(CONFIG_H) $(TREE_H) c-tree.h c-lex.h flags.h
  1169. + c-typeck.o : c-typeck.c $(CONFIG_H) $(TREE_H) c-tree.h flags.h
  1170. + c-lang.o : c-lang.c $(CONFIG_H) $(TREE_H)
  1171. + c-lex.o : c-lex.c $(CONFIG_H) $(TREE_H) c-lex.h c-tree.h c-parse.h \
  1172. +     input.h flags.h
  1173. + c-aux-info.o : c-aux-info.c  $(CONFIG_H) $(TREE_H) c-tree.h flags.h
  1174. + c-convert.o : c-convert.c $(CONFIG_H) $(TREE_H) flags.h
  1175. + c-pragma.o: c-pragma.c $(CONFIG_H) $(TREE_H)
  1176. + c-iterate.o: c-iterate.c $(CONFIG_H) $(TREE_H) $(RTL_H) c-tree.h flags.h
  1177. + # C++ language specific files.
  1178. + cp-parse.o : $(srcdir)/cp-parse.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h cp-lex.h
  1179. +     $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  1180. +   `echo $(srcdir)/cp-parse.c | sed 's,^\./,,'`
  1181. + $(srcdir)/cp-parse.c $(srcdir)/cp-parse.h : $(srcdir)/cp-parse.y
  1182. +     @echo expect 27 shift/reduce conflicts and 14 reduce/reduce conflicts
  1183. +     cd $(srcdir); $(BISON) $(BISONFLAGS) -d -o cp-parse.c cp-parse.y
  1184. +     cd $(srcdir); grep '^#define[     ]*YYEMPTY' cp-parse.c >>cp-parse.h
  1185. + cp-spew.o : cp-spew.c $(CONFIG_H) $(CPLUS_TREE_H) \
  1186. +    $(srcdir)/cp-parse.h flags.h cp-lex.h
  1187. + cp-lex.o : cp-lex.c $(CONFIG_H) $(CPLUS_TREE_H) \
  1188. +    $(srcdir)/cp-parse.h $(srcdir)/cp-input.c flags.h cp-hash.h cp-lex.h
  1189. + cp-decl.o : cp-decl.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h \
  1190. +   cp-lex.h cp-decl.h stack.h
  1191. + cp-decl2.o : cp-decl2.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h \
  1192. +   cp-lex.h cp-decl.h
  1193. + cp-type2.o : cp-type2.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h
  1194. + cp-typeck.o : cp-typeck.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h $(RTL_H)
  1195. + cp-class.o : cp-class.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h
  1196. + cp-call.o : cp-call.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h
  1197. + cp-init.o : cp-init.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h $(RTL_H)
  1198. + cp-method.o : cp-method.c $(CONFIG_H) $(CPLUS_TREE_H)
  1199. + cp-cvt.o : cp-cvt.c $(CONFIG_H) $(CPLUS_TREE_H)
  1200. + cp-search.o : cp-search.c $(CONFIG_H) $(CPLUS_TREE_H) stack.h flags.h
  1201. + cp-tree.o : cp-tree.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h
  1202. + cp-ptree.o : cp-ptree.c $(CONFIG_H) $(CPLUS_TREE_H)
  1203. + cp-gc.o : cp-gc.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h
  1204. + cp-except.o : cp-except.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h $(RTL_H)
  1205. + cp-expr.o : cp-expr.c $(CONFIG_H) $(CPLUS_TREE_H) $(RTL_H) flags.h \
  1206. +   expr.h insn-codes.h
  1207. + cp-edsel.o : cp-edsel.c $(CONFIG_H) $(CPLUS_TREE_H) stack.h flags.h
  1208. + cp-xref.o : cp-xref.c $(CONFIG_H) $(CPLUS_TREE_H) input.h
  1209. + cp-pt.o : cp-pt.c $(CONFIG_H) $(CPLUS_TREE_H) cp-decl.h cp-parse.h
  1210. + cp-error.o : cp-error.c $(CONFIG_H) $(CPLUS_TREE_H)
  1211. + cp-errfn.o : cp-errfn.c $(CONFIG_H) $(CPLUS_TREE_H)
  1212. + g++.o : g++.c $(CONFIG_H) gvarargs.h
  1213. + # Ada language specific files.
  1214. + ada_extra_files : treeprs.ads a-einfo.h a-sinfo.h nmake.adb \
  1215. +     nmake.ads
  1216. + b_gnat1.c : $(GNAT1_ADA_OBJS)
  1217. +     $(GNATBIND) -o b_gnat1.c -n -t gnat1drv.ali
  1218. + b_gnat1.o : b_gnat1.c 
  1219. + b_gnatf.c : $(GNATF_OBJS)
  1220. +     $(GNATBIND) -o b_gnatf.c -t gnatfdrv.ali
  1221. + b_gnatf.o : b_gnatf.c 
  1222. + b_gnatb.c : $(GNATBIND_OBJS)
  1223. +     $(GNATBIND) -o b_gnatb.c -t gnatbind.ali
  1224. + b_gnatb.o : b_gnatb.c
  1225. + b_gkrun.c : $(GKRUNCH_OBJS)
  1226. +     $(GNATBIND) -o b_gkrun.c -t gkrunch.ali
  1227. + b_gkrun.o : b_gkrun.c 
  1228. + treeprs.ads : treeprs.adt sinfo.ads xtreeprs.spt
  1229. +     spitbol xtreeprs.spt
  1230. + a-einfo.h : einfo.ads einfo.adb xeinfo.spt
  1231. +     spitbol xeinfo.spt
  1232. + a-sinfo.h : sinfo.ads xsinfo.spt
  1233. +     spitbol xsinfo.spt
  1234. + nmake.adb : nmake.adt sinfo.ads xnmake.spt
  1235. +     spitbol xnmake.spt -b
  1236. + nmake.ads :  nmake.adt sinfo.ads xnmake.spt
  1237. +     spitbol xnmake.spt -s
  1238. + mkttypef.o : mkttypef.c hconfig.h machmode.h real.h
  1239. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/mkttypef.c
  1240. + mkttypef : mkttypef.o $(HOST_LIBDEPS)
  1241. +     $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o mkttypef \
  1242. +      mkttypef.o $(HOST_LIBS)
  1243. + ttypef.ads: stamp-ttypef; @true
  1244. + stamp-ttypef : ttypef.adt mkttypef $(srcdir)/move-if-change
  1245. +     ./mkttypef ttypef.adt > tmp-ttypef.ads
  1246. +     $(srcdir)/move-if-change tmp-ttypef.ads ttypef.ads
  1247. +     touch stamp-ttypef
  1248. + ADA_INCLUDE_DIR = $(prefix)/adainclude
  1249. + ADA_RTL_OBJ_DIR = $(libsubdir)/adalib
  1250. + # Note: the strings below do not make sense for Ada strings in the OS/2
  1251. + #  case.  This is ignored for now since the OS/2 version doesn't use
  1252. + #  these -- there are no default locations.
  1253. + sdefault.ads: stamp-sdefault ; @true
  1254. + stamp-sdefault : config.status version.c $(srcdir)/move-if-change \
  1255. +  Makefile.in
  1256. +     echo package Sdefault is >tmp-sdefault.ads
  1257. +     echo "   Include_Dir_Default_Name : constant String" >>tmp-sdefault.ads
  1258. +     echo "     := \"$(ADA_INCLUDE_DIR)/\";" >>tmp-sdefault.ads
  1259. +     echo "   Object_Dir_Default_Name : constant String" >>tmp-sdefault.ads
  1260. +     echo "     := \"$(ADA_RTL_OBJ_DIR)/\";" >>tmp-sdefault.ads
  1261. +     echo "end Sdefault;" >> tmp-sdefault.ads
  1262. +     $(srcdir)/move-if-change tmp-sdefault.ads sdefault.ads
  1263. +     touch stamp-sdefault
  1264. + A_MISC_H = a-misc.h a-tree.def
  1265. + # special compiles for sdefault without -gnatg, to avoid long line error
  1266. + osint.o : alloc.ads debug.ads limits.ads namet.ads opt.ads osint.ads \
  1267. +    osint.adb output.ads sdefault.ads switch.ads system.ads \
  1268. +    s-assert.ads s-strequ.ads s-enviro.ads \
  1269. +    table.ads table.adb types.ads unchdeal.ads \
  1270. +    unchdeal.adb unixlib.ads 
  1271. +     $(ADA_CC) -c $(CFLAGS) -gnata osint.adb
  1272. + sdefault.o : sdefault.ads
  1273. +     $(ADA_CC) -c $(CFLAGS) -gnata $<
  1274. + a-adaint.o : $(CONFIG_H)
  1275. + a-gtran3.o : $(CONFIG_H) $(TREE_H) obstack.h flags.h convert.h a-ada.h \
  1276. +    a-types.h a-atree.h a-sinfo.h a-snames.h a-einfo.h a-namet.h a-string.h \
  1277. +    a-uintp.h a-trans.h a-trans3.h a-trans4.h a-gtran3.h $(A_MISC_H) a-rtree.h 
  1278. + a-ptypes.o : $(CONFIG_H)
  1279. + a-misc.o : $(CONFIG_H) $(TREE_H) a-ada.h a-types.h a-atree.h a-sinfo.h \
  1280. +    a-einfo.h a-namet.h a-string.h a-uintp.h a-trans.h a-trans3.h $(A_MISC_H) \
  1281. +    a-rtree.h flags.h $(RTL_H) expr.h insn-codes.h
  1282. + a-trans3.o : $(CONFIG_H) $(TREE_H) flags.h a-ada.h a-types.h a-atree.h \
  1283. +    a-sinfo.h a-einfo.h a-namet.h a-string.h a-uintp.h a-trans.h a-gtran3.h \
  1284. +    a-trans3.h a-trans4.h $(A_MISC_H) a-rtree.h convert.h 
  1285. + a-trans4.o : $(CONFIG_H) $(TREE_H) flags.h a-ada.h a-types.h a-atree.h \
  1286. +    a-sinfo.h a-einfo.h a-namet.h a-snames.h a-string.h a-uintp.h a-trans.h \
  1287. +    a-trans3.h a-trans4.h $(A_MISC_H)
  1288. + a-trans.o : $(CONFIG_H) $(TREE_H) flags.h a-ada.h a-types.h a-atree.h \
  1289. +    a-sinfo.h a-snames.h a-einfo.h a-namet.h a-string.h a-uintp.h a-trans.h \
  1290. +    a-trans3.h a-gtran3.h a-trans4.h $(A_MISC_H) a-rtree.h 
  1291. + a-uintp.o : $(CONFIG_H) $(TREE_H) a-ada.h a-types.h a-atree.h a-sinfo.h \
  1292. +    a-einfo.h a-namet.h a-string.h a-uintp.h 
  1293. + a-ioexce.o : ada.ads a-ioexce.ads 
  1294. + a-teioau.o : ada.ads a-ioexce.ads a-textio.ads a-teioau.ads a-teioau.adb \
  1295. +    system.ads 
  1296. + a-textio.o : ada.ads a-ioexce.ads a-textio.ads a-textio.adb a-teioau.ads 
  1297. + ada.o : ada.ads 
  1298. + ali.o : ali.ads ali.adb binderr.ads butil.ads debug.ads limits.ads \
  1299. +    namet.ads opt.ads osint.ads output.ads system.ads table.ads table.adb \
  1300. +    types.ads unchdeal.ads unchdeal.adb 
  1301. + alloc.o : alloc.ads 
  1302. + atree.o : alloc.ads atree.ads atree.adb casing.ads comperr.ads debug.ads \
  1303. +    einfo.ads nlists.ads output.ads sinfo.ads sinput.ads system.ads \
  1304. +    s-assert.ads table.ads table.adb types.ads unchconv.ads unchconv.adb \
  1305. +    unchdeal.ads unchdeal.adb 
  1306. + back_end.o : alloc.ads atree.ads back_end.ads back_end.adb casing.ads \
  1307. +    debug.ads einfo.ads elists.ads lib.ads limits.ads namet.ads nlists.ads \
  1308. +    output.ads sinfo.ads sinput.ads stringt.ads system.ads table.ads \
  1309. +    table.adb ttypes.ads get_targ.ads types.ads uintp.ads unchdeal.ads unchdeal.adb 
  1310. + bcheck.o : ali.ads bcheck.ads bcheck.adb binderr.ads debug.ads limits.ads \
  1311. +    namet.ads opt.ads output.ads system.ads table.ads table.adb types.ads \
  1312. +    unchdeal.ads unchdeal.adb 
  1313. + binde.o : ali.ads binde.ads binde.adb binderr.ads butil.ads debug.ads \
  1314. +    limits.ads namet.ads opt.ads output.ads system.ads s-assert.ads \
  1315. +    table.ads table.adb types.ads unchdeal.ads unchdeal.adb 
  1316. + binderr.o : binderr.ads binderr.adb butil.ads debug.ads excep.ads \
  1317. +    limits.ads namet.ads opt.ads osint.ads output.ads system.ads table.ads \
  1318. +    table.adb types.ads unchdeal.ads unchdeal.adb 
  1319. + bindgen.o : ali.ads binde.ads bindgen.ads bindgen.adb debug.ads limits.ads \
  1320. +    namet.ads opt.ads osint.ads output.ads system.ads table.ads table.adb \
  1321. +    types.ads unchdeal.ads unchdeal.adb 
  1322. + bindusg.o : bindusg.ads bindusg.adb osint.ads output.ads \
  1323. +    system.ads types.ads unchdeal.ads unchdeal.adb 
  1324. + butil.o : butil.ads butil.adb debug.ads limits.ads namet.ads output.ads \
  1325. +    system.ads table.ads table.adb types.ads unchdeal.ads unchdeal.adb 
  1326. + casing.o : casing.ads casing.adb csets.ads debug.ads limits.ads namet.ads \
  1327. +    output.ads scans.ads sinput.ads system.ads table.ads table.adb \
  1328. +    types.ads unchdeal.ads unchdeal.adb widechar.ads 
  1329. + comperr.o : alloc.ads atree.ads casing.ads comperr.ads comperr.adb \
  1330. +    debug.ads einfo.ads errout.ads excep.ads osint.ads output.ads sinfo.ads \
  1331. +    sinput.ads sprint.ads system.ads s-traceb.ads table.ads table.adb \
  1332. +    treepr.ads types.ads unchdeal.ads unchdeal.adb 
  1333. + csets.o : csets.ads csets.adb opt.ads system.ads types.ads unchdeal.ads \
  1334. +    unchdeal.adb 
  1335. + debug.o : debug.ads debug.adb 
  1336. + debug_a.o : alloc.ads atree.ads casing.ads comperr.ads debug.ads \
  1337. +    debug_a.ads debug_a.adb einfo.ads output.ads sinfo.ads sinput.ads \
  1338. +    system.ads table.ads table.adb types.ads unchdeal.ads unchdeal.adb 
  1339. + einfo.o : alloc.ads atree.ads debug.ads einfo.ads einfo.adb limits.ads \
  1340. +    namet.ads nlists.ads output.ads sinfo.ads snames.ads system.ads \
  1341. +    s-assert.ads table.ads table.adb types.ads unchdeal.ads unchdeal.adb 
  1342. + elists.o : alloc.ads debug.ads elists.ads elists.adb output.ads system.ads \
  1343. +    table.ads table.adb types.ads unchdeal.ads unchdeal.adb 
  1344. + errout.o : alloc.ads atree.ads casing.ads csets.ads debug.ads einfo.ads \
  1345. +    errout.ads errout.adb excep.ads exp_util.ads lib.ads limits.ads \
  1346. +    namet.ads opt.ads output.ads rtsfind.ads scans.ads sinfo.ads sinput.ads \
  1347. +    stand.ads system.ads s-assert.ads table.ads table.adb ttypes.ads \
  1348. +    get_targ.ads types.ads uintp.ads uname.ads unchdeal.ads unchdeal.adb 
  1349. + excep.o : excep.ads 
  1350. + exp_attr.o : alloc.ads atree.ads debug.ads einfo.ads exp_attr.ads \
  1351. +    exp_attr.adb exp_ch9.ads itypes.ads limits.ads namet.ads nlists.ads \
  1352. +    nmake.ads opt.ads output.ads rtsfind.ads sem.ads sem_res.ads \
  1353. +    sem_util.ads sinfo.ads snames.ads stand.ads system.ads table.ads \
  1354. +    table.adb tbuild.ads ttypes.ads get_targ.ads types.ads uintp.ads unchdeal.ads \
  1355. +    unchdeal.adb 
  1356. + exp_ch10.o : exp_ch10.ads 
  1357. + exp_ch11.o : exp_ch11.ads 
  1358. + exp_ch12.o : exp_ch12.ads 
  1359. + exp_ch13.o : alloc.ads atree.ads debug.ads einfo.ads exp_ch13.ads \
  1360. +    exp_ch13.adb exp_ch3.ads nlists.ads nmake.ads output.ads rtsfind.ads \
  1361. +    sinfo.ads snames.ads system.ads table.ads table.adb tbuild.ads \
  1362. +    types.ads unchdeal.ads unchdeal.adb 
  1363. + exp_ch2.o : alloc.ads atree.ads debug.ads einfo.ads exp_ch2.ads \
  1364. +    exp_ch2.adb nlists.ads nmake.ads opt.ads output.ads sem.ads sinfo.ads \
  1365. +    snames.ads system.ads table.ads table.adb tbuild.ads types.ads \
  1366. +    unchdeal.ads unchdeal.adb 
  1367. + exp_ch3.o : alloc.ads atree.ads debug.ads einfo.ads elists.ads exp_ch3.ads \
  1368. +    exp_ch3.adb exp_ch4.ads exp_ch7.ads exp_ch9.ads exp_util.ads itypes.ads \
  1369. +    limits.ads namet.ads nlists.ads nmake.ads opt.ads output.ads \
  1370. +    rtsfind.ads sem.ads sem_res.ads sem_util.ads sinfo.ads snames.ads \
  1371. +    stand.ads system.ads s-assert.ads table.ads table.adb tbuild.ads \
  1372. +    ttypes.ads get_targ.ads types.ads uintp.ads unchdeal.ads unchdeal.adb 
  1373. + exp_ch4.o : alloc.ads atree.ads debug.ads einfo.ads elists.ads exp_ch3.ads \
  1374. +    exp_ch4.ads exp_ch4.adb exp_ch7.ads exp_ch9.ads exp_util.ads itypes.ads \
  1375. +    limits.ads namet.ads nlists.ads nmake.ads opt.ads output.ads \
  1376. +    rtsfind.ads sem.ads sem_ch5.ads sem_res.ads sem_util.ads sinfo.ads \
  1377. +    snames.ads stand.ads system.ads s-assert.ads table.ads table.adb \
  1378. +    tbuild.ads ttypes.ads get_targ.ads types.ads uintp.ads unchdeal.ads unchdeal.adb 
  1379. + exp_ch5.o : alloc.ads atree.ads debug.ads einfo.ads exp_ch5.ads \
  1380. +    exp_ch5.adb exp_ch7.ads exp_ch9.ads exp_util.ads limits.ads namet.ads \
  1381. +    nlists.ads nmake.ads opt.ads output.ads rtsfind.ads sem.ads \
  1382. +    sem_util.ads sinfo.ads snames.ads stand.ads system.ads table.ads \
  1383. +    table.adb tbuild.ads ttypes.ads get_targ.ads types.ads uintp.ads unchdeal.ads \
  1384. +    unchdeal.adb 
  1385. + exp_ch6.o : alloc.ads atree.ads debug.ads einfo.ads elists.ads errout.ads \
  1386. +    exp_ch6.ads exp_ch6.adb exp_ch7.ads exp_ch9.ads exp_util.ads limits.ads \
  1387. +    namet.ads nlists.ads nmake.ads opt.ads output.ads rtsfind.ads sem.ads \
  1388. +    sem_ch3.ads sem_disp.ads sem_util.ads sinfo.ads snames.ads stand.ads \
  1389. +    system.ads s-assert.ads table.ads table.adb tbuild.ads types.ads \
  1390. +    unchdeal.ads unchdeal.adb 
  1391. + exp_ch7.o : alloc.ads atree.ads debug.ads einfo.ads elists.ads exp_ch7.ads \
  1392. +    exp_ch7.adb exp_ch9.ads exp_util.ads expand.ads limits.ads namet.ads \
  1393. +    nlists.ads nmake.ads opt.ads output.ads rtsfind.ads sem.ads sem_ch8.ads \
  1394. +    sem_res.ads sem_util.ads sinfo.ads snames.ads stand.ads system.ads \
  1395. +    s-assert.ads table.ads table.adb tbuild.ads types.ads unchdeal.ads \
  1396. +    unchdeal.adb 
  1397. + exp_ch8.o : exp_ch8.ads 
  1398. + exp_ch9.o : alloc.ads atree.ads debug.ads einfo.ads exp_ch3.ads \
  1399. +    exp_ch6.ads exp_ch9.ads exp_ch9.adb exp_util.ads limits.ads namet.ads \
  1400. +    nlists.ads nmake.ads opt.ads output.ads rtsfind.ads sem.ads \
  1401. +    sem_ch11.ads sem_res.ads sem_util.ads sinfo.ads snames.ads stand.ads \
  1402. +    system.ads s-assert.ads table.ads table.adb tbuild.ads ttypes.ads \
  1403. +    get_targ.ads types.ads uintp.ads unchdeal.ads unchdeal.adb 
  1404. + exp_intr.o : exp_intr.ads exp_intr.adb types.ads
  1405. + exp_prag.o : alloc.ads atree.ads debug.ads einfo.ads exp_prag.ads \
  1406. +    exp_prag.adb exp_util.ads nlists.ads nmake.ads opt.ads output.ads \
  1407. +    rtsfind.ads sem.ads sinfo.ads snames.ads system.ads s-assert.ads \
  1408. +    table.ads table.adb types.ads unchdeal.ads unchdeal.adb 
  1409. + exp_util.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads elists.ads \
  1410. +    errout.ads exp_util.ads exp_util.adb itypes.ads lib.ads limits.ads \
  1411. +    namet.ads nlists.ads nmake.ads opt.ads output.ads rtsfind.ads sem.ads \
  1412. +    sem_ch13.ads sem_res.ads sem_util.ads sinfo.ads sinput.ads snames.ads \
  1413. +    stand.ads system.ads table.ads table.adb tbuild.ads ttypes.ads \
  1414. +    get_targ.ads types.ads uintp.ads unchdeal.ads unchdeal.adb 
  1415. + expand.o : alloc.ads atree.ads debug.ads debug_a.ads einfo.ads \
  1416. +    exp_attr.ads exp_ch13.ads exp_ch2.ads exp_ch3.ads exp_ch4.ads \
  1417. +    exp_ch5.ads exp_ch6.ads exp_ch7.ads exp_ch9.ads exp_prag.ads \
  1418. +    exp_util.ads expand.ads expand.adb output.ads rtsfind.ads sinfo.ads \
  1419. +    system.ads table.ads table.adb types.ads unchdeal.ads unchdeal.adb 
  1420. + fname.o : debug.ads fname.ads fname.adb krunch.ads limits.ads namet.ads \
  1421. +    opt.ads osint.ads output.ads system.ads s-assert.ads table.ads \
  1422. +    table.adb types.ads unchdeal.ads unchdeal.adb widechar.ads 
  1423. + frontend.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads elists.ads \
  1424. +    errout.ads frontend.ads frontend.adb lib.ads limits.ads namet.ads \
  1425. +    nlists.ads opt.ads output.ads par.ads rtsfind.ads scn.ads sem.ads \
  1426. +    sinfo.ads sinput.ads snames.ads sprint.ads stand.ads system.ads \
  1427. +    table.ads table.adb tbuild.ads treepr.ads types.ads unchdeal.ads \
  1428. +    unchdeal.adb usage.ads 
  1429. + gkrunch.o : ada.ads a-ioexce.ads a-textio.ads a-textio.adb a-teioau.ads \
  1430. +    gkrunch.adb krunch.ads system.ads s-enviro.ads 
  1431. + gnat1drv.o : alloc.ads atree.ads back_end.ads casing.ads comperr.ads \
  1432. +    csets.ads debug.ads einfo.ads errout.ads excep.ads frontend.ads \
  1433. +    gnat1drv.ads gnat1drv.adb gnatvsn.ads lib.ads limits.ads namet.ads \
  1434. +    opt.ads osint.ads output.ads par.ads sinfo.ads snames.ads sprint.ads \
  1435. +    stringt.ads system.ads s-assert.ads s-secsta.ads s-stalib.ads \
  1436. +    s-stoele.ads s-taspda.ads s-tasoli.ads table.ads table.adb treepr.ads \
  1437. +    ttypes.ads get_targ.ads types.ads uintp.ads unchconv.ads unchconv.adb unchdeal.ads \
  1438. +    unchdeal.adb usage.ads 
  1439. + gnatbind.o : ali.ads bcheck.ads binde.ads binderr.ads bindgen.ads \
  1440. +    bindusg.ads butil.ads debug.ads excep.ads gnatbind.adb gnatvsn.ads \
  1441. +    limits.ads namet.ads opt.ads osint.ads output.ads system.ads \
  1442. +    s-secsta.ads s-stalib.ads s-stoele.ads s-taspda.ads s-tasoli.ads \
  1443. +    table.ads table.adb types.ads unchconv.ads unchconv.adb unchdeal.ads \
  1444. +    unchdeal.adb 
  1445. + gnatfdrv.o : casing.ads comperr.ads csets.ads debug.ads einfo.ads \
  1446. +    errout.ads excep.ads frontend.ads gnatfdrv.ads gnatfdrv.adb gnatvsn.ads \
  1447. +    lib.ads limits.ads namet.ads opt.ads osint.ads output.ads par.ads \
  1448. +    snames.ads sprint.ads stringt.ads system.ads s-assert.ads table.ads \
  1449. +    table.adb treepr.ads ttypes.ads get_targ.ads types.ads uintp.ads unchdeal.ads \
  1450. +    unchdeal.adb usage.ads xref.ads xref_tab.ads 
  1451. + gnatvsn.o : gnatvsn.ads 
  1452. + itypes.o : alloc.ads atree.ads debug.ads einfo.ads itypes.ads itypes.adb \
  1453. +    limits.ads namet.ads nlists.ads output.ads sem_util.ads sinfo.ads \
  1454. +    stand.ads system.ads s-assert.ads table.ads table.adb types.ads \
  1455. +    unchdeal.ads unchdeal.adb 
  1456. + krunch.o : krunch.ads krunch.adb 
  1457. + lib.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads errout.ads \
  1458. +    excep.ads fname.ads gnatvsn.ads lib.ads lib.adb lib-list.adb \
  1459. +    lib-load.adb lib-sort.adb lib-writ.adb limits.ads namet.ads nlists.ads \
  1460. +    osint.ads output.ads par.ads scn.ads sinfo.ads sinput.ads system.ads \
  1461. +    table.ads table.adb types.ads uname.ads unchdeal.ads unchdeal.adb 
  1462. + limits.o : limits.ads 
  1463. + namet.o : alloc.ads debug.ads limits.ads namet.ads namet.adb \
  1464. +    namet-hash.adb output.ads system.ads s-assert.ads table.ads table.adb \
  1465. +    types.ads unchdeal.ads unchdeal.adb widechar.ads 
  1466. + nlists.o : alloc.ads atree.ads debug.ads einfo.ads nlists.ads nlists.adb \
  1467. +    output.ads sinfo.ads system.ads s-assert.ads table.ads table.adb \
  1468. +    types.ads unchdeal.ads unchdeal.adb 
  1469. + nmake.o : alloc.ads atree.ads debug.ads einfo.ads nlists.ads nmake.ads \
  1470. +    nmake.adb output.ads sinfo.ads snames.ads system.ads table.ads \
  1471. +    table.adb types.ads unchdeal.ads unchdeal.adb 
  1472. + opt.o : opt.ads system.ads types.ads unchdeal.ads unchdeal.adb 
  1473. + osint.o : debug.ads limits.ads namet.ads opt.ads osint.ads osint.adb \
  1474. +    output.ads sdefault.ads switch.ads system.ads s-assert.ads \
  1475. +    s-enviro.ads s-secsta.ads s-tasoli.ads table.ads table.adb types.ads \
  1476. +    unchdeal.ads unchdeal.adb unixlib.ads 
  1477. + output.o : output.ads output.adb system.ads types.ads unchdeal.ads \
  1478. +    unchdeal.adb unixlib.ads 
  1479. + par.o : alloc.ads atree.ads casing.ads csets.ads debug.ads einfo.ads \
  1480. +    elists.ads errout.ads excep.ads fname.ads lib.ads limits.ads namet.ads \
  1481. +    nlists.ads nmake.ads opt.ads output.ads par.ads par.adb par-ch10.adb \
  1482. +    par-ch11.adb par-ch12.adb par-ch13.adb par-ch2.adb par-ch3.adb \
  1483. +    par-ch4.adb par-ch5.adb par-ch6.adb par-ch7.adb par-ch8.adb par-ch9.adb \
  1484. +    par-endh.adb par-labl.adb par-load.adb par-prag.adb par-sync.adb \
  1485. +    par-tchk.adb par-util.adb scans.ads scn.ads sinfo.ads sinfo-cn.ads \
  1486. +    sinput.ads snames.ads style.ads system.ads s-assert.ads table.ads \
  1487. +    table.adb tbuild.ads ttypes.ads get_targ.ads types.ads uintp.ads uname.ads \
  1488. +    unchdeal.ads unchdeal.adb 
  1489. + rat.o : alloc.ads atree.ads debug.ads einfo.ads nlists.ads nmake.ads \
  1490. +    output.ads rat.ads rat.adb sinfo.ads system.ads s-assert.ads table.ads \
  1491. +    table.adb ttypes.ads get_targ.ads types.ads uintp.ads unchdeal.ads unchdeal.adb 
  1492. + rtsfind.o : alloc.ads atree.ads casing.ads csets.ads debug.ads einfo.ads \
  1493. +    excep.ads fname.ads lib.ads limits.ads namet.ads nlists.ads nmake.ads \
  1494. +    opt.ads output.ads rtsfind.ads rtsfind.adb sem.ads sem_util.ads \
  1495. +    sinfo.ads snames.ads system.ads s-assert.ads table.ads table.adb \
  1496. +    tbuild.ads types.ads unchdeal.ads unchdeal.adb 
  1497. + s-assert.o : system.ads s-assert.ads 
  1498. + s-enviro.o : system.ads s-enviro.ads s-enviro.adb 
  1499. + s-secsta.o : system.ads s-secsta.ads s-secsta.adb s-stoele.ads \
  1500. +    s-taspda.ads unchconv.ads unchconv.adb unchdeal.ads unchdeal.adb 
  1501. + s-stalib.o : system.ads s-secsta.ads s-stalib.ads s-stoele.ads \
  1502. +    s-taspda.ads s-tasoli.ads unchconv.ads unchconv.adb unchdeal.ads \
  1503. +    unchdeal.adb 
  1504. + s-stoele.o : system.ads s-stoele.ads s-stoele.adb unchconv.ads \
  1505. +    unchconv.adb 
  1506. + s-strcon.o : system.ads s-strcon.ads s-strcon.adb 
  1507. + s-strequ.o : system.ads s-strequ.ads s-strequ.adb 
  1508. + s-tasoli.o : system.ads s-taspda.ads s-tasoli.ads s-tasoli.adb 
  1509. + s-taspda.o : system.ads s-secsta.ads s-taspda.ads s-taspda.adb \
  1510. +    s-tasoli.ads unchconv.ads unchconv.adb unchdeal.ads unchdeal.adb 
  1511. + s-traceb.o : debug.ads system.ads s-traceb.ads s-traceb.adb 
  1512. + scans.o : scans.ads scans.adb system.ads types.ads unchdeal.ads \
  1513. +    unchdeal.adb 
  1514. + scn.o : alloc.ads atree.ads casing.ads csets.ads debug.ads einfo.ads \
  1515. +    errout.ads lib.ads limits.ads namet.ads opt.ads output.ads scans.ads \
  1516. +    scn.ads scn.adb scn-nlit.adb scn-slit.adb sinfo.ads sinput.ads \
  1517. +    snames.ads stringt.ads style.ads system.ads s-assert.ads table.ads \
  1518. +    table.adb ttypes.ads get_targ.ads types.ads uintp.ads unchdeal.ads unchdeal.adb \
  1519. +    widechar.ads 
  1520. + sdefault.o : sdefault.ads 
  1521. + sem.o : alloc.ads atree.ads casing.ads comperr.ads debug.ads debug_a.ads \
  1522. +    einfo.ads errout.ads exp_util.ads expand.ads lib.ads limits.ads \
  1523. +    namet.ads nlists.ads opt.ads output.ads rtsfind.ads sem.ads sem.adb \
  1524. +    sem_attr.ads sem_ch10.ads sem_ch11.ads sem_ch12.ads sem_ch13.ads \
  1525. +    sem_ch3.ads sem_ch4.ads sem_ch5.ads sem_ch6.ads sem_ch7.ads sem_ch8.ads \
  1526. +    sem_ch9.ads sem_prag.ads sem_util.ads sinfo.ads snames.ads stand.ads \
  1527. +    system.ads s-assert.ads table.ads table.adb types.ads unchdeal.ads \
  1528. +    unchdeal.adb 
  1529. + sem_attr.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads errout.ads \
  1530. +    excep.ads limits.ads namet.ads nlists.ads nmake.ads opt.ads output.ads \
  1531. +    rtsfind.ads sem.ads sem_attr.ads sem_attr.adb sem_ch4.ads sem_ch6.ads \
  1532. +    sem_ch8.ads sem_eval.ads sem_res.ads sem_type.ads sem_util.ads \
  1533. +    sinfo.ads sinput.ads snames.ads stand.ads stringt.ads system.ads \
  1534. +    s-assert.ads table.ads table.adb tbuild.ads ttypes.ads ttypef.ads \
  1535. +    get_targ.ads types.ads uintp.ads unchdeal.ads unchdeal.adb 
  1536. + sem_ch10.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads errout.ads \
  1537. +    lib.ads limits.ads namet.ads nlists.ads nmake.ads opt.ads output.ads \
  1538. +    sem.ads sem_ch10.ads sem_ch10.adb sem_ch6.ads sem_ch7.ads sem_ch8.ads \
  1539. +    sem_util.ads sinfo.ads sinfo-cn.ads sinput.ads snames.ads stand.ads \
  1540. +    stringt.ads system.ads table.ads table.adb tbuild.ads types.ads \
  1541. +    uname.ads unchdeal.ads unchdeal.adb 
  1542. + sem_ch11.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads errout.ads \
  1543. +    lib.ads limits.ads namet.ads nlists.ads opt.ads output.ads sem.ads \
  1544. +    sem_ch11.ads sem_ch11.adb sem_ch5.ads sem_ch8.ads sem_util.ads \
  1545. +    sinfo.ads snames.ads stand.ads system.ads table.ads table.adb types.ads \
  1546. +    unchdeal.ads unchdeal.adb 
  1547. + sem_ch12.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads elists.ads \
  1548. +    errout.ads exp_util.ads lib.ads limits.ads namet.ads nlists.ads \
  1549. +    nmake.ads opt.ads output.ads rtsfind.ads sem.ads sem_ch10.ads \
  1550. +    sem_ch12.ads sem_ch12.adb sem_ch13.ads sem_ch3.ads sem_ch6.ads \
  1551. +    sem_ch7.ads sem_ch8.ads sem_res.ads sem_util.ads sinfo.ads sinfo-cn.ads \
  1552. +    snames.ads stand.ads system.ads s-assert.ads table.ads table.adb \
  1553. +    tbuild.ads types.ads uname.ads unchdeal.ads unchdeal.adb 
  1554. + sem_ch13.o : alloc.ads atree.ads debug.ads einfo.ads elists.ads errout.ads \
  1555. +    excep.ads limits.ads namet.ads nlists.ads nmake.ads opt.ads output.ads \
  1556. +    rtsfind.ads sem.ads sem_ch13.ads sem_ch13.adb sem_ch3.ads sem_ch8.ads \
  1557. +    sem_res.ads sem_util.ads sinfo.ads snames.ads stand.ads system.ads \
  1558. +    table.ads table.adb ttypes.ads types.ads uintp.ads unchdeal.ads \
  1559. +    get_targ.ads unchdeal.adb 
  1560. + sem_ch3.o : alloc.ads atree.ads debug.ads einfo.ads elists.ads errout.ads \
  1561. +    exp_ch3.ads exp_util.ads itypes.ads limits.ads namet.ads nlists.ads \
  1562. +    nmake.ads opt.ads output.ads rat.ads rtsfind.ads sem.ads sem_ch12.ads \
  1563. +    sem_ch13.ads sem_ch3.ads sem_ch3.adb sem_ch5.ads sem_ch6.ads \
  1564. +    sem_ch7.ads sem_ch8.ads sem_eval.ads sem_res.ads sem_type.ads \
  1565. +    sem_util.ads sinfo.ads snames.ads stand.ads system.ads s-assert.ads \
  1566. +    table.ads table.adb tbuild.ads ttypes.ads types.ads uintp.ads \
  1567. +    get_targ.ads unchdeal.ads unchdeal.adb 
  1568. + sem_ch4.o : alloc.ads atree.ads debug.ads einfo.ads errout.ads exp_ch4.ads \
  1569. +    itypes.ads limits.ads namet.ads nlists.ads nmake.ads opt.ads output.ads \
  1570. +    sem.ads sem_ch3.ads sem_ch4.ads sem_ch4.adb sem_ch8.ads sem_type.ads \
  1571. +    sem_util.ads sinfo.ads snames.ads stand.ads system.ads table.ads \
  1572. +    table.adb tbuild.ads types.ads unchdeal.ads unchdeal.adb 
  1573. + sem_ch5.o : alloc.ads atree.ads debug.ads einfo.ads errout.ads exp_ch7.ads \
  1574. +    itypes.ads limits.ads namet.ads nlists.ads opt.ads output.ads sem.ads \
  1575. +    sem_ch3.ads sem_ch5.ads sem_ch5.adb sem_ch8.ads sem_disp.ads \
  1576. +    sem_eval.ads sem_res.ads sem_type.ads sem_util.ads sinfo.ads snames.ads \
  1577. +    stand.ads system.ads s-assert.ads table.ads table.adb ttypes.ads \
  1578. +    get_targ.ads types.ads uintp.ads unchdeal.ads unchdeal.adb 
  1579. + sem_ch6.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads errout.ads \
  1580. +    exp_ch7.ads exp_util.ads lib.ads limits.ads namet.ads nlists.ads \
  1581. +    nmake.ads opt.ads output.ads rtsfind.ads sem.ads sem_ch12.ads \
  1582. +    sem_ch3.ads sem_ch4.ads sem_ch6.ads sem_ch6.adb sem_ch8.ads \
  1583. +    sem_disp.ads sem_res.ads sem_util.ads sinfo.ads sinfo-cn.ads sinput.ads \
  1584. +    snames.ads stand.ads stringt.ads system.ads table.ads table.adb \
  1585. +    tbuild.ads treepr.ads types.ads unchdeal.ads unchdeal.adb 
  1586. + sem_ch7.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads elists.ads \
  1587. +    errout.ads exp_util.ads itypes.ads lib.ads limits.ads namet.ads \
  1588. +    nlists.ads opt.ads output.ads rtsfind.ads sem.ads sem_ch12.ads \
  1589. +    sem_ch13.ads sem_ch3.ads sem_ch7.ads sem_ch7.adb sem_ch8.ads \
  1590. +    sem_util.ads sinfo.ads sinput.ads snames.ads stand.ads system.ads \
  1591. +    table.ads table.adb types.ads unchdeal.ads unchdeal.adb 
  1592. + sem_ch8.o : alloc.ads atree.ads debug.ads einfo.ads errout.ads limits.ads \
  1593. +    namet.ads nlists.ads nmake.ads opt.ads output.ads sem.ads sem_attr.ads \
  1594. +    sem_ch3.ads sem_ch4.ads sem_ch5.ads sem_ch6.ads sem_ch8.ads sem_ch8.adb \
  1595. +    sem_res.ads sem_type.ads sem_util.ads sinfo.ads sinfo-cn.ads snames.ads \
  1596. +    stand.ads system.ads s-assert.ads table.ads table.adb tbuild.ads \
  1597. +    types.ads unchdeal.ads unchdeal.adb 
  1598. + sem_ch9.o : alloc.ads atree.ads debug.ads einfo.ads errout.ads exp_ch7.ads \
  1599. +    exp_ch9.ads limits.ads namet.ads nlists.ads nmake.ads opt.ads \
  1600. +    output.ads sem.ads sem_ch3.ads sem_ch4.ads sem_ch5.ads sem_ch6.ads \
  1601. +    sem_ch8.ads sem_ch9.ads sem_ch9.adb sem_res.ads sem_util.ads sinfo.ads \
  1602. +    snames.ads stand.ads system.ads table.ads table.adb tbuild.ads \
  1603. +    ttypes.ads get_targ.ads types.ads uintp.ads unchdeal.ads unchdeal.adb 
  1604. + sem_disp.o : alloc.ads atree.ads debug.ads einfo.ads elists.ads errout.ads \
  1605. +    exp_ch6.ads nlists.ads output.ads sem_disp.ads sem_disp.adb \
  1606. +    sem_util.ads sinfo.ads system.ads table.ads table.adb types.ads \
  1607. +    unchdeal.ads unchdeal.adb 
  1608. + sem_eval.o : alloc.ads atree.ads debug.ads einfo.ads errout.ads itypes.ads \
  1609. +    limits.ads namet.ads nlists.ads nmake.ads opt.ads output.ads rat.ads \
  1610. +    sem_eval.ads sem_eval.adb sem_util.ads sinfo.ads snames.ads stand.ads \
  1611. +    stringt.ads system.ads s-assert.ads table.ads table.adb tbuild.ads \
  1612. +    ttypes.ads get_targ.ads types.ads uintp.ads unchdeal.ads unchdeal.adb 
  1613. + sem_intr.o : sem_intr.ads sem_intr.adb types.ads
  1614. + sem_prag.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads errout.ads \
  1615. +    exp_util.ads lib.ads limits.ads namet.ads nlists.ads nmake.ads opt.ads \
  1616. +    output.ads rtsfind.ads sem.ads sem_ch8.ads sem_eval.ads sem_prag.ads \
  1617. +    sem_prag.adb sem_res.ads sem_util.ads sinfo.ads snames.ads stand.ads \
  1618. +    stringt.ads system.ads table.ads table.adb tbuild.ads ttypes.ads \
  1619. +    get_targ.ads types.ads uintp.ads unchdeal.ads unchdeal.adb 
  1620. + sem_res.o : alloc.ads atree.ads debug.ads debug_a.ads einfo.ads elists.ads \
  1621. +    errout.ads exp_util.ads expand.ads itypes.ads limits.ads namet.ads \
  1622. +    nlists.ads nmake.ads opt.ads output.ads rtsfind.ads sem.ads \
  1623. +    sem_attr.ads sem_ch3.ads sem_ch4.ads sem_ch5.ads sem_ch8.ads \
  1624. +    sem_disp.ads sem_eval.ads sem_res.ads sem_res.adb sem_type.ads \
  1625. +    sem_util.ads sinfo.ads snames.ads stand.ads stringt.ads system.ads \
  1626. +    s-assert.ads table.ads table.adb tbuild.ads ttypes.ads types.ads \
  1627. +    get_targ.ads uintp.ads unchdeal.ads unchdeal.adb 
  1628. + sem_type.o : alloc.ads atree.ads debug.ads einfo.ads errout.ads limits.ads \
  1629. +    namet.ads output.ads sem_ch6.ads sem_ch8.ads sem_type.ads sem_type.adb \
  1630. +    sem_util.ads sinfo.ads snames.ads stand.ads system.ads s-assert.ads \
  1631. +    table.ads table.adb types.ads unchdeal.ads unchdeal.adb 
  1632. + sem_util.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads errout.ads \
  1633. +    itypes.ads limits.ads namet.ads nlists.ads nmake.ads opt.ads output.ads \
  1634. +    scans.ads scn.ads sem.ads sem_eval.ads sem_res.ads sem_type.ads \
  1635. +    sem_util.ads sem_util.adb sinfo.ads sinput.ads snames.ads stand.ads \
  1636. +    style.ads system.ads s-assert.ads s-secsta.ads s-strcon.ads \
  1637. +    s-tasoli.ads table.ads table.adb tbuild.ads ttypes.ads types.ads \
  1638. +    get_targ.ads uintp.ads unchdeal.ads unchdeal.adb 
  1639. + sinfo-cn.o : alloc.ads atree.ads debug.ads einfo.ads output.ads sinfo.ads \
  1640. +    sinfo-cn.ads sinfo-cn.adb system.ads table.ads table.adb types.ads \
  1641. +    unchdeal.ads unchdeal.adb 
  1642. + sinfo.o : alloc.ads atree.ads debug.ads einfo.ads output.ads sinfo.ads \
  1643. +    sinfo.adb system.ads s-assert.ads table.ads table.adb types.ads \
  1644. +    unchdeal.ads unchdeal.adb 
  1645. + sinput.o : alloc.ads casing.ads debug.ads limits.ads namet.ads osint.ads \
  1646. +    output.ads sinput.ads sinput.adb system.ads s-assert.ads table.ads \
  1647. +    table.adb types.ads unchdeal.ads unchdeal.adb 
  1648. + snames.o : debug.ads limits.ads namet.ads output.ads snames.ads snames.adb \
  1649. +    system.ads s-assert.ads table.ads table.adb types.ads unchdeal.ads \
  1650. +    unchdeal.adb 
  1651. + sprint.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads itypes.ads \
  1652. +    lib.ads limits.ads namet.ads nlists.ads output.ads sem_util.ads \
  1653. +    sinfo.ads sprint.ads sprint.adb stand.ads stringt.ads system.ads \
  1654. +    table.ads table.adb ttypes.ads types.ads uintp.ads uname.ads \
  1655. +    get_targ.ads unchdeal.ads unchdeal.adb 
  1656. + stand.o : alloc.ads atree.ads csets.ads debug.ads einfo.ads gnatvsn.ads \
  1657. +    limits.ads namet.ads nlists.ads nmake.ads opt.ads output.ads \
  1658. +    sem_util.ads sinfo.ads snames.ads stand.ads stand.adb system.ads \
  1659. +    s-assert.ads table.ads table.adb ttypes.ads ttypef.ads types.ads \
  1660. +    get_targ.ads uintp.ads unchdeal.ads unchdeal.adb 
  1661. + stringt.o : alloc.ads debug.ads output.ads stringt.ads stringt.adb \
  1662. +    system.ads s-assert.ads table.ads table.adb types.ads unchdeal.ads \
  1663. +    unchdeal.adb 
  1664. + style.o : alloc.ads atree.ads casing.ads csets.ads debug.ads einfo.ads \
  1665. +    errout.ads limits.ads namet.ads output.ads scans.ads sinfo.ads \
  1666. +    sinput.ads style.ads style.adb system.ads table.ads table.adb types.ads \
  1667. +    unchdeal.ads unchdeal.adb 
  1668. + switch.o : debug.ads opt.ads osint.ads output.ads switch.ads switch.adb \
  1669. +    system.ads types.ads unchdeal.ads unchdeal.adb 
  1670. + system.o : system.ads 
  1671. + tbuild.o : alloc.ads atree.ads debug.ads einfo.ads errout.ads limits.ads \
  1672. +    namet.ads nlists.ads nmake.ads output.ads sinfo.ads stand.ads \
  1673. +    system.ads s-assert.ads table.ads table.adb tbuild.ads tbuild.adb \
  1674. +    types.ads unchdeal.ads unchdeal.adb 
  1675. + treepr.o : alloc.ads atree.ads casing.ads comperr.ads csets.ads debug.ads \
  1676. +    einfo.ads elists.ads itypes.ads lib.ads limits.ads namet.ads nlists.ads \
  1677. +    output.ads sem_util.ads sinfo.ads sinput.ads stand.ads stringt.ads \
  1678. +    system.ads table.ads table.adb treepr.ads treepr.adb treeprs.ads \
  1679. +    ttypes.ads get_targ.ads types.ads uintp.ads uname.ads unchdeal.ads unchdeal.adb 
  1680. + treeprs.o : sinfo.ads system.ads treeprs.ads types.ads unchdeal.ads \
  1681. +    unchdeal.adb 
  1682. + ttypef.o : ttypes.ads get_targ.ads ttypef.ads 
  1683. + ttypes.o : get_targ.ads system.ads ttypes.ads types.ads unchdeal.ads \
  1684. +    get_targ.ads unchdeal.adb 
  1685. + types.o : system.ads types.ads types.adb unchdeal.ads unchdeal.adb 
  1686. + uintp.o : alloc.ads debug.ads limits.ads namet.ads output.ads system.ads \
  1687. +    s-assert.ads table.ads table.adb ttypes.ads types.ads uintp.ads \
  1688. +    uintp.adb unchdeal.ads unchdeal.adb 
  1689. + uname.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads lib.ads \
  1690. +    limits.ads namet.ads nlists.ads output.ads sinfo.ads sinput.ads \
  1691. +    system.ads s-assert.ads table.ads table.adb types.ads uname.ads \
  1692. +    uname.adb unchdeal.ads unchdeal.adb 
  1693. + unixlib.o : system.ads types.ads unchdeal.ads unchdeal.adb unixlib.ads \
  1694. +    unixlib.adb 
  1695. + usage.o : osint.ads output.ads system.ads types.ads unchdeal.ads \
  1696. +    unchdeal.adb usage.ads usage.adb 
  1697. + widechar.o : system.ads s-assert.ads types.ads unchdeal.ads unchdeal.adb \
  1698. +    widechar.ads widechar.adb 
  1699. + xref.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads lib.ads \
  1700. +    limits.ads namet.ads nlists.ads opt.ads osint.ads output.ads sinfo.ads \
  1701. +    sinput.ads sprint.ads stand.ads system.ads s-assert.ads table.ads \
  1702. +    table.adb types.ads unchdeal.ads unchdeal.adb xref.ads xref.adb \
  1703. +    xref_tab.ads 
  1704. + xref_tab.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads errout.ads \
  1705. +    lib.ads limits.ads namet.ads osint.ads output.ads sinfo.ads sinput.ads \
  1706. +    stand.ads system.ads s-secsta.ads s-strcon.ads s-tasoli.ads table.ads \
  1707. +    table.adb treepr.ads types.ads unchdeal.ads unchdeal.adb xref_tab.ads \
  1708. +    xref_tab.adb 
  1709. + # To make a configuration always use collect2, set USE_COLLECT2 to ld.
  1710. + ld: collect2
  1711. +     rm -f ld
  1712. +     ln collect2 ld
  1713. + collect2 : collect2.o version.o $(LIBDEPS)
  1714. + # Don't try modifying collect2 (aka ld) in place--it might be linking this.
  1715. +     -rm -f collect2
  1716. +     $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o collect2 collect2.o version.o $(LIBS)
  1717. + collect2.o : collect2.c $(CONFIG_H) gstab.h
  1718. +     $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES)  \
  1719. +     -DTARGET_MACHINE=\"$(target)\" \
  1720. +     -c `echo $(srcdir)/collect2.c | sed 's,^\./,,'`
  1721. + # Objective C language specific files.
  1722. + objc-parse.o : $(srcdir)/objc-parse.c $(CONFIG_H) $(TREE_H) c-lex.h \
  1723. +    c-tree.h input.h flags.h objc-act.h
  1724. +     $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c $(srcdir)/objc-parse.c
  1725. + $(srcdir)/objc-parse.c : $(srcdir)/objc-parse.y
  1726. +     cd $(srcdir); $(BISON) $(BISONFLAGS) objc-parse.y -o objc-parse.c
  1727. + $(srcdir)/objc-parse.y: $(srcdir)/c-parse.in
  1728. +     sed -e "/^ifc$$/,/^end ifc$$/d" \
  1729. +       -e "/^ifobjc$$/d" -e "/^end ifobjc$$/d" \
  1730. +       $(srcdir)/c-parse.in > $(srcdir)/objc-parse.y
  1731. + objc-act.o : objc-act.c $(CONFIG_H) $(TREE_H) $(RTL_H) c-tree.h c-lex.h \
  1732. +    flags.h objc-act.h input.h function.h $(srcdir)/c-parse.h
  1733. + # A file used by all variants of C.
  1734. + c-common.o : c-common.c $(CONFIG_H) $(TREE_H) c-tree.h c-lex.h flags.h
  1735. + # Language-independent files.
  1736. + gcc.o: gcc.c $(CONFIG_H) gvarargs.h config.status
  1737. +     $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  1738. +   -DSTANDARD_STARTFILE_PREFIX=\"$(libdir)/\" \
  1739. +   -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc-lib/\" \
  1740. +   -DDEFAULT_TARGET_MACHINE=\"$(target)\" \
  1741. +   -DTOOLDIR_BASE_PREFIX=\"$(exec_prefix)/\" \
  1742. +   -DTOOLDIR=\"$(tooldir)/\" \
  1743. +   $(MAYBE_TARGET_DEFAULT) \
  1744. +   -c `echo $(srcdir)/gcc.c | sed 's,^\./,,'`
  1745. + dumpvers: dumpvers.c
  1746. + version.o: version.c
  1747. + obstack.o: obstack.c
  1748. + convert.o: convert.c $(CONFIG_H) $(TREE_H) flags.h convert.h
  1749. + tree.o : tree.c $(CONFIG_H) $(TREE_H) gvarargs.h flags.h function.h
  1750. + print-tree.o : print-tree.c $(CONFIG_H) $(TREE_H)
  1751. + stor-layout.o : stor-layout.c $(CONFIG_H) $(TREE_H) function.h
  1752. + fold-const.o : fold-const.c $(CONFIG_H) $(TREE_H) flags.h 
  1753. + toplev.o : toplev.c $(CONFIG_H) $(TREE_H) $(RTL_H) flags.h input.h \
  1754. +    insn-attr.h xcoffout.h defaults.h
  1755. +     $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  1756. +       $(MAYBE_TARGET_DEFAULT) $(MAYBE_USE_COLLECT2) \
  1757. +       -c `echo $(srcdir)/toplev.c | sed 's,^\./,,'`
  1758. + rtl.o : rtl.c $(CONFIG_H) $(RTL_H)
  1759. + print-rtl.o : print-rtl.c $(CONFIG_H) $(RTL_H)
  1760. + rtlanal.o : rtlanal.c $(CONFIG_H) $(RTL_H)
  1761. + toplev.o: bytecode.h bc-emit.h
  1762. + varasm.o : varasm.c $(CONFIG_H) $(TREE_H) $(RTL_H) flags.h function.h \
  1763. +    defaults.h insn-codes.h expr.h hard-reg-set.h regs.h xcoffout.h bytecode.h
  1764. + function.o : function.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h function.h  \
  1765. +    insn-flags.h insn-codes.h expr.h regs.h hard-reg-set.h insn-config.h \
  1766. +    recog.h output.h bytecode.h
  1767. + stmt.o : stmt.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h function.h  \
  1768. +    insn-flags.h insn-config.h insn-codes.h hard-reg-set.h expr.h loop.h \
  1769. +    recog.h bytecode.h bc-typecd.h bc-typecd.def bc-opcode.h bc-optab.h \
  1770. +    bc-emit.h
  1771. + expr.o : expr.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h function.h  \
  1772. +    insn-flags.h insn-codes.h expr.h insn-config.h recog.h output.h \
  1773. +    typeclass.h bytecode.h bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h \
  1774. +    bc-emit.h modemap.def
  1775. + calls.o : calls.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h expr.h insn-codes.h \
  1776. +    insn-flags.h gvarargs.h 
  1777. + expmed.o : expmed.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h  \
  1778. +    insn-flags.h insn-config.h insn-codes.h expr.h recog.h real.h
  1779. + explow.o : explow.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h hard-reg-set.h \
  1780. +    insn-config.h expr.h recog.h insn-flags.h insn-codes.h
  1781. + optabs.o : optabs.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h  \
  1782. +    insn-flags.h insn-config.h insn-codes.h expr.h recog.h reload.h
  1783. + dbxout.o : dbxout.c $(CONFIG_H) $(TREE_H) $(RTL_H) flags.h regs.h \
  1784. +    insn-config.h reload.h gstab.h xcoffout.h defaults.h output.h
  1785. + sdbout.o : sdbout.c $(CONFIG_H) $(TREE_H) $(RTL_H) gsyms.h flags.h \
  1786. +    insn-config.h reload.h
  1787. + dwarfout.o : dwarfout.c $(CONFIG_H) $(TREE_H) $(RTL_H) dwarf.h flags.h \
  1788. +    insn-config.h reload.h output.h defaults.h
  1789. + xcoffout.o : xcoffout.c $(CONFIG_H) $(TREE_H) $(RTL_H) xcoffout.h flags.h
  1790. + emit-rtl.o : emit-rtl.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h gvarargs.h \
  1791. +    function.h regs.h insn-config.h insn-codes.h real.h expr.h bytecode.h \
  1792. +    bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h bc-emit.h bc-opname.h
  1793. + real.o : real.c $(CONFIG_H) $(TREE_H)
  1794. + getpwd.o : getpwd.c $(CONFIG_H)
  1795. + integrate.o : integrate.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h integrate.h \
  1796. +    insn-flags.h insn-config.h insn-codes.h expr.h real.h function.h \
  1797. +    bytecode.h
  1798. + jump.o : jump.c $(CONFIG_H) $(RTL_H) flags.h hard-reg-set.h regs.h \
  1799. +    insn-config.h insn-flags.h insn-codes.h expr.h real.h
  1800. + stupid.o : stupid.c $(CONFIG_H) $(RTL_H) regs.h hard-reg-set.h flags.h
  1801. + cse.o : cse.c $(CONFIG_H) $(RTL_H) regs.h hard-reg-set.h flags.h real.h \
  1802. +    insn-config.h recog.h
  1803. + loop.o : loop.c $(CONFIG_H) $(RTL_H) flags.h loop.h insn-config.h \
  1804. +    insn-flags.h insn-codes.h regs.h hard-reg-set.h recog.h expr.h real.h
  1805. + unroll.o : unroll.c $(CONFIG_H) $(RTL_H) insn-config.h insn-codes.h \
  1806. +    integrate.h regs.h flags.h expr.h loop.h
  1807. + flow.o : flow.c $(CONFIG_H) $(RTL_H) flags.h insn-config.h \
  1808. +    basic-block.h regs.h hard-reg-set.h output.h
  1809. + combine.o : combine.c $(CONFIG_H) $(RTL_H) gvarargs.h flags.h  \
  1810. +    insn-config.h insn-flags.h insn-codes.h insn-attr.h regs.h expr.h \
  1811. +    basic-block.h recog.h real.h hard-reg-set.h
  1812. + regclass.o : regclass.c $(CONFIG_H) $(RTL_H) hard-reg-set.h flags.h \
  1813. +    basic-block.h regs.h insn-config.h recog.h reload.h real.h bytecode.h
  1814. + local-alloc.o : local-alloc.c $(CONFIG_H) $(RTL_H) flags.h basic-block.h \
  1815. +    regs.h hard-reg-set.h insn-config.h recog.h output.h
  1816. + global.o : global.c $(CONFIG_H) $(RTL_H) flags.h  \
  1817. +    basic-block.h regs.h hard-reg-set.h insn-config.h output.h
  1818. + reload.o : reload.c $(CONFIG_H) $(RTL_H) flags.h \
  1819. +    reload.h recog.h hard-reg-set.h insn-config.h insn-codes.h regs.h real.h
  1820. + reload1.o : reload1.c $(CONFIG_H) $(RTL_H) flags.h expr.h \
  1821. +    reload.h regs.h hard-reg-set.h insn-config.h insn-flags.h insn-codes.h \
  1822. +    basic-block.h recog.h output.h
  1823. + caller-save.o : caller-save.c $(CONFIG_H) $(RTL_H) flags.h \
  1824. +    regs.h hard-reg-set.h insn-config.h basic-block.h recog.h reload.h expr.h
  1825. + reorg.o : reorg.c $(CONFIG_H) $(RTL_H) conditions.h hard-reg-set.h \
  1826. +    basic-block.h regs.h insn-config.h insn-attr.h insn-flags.h recog.h \
  1827. +    flags.h output.h
  1828. + sched.o : sched.c $(CONFIG_H) $(RTL_H) basic-block.h regs.h hard-reg-set.h \
  1829. +    flags.h insn-config.h insn-attr.h
  1830. + final.o : final.c $(CONFIG_H) $(RTL_H) $(TREE_H) gvarargs.h flags.h regs.h \
  1831. +    recog.h conditions.h insn-config.h insn-attr.h real.h output.h \
  1832. +    hard-reg-set.h insn-flags.h insn-codes.h gstab.h xcoffout.h defaults.h
  1833. + recog.o : recog.c $(CONFIG_H) $(RTL_H)  \
  1834. +    regs.h recog.h hard-reg-set.h flags.h insn-config.h insn-attr.h \
  1835. +    insn-flags.h insn-codes.h real.h
  1836. + reg-stack.o : reg-stack.c $(CONFIG_H) $(RTL_H) $(TREE_H) \
  1837. +    regs.h hard-reg-set.h flags.h insn-config.h
  1838. + aux-output.o : aux-output.c $(CONFIG_H) \
  1839. +    $(RTL_H) regs.h hard-reg-set.h real.h insn-config.h conditions.h \
  1840. +    insn-flags.h output.h insn-attr.h insn-codes.h
  1841. + # Build auxiliary files that support ecoff format.
  1842. + mips-tfile: mips-tfile.o version.o $(LIBDEPS)
  1843. +     $(CC) $(CFLAGS) $(LDFLAGS) -o mips-tfile mips-tfile.o version.o $(LIBS)
  1844. + mips-tfile.o : mips-tfile.c $(CONFIG_H) $(RTL_H)
  1845. + mips-tdump: mips-tdump.o version.o $(LIBDEPS)
  1846. +     $(CC) $(CFLAGS) $(LDFLAGS) -o mips-tdump mips-tdump.o version.o $(LIBS)
  1847. + mips-tdump.o : mips-tdump.c $(CONFIG_H) $(RTL_H)
  1848. + # Normally this target is not used; but it is used if you
  1849. + # define ALLOCA=alloca.o.  In that case, you must get a suitable alloca.c
  1850. + # from the GNU Emacs distribution.
  1851. + alloca.o:    alloca.c
  1852. +     $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(ALLOCA_FLAGS) \
  1853. +       -c `echo $(srcdir)/alloca.c | sed 's,^\./,,'`
  1854. +     $(ALLOCA_FINISH)
  1855. + # Generate header and source files from the machine description, 
  1856. + # and compile them.
  1857. + .PRECIOUS: insn-config.h insn-flags.h insn-codes.h \
  1858. +   insn-emit.c insn-recog.c insn-extract.c insn-output.c insn-peep.c \
  1859. +   insn-attr.h insn-attrtab.c
  1860. + # The following pair of rules has this effect:
  1861. + # genconfig is run only if the md has changed since genconfig was last run;
  1862. + # but the file insn-config.h is touched only when its contents actually change.
  1863. + # Each of the other insn-* files is handled by a similar pair of rules.
  1864. + # This causes an anomaly in the results of make -n
  1865. + # because insn-* is older than stamp-*
  1866. + # and thus make -n thinks that insn-* will be updated
  1867. + # and force recompilation of things that depend on it.
  1868. + # We use move-if-change precisely to avoid such recompilation.
  1869. + # But there is no way to teach make -n that it will be avoided.
  1870. + # Each of the insn-*.[ch] rules has a semicolon at the end,
  1871. + # for otherwise the system Make on SunOS 4.1 never tries
  1872. + # to recompile insn-*.o.  To avoid problems and extra noise from
  1873. + # versions of make which don't like empty commands (nothing after the
  1874. + # trailing `;'), we call true for each.
  1875. + insn-config.h: stamp-config ; @true
  1876. + stamp-config : md genconfig $(srcdir)/move-if-change
  1877. +     ./genconfig md > tmp-config.h
  1878. +     $(srcdir)/move-if-change tmp-config.h insn-config.h
  1879. +     touch stamp-config
  1880. + insn-flags.h: stamp-flags ; @true
  1881. + stamp-flags : md genflags $(srcdir)/move-if-change
  1882. +     ./genflags md > tmp-flags.h
  1883. +     $(srcdir)/move-if-change tmp-flags.h insn-flags.h
  1884. +     touch stamp-flags
  1885. + insn-codes.h: stamp-codes ; @true
  1886. + stamp-codes : md gencodes $(srcdir)/move-if-change
  1887. +     ./gencodes md > tmp-codes.h
  1888. +     $(srcdir)/move-if-change tmp-codes.h insn-codes.h
  1889. +     touch stamp-codes
  1890. + insn-emit.o : insn-emit.c $(CONFIG_H) $(RTL_H) expr.h real.h output.h \
  1891. +   insn-config.h insn-flags.h insn-codes.h
  1892. +     $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-emit.c
  1893. + insn-emit.c: stamp-emit ; @true
  1894. + stamp-emit : md genemit $(srcdir)/move-if-change
  1895. +     ./genemit md > tmp-emit.c
  1896. +     $(srcdir)/move-if-change tmp-emit.c insn-emit.c
  1897. +     touch stamp-emit
  1898. + insn-recog.o : insn-recog.c $(CONFIG_H) $(RTL_H) insn-config.h recog.h \
  1899. +   real.h output.h flags.h
  1900. +     $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-recog.c
  1901. + insn-recog.c: stamp-recog ; @true
  1902. + stamp-recog : md genrecog $(srcdir)/move-if-change
  1903. +     ./genrecog md > tmp-recog.c
  1904. +     $(srcdir)/move-if-change tmp-recog.c insn-recog.c
  1905. +     touch stamp-recog
  1906. + insn-opinit.o : insn-opinit.c $(CONFIG_H) $(RTL_H) insn-codes.h insn-flags.h \
  1907. +   insn-config.h flags.h rtl.h recog.h expr.h reload.h
  1908. +     $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-opinit.c
  1909. + insn-opinit.c: stamp-opinit ; @true
  1910. + stamp-opinit : md genopinit $(srcdir)/move-if-change
  1911. +     ./genopinit md > tmp-opinit.c
  1912. +     $(srcdir)/move-if-change tmp-opinit.c insn-opinit.c
  1913. +     touch stamp-opinit
  1914. + insn-extract.o : insn-extract.c $(CONFIG_H) $(RTL_H)
  1915. +     $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-extract.c
  1916. + insn-extract.c: stamp-extract ; @true
  1917. + stamp-extract : md genextract $(srcdir)/move-if-change
  1918. +     ./genextract md > tmp-extract.c
  1919. +     $(srcdir)/move-if-change tmp-extract.c insn-extract.c
  1920. +     touch stamp-extract
  1921. + insn-peep.o : insn-peep.c $(CONFIG_H) $(RTL_H) regs.h output.h real.h
  1922. +     $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-peep.c
  1923. + insn-peep.c: stamp-peep ; @true
  1924. + stamp-peep : md genpeep $(srcdir)/move-if-change
  1925. +     ./genpeep md > tmp-peep.c
  1926. +     $(srcdir)/move-if-change tmp-peep.c insn-peep.c
  1927. +     touch stamp-peep
  1928. + insn-attrtab.o : insn-attrtab.c $(CONFIG_H) $(RTL_H) regs.h real.h output.h \
  1929. +      insn-attr.h insn-config.h
  1930. +     $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-attrtab.c
  1931. + insn-attr.h: stamp-attr ; @true
  1932. + stamp-attr : md genattr $(srcdir)/move-if-change
  1933. +     ./genattr md > tmp-attr.h
  1934. +     $(srcdir)/move-if-change tmp-attr.h insn-attr.h
  1935. +     touch stamp-attr
  1936. + insn-attrtab.c: stamp-attrtab ; @true
  1937. + stamp-attrtab : md genattrtab $(srcdir)/move-if-change
  1938. +     if cmp -s $(PREMADE_ATTRTAB_MD) md;    \
  1939. +     then                    \
  1940. +       echo Using $(PREMADE_ATTRTAB);    \
  1941. +       cp $(PREMADE_ATTRTAB) tmp-attrtab.c;    \
  1942. +     else                    \
  1943. +       ./genattrtab md > tmp-attrtab.c;    \
  1944. +     fi
  1945. +     $(srcdir)/move-if-change tmp-attrtab.c insn-attrtab.c
  1946. +     touch stamp-attrtab
  1947. + insn-output.o : insn-output.c $(CONFIG_H) $(RTL_H) regs.h real.h conditions.h \
  1948. +     hard-reg-set.h insn-config.h insn-flags.h insn-attr.h output.h recog.h \
  1949. +     insn-codes.h
  1950. +     $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-output.c
  1951. + insn-output.c: stamp-output ; @true
  1952. + stamp-output : md genoutput $(srcdir)/move-if-change
  1953. +     ./genoutput md > tmp-output.c
  1954. +     $(srcdir)/move-if-change tmp-output.c insn-output.c
  1955. +     touch stamp-output
  1956. + # Compile the programs that generate insn-* from the machine description.
  1957. + # They are compiled with $(HOST_CC), and associated libraries,
  1958. + # since they need to run on this machine
  1959. + # even if GCC is being compiled to run on some other machine.
  1960. + # $(CONFIG_H) is omitted from the deps of the gen*.o
  1961. + # because these programs don't really depend on anything 
  1962. + # about the target machine.  They do depend on config.h itself,
  1963. + # since that describes the host machine.
  1964. + # Pass the md file through cpp if the target requests it.
  1965. + $(MD_FILE): $(CPP_MD)
  1966. +     -if [ -f md.pre-cpp ]; then \
  1967. +       rm -f md ; ./cpp $(CPP_MD_FLAGS) md.pre-cpp | sed 's/^# /; /g' > md ; \
  1968. +     else true ; \
  1969. +     fi
  1970. + genconfig : genconfig.o $(HOST_RTL) $(HOST_LIBDEPS)
  1971. +     $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o genconfig \
  1972. +       genconfig.o $(HOST_RTL) $(HOST_LIBS)
  1973. + genconfig.o : genconfig.c $(RTL_H) hconfig.h
  1974. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genconfig.c
  1975. + genflags : genflags.o $(HOST_RTL) $(HOST_LIBDEPS)
  1976. +     $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o genflags \
  1977. +      genflags.o $(HOST_RTL) $(HOST_LIBS)
  1978. + genflags.o : genflags.c $(RTL_H) hconfig.h
  1979. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genflags.c
  1980. + gencodes : gencodes.o $(HOST_RTL) $(HOST_LIBDEPS)
  1981. +     $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o gencodes \
  1982. +      gencodes.o $(HOST_RTL) $(HOST_LIBS)
  1983. + gencodes.o : gencodes.c $(RTL_H) hconfig.h
  1984. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/gencodes.c
  1985. + genemit : genemit.o $(HOST_RTL) $(HOST_LIBDEPS)
  1986. +     $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o genemit \
  1987. +      genemit.o $(HOST_RTL) $(HOST_LIBS)
  1988. + genemit.o : genemit.c $(RTL_H) hconfig.h
  1989. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genemit.c
  1990. + genopinit : genopinit.o $(HOST_RTL) $(HOST_LIBDEPS)
  1991. +     $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o genopinit \
  1992. +      genopinit.o $(HOST_RTL) $(HOST_LIBS)
  1993. + genopinit.o : genopinit.c $(RTL_H) hconfig.h
  1994. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genopinit.c
  1995. + genrecog : genrecog.o $(HOST_RTL) $(HOST_LIBDEPS)
  1996. +     $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o genrecog \
  1997. +      genrecog.o $(HOST_RTL) $(HOST_LIBS)
  1998. + genrecog.o : genrecog.c $(RTL_H) hconfig.h
  1999. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genrecog.c
  2000. + genextract : genextract.o $(HOST_RTL) $(HOST_LIBDEPS)
  2001. +     $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o genextract \
  2002. +      genextract.o $(HOST_RTL) $(HOST_LIBS)
  2003. + genextract.o : genextract.c $(RTL_H) hconfig.h insn-config.h
  2004. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genextract.c
  2005. + genpeep : genpeep.o $(HOST_RTL) $(HOST_LIBDEPS)
  2006. +     $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o genpeep \
  2007. +      genpeep.o $(HOST_RTL) $(HOST_LIBS)
  2008. + genpeep.o : genpeep.c $(RTL_H) hconfig.h
  2009. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genpeep.c
  2010. + genattr : genattr.o $(HOST_RTL) $(HOST_LIBDEPS)
  2011. +     $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o genattr \
  2012. +      genattr.o $(HOST_RTL) $(HOST_LIBS)
  2013. + genattr.o : genattr.c $(RTL_H) hconfig.h
  2014. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genattr.c
  2015. + genattrtab : genattrtab.o $(HOST_RTL) $(HOST_PRINT) $(HOST_RTLANAL) $(HOST_LIBDEPS)
  2016. +     $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o genattrtab \
  2017. +      genattrtab.o $(HOST_RTL) $(HOST_PRINT) $(HOST_RTLANAL) $(HOST_LIBS)
  2018. + genattrtab.o : genattrtab.c $(RTL_H) hconfig.h insn-config.h
  2019. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genattrtab.c
  2020. + genoutput : genoutput.o $(HOST_RTL) $(HOST_LIBDEPS)
  2021. +     $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o genoutput \
  2022. +      genoutput.o $(HOST_RTL) $(HOST_LIBS)
  2023. + genoutput.o : genoutput.c $(RTL_H) hconfig.h
  2024. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genoutput.c
  2025. + # Compile the libraries to be used by gen*.
  2026. + # If we are not cross-building, gen* use the same .o's that cc1 will use,
  2027. + # and HOST_PREFIX_1 is `foobar', just to ensure these rules don't conflict
  2028. + # with the rules for rtl.o, alloca.o, etc.
  2029. + $(HOST_PREFIX_1)rtl.o: $(srcdir)/rtl.c $(CONFIG_H) $(RTL_H)
  2030. +     rm -f $(HOST_PREFIX)rtl.c
  2031. +     sed -e 's/config[.]h/hconfig.h/' $(srcdir)/rtl.c > $(HOST_PREFIX)rtl.c
  2032. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)rtl.c
  2033. + $(HOST_PREFIX_1)print-rtl.o: $(srcdir)/print-rtl.c $(CONFIG_H) $(RTL_H)
  2034. +     rm -f $(HOST_PREFIX)print-rtl.c
  2035. +     sed -e 's/config[.]h/hconfig.h/' $(srcdir)/print-rtl.c > $(HOST_PREFIX)print-rtl.c
  2036. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)print-rtl.c
  2037. + $(HOST_PREFIX_1)rtlanal.o: $(srcdir)/rtlanal.c $(CONFIG_H) $(RTL_H)
  2038. +     rm -f $(HOST_PREFIX)rtlanal.c
  2039. +     sed -e 's/config[.]h/hconfig.h/' $(srcdir)/rtlanal.c > $(HOST_PREFIX)rtlanal.c
  2040. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)rtlanal.c
  2041. + $(HOST_PREFIX_1)alloca.o: alloca.c
  2042. +     rm -f $(HOST_PREFIX)alloca.c
  2043. +     cp $(srcdir)/alloca.c $(HOST_PREFIX)alloca.c
  2044. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)alloca.c
  2045. + $(HOST_PREFIX_1)obstack.o: obstack.c
  2046. +     rm -f $(HOST_PREFIX)obstack.c
  2047. +     sed -e 's/config[.]h/hconfig.h/' $(srcdir)/obstack.c > $(HOST_PREFIX)obstack.c
  2048. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)obstack.c
  2049. + $(HOST_PREFIX_1)malloc.o: malloc.c
  2050. +     rm -f $(HOST_PREFIX)malloc.c
  2051. +     sed -e 's/config[.]h/hconfig.h/' $(srcdir)/malloc.c > $(HOST_PREFIX)malloc.c
  2052. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)malloc.c
  2053. + # This satisfies the dependency that we get if you cross-compile a compiler
  2054. + # that does not need to compile alloca, malloc or whatever.
  2055. + $(HOST_PREFIX_1): 
  2056. +     touch $(HOST_PREFIX_1)
  2057. + # Remake bytecode files.
  2058. + # BI_ALL=bi-run.o
  2059. + BI_ALL=
  2060. + BC_ALL=bc-opname.h bc-opcode.h bc-arity.h
  2061. + BI_OBJ=bi-parser.o bi-lexer.o bi-reverse.o
  2062. + bc-emit.o : bc-emit.c $(CONFIG_H) $(RTL_H) real.h $(BYTECODE_H) \
  2063. +      bc-arity.h bc-opcode.h bc-typecd.h bc-typecd.def bi-run.h bytetypes.h
  2064. + bc-optab.o : bc-optab.c $(CONFIG_H) $(REAL_H) $(BYTECODE_H) \
  2065. +         bc-opcode.h bc-typecd.h bc-typecd.def
  2066. + bytecode: $(BI_ALL) $(BC_ALL)
  2067. + bi-arity: bi-arity.o $(BI_OBJ) $(HOST_LIBDEPS)
  2068. +     $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o bi-arity \
  2069. +      bi-arity.o $(BI_OBJ) $(HOST_LIBS)
  2070. + bi-opcode: bi-opcode.o $(BI_OBJ) $(HOST_LIBDEPS)
  2071. +     $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o bi-opcode \
  2072. +      bi-opcode.o $(BI_OBJ) $(HOST_LIBS)
  2073. + bi-opname: bi-opname.o $(BI_OBJ) $(HOST_LIBDEPS)
  2074. +     $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o bi-opname \
  2075. +      bi-opname.o $(BI_OBJ) $(HOST_LIBS)
  2076. + bi-run.o:    $(srcdir)/bi-run.c $(srcdir)/bi-run.h $(srcdir)/bc-typecd.h \
  2077. +   bc-opname.h bc-arity.h bc-opcode.h
  2078. +     $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c $(srcdir)/bi-run.c
  2079. + $(srcdir)/bi-parser.c $(srcdir)/bi-parser.h: $(srcdir)/bi-parser.y
  2080. +     cd $(srcdir); $(BISON) $(BISONFLAGS) -d bi-parser.y -o bi-parser.c
  2081. + bi-parser.o:    $(srcdir)/bi-parser.c $(srcdir)/bi-defs.h hconfig.h
  2082. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) \
  2083. +        $(srcdir)/bi-parser.c
  2084. + bi-lexer.o:    $(srcdir)/bi-lexer.c $(srcdir)/bi-parser.h hconfig.h
  2085. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) \
  2086. +        $(srcdir)/bi-lexer.c
  2087. + bi-arity.o: bi-arity.c $(srcdir)/bi-defs.h hconfig.h
  2088. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) \
  2089. +        $(srcdir)/bi-arity.c
  2090. + bi-opcode.o: bi-opcode.c $(srcdir)/bi-defs.h hconfig.h
  2091. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) \
  2092. +        $(srcdir)/bi-opcode.c
  2093. + bi-opname.o: bi-opname.c $(srcdir)/bi-defs.h hconfig.h
  2094. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) \
  2095. +        $(srcdir)/bi-opname.c
  2096. + bi-reverse.o: bi-reverse.c $(srcdir)/bi-defs.h
  2097. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) \
  2098. +        $(srcdir)/bi-reverse.c
  2099. + bc-arity.h: stamp-bcarity ; @true
  2100. + stamp-bcarity : $(srcdir)/bytecode.def bi-arity $(srcdir)/move-if-change
  2101. +     ./bi-arity < $(srcdir)/bytecode.def >tmp-bc-arity.h
  2102. +     $(srcdir)/move-if-change tmp-bc-arity.h bc-arity.h
  2103. +     touch stamp-bcarity
  2104. + bc-opcode.h: stamp-bcopcode ; @true
  2105. + stamp-bcopcode : $(srcdir)/bytecode.def bi-opcode $(srcdir)/move-if-change
  2106. +     ./bi-opcode < $(srcdir)/bytecode.def >tmp-bcopcd.h
  2107. +     $(srcdir)/move-if-change tmp-bcopcd.h bc-opcode.h
  2108. +     touch stamp-bcopcode
  2109. + bc-opname.h: stamp-bcopname ; @true
  2110. + stamp-bcopname : $(srcdir)/bytecode.def bi-opname $(srcdir)/move-if-change
  2111. +     ./bi-opname < $(srcdir)/bytecode.def >tmp-bcopnm.h
  2112. +     $(srcdir)/move-if-change tmp-bcopnm.h bc-opname.h
  2113. +     touch stamp-bcopname
  2114. + bytecode.mostlyclean:
  2115. +     -rm -f bc-arity.h bc-opcode.h bc-opname.h
  2116. + bytecode.distclean bytecode.clean:    bytecode.mostlyclean
  2117. +     -rm -f bi-arity bi-opcode bi-opname bi-lexer
  2118. + bytecode.realclean: bytecode.clean
  2119. +     -rm -f bi-parser.c bi-parser.h
  2120. + # Remake cpp and protoize.
  2121. + # Making the preprocessor
  2122. + cpp: cccp
  2123. +     -rm -f cpp
  2124. +     ln cccp cpp
  2125. + cccp: cccp.o cexp.o version.o $(LIBDEPS)
  2126. +     $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cccp cccp.o cexp.o version.o $(LIBS)
  2127. + cexp.o: $(srcdir)/cexp.c $(CONFIG_H)
  2128. +     $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c $(srcdir)/cexp.c
  2129. + $(srcdir)/cexp.c: $(srcdir)/cexp.y
  2130. +     cd $(srcdir); $(BISON) -o cexp.c cexp.y
  2131. + cccp.o: cccp.c $(CONFIG_H) pcp.h version.c config.status
  2132. + # The reason we use $(libdir)/g++-include rather than using libsubdir
  2133. + # is for compatibility with the current version of libg++.
  2134. +     $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  2135. +       -DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \
  2136. +       -DGPLUSPLUS_INCLUDE_DIR=\"$(libdir)/g++-include\" \
  2137. +       -DLOCAL_INCLUDE_DIR=\"$(local_prefix)/include\" \
  2138. +       -DCROSS_INCLUDE_DIR=\"$(libsubdir)/sys-include\" \
  2139. +       -DTOOL_INCLUDE_DIR=\"$(tooldir)/include\" \
  2140. +       -DTOOLDIR=\"$(tooldir)/\" \
  2141. +       -c `echo $(srcdir)/cccp.c | sed 's,^\./,,'`
  2142. + # Note for the stamp targets, we run the program `true' instead of
  2143. + # having an empty command (nothing following the semicolon).
  2144. + proto: config.status protoize unprotoize SYSCALLS.c.X
  2145. + protoize: protoize.o getopt.o getopt1.o getpwd.o version.o $(LIBDEPS)
  2146. +     $(CC) $(ALL_CFLAGS) $(LDFLAGS) \
  2147. +       protoize.o getopt.o getopt1.o getpwd.o version.o $(LIBS) -o $@
  2148. + protoize.o: stamp-proto ; @true
  2149. + unprotoize: unprotoize.o getopt.o getopt1.o getpwd.o version.o $(LIBDEPS)
  2150. +     $(CC) $(ALL_CFLAGS) $(LDFLAGS) \
  2151. +       unprotoize.o getopt.o getopt1.o getpwd.o version.o $(LIBS) -o $@
  2152. + unprotoize.o:    stamp-proto ; @true
  2153. + stamp-proto:    $(srcdir)/protoize.c getopt.h $(CONFIG_H)
  2154. +     $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  2155. +           -DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \
  2156. +           -DGPLUSPLUS_INCLUDE_DIR=\"$(libdir)/g++-include\" \
  2157. +           -DCROSS_INCLUDE_DIR=\"$(libsubdir)/sys-include\" \
  2158. +       -DTOOL_INCLUDE_DIR=\"$(tooldir)/include\" \
  2159. +       -DLOCAL_INCLUDE_DIR=\"$(local_prefix)/include\" \
  2160. +       -DSTD_PROTO_DIR=\"$(libsubdir)\" \
  2161. +       -DUNPROTOIZE $(srcdir)/protoize.c
  2162. +     mv protoize.o unprotoize.o
  2163. +     $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  2164. +           -DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \
  2165. +           -DGPLUSPLUS_INCLUDE_DIR=\"$(libdir)/g++-include\" \
  2166. +           -DCROSS_INCLUDE_DIR=\"$(libsubdir)/sys-include\" \
  2167. +       -DTOOL_INCLUDE_DIR=\"$(tooldir)/include\" \
  2168. +       -DLOCAL_INCLUDE_DIR=\"$(local_prefix)/include\" \
  2169. +       -DSTD_PROTO_DIR=\"$(libsubdir)\" \
  2170. +       $(srcdir)/protoize.c
  2171. +     touch stamp-proto
  2172. + getopt.o: $(srcdir)/getopt.c getopt.h
  2173. +     $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/getopt.c
  2174. + getopt1.o: $(srcdir)/getopt1.c getopt.h
  2175. +     $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/getopt1.c
  2176. + # This info describes the target machine, so compile with GCC just built.
  2177. + SYSCALLS.c.X: $(srcdir)/sys-types.h $(srcdir)/sys-protos.h $(GCC_PASSES)
  2178. +     -rm -f SYSCALLS.c tmp-SYSCALLS.s
  2179. +     cat $(srcdir)/sys-types.h $(srcdir)/sys-protos.h > SYSCALLS.c
  2180. +     $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  2181. +       -aux-info $@ -S -o tmp-SYSCALLS.s SYSCALLS.c
  2182. +     -rm -f SYSCALLS.c tmp-SYSCALLS.s
  2183. + test-protoize-simple: ./protoize ./unprotoize $(GCC_PASSES)
  2184. +     -rm -f tmp-proto.[cso]
  2185. +     cp $(srcdir)/protoize.c tmp-proto.c
  2186. +     chmod u+w tmp-proto.c
  2187. +     ./protoize -N -B ./ -x getopt.h -c "-B./ -Wall -Wwrite-strings \
  2188. +       $(CFLAGS) $(INCLUDES) \
  2189. +       -DGCC_INCLUDE_DIR=0 \
  2190. +       -DGPLUSPLUS_INCLUDE_DIR=0 \
  2191. +       -DCROSS_INCLUDE_DIR=0 \
  2192. +       -DTOOL_INCLUDE_DIR=0 \
  2193. +       -DSTD_PROTO_DIR=0" tmp-proto.c
  2194. +     @echo '**********' Expect 400 lines of differences.
  2195. +     -diff $(srcdir)/protoize.c tmp-proto.c > tmp-proto.diff
  2196. +     -wc -l tmp-proto.diff
  2197. +     ./unprotoize -N -x getopt.h -c "-B./ -Wall -Wwrite-strings \
  2198. +       $(CFLAGS) $(INCLUDES) \
  2199. +       -DGCC_INCLUDE_DIR=0 \
  2200. +       -DGPLUSPLUS_INCLUDE_DIR=0 \
  2201. +       -DCROSS_INCLUDE_DIR=0 \
  2202. +       -DTOOL_INCLUDE_DIR=0 \
  2203. +       -DSTD_PROTO_DIR=0" tmp-proto.c
  2204. +     @echo Expect zero differences.
  2205. +     diff $(srcdir)/protoize.c tmp-proto.c | cat
  2206. +     -rm -f tmp-proto.[cso]
  2207. + # Build the include directory.  The stamp files are stmp-* rather than
  2208. + # stamp-* so that mostlyclean does not force the include directory to
  2209. + # be rebuilt.
  2210. + # Build the include directory except for float.h (which depends upon
  2211. + # enquire).
  2212. + stmp-int-hdrs: stmp-fixinc $(USER_H) gvarargs.h gstdarg.h gstddef.h \
  2213. +   xlimits.h objc-headers
  2214. + # Copy in the headers provided with gcc.
  2215. + # The sed command gets just the last file name component;
  2216. + # this is necessary because VPATH could add a dirname.
  2217. + # Using basename would be simpler, but some systems don't have it.
  2218. +     objdir=`pwd`; \
  2219. +     cd $(srcdir); \
  2220. +     for file in $(USER_H); do \
  2221. +       realfile=`echo $$file | sed -e 's|.*/\([^/]*\)$$|\1|'`; \
  2222. +       rm -f $$objdir/include/$$realfile; \
  2223. +       cp $$realfile $$objdir/include; \
  2224. +       chmod a+r $$objdir/include/$$realfile; \
  2225. +     done
  2226. +     rm -f include/varargs.h
  2227. +     cp $(srcdir)/gvarargs.h include/varargs.h
  2228. +     chmod a+r include/varargs.h
  2229. +     rm -f include/stdarg.h
  2230. +     cp $(srcdir)/gstdarg.h include/stdarg.h
  2231. +     chmod a+r include/stdarg.h
  2232. +     rm -f include/stddef.h
  2233. +     cp $(srcdir)/gstddef.h include/stddef.h
  2234. +     chmod a+r include/stddef.h
  2235. +     rm -f include/limits.h
  2236. +     cp xlimits.h include/limits.h
  2237. +     chmod a+r include/limits.h
  2238. + # Install the README
  2239. +     rm -f include/README
  2240. +     cp $(srcdir)/README-fixinc include/README
  2241. +     chmod a+r include/README
  2242. +     touch stmp-int-hdrs
  2243. + # Build the complete include directory.
  2244. + stmp-headers: stmp-int-hdrs gfloat.h
  2245. +     rm -f include/float.h
  2246. +     cp gfloat.h include/float.h
  2247. +     chmod a+r include/float.h
  2248. +     touch stmp-headers
  2249. + # Running fixincludes requires making sure that xgcc and cpp have been
  2250. + # compiled (they are used to get the value of __SIZE_TYPE__).
  2251. + # But recompiling xgcc should not force the the header files to be
  2252. + # fixed again.  If you want to do that, delete stmp-fixinc.
  2253. + fixinc.ready: xgcc cpp
  2254. +     -if [ -f fixinc.ready ] ; then \
  2255. +         true; \
  2256. +     else \
  2257. +         touch fixinc.ready; \
  2258. +     fi
  2259. + # Build fixed copies of system files.
  2260. + stmp-fixinc: $(srcdir)/$(FIXINCLUDES) gsyslimits.h fixinc.ready
  2261. +     rm -rf include
  2262. +     mkdir include
  2263. +     if [ x$(FIXINCLUDES) != xMakefile.in ]; \
  2264. +     then \
  2265. +       for dir in $(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS); do \
  2266. +         if [ -d $$dir ]; \
  2267. +         then \
  2268. +           $(srcdir)/$(FIXINCLUDES) include $$dir $(srcdir) "`pwd`/xgcc -B`pwd`/"; \
  2269. +         else true; fi; \
  2270. +       done; \
  2271. +     else true; \
  2272. +     fi
  2273. +     rm -f include/syslimits.h
  2274. +     if [ -f include/limits.h ]; then \
  2275. +       mv include/limits.h include/syslimits.h; \
  2276. +     else \
  2277. +       cp $(srcdir)/gsyslimits.h include/syslimits.h; \
  2278. +     fi
  2279. +     chmod a+r include/syslimits.h
  2280. +     touch stmp-fixinc
  2281. + # copy objc header files into build directory
  2282. + objc-headers: stmp-fixinc
  2283. +     if [ -d objc ]; then true; else mkdir objc; fi
  2284. +     thisdir1=`pwd`; \
  2285. +     srcdir1=`cd $(srcdir); pwd`; \
  2286. +     cd objc; \
  2287. +     $(MAKE) -f $${srcdir1}/objc/Makefile copy-headers \
  2288. +     srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
  2289. +     GCC_FOR_TARGET="$${thisdir1}/xgcc -B$${thisdir1}/" \
  2290. +     GCC_CFLAGS="$(GCC_CFLAGS)" incinstalldir=$${thisdir1}/include
  2291. +     touch objc-headers
  2292. + # Files related to the fixproto script.
  2293. + deduced.h: $(GCC_PASSES) $(srcdir)/scan-types.sh stmp-int-hdrs
  2294. +     CC="$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) -I. -I$(srcdir) -Iinclude -I${SYSTEM_HEADER_DIR}"; \
  2295. +       export CC; \
  2296. +       $(srcdir)/scan-types.sh "$(srcdir)" >tmp-deduced.h
  2297. +     mv tmp-deduced.h deduced.h
  2298. + gen-protos: gen-protos.o scan.o $(HOST_LIBDEPS)
  2299. +     ${HOST_CC} $(HOST_CFLAGS) $(HOST_LDFLAGS) -o gen-protos \
  2300. +       gen-protos.o scan.o $(HOST_LIBS)
  2301. + gen-protos.o: gen-protos.c scan.h hconfig.h
  2302. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/gen-protos.c
  2303. + scan.o: scan.c scan.h hconfig.h
  2304. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/scan.c
  2305. + xsys-protos.h: $(GCC_PASSES) $(srcdir)/sys-protos.h deduced.h gen-protos Makefile
  2306. +     cat deduced.h $(srcdir)/sys-protos.h > fixtmp.c
  2307. +     $(GCC_FOR_TARGET) fixtmp.c -E \
  2308. +       | sed -e 's/    / /g' -e 's/ *(/ (/g' -e 's/ [ ]*/ /g' -e 's/( )/()/' \
  2309. +       | ./gen-protos >xsys-protos.h
  2310. +     rm -rf fixtmp.c
  2311. + fix-header: fix-header.o scan-decls.o scan.o xsys-protos.h $(HOST_LIBDEPS)
  2312. +     $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o fix-header \
  2313. +       fix-header.o scan-decls.o scan.o $(HOST_LIBS)
  2314. + fix-header.o: fix-header.c obstack.h scan.h xsys-protos.h hconfig.h
  2315. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/fix-header.c
  2316. + scan-decls.o: scan-decls.c scan.h hconfig.h
  2317. +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/scan-decls.c
  2318. + # stmp-fixproto depends on this, not on fix-header directly.
  2319. + # The idea is to make sure fix-header gets built,
  2320. + # but not rerun fixproto after each stage
  2321. + # just because fix-header's mtime has changed.
  2322. + fixhdr.ready: fix-header
  2323. +     -if [ -f fixhdr.ready ] ; then \
  2324. +         true; \
  2325. +     else \
  2326. +         touch fixhdr.ready; \
  2327. +     fi
  2328. + # stmp-headers is to make sure fixincludes has already finished.
  2329. + # The if statement is so that we don't run fixproto a second time
  2330. + # if it has already been run on the files in `include'.
  2331. + stmp-fixproto: fixhdr.ready fixproto stmp-headers
  2332. +     @echo "Various warnings and error messages from fixproto are normal"
  2333. +     -if [ -d include ] ; then true; else mkdir include; fi
  2334. +     if [ -f include/fixed ] ; then true; \
  2335. +     else \
  2336. +       CPP="$(GCC_FOR_TARGET) -E"; export CPP; \
  2337. +         ${srcdir}/fixproto include include $(SYSTEM_HEADER_DIR); \
  2338. +       touch include/fixed; \
  2339. +     fi
  2340. +     touch stmp-fixproto
  2341. + # Remake the info files.
  2342. + doc: info
  2343. + info: $(srcdir)/cpp.info $(srcdir)/gcc.info
  2344. + $(srcdir)/cpp.info: cpp.texi
  2345. +     cd $(srcdir); $(MAKEINFO) cpp.texi
  2346. + #$(srcdir)/gplus.info: gplus.texi
  2347. + #    $(MAKEINFO) `echo $(srcdir)/gplus.texi | sed 's,^\./,,'`
  2348. + $(srcdir)/gcc.info: gcc.texi extend.texi install.texi invoke.texi \
  2349. +         md.texi rtl.texi tm.texi 
  2350. +     cd $(srcdir); $(MAKEINFO) gcc.texi
  2351. + dvi: $(srcdir)/gcc.dvi $(srcdir)/cpp.dvi
  2352. + # This works with GNU Make's default rule.
  2353. + $(srcdir)/gcc.dvi: gcc.texi extend.texi install.texi invoke.texi \
  2354. +         md.texi rtl.texi tm.texi 
  2355. +     $(TEXI2DVI) $<
  2356. + # This works with GNU Make's default rule.
  2357. + $(srcdir)/cpp.dvi: cpp.texi
  2358. +     $(TEXI2DVI) $<
  2359. + $(srcdir)/INSTALL: install1.texi install.texi
  2360. +     $(MAKEINFO) -D INSTALLONLY --no-header --no-split \
  2361. +       `echo $(srcdir)/install1.texi | sed 's,^\./,,'`
  2362. + # Deletion of files made during compilation.
  2363. + # There are four levels of this:
  2364. + #   `mostlyclean', `clean', `distclean' and `realclean'.
  2365. + # `mostlyclean' is useful while working on a particular type of machine.
  2366. + # It deletes most, but not all, of the files made by compilation.
  2367. + # It does not delete libgcc.a or its parts, so it won't have to be recompiled.
  2368. + # `clean' deletes everything made by running `make all'.
  2369. + # `distclean' also deletes the files made by config.
  2370. + # `realclean' also deletes everything that could be regenerated automatically.
  2371. + mostlyclean: bytecode.mostlyclean
  2372. +     -rm -f $(STAGESTUFF)
  2373. + # Clean the objc subdir if we created one.
  2374. +     if [ -d objc ]; then \
  2375. +       srcdir1=`cd $(srcdir); pwd`; \
  2376. +       cd objc; $(MAKE) -f $$srcdir1/objc/Makefile mostlyclean; \
  2377. +     else true; fi
  2378. +     -rm -f libobjc.a
  2379. + # Delete the temporary source copies for cross compilation.
  2380. +     -rm -f $(HOST_PREFIX_1)rtl.c $(HOST_PREFIX_1)rtlanal.c
  2381. +     -rm -f $(HOST_PREFIX_1)alloca.c $(HOST_PREFIX_1)malloc.c
  2382. +     -rm -f $(HOST_PREFIX_1)obstack.c 
  2383. + # Delete the temp files made in the course of building libgcc.a.
  2384. +     -rm -f tmplibgcc* tmpcopy xlimits.h
  2385. +     for name in $(LIB1FUNCS); do rm -f $${name}.c; done
  2386. + # Delete other temporary files.
  2387. +     -rm -f tmp-float.h tmp-gcc.xtar.gz
  2388. +     -rm -f tmp-foo1 tmp-foo2 tmp-proto.* tmp-unproto.1 tmp-SYSCALLS.s
  2389. + # Delete the stamp files.
  2390. +     -rm -f stamp-* tmp-*
  2391. + # Delete debugging dump files.
  2392. +     -rm -f *.greg *.lreg *.combine *.flow *.cse *.jump *.rtl *.tree *.loop
  2393. +     -rm -f *.dbr *.jump2 *.sched *.cse2 *.sched2 *.stack
  2394. + # Delete some files made during installation.
  2395. +     -rm -f specs gfloat.h float.h-* enquire SYSCALLS.c.X SYSCALLS.c
  2396. +     -rm -f collect collect2 ld mips-tfile mips-tdump alloca.s
  2397. + # Delete files generated for fixproto
  2398. +     -rm -rf fix-header xsys-protos.h deduced.h tmp-deduced.h \
  2399. +       gen-protos fixproto.list fixtmp.* fixhdr.ready
  2400. + # Delete unwanted output files from TeX.
  2401. +     -rm -f *.toc *.log *.vr *.fn *.cp *.tp *.ky *.pg
  2402. + # Delete sorted indices we don't actually use.
  2403. +     -rm -f gcc.vrs gcc.kys gcc.tps gcc.pgs gcc.fns
  2404. + # Delete core dumps.
  2405. +     -rm -f core config/core
  2406. + # Delete all files made by compilation
  2407. + # that don't exist in the distribution.
  2408. + clean: mostlyclean bytecode.clean
  2409. + # It may not be quite desirable to delete unprotoize.c here,
  2410. + # but the spec for `make clean' requires it.
  2411. + # Using unprotoize.c is not quite right in the first place, 
  2412. + # but what better way is there?
  2413. +     -rm -f libgcc.a libgcc1.a libgcc2.a libgcc2.ready libgcc1.null
  2414. +     -rm -f *.dvi
  2415. +     -if [ -f md.pre-cpp ]; then \
  2416. +       rm -f md ; \
  2417. +     fi
  2418. + # Delete the include directory.
  2419. +     -rm -rf stmp-* fixinc.ready include objc-headers
  2420. + # Delete all files that users would normally create
  2421. + # while building and installing GCC.
  2422. + distclean: clean bytecode.distclean
  2423. +     -rm -f tm.h aux-output.c config.h config.status tconfig.h hconfig.h
  2424. +     -rm -f md md.pre-cpp
  2425. +     -rm -f Makefile *.oaux
  2426. +     -rm -fr stage1 stage2 stage3 stage4
  2427. +     -rm -f cp-parse.output
  2428. +     -rm -f objc-parse.output
  2429. +     -rm -f c-parse.output
  2430. + # Delete anything likely to be found in the source directory
  2431. + # that shouldn't be in the distribution.
  2432. + extraclean: distclean
  2433. +     -rm -rf =* ./"#"* *~* config/=* config/"#"* config/*~*
  2434. +     -rm -f patch* *.orig *.rej config/patch* config/*.orig config/*.rej
  2435. +     -rm -f config/*/=* config/*/"#"* config/*/*~*
  2436. +     -rm -f config/*/*.orig config/*/*.rej
  2437. +     -rm -f objc/=* objc/"#"* objc/*~*
  2438. +     -rm -f objc/*.orig objc/*.rej
  2439. +     -rm -f *.dvi *.oaux *.d *.[zZ] *.gz
  2440. +     -rm -f *.tar *.xtar *diff *.diff.* *.tar.* *.xtar.* *diffs
  2441. +     -rm -f *lose config/*lose config/*/*lose
  2442. +     -rm -f *.s *.s[0-9] *.i install1.texi config/ChangeLog
  2443. +     -rm -f djefoo
  2444. + # Get rid of every file that's generated from some other file.
  2445. + # Most of these files ARE PRESENT in the GCC distribution.
  2446. + realclean: distclean bytecode.realclean
  2447. +     -rm -f c-parse.y objc-parse.y
  2448. +     -rm -f cp-parse.c cp-parse.h cp-parse.output
  2449. +     -rm -f objc-parse.c objc-parse.output
  2450. +     -rm -f c-parse.c c-parse.h c-parse.output
  2451. +     -rm -f cexp.c cexp.output TAGS 
  2452. +     -rm -f cpp.info* cpp.??s cpp.*aux
  2453. +     -rm -f gcc.info* gcc.??s gcc.*aux
  2454. +     -rm -f gplus.info* gplus.??s gplus.*aux
  2455. + # Entry points `install' and `uninstall'.
  2456. + # Also use `install-collect2' to install collect2 when the config files don't.
  2457. + # The semicolon is to prevent the install.sh -> install default rule
  2458. + # from doing anything.  Having it run true helps avoid problems and
  2459. + # noise from versions of make which don't like to have null commands.
  2460. + install: $(INSTALL_TARGET) ; @true
  2461. + # Copy the compiler files into directories where they will be run.
  2462. + install-normal: install-common $(INSTALL_HEADERS) $(INSTALL_LIBGCC) \
  2463. +     install-man install-info
  2464. + # Do nothing while making gcc with a cross-compiler. The person who
  2465. + # makes gcc for the target machine has to know how to put a complete
  2466. + # gcc together by hand.
  2467. + install-build: force
  2468. +     @echo You have to install gcc on your target machine by hand.
  2469. + # Run this on the target machine
  2470. + # to finish installation of cross compiler.
  2471. + install-cross-rest: install-float-h-cross
  2472. + # Install float.h for cross compiler.
  2473. + # Run this on the target machine!
  2474. + install-float-h-cross: install-dir
  2475. + #    if [ -f enquire ] ; then true; else false; fi
  2476. + # Note: don't use -.  We should fail right away if enquire was not made.
  2477. +     ./enquire -f > $(tmpdir)/float.h
  2478. +     -rm -f $(libsubdir)/include/float.h
  2479. +     $(INSTALL_DATA) $(tmpdir)/float.h $(libsubdir)/include/float.h
  2480. +     -rm -f $(tmpdir)/float.h
  2481. +     chmod a-x $(libsubdir)/include/float.h
  2482. + # Create the installation directory.
  2483. + install-dir:
  2484. +     -if [ -d $(libdir) ] ; then true ; else mkdir $(libdir) ; fi
  2485. +     -if [ -d $(libdir)/gcc-lib ] ; then true ; else mkdir $(libdir)/gcc-lib ; fi
  2486. + # This dir isn't currently searched by cpp.
  2487. + #    -if [ -d $(libdir)/gcc-lib/include ] ; then true ; else mkdir $(libdir)/gcc-lib/include ; fi
  2488. +     -if [ -d $(libdir)/gcc-lib/$(target) ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target) ; fi
  2489. +     -if [ -d $(libdir)/gcc-lib/$(target)/$(version) ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target)/$(version) ; fi
  2490. +     -if [ -d $(libdir)/gcc-lib/$(target)/$(version)/include ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target)/$(version)/include ; fi
  2491. +     -if [ -d $(bindir) ] ; then true ; else mkdir $(bindir) ; fi
  2492. +     -if [ -d $(includedir) ] ; then true ; else mkdir $(includedir) ; fi
  2493. +     -if [ -d $(tooldir) ] ; then true ; else mkdir $(tooldir) ; fi
  2494. +     -if [ -d $(assertdir) ] ; then true ; else mkdir $(assertdir) ; fi
  2495. +     -if [ -d $(infodir) ] ; then true ; else mkdir $(infodir) ; fi
  2496. + # We don't use mkdir -p to create the parents of mandir,
  2497. + # because some systems don't support it.
  2498. + # Instead, we use this technique to create the immediate parent of mandir.
  2499. +     -parent=`echo $(mandir)|sed -e 's@/[^/]*$$@@'`; \
  2500. +     if [ -d $$parent ] ; then true ; else mkdir $$parent ; fi
  2501. +     -if [ -d $(mandir) ] ; then true ; else mkdir $(mandir) ; fi
  2502. + # Install the compiler executables built during cross compilation.
  2503. + install-common: native install-dir xgcc $(EXTRA_PARTS)
  2504. +     for file in $(COMPILERS); do \
  2505. +       if [ -f $$file ] ; then \
  2506. +         rm -f $(libsubdir)/$$file; \
  2507. +         $(INSTALL_PROGRAM) $$file $(libsubdir)/$$file; \
  2508. +       else true; \
  2509. +       fi; \
  2510. +     done
  2511. +     for file in $(EXTRA_PASSES) $(EXTRA_PARTS) $(EXTRA_PROGRAMS) $(USE_COLLECT2) ..; do \
  2512. +       if [ x"$$file" != x.. ]; then \
  2513. +         rm -f $(libsubdir)/$$file; \
  2514. +         $(INSTALL_PROGRAM) $$file $(libsubdir)/$$file; \
  2515. +       else true; fi; \
  2516. +     done
  2517. + # Don't mess with specs if it doesn't exist yet.
  2518. +     -if [ -f specs ] ; then \
  2519. +       rm -f $(libsubdir)/specs; \
  2520. +       $(INSTALL_DATA) specs $(libsubdir)/specs; \
  2521. +     fi
  2522. + # Install the driver program as $(target)-gcc
  2523. + # and also as either gcc (if native) or $(tooldir)/bin/gcc.
  2524. +     -if [ -f gcc-cross ] ; then \
  2525. +       rm -f $(bindir)/$(target)-gcc; \
  2526. +       $(INSTALL_PROGRAM) gcc-cross $(bindir)/$(target)-gcc; \
  2527. +       if [ -d $(tooldir)/bin/. ] ; then \
  2528. +         rm -f $(tooldir)/bin/gcc; \
  2529. +         $(INSTALL_PROGRAM) gcc-cross $(tooldir)/bin/gcc; \
  2530. +       else true; fi; \
  2531. +       if [ -f cc1plus ] ; then \
  2532. +         rm -f $(bindir)/$(target)-g++; \
  2533. +         $(INSTALL_PROGRAM) g++-cross $(bindir)/$(target)-g++; \
  2534. +         chmod a+x $(bindir)/$(target)-g++; \
  2535. +         rm -f $(bindir)/$(target)-c++; \
  2536. +         ln $(bindir)/$(target)-g++ $(bindir)/$(target)-c++; \
  2537. +       fi ; \
  2538. +     else \
  2539. +       rm -f $(bindir)/gcc; \
  2540. +       $(INSTALL_PROGRAM) xgcc $(bindir)/gcc; \
  2541. +       rm -f $(bindir)/$(target)-gcc-1; \
  2542. +       ln $(bindir)/gcc $(bindir)/$(target)-gcc-1; \
  2543. +       mv $(bindir)/$(target)-gcc-1 $(bindir)/$(target)-gcc; \
  2544. +       if [ -f gnat1 ] ; then \
  2545. +         rm -f $(bindir)/gnatbind; \
  2546. +         $(INSTALL_PROGRAM) gnatbind $(bindir)/gnatbind; \
  2547. +         chmod a+x $(bindir)/gnatbind; \
  2548. +         rm -f $(bindir)/gnatsplit; \
  2549. +         $(INSTALL_PROGRAM) gnatsplit $(bindir)/gnatsplit; \
  2550. +         chmod a+x $(bindir)/gnatsplit; \
  2551. +         rm -f $(bindir)/gnatchop; \
  2552. +         $(INSTALL_PROGRAM) gnatchop $(bindir)/gnatchop; \
  2553. +         chmod a+x $(bindir)/gnatchop; \
  2554. +         rm -f $(bindir)/gnatbl; \
  2555. +         $(INSTALL_PROGRAM) gnatbl $(bindir)/gnatbl; \
  2556. +         chmod a+x $(bindir)/gnatbl; \
  2557. +         rm -f $(bindir)/gnatf; \
  2558. +         $(INSTALL_PROGRAM) gnatf $(bindir)/gnatf; \
  2559. +         chmod a+x $(bindir)/gnatf; \
  2560. +             rm -f $(bindir)/gkrunch; \
  2561. +             $(INSTALL_PROGRAM) gkrunch $(bindir)/gkrunch; \
  2562. +             chmod a+x $(bindir)/gkrunch; \
  2563. +             $(MAKE) install-gnatlib; \
  2564. +       fi; \
  2565. +       if [ -f cc1plus ] ; then \
  2566. +         rm -f $(bindir)/g++; \
  2567. +         $(INSTALL_PROGRAM) g++ $(bindir)/g++; \
  2568. +         chmod a+x $(bindir)/g++; \
  2569. +         rm -f $(bindir)/c++; \
  2570. +         ln $(bindir)/g++ $(bindir)/c++; \
  2571. +       fi ; \
  2572. +     fi
  2573. + # Install protoize if it was compiled.
  2574. +     -if [ -f protoize ]; \
  2575. +     then \
  2576. +         rm -f $(bindir)/protoize; \
  2577. +         $(INSTALL_PROGRAM) protoize $(bindir)/protoize; \
  2578. +         rm -f $(bindir)/unprotoize; \
  2579. +         $(INSTALL_PROGRAM) unprotoize $(bindir)/unprotoize; \
  2580. +         rm -f $(libsubdir)/SYSCALLS.c.X; \
  2581. +         $(INSTALL_DATA) SYSCALLS.c.X $(libsubdir)/SYSCALLS.c.X; \
  2582. +         chmod a-x $(libsubdir)/SYSCALLS.c.X; \
  2583. +     fi
  2584. +     -rm -f $(libsubdir)/cpp
  2585. +     $(INSTALL_PROGRAM) cpp $(libsubdir)/cpp
  2586. + install-gnatlib:
  2587. +     rm -rf tmp-adainclude stamp-pthreads
  2588. +     $(MAKE) tmp-adainclude
  2589. +     $(MAKE) stamp-pthreads
  2590. +     rm -rf $(ADA_RTL_OBJ_DIR)
  2591. +     mkdir $(ADA_RTL_OBJ_DIR)
  2592. +     mv tmp-adainclude/*.o tmp-adainclude/*.ali tmp-adainclude/*.a \
  2593. +           threads/lib/libpthreads.a $(ADA_RTL_OBJ_DIR)
  2594. +     rm -rf $(ADA_INCLUDE_DIR)
  2595. +     mkdir $(ADA_INCLUDE_DIR)
  2596. +     mv tmp-adainclude/*.ad[bs] $(ADA_INCLUDE_DIR)
  2597. +     if $(RANLIB_TEST) ; then $(RANLIB) $(ADA_RTL_OBJ_DIR)/*.a; \
  2598. +           else true; fi
  2599. + tmp-adainclude:
  2600. +     rm -rf tmp-adainclude-tmp
  2601. +     mkdir tmp-adainclude-tmp
  2602. +     for file in $(ADA_INCLUDE_SRCS) $(LIBGNAT_SRCS); do \
  2603. +           cp $$file tmp-adainclude-tmp/$$file; \
  2604. +         done
  2605. +     (cd tmp-adainclude-tmp; $(MAKE) CC="../xgcc -B../" CFLAGS="-g -O2" \
  2606. +           -f ../Makefile ada-runtime)
  2607. +     mv tmp-adainclude-tmp tmp-adainclude
  2608. + # Install the info files.
  2609. + install-info: doc install-dir
  2610. +     -rm -f $(infodir)/cpp.info* $(infodir)/gcc.info*
  2611. +     cd $(srcdir); for f in cpp.info* gcc.info*; \
  2612. +     do $(INSTALL_DATA) $$f $(infodir)/$$f; done
  2613. +     -chmod a-x $(infodir)/cpp.info* $(infodir)/gcc.info*
  2614. + # Install the man pages.
  2615. + install-man: install-dir $(srcdir)/gcc.1 $(srcdir)/cccp.1 $(srcdir)/g++.1
  2616. +     -rm -f $(mandir)/gcc$(manext)
  2617. +     -$(INSTALL_DATA) $(srcdir)/gcc.1 $(mandir)/gcc$(manext)
  2618. +     -chmod a-x $(mandir)/gcc$(manext)
  2619. +     -rm -f $(mandir)/cccp$(manext)
  2620. +     -$(INSTALL_DATA) $(srcdir)/cccp.1 $(mandir)/cccp$(manext)
  2621. +     -chmod a-x $(mandir)/cccp$(manext)
  2622. +     -$(INSTALL_DATA) $(srcdir)/g++.1 $(mandir)/g++$(manext)
  2623. +     -chmod a-x $(mandir)/g++$(manext)
  2624. + # Install the library.
  2625. + install-libgcc: libgcc.a install-dir
  2626. +     -if [ -f libgcc.a ] ; then \
  2627. +       rm -f $(libsubdir)/libgcc.a; \
  2628. +       $(INSTALL_DATA) libgcc.a $(libsubdir)/libgcc.a; \
  2629. +       if $(RANLIB_TEST) ; then \
  2630. +         (cd $(libsubdir); $(RANLIB) libgcc.a); else true; fi; \
  2631. +       chmod a-x $(libsubdir)/libgcc.a; \
  2632. +     else true; fi
  2633. + # Install the objc run time library.
  2634. + install-libobjc: libobjc.a install-dir
  2635. +     -if [ -f libobjc.a ] ; then \
  2636. +       rm -f $(libsubdir)/libobjc.a; \
  2637. +       $(INSTALL_DATA) libobjc.a $(libsubdir)/libobjc.a; \
  2638. +       if $(RANLIB_TEST) ; then \
  2639. +         (cd $(libsubdir); $(RANLIB) libobjc.a); else true; fi; \
  2640. +       chmod a-x $(libsubdir)/libobjc.a; \
  2641. +     else true; fi
  2642. + # Install all the header files built in the include subdirectory.
  2643. + install-headers: install-include-dir $(INSTALL_HEADERS_DIR) install-assert-h
  2644. + # Fix symlinks to absolute paths in the installed include directory to
  2645. + # point to the installed directory, not the build directory.
  2646. +     -files=`cd $(libsubdir)/include; find . -type l -print 2>/dev/null`; \
  2647. +     if [ $$? -eq 0 ]; then \
  2648. +       dir=`cd include; pwd`; \
  2649. +       for i in $$files; do \
  2650. +         dest=`ls -ld $(libsubdir)/include/$$i | sed -n 's/.*-> //p'`; \
  2651. +         if expr "$$dest" : "$$dir.*" > /dev/null; then \
  2652. +           rm -f $(libsubdir)/include/$$i; \
  2653. +           ln -s `echo $$i | sed "s|/[^/]*|/..|g" | sed 's|/..$$||'``echo "$$dest" | sed "s|$$dir||"` $(libsubdir)/include/$$i; \
  2654. +         fi; \
  2655. +       done; \
  2656. +     fi
  2657. + # Create or recreate the gcc private include file directory.
  2658. + install-include-dir: install-dir
  2659. +     -rm -rf $(libsubdir)/include
  2660. +     mkdir $(libsubdir)/include
  2661. +     -chmod a+rx $(libsubdir)/include
  2662. + # Install the include directory using tar.
  2663. + install-headers-tar: stmp-headers $(STMP_FIXPROTO) install-include-dir
  2664. +     cd include; \
  2665. +      (tar cf - .; exit 0) | (cd $(libsubdir)/include; tar $(TAROUTOPTS) - )
  2666. + # /bin/sh on some systems returns the status of the first tar,
  2667. + # and that can lose with GNU tar which always writes a full block.
  2668. + # So use `exit 0' to ignore its exit status.
  2669. + # Install the include directory using cpio.
  2670. + install-headers-cpio: stmp-headers $(STMP_FIXPROTO) install-include-dir
  2671. +     cd include; find . -print | cpio -pdum $(libsubdir)/include
  2672. + # Put assert.h where it won't override GNU libc's assert.h.
  2673. + # It goes in a dir that is searched after GNU libc's headers;
  2674. + # thus, the following conditionals are no longer needed.
  2675. + # But it's not worth deleting them now.
  2676. + ## Don't replace the assert.h already there if it is not from GCC.
  2677. + ## This code would be simpler if it tested for -f ... && ! grep ...
  2678. + ## but supposedly the ! operator is missing in sh on some systems.
  2679. + install-assert-h: assert.h install-dir
  2680. +     if [ -f $(assertdir)/assert.h ]; \
  2681. +     then \
  2682. +       if grep "__eprintf" $(assertdir)/assert.h >/dev/null; \
  2683. +         then \
  2684. +         rm -f $(assertdir)/assert.h; \
  2685. +         $(INSTALL_DATA) $(srcdir)/assert.h $(assertdir)/assert.h; \
  2686. +         chmod a-x $(assertdir)/assert.h; \
  2687. +       else true; \
  2688. +       fi; \
  2689. +     else \
  2690. +       rm -f $(assertdir)/assert.h; \
  2691. +       $(INSTALL_DATA) $(srcdir)/assert.h $(assertdir)/assert.h; \
  2692. +       chmod a-x $(assertdir)/assert.h; \
  2693. +     fi
  2694. + # Use this target to install the program `collect2' under the name `ld'.
  2695. + install-collect2: collect2 install-dir
  2696. +     $(INSTALL_PROGRAM) collect2 $(libsubdir)/ld
  2697. + # Install the driver program as $(libsubdir)/gcc for collect2.
  2698. +     $(INSTALL_PROGRAM) xgcc $(libsubdir)/gcc
  2699. + # Cancel installation by deleting the installed files.
  2700. + uninstall:
  2701. +     -rm -rf $(libsubdir)
  2702. +     -rm -rf $(bindir)/gcc
  2703. +     -rm -rf $(bindir)/protoize
  2704. +     -rm -rf $(bindir)/unprotoize
  2705. +     -rm -rf $(mandir)/gcc$(manext)
  2706. +     -rm -rf $(mandir)/g++$(manext)
  2707. +     -rm -rf $(mandir)/cccp$(manext)
  2708. +     -rm -rf $(mandir)/protoize$(manext)
  2709. +     -rm -rf $(mandir)/unprotoize$(manext)
  2710. + # These exist for maintenance purposes.
  2711. + # Update the tags table.
  2712. + TAGS: force
  2713. +     cd $(srcdir);                            \
  2714. +     mkdir temp;                            \
  2715. +     mv -f c-parse.[ch] cp-parse.[ch] objc-parse.c cexp.c =*.[chy] temp; \
  2716. +     etags *.y *.h *.c;                        \
  2717. +     mv temp/* .;                            \
  2718. +     rmdir temp
  2719. + # Create the distribution tar file.
  2720. + #dist: gcc-$(version).tar.gz
  2721. + dist: gcc.xtar.gz
  2722. + gcc.xtar.gz: gcc.xtar
  2723. +     gzip < gcc.xtar > tmp-gcc.xtar.gz
  2724. +     mv tmp-gcc.xtar.gz gcc.xtar.gz
  2725. + #gcc-$(version).tar.gz: gcc-$(version).tar
  2726. + #    gzip < gcc-$(version).tar > gcc-$(version).tar.gz
  2727. + #gcc-$(version).tar:
  2728. + gcc.xtar: distdir
  2729. + # Make the distribution.
  2730. +     tar chf gcc.xtar gcc-$(version)
  2731. + distdir: doc $(srcdir)/INSTALL c-parse.y objc-parse.y cp-parse.y \
  2732. +   c-parse.c cp-parse.c objc-parse.c cexp.c
  2733. +     @if grep -s "for version ${mainversion}" gcc.texi > /dev/null; \
  2734. +     then true; \
  2735. +     else echo "You must update the version number in \`gcc.texi'"; sleep 10;\
  2736. +     fi
  2737. + # Update the version number in README
  2738. +     awk '$$1 " " $$2 " " $$3 == "This directory contains" \
  2739. +         { $$6 = version; print $$0 } \
  2740. +          $$1 " " $$2 " " $$3 != "This directory contains"' \
  2741. +       version=$(version) README > tmp.README
  2742. +     mv tmp.README README
  2743. +     -rm -rf gcc-$(version) tmp    
  2744. + # Put all the files in a temporary subdirectory
  2745. + # which has the name that we want to have in the tar file.
  2746. +     mkdir tmp
  2747. +     mkdir tmp/config
  2748. +     mkdir tmp/objc
  2749. +     for file in *[0-9a-zA-Z+]; do \
  2750. +       ln $$file tmp > /dev/null 2>&1 || cp $$file tmp; \
  2751. +     done
  2752. +     cd config; \
  2753. +     for file in *[0-9a-zA-Z+]; do \
  2754. +       if test -d $$file && test "$$file" != RCS; then \
  2755. +         mkdir ../tmp/config/$$file; \
  2756. +         cd $$file; \
  2757. +         for subfile in *[0-9a-zA-Z+]; do \
  2758. +           ln $$subfile ../../tmp/config/$$file >/dev/null 2>&1 \
  2759. +           || cp $$subfile ../../tmp/config/$$file; \
  2760. +         done; \
  2761. +         cd ..; \
  2762. +       else \
  2763. +         ln $$file ../tmp/config >/dev/null 2>&1 \
  2764. +         || cp $$file ../tmp/config; \
  2765. +       fi; \
  2766. +     done
  2767. +     cd objc; \
  2768. +     for file in *[0-9a-zA-Z+]; do \
  2769. +       ln $$file ../tmp/objc >/dev/null 2>&1 || cp $$file ../tmp/objc; \
  2770. +     done
  2771. +     ln .gdbinit tmp
  2772. +     mv tmp gcc-$(version)
  2773. + # Get rid of everything we don't want in the distribution.
  2774. +     cd gcc-$(version); make -f Makefile.in extraclean
  2775. + # make diff oldversion=M.N 
  2776. + # creates a diff file between an older distribution and this one.
  2777. + # The -P option assumes this is GNU diff.
  2778. + diff:
  2779. +     diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y \
  2780. +       -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c \
  2781. +       -x objc-parse.c -x TAGS -x "gcc.??" -x "gcc.??s" -x gcc.aux \
  2782. +       -x "cpp.??s" -x "cpp.??" -x cpp.aux -x "cpp.info*" -x "gcc.info*" \
  2783. +       gcc-$(oldversion) gcc-$(version) > diffs
  2784. + # do make -f ../gcc/Makefile maketest DIR=../gcc
  2785. + # in the intended test directory to make it a suitable test directory.
  2786. + # THIS IS OBSOLETE; use the -srcdir operand in configure instead. 
  2787. + maketest:
  2788. +     ln -s $(DIR)/*.[chy] .
  2789. +     ln -s $(DIR)/configure .
  2790. +     ln -s $(DIR)/*.def .
  2791. +     -rm -f =*
  2792. +     ln -s $(DIR)/.gdbinit .
  2793. +     ln -s $(DIR)/$(FIXINCLUDES) .
  2794. +     -ln -s $(DIR)/bison.simple .
  2795. +     ln -s $(DIR)/config .
  2796. +     ln -s $(DIR)/move-if-change .
  2797. + # The then and else were swapped to avoid a problem on Ultrix.
  2798. +     if [ ! -f Makefile ] ; then ln -s $(DIR)/Makefile .; else false; fi
  2799. +     -rm tm.h aux-output.c config.h md
  2800. +     make clean
  2801. + # You must then run config to set up for compilation.
  2802. + bootstrap: force
  2803. + # Only build the C compiler for stage1, because that is the only one that
  2804. + # we can guarantee will build with the native compiler, and also it is the
  2805. + # only thing useful for building stage2.
  2806. +     $(MAKE) CC="$(CC)" libdir=$(libdir) LANGUAGES=c
  2807. +     $(MAKE) stage1
  2808. + # This used to define ALLOCA as empty, but that would lead to bad results
  2809. + # for a subsequent `make install' since that would not have ALLOCA empty.
  2810. + # To prevent `make install' from compiling alloca.o and then relinking cc1
  2811. + # because alloca.o is newer, we permit these recursive makes to compile
  2812. + # alloca.o.  Then cc1 is newer, so it won't have to be relinked.
  2813. +     $(MAKE) CC="stage1/xgcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  2814. +     $(MAKE) stage2
  2815. +     $(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  2816. + bootstrap2: force
  2817. +     $(MAKE) CC="stage1/xgcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  2818. +     $(MAKE) stage2
  2819. +     $(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  2820. + bootstrap3: force
  2821. +     $(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  2822. + # Compare the object files in the current directory with those in the
  2823. + # stage2 directory.
  2824. + # ./ avoids bug in some versions of tail.
  2825. + compare: force
  2826. +     for file in *.o; do \
  2827. +       tail +16c ./$$file > tmp-foo1; \
  2828. +       tail +16c stage2/$$file > tmp-foo2 2>/dev/null \
  2829. +         && (cmp tmp-foo1 tmp-foo2 || echo $$file differs); \
  2830. +     done
  2831. +     -rm -f tmp-foo*
  2832. + # Similar, but compare with stage3 directory
  2833. + compare3: force
  2834. +     for file in *.o; do \
  2835. +       tail +16c $$file > tmp-foo1; \
  2836. +       tail +16c stage3/$$file > tmp-foo2 2>/dev/null \
  2837. +         && (cmp tmp-foo1 tmp-foo2 || echo $$file differs); \
  2838. +     done
  2839. +     -rm -f tmp-foo*
  2840. + # Copy the object files from a particular stage into a subdirectory.
  2841. + stage1: force
  2842. +     -if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi
  2843. +     -mv $(STAGESTUFF) stage1
  2844. +     -rm -f stage1/libgcc.a
  2845. +     -cp libgcc.a stage1
  2846. +     -if $(RANLIB_TEST) ; then $(RANLIB) stage1/libgcc.a; else true; fi
  2847. + stage2: force
  2848. +     -if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi
  2849. +     -mv $(STAGESTUFF) stage2
  2850. +     -rm -f stage2/libgcc.a
  2851. +     -cp libgcc.a stage2
  2852. +     -if $(RANLIB_TEST) ; then $(RANLIB) stage2/libgcc.a; else true; fi
  2853. + stage3: force
  2854. +     -if [ -d stage3 ] ; then true ; else mkdir stage3 ; fi
  2855. +     -mv $(STAGESTUFF) stage3
  2856. +     -rm -f stage3/libgcc.a
  2857. +     -cp libgcc.a stage3
  2858. +     -if $(RANLIB_TEST) ; then $(RANLIB) stage3/libgcc.a; else true; fi
  2859. + stage4: force
  2860. +     -if [ -d stage4 ] ; then true ; else mkdir stage4 ; fi
  2861. +     -mv $(STAGESTUFF) stage4
  2862. +     -rm -f stage4/libgcc.a
  2863. +     -cp libgcc.a stage4
  2864. +     -if $(RANLIB_TEST) ; then $(RANLIB) stage4/libgcc.a; else true; fi
  2865. + # gnat bootstrapping targets - use the same stage directories
  2866. + gnatboot: force
  2867. +     $(MAKE) gnat1 CC="$(CC)" CFLAGS="$(CFLAGS)" ADA_CC="$(ADA_CC)" ADAFLAGS="$(ADAFLAGS)"
  2868. +     $(MAKE) gnatbind CC="$(CC)" CFLAGS="$(CFLAGS)" ADA_CC="$(ADA_CC)" ADAFLAGS="$(ADAFLAGS)"
  2869. +     $(MAKE) gnatstage1
  2870. +     $(MAKE) CC="gcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" ADAFLAGS="$(BOOT_ADAFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" GNATBIND=stage1/gnatbind gnat1
  2871. +     $(MAKE) CC="gcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" ADAFLAGS="$(BOOT_ADAFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" GNATBIND=stage1/gnatbind gnatbind
  2872. +     $(MAKE) gnatstage2
  2873. +     $(MAKE) CC="gcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" ADAFLAGS="$(BOOT_ADAFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" GNATBIND=stage2/gnatbind gnat1
  2874. +     $(MAKE) CC="gcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" ADAFLAGS="$(BOOT_ADAFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" GNATBIND=stage2/gnatbind gnatbind
  2875. + gnatboot2: force
  2876. +     $(MAKE) CC="gcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" ADAFLAGS="$(BOOT_ADAFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" GNATBIND=stage1/gnatbind gnat1
  2877. +     $(MAKE) CC="gcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" ADAFLAGS="$(BOOT_ADAFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" GNATBIND=stage1/gnatbind gnatbind
  2878. +     $(MAKE) gnatstage2
  2879. +     $(MAKE) CC="gcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" ADAFLAGS="$(BOOT_ADAFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" GNATBIND=stage2/gnatbind gnat1
  2880. +     $(MAKE) CC="gcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" ADAFLAGS="$(BOOT_ADAFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" GNATBIND=stage2/gnatbind gnatbind
  2881. + gnatboot3: force
  2882. +     $(MAKE) CC="gcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" ADAFLAGS="$(BOOT_ADAFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" GNATBIND=stage2/gnatbind gnat1
  2883. +     $(MAKE) CC="gcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" ADAFLAGS="$(BOOT_ADAFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" GNATBIND=stage2/gnatbind gnatbind
  2884. + gnatcompare: force
  2885. +     for file in $(GNAT1_ADA_OBJS); do \
  2886. +       tail +16c $$file > tmp-foo1; \
  2887. +       tail +16c stage2/$$file > tmp-foo2 2>/dev/null \
  2888. +         && (cmp tmp-foo1 tmp-foo2 || echo $$file differs); \
  2889. +     done
  2890. +     -rm -f tmp-foo*
  2891. + gnatstage1: force
  2892. +     -if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi
  2893. +     -mv -f *.ali stage1
  2894. +     -mv -f $(GNAT1_ADA_OBJS) $(GNATBIND_OBJS) $(GNATF_OBJS) $(GKRUNCH_OBJS) gnat1 gnatbind stage1
  2895. + gnatstage2: force
  2896. +     -if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi
  2897. +     -mv -f *.ali stage2
  2898. +     -mv -f $(GNAT1_ADA_OBJS) $(GNATBIND_OBJS) $(GNATF_OBJS) $(GKRUNCH_OBJS) gnat1 gnatbind stage2
  2899. + gnatclean: force
  2900. +     rm -f $(GNAT1_OBJS) $(GNATF_OBJS) $(GNATBIND_OBJS) $(GKRUNCH_OBJS) \
  2901. +           $(GNAT_RTL_OBJS) *.ali gnat1 gnatbind
  2902. + # Copy just the executable files from a particular stage into a subdirectory,
  2903. + # and delete the object files.  Use this if you're just verifying a version
  2904. + # that is pretty sure to work, and you are short of disk space.
  2905. + risky-stage1: force
  2906. +     -if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi
  2907. +     -mv $(GCC_PARTS) stage1
  2908. +     -rm -f stage1/libgcc.a
  2909. +     -cp libgcc.a stage1 && $(RANLIB) stage1/libgcc.a
  2910. +     -make clean
  2911. + risky-stage2: force
  2912. +     -if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi
  2913. +     -mv $(GCC_PARTS) stage2
  2914. +     -rm -f stage2/libgcc.a
  2915. +     -cp libgcc.a stage2 && $(RANLIB) stage2/libgcc.a
  2916. +     -make clean
  2917. + risky-stage3: force
  2918. +     -if [ -d stage3 ] ; then true ; else mkdir stage3 ; fi
  2919. +     -mv $(GCC_PARTS) stage3
  2920. +     -rm -f stage3/libgcc.a
  2921. +     -cp libgcc.a stage3 && $(RANLIB) stage3/libgcc.a
  2922. +     -make clean
  2923. + risky-stage4: force
  2924. +     -if [ -d stage4 ] ; then true ; else mkdir stage4 ; fi
  2925. +     -mv $(GCC_PARTS) stage4
  2926. +     -rm -f stage4/libgcc.a
  2927. +     -cp libgcc.a stage4 && $(RANLIB) stage4/libgcc.a
  2928. +     -make clean
  2929. + #In GNU Make, ignore whether `stage*' exists.
  2930. + .PHONY: stage1 stage2 stage3 stage4 clean realclean TAGS bootstrap
  2931. + .PHONY: risky-stage1 risky-stage2 risky-stage3 risky-stage4
  2932. + force:
  2933. diff -rc --new-file /src/baseline/gnat-1.80/amiga/corrections/atree.adb.changes gnat-1.80/amiga/corrections/atree.adb.changes
  2934. *** /src/baseline/gnat-1.80/amiga/corrections/atree.adb.changes    Thu Jan  1 00:00:00 1970
  2935. --- gnat-1.80/amiga/corrections/atree.adb.changes    Thu Jun 23 13:13:08 1994
  2936. ***************
  2937. *** 0 ****
  2938. --- 1,9 ----
  2939. +       function Flag65 (N : Node_Id) return Boolean is
  2940. +       begin
  2941. + --         pragma Assert (Nkind (N) in N_Entity);
  2942. + --         return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag65;
  2943. +          pragma Assert (Nkind (N) in N_Entity);
  2944. +          return  To_Flag_Byte_Ptr
  2945. +            (Node_Kind_Ptr'
  2946. +              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag65;
  2947. +       end Flag65;
  2948. diff -rc --new-file /src/baseline/gnat-1.80/amiga/corrections/m68k.md gnat-1.80/amiga/corrections/m68k.md
  2949. *** /src/baseline/gnat-1.80/amiga/corrections/m68k.md    Thu Jan  1 00:00:00 1970
  2950. --- gnat-1.80/amiga/corrections/m68k.md    Thu Jun 23 13:13:10 1994
  2951. ***************
  2952. *** 0 ****
  2953. --- 1,5690 ----
  2954. + ;;- Machine description for GNU compiler
  2955. + ;;- Motorola 68000 Version
  2956. + ;;   Copyright (C) 1987, 1988, 1993 Free Software Foundation, Inc.
  2957. + ;; This file is part of GNU CC.
  2958. + ;; GNU CC is free software; you can redistribute it and/or modify
  2959. + ;; it under the terms of the GNU General Public License as published by
  2960. + ;; the Free Software Foundation; either version 2, or (at your option)
  2961. + ;; any later version.
  2962. + ;; GNU CC is distributed in the hope that it will be useful,
  2963. + ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  2964. + ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  2965. + ;; GNU General Public License for more details.
  2966. + ;; You should have received a copy of the GNU General Public License
  2967. + ;; along with GNU CC; see the file COPYING.  If not, write to
  2968. + ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  2969. + ;;- instruction definitions
  2970. + ;;- @@The original PO technology requires these to be ordered by speed,
  2971. + ;;- @@    so that assigner will pick the fastest.
  2972. + ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al.
  2973. + ;;- When naming insn's (operand 0 of define_insn) be careful about using
  2974. + ;;- names from other targets machine descriptions.
  2975. + ;;- cpp macro #define NOTICE_UPDATE_CC in file tm.h handles condition code
  2976. + ;;- updates for most instructions.
  2977. + ;;- Operand classes for the register allocator:
  2978. + ;;- 'a' one of the address registers can be used.
  2979. + ;;- 'd' one of the data registers can be used.
  2980. + ;;- 'f' one of the m68881 registers can be used
  2981. + ;;- 'r' either a data or an address register can be used.
  2982. + ;;- 'x' if one of the Sun FPA registers                    
  2983. + ;;- 'y' if one of the Low Sun FPA registers (fpa0-fpa15).
  2984. + ;;- Immediate Floating point operator constraints
  2985. + ;;- 'G' a floating point constant that is *NOT* one of the standard
  2986. + ;;   68881 constant values (to force calling output_move_const_double
  2987. + ;;   to get it from rom if it is a 68881 constant).
  2988. + ;;- 'H' one of the standard FPA constant values
  2989. + ;;
  2990. + ;;   See the functions standard_XXX_constant_p in output-m68k.c for more
  2991. + ;; info.
  2992. + ;;- Immediate integer operand constraints:
  2993. + ;;- 'I'  1 .. 8
  2994. + ;;- 'J'  -32768 .. 32767
  2995. + ;;- 'K'  all integers EXCEPT -128 .. 127
  2996. + ;;- 'L'  -8 .. -1
  2997. + ;;- Assembler specs:
  2998. + ;;- "%."    size separator ("." or "")            move%.l d0,d1
  2999. + ;;- "%#"    immediate separator ("#" or "")        move%.l %#0,d0
  3000. + ;;- "%-"    push operand "sp@-"                move%.l d0,%-
  3001. + ;;- "%+"    pop operand "sp@+"                move%.l d0,%+
  3002. + ;;- "%@"    top of stack "sp@"                move%.l d0,%@
  3003. + ;;- "%!"    fpcr register
  3004. + ;;- "%$"    single-precision fp specifier ("s" or "")    f%$add.x fp0,fp1
  3005. + ;;- "%&"    double-precision fp specifier ("d" or "")    f%&add.x fp0,fp1
  3006. + ;;- Information about 68040 port.
  3007. + ;;- The 68040 executes all 68030 and 68881/2 instructions, but some must
  3008. + ;;- be emulated in software by the OS.  It is faster to avoid these
  3009. + ;;- instructions and issue a library call rather than trapping into
  3010. + ;;- the kernel.  The affected instructions are fintrz and fscale.  The
  3011. + ;;- TARGET_68040 flag turns the use of the opcodes off.
  3012. + ;;- The '040 also implements a set of new floating-point instructions
  3013. + ;;- which specify the rounding precision in the opcode.  This finally
  3014. + ;;- permit the 68k series to be truly IEEE compliant, and solves all
  3015. + ;;- issues of excess precision accumulating in the extended registers.
  3016. + ;;- By default, GCC does not use these instructions, since such code will
  3017. + ;;- not run on an '030.  To use these instructions, use the -m68040-only
  3018. + ;;- switch.  By changing TARGET_DEFAULT to include TARGET_68040_ONLY,
  3019. + ;;- you can make these instructions the default.
  3020. + ;;- These new instructions aren't directly in the md.  They are brought
  3021. + ;;- into play by defining "%$" and "%&" to expand to "s" and "d" rather
  3022. + ;;- than "".
  3023. + ;;-         FPA port explanation:
  3024. + ;;-        Usage of the Sun FPA and the 68881 together
  3025. + ;;- The current port of gcc to the sun fpa disallows use of the m68881
  3026. + ;;- instructions completely if code is targeted for the fpa.  This is
  3027. + ;;- for the following reasons:
  3028. + ;;- 1) Expressing the preference hierarchy (ie. use the fpa if you
  3029. + ;;- can, the 68881 otherwise, and data registers only if you are
  3030. + ;;- forced to it) is a bitch with the current constraint scheme,
  3031. + ;;- especially since it would have to work for any combination of
  3032. + ;;- -mfpa, -m68881.
  3033. + ;;- 2) There are no instructions to move between the two types of
  3034. + ;;- registers; the stack must be used as an intermediary.
  3035. + ;;- It could indeed be done; I think the best way would be to have
  3036. + ;;- separate patterns for TARGET_FPA (which implies a 68881),
  3037. + ;;- TARGET_68881, and no floating point co-processor.  Use
  3038. + ;;- define_expands for all of the named instruction patterns, and
  3039. + ;;- include code in the FPA instruction to deal with the 68881 with
  3040. + ;;- preferences specifically set to favor the fpa.  Some of this has
  3041. + ;;- already been done:
  3042. + ;;-
  3043. + ;;-     1) Separation of most of the patterns out into a TARGET_FPA
  3044. + ;;- case and a TARGET_68881 case (the exceptions are the patterns
  3045. + ;;- which would need one define_expand and three define_insn's under
  3046. + ;;- it (with a lot of duplicate code between them) to replace the
  3047. + ;;- current single define_insn.  These are mov{[ds]f,[ds]i} and the
  3048. + ;;- first two patterns in the md.
  3049. + ;;-
  3050. + ;;- Some would still have to be done:
  3051. + ;;-
  3052. + ;;-    1) Add code to the fpa patterns which correspond to 68881
  3053. + ;;- patterns to deal with the 68881 case (including preferences!).
  3054. + ;;- What you might actually do here is combine the fpa and 68881 code
  3055. + ;;- back together into one pattern for those instructions where it's
  3056. + ;;- absolutely necessary and save yourself some duplicate code.  I'm
  3057. + ;;- not completely sure as to whether you could get away with doing
  3058. + ;;- this only for the mov* insns, or if you'd have to do it for all
  3059. + ;;- named insns.
  3060. + ;;-     2) Add code to the mov{[ds]f,[ds]i} instructions to handle
  3061. + ;;- moving between fpa regs and 68881 regs.
  3062. + ;;- Since the fpa is more powerful than the 68881 and also has more
  3063. + ;;- registers, and since I think the resultant md would be medium ugly
  3064. + ;;- (lot's of duplicate code, ugly constraint strings), I elected not
  3065. + ;;- to do this change.
  3066. + ;;- Another reason why someone *might* want to do the change is to
  3067. + ;;- control which register classes are accessed in a slightly cleaner
  3068. + ;;- way than I have.  See the blurb on CONDITIONAL_REGISTER_USAGE in
  3069. + ;;- the internals manual.
  3070. + ;;- Yet another reason why someone might want to do this change is to
  3071. + ;;- allow use of some of the 68881 insns which have no equivalent on
  3072. + ;;- the fpa.  The sqrt instruction comes fairly quickly to mind.
  3073. + ;;- If this is ever done, don't forget to change sun3.h so that
  3074. + ;;- it *will* define __HAVE_68881__ when the FPA is in use.
  3075. + ;;-        Condition code hack
  3076. + ;;- When a floating point compare is done in the fpa, the resulting
  3077. + ;;- condition codes are left in the fpastatus register.  The values in
  3078. + ;;- this register must be moved into the 68000 cc register before any
  3079. + ;;- jump is executed.  Once this has been done, regular jump
  3080. + ;;- instructions are fine (ie. floating point jumps are not necessary.
  3081. + ;;- They are only done if the cc is in the 68881).
  3082. + ;;- The instructions that move the fpastatus register to the 68000
  3083. + ;;- register clobber a data register (the move cannot be done direct).
  3084. + ;;- These instructions might be bundled either with the compare
  3085. + ;;- instruction, or the branch instruction.  If we were using both the
  3086. + ;;- fpa and the 68881 together, we would wish to only mark the
  3087. + ;;- register clobbered if we were doing the compare in the fpa, but I
  3088. + ;;- think that that decision (whether to clobber the register or not)
  3089. + ;;- must be done before register allocation (makes sense) and hence we
  3090. + ;;- can't know if the floating point compare will be done in the fpa
  3091. + ;;- or the fp.  So whenever we are asked for code that uses the fpa,
  3092. + ;;- we will mark a data register as clobbered.  This is reasonable, as
  3093. + ;;- almost all floating point compare operations done with fpa code
  3094. + ;;- enabled will be done in the fpa.  It's even more reasonable since
  3095. + ;;- we decided to make the 68881 and the fpa mutually exclusive.
  3096. + ;;- We place to code to move the fpastatus register inside of a
  3097. + ;;- define_expand so that we can do it conditionally based on whether
  3098. + ;;- we are targeting an fpa or not.
  3099. + ;;- This still leaves us with the question of where we wish to put the
  3100. + ;;- code to move the fpastatus reg.  If we put it in the compare
  3101. + ;;- instruction, we can restrict the clobbering of the register to
  3102. + ;;- floating point compares, but we can't take advantage of floating
  3103. + ;;- point subtracts & etc. that alter the fpastatus register.  If we
  3104. + ;;- put it in the branch instruction, all branches compiled with fpa
  3105. + ;;- code enabled will clobber a data register, but we will be able to
  3106. + ;;- take advantage of fpa subtracts.  This balance favors putting the
  3107. + ;;- code in with the compare instruction.
  3108. + ;;- Note that if some enterprising hacker should decide to switch
  3109. + ;;- this, he'll need to modify the code in NOTICE_UPDATE_CC.
  3110. + ;;-        Usage of the top 16 fpa registers
  3111. + ;;- The only locations which we may transfer fpa registers 16-31 from
  3112. + ;;- or to are the fpa registers 0-15.  (68000 registers and memory
  3113. + ;;- locations are impossible).  This causes problems in gcc, which
  3114. + ;;- assumes that mov?? instructions require no additional registers
  3115. + ;;- (see section 11.7) and since floating point moves *must* be
  3116. + ;;- supported into general registers (see section 12.3 under
  3117. + ;;- HARD_REGNO_OK_FOR_MODE_P) from anywhere.
  3118. + ;;- My solution was to reserve fpa0 for moves into or out of these top
  3119. + ;;- 16 registers and to disparage the choice to reload into or out of
  3120. + ;;- these registers as much as I could.  That alternative is always
  3121. + ;;- last in the list, so it will not be used unless all else fails.  I
  3122. + ;;- will note that according to my current information, sun's compiler
  3123. + ;;- doesn't use these top 16 registers at all.
  3124. + ;;- There is another possible way to do it.  I *believe* that if you
  3125. + ;;- make absolutely sure that the code will not be executed in the
  3126. + ;;- reload pass, you can support the mov?? names with define_expands
  3127. + ;;- which require new registers.  This may be possible by the
  3128. + ;;- appropriate juggling of constraints.  I may come back to this later.
  3129. + ;;-         Usage of constant RAM
  3130. + ;;- This has been handled correctly (I believe) but the way I've done
  3131. + ;;- it could use a little explanation.  The constant RAM can only be
  3132. + ;;- accessed when the instruction is in "command register" mode.
  3133. + ;;- "command register" mode means that no accessing of memory or the
  3134. + ;;- 68000 registers is being done.  This can be expressed easily in
  3135. + ;;- constraints, so generally the mode of the instruction is
  3136. + ;;- determined by a branch off of which_alternative.  In outputting
  3137. + ;;- instructions, a 'w' means to output an access to the constant ram
  3138. + ;;- (if the arg is CONST_DOUBLE and is one of the available
  3139. + ;;- constants), and 'x' means to output a register pair (if the arg is
  3140. + ;;- a 68000 register) and a 'y' is the combination of the above two
  3141. + ;;- processes.  You use a 'y' in two operand DF instructions where you
  3142. + ;;- *know* the other operand is an fpa register, you use an 'x' in DF
  3143. + ;;- instructions where the arg might be a 68000 register and the
  3144. + ;;- instruction is *not* in "command register" mode, and you use a 'w'
  3145. + ;;- in two situations: 1) The instruction *is* in command register
  3146. + ;;- mode (and hence won't be accessing 68000 registers), or 2) The
  3147. + ;;- instruction is a two operand SF instruction where you know the
  3148. + ;;- other operand is an fpa register.
  3149. + ;;-        Optimization issues
  3150. + ;;- I actually think that I've included all of the fpa instructions
  3151. + ;;- that should be included.  Note that if someone is interested in
  3152. + ;;- doing serious floating point work on the sun fpa, I would advise
  3153. + ;;- the use of the "asm" instruction in gcc to allow you to use the
  3154. + ;;- sin, cos, and exponential functions on the fpa board.
  3155. + ;;- END FPA Explanation Section.
  3156. + ;;- Some of these insn's are composites of several m68000 op codes.
  3157. + ;;- The assembler (or final @@??) insures that the appropriate one is
  3158. + ;;- selected.
  3159. + (define_insn ""
  3160. +   [(set (match_operand:DF 0 "push_operand" "=m")
  3161. +     (match_operand:DF 1 "general_operand" "ro<>fyE"))]
  3162. +   ""
  3163. +   "*
  3164. + {
  3165. +   if (FP_REG_P (operands[1]))
  3166. +     return \"fmove%.d %f1,%0\";
  3167. +   if (FPA_REG_P (operands[1]))
  3168. +     return \"fpmove%.d %1, %x0\";
  3169. +   return output_move_double (operands);
  3170. + }")
  3171. + (define_insn ""
  3172. +   [(set (match_operand:DI 0 "push_operand" "=m")
  3173. +     (match_operand:DI 1 "general_operand" "ro<>Fy"))]
  3174. +   ""
  3175. +   "*
  3176. + {
  3177. +   return output_move_double (operands);
  3178. + }")
  3179. + ;; We don't want to allow a constant operand for test insns because
  3180. + ;; (set (cc0) (const_int foo)) has no mode information.  Such insns will
  3181. + ;; be folded while optimizing anyway.
  3182. + (define_insn "tstsi"
  3183. +   [(set (cc0)
  3184. +     (match_operand:SI 0 "nonimmediate_operand" "rm"))]
  3185. +   ""
  3186. +   "*
  3187. + {
  3188. + #ifdef ISI_OV
  3189. +   /* ISI's assembler fails to handle tstl a0.  */
  3190. +   if (! ADDRESS_REG_P (operands[0]))
  3191. + #else
  3192. +   if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
  3193. + #endif
  3194. +     return \"tst%.l %0\";
  3195. +   /* If you think that the 68020 does not support tstl a0,
  3196. +      reread page B-167 of the 68020 manual more carefully.  */
  3197. +   /* On an address reg, cmpw may replace cmpl.  */
  3198. + #ifdef SGS_CMP_ORDER
  3199. +   return \"cmp%.w %0,%#0\";
  3200. + #else
  3201. +   return \"cmp%.w %#0,%0\";
  3202. + #endif
  3203. + }")
  3204. + ;; This can't use an address register, because comparisons
  3205. + ;; with address registers as second operand always test the whole word.
  3206. + (define_insn "tsthi"
  3207. +   [(set (cc0)
  3208. +     (match_operand:HI 0 "nonimmediate_operand" "dm"))]
  3209. +   ""
  3210. +   "tst%.w %0")
  3211. + (define_insn "tstqi"
  3212. +   [(set (cc0)
  3213. +     (match_operand:QI 0 "nonimmediate_operand" "dm"))]
  3214. +   ""
  3215. +   "tst%.b %0")
  3216. +   
  3217. + (define_expand "tstsf"
  3218. +   [(set (cc0)
  3219. +     (match_operand:SF 0 "general_operand" ""))]
  3220. +   "TARGET_68881 || TARGET_FPA"
  3221. +   "
  3222. + {
  3223. +   if (TARGET_FPA)
  3224. +     {
  3225. +       emit_insn (gen_tstsf_fpa (operands[0]));
  3226. +       DONE;
  3227. +     }
  3228. + }")
  3229. + (define_insn "tstsf_fpa"
  3230. +   [(set (cc0)
  3231. +     (match_operand:SF 0 "general_operand" "xmdF"))
  3232. +    (clobber (match_scratch:SI 1 "=d"))]
  3233. +   "TARGET_FPA"
  3234. +   "fptst%.s %x0\;fpmove fpastatus,%1\;movw %1,cc")
  3235. + (define_insn ""
  3236. +   [(set (cc0)
  3237. +     (match_operand:SF 0 "general_operand" "fdm"))]
  3238. +   "TARGET_68881"
  3239. +   "*
  3240. + {
  3241. +   cc_status.flags = CC_IN_68881;
  3242. +   if (FP_REG_P (operands[0]))
  3243. +     return \"ftst%.x %0\";
  3244. +   return \"ftst%.s %0\";
  3245. + }")
  3246. + (define_expand "tstdf"
  3247. +   [(set (cc0)
  3248. +     (match_operand:DF 0 "general_operand" ""))]
  3249. +   "TARGET_68881 || TARGET_FPA"
  3250. +   "
  3251. + {
  3252. +   if (TARGET_FPA)
  3253. +     {
  3254. +       emit_insn (gen_tstsf_fpa (operands[0]));
  3255. +       DONE;
  3256. +     }
  3257. + }")
  3258. + (define_insn "tstdf_fpa"
  3259. +   [(set (cc0)
  3260. +     (match_operand:DF 0 "general_operand" "xrmF"))
  3261. +    (clobber (match_scratch:SI 1 "=d"))]
  3262. +   "TARGET_FPA"
  3263. +   "fptst%.d %x0\;fpmove fpastatus,%1\;movw %1,cc")
  3264. + (define_insn ""
  3265. +   [(set (cc0)
  3266. +     (match_operand:DF 0 "general_operand" "fm"))]
  3267. +   "TARGET_68881"
  3268. +   "*
  3269. + {
  3270. +   cc_status.flags = CC_IN_68881;
  3271. +   if (FP_REG_P (operands[0]))
  3272. +     return \"ftst%.x %0\";
  3273. +   return \"ftst%.d %0\";
  3274. + }")
  3275. + ;; compare instructions.
  3276. + ;; A composite of the cmp, cmpa, & cmpi m68000 op codes.
  3277. + (define_insn "cmpsi"
  3278. +   [(set (cc0)
  3279. +     (compare (match_operand:SI 0 "nonimmediate_operand" "rKs,mr,>")
  3280. +          (match_operand:SI 1 "general_operand" "mr,Ksr,>")))]
  3281. +   ""
  3282. +   "*
  3283. + {
  3284. +   if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM)
  3285. + #ifdef SGS_CMP_ORDER
  3286. +     return \"cmpm%.l %0,%1\";
  3287. + #else
  3288. +     return \"cmpm%.l %1,%0\";
  3289. + #endif
  3290. +   if (REG_P (operands[1])
  3291. +       || (!REG_P (operands[0]) && GET_CODE (operands[0]) != MEM))
  3292. +     { cc_status.flags |= CC_REVERSED;
  3293. + #ifdef SGS_CMP_ORDER
  3294. +       return \"cmp%.l %d1,%d0\";
  3295. + #else
  3296. +       return \"cmp%.l %d0,%d1\";
  3297. + #endif
  3298. +     }
  3299. + #ifdef SGS_CMP_ORDER
  3300. +   return \"cmp%.l %d0,%d1\";
  3301. + #else
  3302. +   return \"cmp%.l %d1,%d0\";
  3303. + #endif
  3304. + }")
  3305. + (define_insn "cmphi"
  3306. +   [(set (cc0)
  3307. +     (compare (match_operand:HI 0 "nonimmediate_operand" "rnm,d,n,m,>")
  3308. +          (match_operand:HI 1 "general_operand" "d,rnm,m,n,>")))]
  3309. +   ""
  3310. +   "*
  3311. + {
  3312. +   if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM)
  3313. + #ifdef SGS_CMP_ORDER
  3314. +     return \"cmpm%.w %0,%1\";
  3315. + #else
  3316. +     return \"cmpm%.w %1,%0\";
  3317. + #endif
  3318. +   if ((REG_P (operands[1]) && !ADDRESS_REG_P (operands[1]))
  3319. +       || (!REG_P (operands[0]) && GET_CODE (operands[0]) != MEM))
  3320. +     { cc_status.flags |= CC_REVERSED;
  3321. + #ifdef SGS_CMP_ORDER
  3322. +       return \"cmp%.w %d1,%d0\";
  3323. + #else
  3324. +       return \"cmp%.w %d0,%d1\";
  3325. + #endif
  3326. +     }
  3327. + #ifdef SGS_CMP_ORDER
  3328. +   return \"cmp%.w %d0,%d1\";
  3329. + #else
  3330. +   return \"cmp%.w %d1,%d0\";
  3331. + #endif
  3332. + }")
  3333. + (define_insn "cmpqi"
  3334. +   [(set (cc0)
  3335. +     (compare (match_operand:QI 0 "nonimmediate_operand" "dn,md,>")
  3336. +          (match_operand:QI 1 "general_operand" "dm,nd,>")))]
  3337. +   ""
  3338. +   "*
  3339. + {
  3340. +   if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM)
  3341. + #ifdef SGS_CMP_ORDER
  3342. +     return \"cmpm%.b %0,%1\";
  3343. + #else
  3344. +     return \"cmpm%.b %1,%0\";
  3345. + #endif
  3346. +   if (REG_P (operands[1])
  3347. +       || (!REG_P (operands[0]) && GET_CODE (operands[0]) != MEM))
  3348. +     { cc_status.flags |= CC_REVERSED;
  3349. + #ifdef SGS_CMP_ORDER
  3350. +       return \"cmp%.b %d1,%d0\";
  3351. + #else
  3352. +       return \"cmp%.b %d0,%d1\";
  3353. + #endif
  3354. +     }
  3355. + #ifdef SGS_CMP_ORDER
  3356. +   return \"cmp%.b %d0,%d1\";
  3357. + #else
  3358. +   return \"cmp%.b %d1,%d0\";
  3359. + #endif
  3360. + }")
  3361. + (define_expand "cmpdf"
  3362. +   [(set (cc0)
  3363. +     (compare (match_operand:DF 0 "general_operand" "")
  3364. +          (match_operand:DF 1 "general_operand" "")))]
  3365. +   "TARGET_68881 || TARGET_FPA"
  3366. +   "
  3367. + {
  3368. +   if (TARGET_FPA)
  3369. +     {
  3370. +       emit_insn (gen_cmpdf_fpa (operands[0], operands[1]));
  3371. +       DONE;
  3372. +     }
  3373. + }")
  3374. + (define_insn "cmpdf_fpa"
  3375. +   [(set (cc0)
  3376. +     (compare (match_operand:DF 0 "general_operand" "x,y")
  3377. +          (match_operand:DF 1 "general_operand" "xH,rmF")))
  3378. +    (clobber (match_scratch:SI 2 "=d,d"))]
  3379. +   "TARGET_FPA"
  3380. +   "fpcmp%.d %y1,%0\;fpmove fpastatus,%2\;movw %2,cc")
  3381. + (define_insn ""
  3382. +   [(set (cc0)
  3383. +     (compare (match_operand:DF 0 "general_operand" "f,mG")
  3384. +          (match_operand:DF 1 "general_operand" "fmG,f")))]
  3385. +   "TARGET_68881"
  3386. +   "*
  3387. + {
  3388. +   cc_status.flags = CC_IN_68881;
  3389. + #ifdef SGS_CMP_ORDER
  3390. +   if (REG_P (operands[0]))
  3391. +     {
  3392. +       if (REG_P (operands[1]))
  3393. +     return \"fcmp%.x %0,%1\";
  3394. +       else
  3395. +         return \"fcmp%.d %0,%f1\";
  3396. +     }
  3397. +   cc_status.flags |= CC_REVERSED;
  3398. +   return \"fcmp%.d %1,%f0\";
  3399. + #else
  3400. +   if (REG_P (operands[0]))
  3401. +     {
  3402. +       if (REG_P (operands[1]))
  3403. +     return \"fcmp%.x %1,%0\";
  3404. +       else
  3405. +         return \"fcmp%.d %f1,%0\";
  3406. +     }
  3407. +   cc_status.flags |= CC_REVERSED;
  3408. +   return \"fcmp%.d %f0,%1\";
  3409. + #endif
  3410. + }")
  3411. + (define_expand "cmpsf"
  3412. +  [(set (cc0)
  3413. +        (compare (match_operand:SF 0 "general_operand" "")
  3414. +         (match_operand:SF 1 "general_operand" "")))]
  3415. +  "TARGET_68881 || TARGET_FPA"
  3416. +  "
  3417. + {
  3418. +   if (TARGET_FPA)
  3419. +     {
  3420. +       emit_insn (gen_cmpsf_fpa (operands[0], operands[1]));
  3421. +       DONE;
  3422. +     }
  3423. + }")
  3424. + (define_insn "cmpsf_fpa"
  3425. +   [(set (cc0)
  3426. +     (compare (match_operand:SF 0 "general_operand" "x,y")
  3427. +          (match_operand:SF 1 "general_operand" "xH,rmF")))
  3428. +    (clobber (match_scratch:SI 2 "=d,d"))]
  3429. +   "TARGET_FPA"
  3430. +   "fpcmp%.s %w1,%x0\;fpmove fpastatus,%2\;movw %2,cc")
  3431. + (define_insn ""
  3432. +   [(set (cc0)
  3433. +     (compare (match_operand:SF 0 "general_operand" "f,mdG")
  3434. +          (match_operand:SF 1 "general_operand" "fmdG,f")))]
  3435. +   "TARGET_68881"
  3436. +   "*
  3437. + {
  3438. +   cc_status.flags = CC_IN_68881;
  3439. + #ifdef SGS_CMP_ORDER
  3440. +   if (FP_REG_P (operands[0]))
  3441. +     {
  3442. +       if (FP_REG_P (operands[1]))
  3443. +     return \"fcmp%.x %0,%1\";
  3444. +       else
  3445. +         return \"fcmp%.s %0,%f1\";
  3446. +     }
  3447. +   cc_status.flags |= CC_REVERSED;
  3448. +   return \"fcmp%.s %1,%f0\";
  3449. + #else
  3450. +   if (FP_REG_P (operands[0]))
  3451. +     {
  3452. +       if (FP_REG_P (operands[1]))
  3453. +     return \"fcmp%.x %1,%0\";
  3454. +       else
  3455. +         return \"fcmp%.s %f1,%0\";
  3456. +     }
  3457. +   cc_status.flags |= CC_REVERSED;
  3458. +   return \"fcmp%.s %f0,%1\";
  3459. + #endif
  3460. + }")
  3461. + ;; Recognizers for btst instructions.
  3462. + (define_insn ""
  3463. +   [(set (cc0) (zero_extract (match_operand:QI 0 "nonimmediate_operand" "do")
  3464. +                 (const_int 1)
  3465. +                 (minus:SI (const_int 7)
  3466. +                       (match_operand:SI 1 "general_operand" "di"))))]
  3467. +   ""
  3468. +   "* { return output_btst (operands, operands[1], operands[0], insn, 7); }")
  3469. + (define_insn ""
  3470. +   [(set (cc0) (zero_extract (match_operand:SI 0 "nonimmediate_operand" "d")
  3471. +                 (const_int 1)
  3472. +                 (minus:SI (const_int 31)
  3473. +                       (match_operand:SI 1 "general_operand" "di"))))]
  3474. +   ""
  3475. +   "* { return output_btst (operands, operands[1], operands[0], insn, 31); }")
  3476. + ;; The following two patterns are like the previous two
  3477. + ;; except that they use the fact that bit-number operands
  3478. + ;; are automatically masked to 3 or 5 bits.
  3479. + (define_insn ""
  3480. +   [(set (cc0) (zero_extract (match_operand:QI 0 "nonimmediate_operand" "do")
  3481. +                 (const_int 1)
  3482. +                 (minus:SI (const_int 7)
  3483. +                       (and:SI
  3484. +                        (match_operand:SI 1 "general_operand" "d")
  3485. +                        (const_int 7)))))]
  3486. +   ""
  3487. +   "* { return output_btst (operands, operands[1], operands[0], insn, 7); }")
  3488. + (define_insn ""
  3489. +   [(set (cc0) (zero_extract (match_operand:SI 0 "nonimmediate_operand" "d")
  3490. +                 (const_int 1)
  3491. +                 (minus:SI (const_int 31)
  3492. +                       (and:SI
  3493. +                        (match_operand:SI 1 "general_operand" "d")
  3494. +                        (const_int 31)))))]
  3495. +   ""
  3496. +   "* { return output_btst (operands, operands[1], operands[0], insn, 31); }")
  3497. + ;; Nonoffsettable mem refs are ok in this one pattern
  3498. + ;; since we don't try to adjust them.
  3499. + (define_insn ""
  3500. +   [(set (cc0) (zero_extract (match_operand:QI 0 "nonimmediate_operand" "md")
  3501. +                 (const_int 1)
  3502. +                 (match_operand:SI 1 "general_operand" "i")))]
  3503. +   "GET_CODE (operands[1]) == CONST_INT
  3504. +    && (unsigned) INTVAL (operands[1]) < 8"
  3505. +   "*
  3506. + {
  3507. +   operands[1] = gen_rtx (CONST_INT, VOIDmode, 7 - INTVAL (operands[1]));
  3508. +   return output_btst (operands, operands[1], operands[0], insn, 7);
  3509. + }")
  3510. + (define_insn ""
  3511. +   [(set (cc0) (zero_extract (match_operand:SI 0 "nonimmediate_operand" "do")
  3512. +                 (const_int 1)
  3513. +                 (match_operand:SI 1 "general_operand" "i")))]
  3514. +   "GET_CODE (operands[1]) == CONST_INT"
  3515. +   "*
  3516. + {
  3517. +   if (GET_CODE (operands[0]) == MEM)
  3518. +     {
  3519. +       operands[0] = adj_offsettable_operand (operands[0],
  3520. +                          INTVAL (operands[1]) / 8);
  3521. +       operands[1] = gen_rtx (CONST_INT, VOIDmode, 
  3522. +                  7 - INTVAL (operands[1]) % 8);
  3523. +       return output_btst (operands, operands[1], operands[0], insn, 7);
  3524. +     }
  3525. +   operands[1] = gen_rtx (CONST_INT, VOIDmode,
  3526. +              31 - INTVAL (operands[1]));
  3527. +   return output_btst (operands, operands[1], operands[0], insn, 31);
  3528. + }")
  3529. + ;; move instructions
  3530. + ;; A special case in which it is not desirable
  3531. + ;; to reload the constant into a data register.
  3532. + (define_insn ""
  3533. +   [(set (match_operand:SI 0 "push_operand" "=m")
  3534. +     (match_operand:SI 1 "general_operand" "J"))]
  3535. +   "GET_CODE (operands[1]) == CONST_INT
  3536. +    && INTVAL (operands[1]) >= -0x8000
  3537. +    && INTVAL (operands[1]) < 0x8000"
  3538. +   "*
  3539. + {
  3540. +   if (operands[1] == const0_rtx)
  3541. +     return \"clr%.l %0\";
  3542. +   return \"pea %a1\";
  3543. + }")
  3544. + ;This is never used.
  3545. + ;(define_insn "swapsi"
  3546. + ;  [(set (match_operand:SI 0 "general_operand" "+r")
  3547. + ;    (match_operand:SI 1 "general_operand" "+r"))
  3548. + ;   (set (match_dup 1) (match_dup 0))]
  3549. + ;  ""
  3550. + ;  "exg %1,%0")
  3551. + ;; Special case of fullword move when source is zero.
  3552. + ;; The reason this is special is to avoid loading a zero
  3553. + ;; into a data reg with moveq in order to store it elsewhere.
  3554. +    
  3555. + (define_insn ""
  3556. +   [(set (match_operand:SI 0 "general_operand" "=g")
  3557. +     (const_int 0))]
  3558. +   ;; clr insns on 68000 read before writing.
  3559. +   ;; This isn't so on the 68010, but we have no alternative for it.
  3560. +   "(TARGET_68020
  3561. +     || !(GET_CODE (operands[0]) == MEM && MEM_VOLATILE_P (operands[0])))"
  3562. +   "*
  3563. + {
  3564. +   if (ADDRESS_REG_P (operands[0]))
  3565. +     return \"sub%.l %0,%0\";
  3566. +   /* moveq is faster on the 68000.  */
  3567. +   if (DATA_REG_P (operands[0]) && !TARGET_68020)
  3568. + #if defined(MOTOROLA) && !defined(CRDS)
  3569. +     return \"moveq%.l %#0,%0\";
  3570. + #else
  3571. +     return \"moveq %#0,%0\";
  3572. + #endif
  3573. +   return \"clr%.l %0\";
  3574. + }")
  3575. + ;; General case of fullword move. 
  3576. + ;;
  3577. + ;; This is the main "hook" for PIC code.  When generating
  3578. + ;; PIC, movsi is responsible for determining when the source address
  3579. + ;; needs PIC relocation and appropriately calling legitimize_pic_address
  3580. + ;; to perform the actual relocation.
  3581. + ;;
  3582. + ;; In both the PIC and non-PIC cases the patterns generated will
  3583. + ;; matched by the next define_insn. 
  3584. + (define_expand "movsi"
  3585. +   [(set (match_operand:SI 0 "general_operand" "")
  3586. +     (match_operand:SI 1 "general_operand" ""))]
  3587. +   ""
  3588. +   "
  3589. + {
  3590. +   if (flag_pic && symbolic_operand (operands[1], SImode)) 
  3591. +     {
  3592. + #ifdef LEGITIMATE_BASEREL_OPERAND_P
  3593. +       if (flag_pic < 3 || !LEGITIMATE_BASEREL_OPERAND_P (operands[1]))
  3594. + #endif
  3595. +       {
  3596. +         /* The source is an address which requires PIC relocation.  
  3597. +            Call legitimize_pic_address with the source, mode, and a relocation
  3598. +            register (a new pseudo, or the final destination if reload_in_progress
  3599. +            is set).   Then fall through normally */
  3600. +         extern rtx legitimize_pic_address();
  3601. +         rtx temp = reload_in_progress ? operands[0] : gen_reg_rtx (Pmode);
  3602. +         operands[1] = legitimize_pic_address (operands[1], SImode, temp);
  3603. +       }
  3604. +     }
  3605. + }")
  3606. + ;; General case of fullword move.  The register constraints
  3607. + ;; force integer constants in range for a moveq to be reloaded
  3608. + ;; if they are headed for memory.
  3609. + (define_insn ""
  3610. +   ;; Notes: make sure no alternative allows g vs g.
  3611. +   ;; We don't allow f-regs since fixed point cannot go in them.
  3612. +   ;; We do allow y and x regs since fixed point is allowed in them.
  3613. +   [(set (match_operand:SI 0 "general_operand" "=g,da,y,!*x*r*m")
  3614. +     (match_operand:SI 1 "general_operand" "daymKs,i,g,*x*r*m"))]
  3615. +   ""
  3616. +   "*
  3617. + {
  3618. +   if (which_alternative == 3)
  3619. +     return \"fpmove%.l %x1,fpa0\;fpmove%.l fpa0,%x0\";    
  3620. +   if (FPA_REG_P (operands[1]) || FPA_REG_P (operands[0]))
  3621. +     return \"fpmove%.l %x1,%x0\";
  3622. +   if (GET_CODE (operands[1]) == CONST_INT)
  3623. +     {
  3624. +       if (operands[1] == const0_rtx
  3625. +       && (DATA_REG_P (operands[0])
  3626. +           || GET_CODE (operands[0]) == MEM)
  3627. +       /* clr insns on 68000 read before writing.
  3628. +          This isn't so on the 68010, but we have no alternative for it.  */
  3629. +       && (TARGET_68020
  3630. +           || !(GET_CODE (operands[0]) == MEM
  3631. +            && MEM_VOLATILE_P (operands[0]))))
  3632. +     return \"clr%.l %0\";
  3633. +       else if (DATA_REG_P (operands[0])
  3634. +            && INTVAL (operands[1]) < 128
  3635. +            && INTVAL (operands[1]) >= -128)
  3636. +         {
  3637. + #if defined(MOTOROLA) && !defined(CRDS)
  3638. +           return \"moveq%.l %1,%0\";
  3639. + #else
  3640. +       return \"moveq %1,%0\";
  3641. + #endif
  3642. +     }
  3643. + #ifndef NO_ADDSUB_Q
  3644. +       else if (DATA_REG_P (operands[0])
  3645. +            /* Do this with a moveq #N-8, dreg; addq #8,dreg */
  3646. +            && INTVAL (operands[1]) < 136
  3647. +            && INTVAL (operands[1]) >= 128)
  3648. +         {
  3649. +       operands[1] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) - 8);
  3650. + #if defined(MOTOROLA) && !defined(CRDS)
  3651. +           return \"moveq%.l %1,%0\;addq%.w %#8,%0\";
  3652. + #else
  3653. +       return \"moveq %1,%0\;addq%.w %#8,%0\";
  3654. + #endif
  3655. +     }
  3656. +       else if (DATA_REG_P (operands[0])
  3657. +            /* Do this with a moveq #N+8, dreg; subq #8,dreg */
  3658. +            && INTVAL (operands[1]) < -128
  3659. +            && INTVAL (operands[1]) >= -136)
  3660. +         {
  3661. +       operands[1] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) + 8);
  3662. + #if defined(MOTOROLA) && !defined(CRDS)
  3663. +           return \"moveq%.l %1,%0;subq%.w %#8,%0\";
  3664. + #else
  3665. +       return \"moveq %1,%0;subq%.w %#8,%0\";
  3666. + #endif
  3667. +     }
  3668. + #endif
  3669. +       else if (DATA_REG_P (operands[0])
  3670. +            /* If N is in the right range and is even, then use
  3671. +               moveq #N/2, dreg; addl dreg,dreg */
  3672. +            && INTVAL (operands[1]) > 127
  3673. +            && INTVAL (operands[1]) <= 254
  3674. +            && INTVAL (operands[1]) % 2 == 0)
  3675. +         {
  3676. +       operands[1] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) / 2);
  3677. + #if defined(MOTOROLA) && !defined(CRDS)
  3678. +           return \"moveq%.l %1,%0\;add%.w %0,%0\";
  3679. + #else
  3680. +       return \"moveq %1,%0\;add%.w %0,%0\";
  3681. + #endif
  3682. +     }
  3683. +       else if (ADDRESS_REG_P (operands[0])
  3684. +            && INTVAL (operands[1]) < 0x8000
  3685. +            && INTVAL (operands[1]) >= -0x8000)
  3686. +     return \"move%.w %1,%0\";
  3687. +       else if (push_operand (operands[0], SImode)
  3688. +            && INTVAL (operands[1]) < 0x8000
  3689. +            && INTVAL (operands[1]) >= -0x8000)
  3690. +         return \"pea %a1\";
  3691. +     }
  3692. +   else if ((GET_CODE (operands[1]) == SYMBOL_REF
  3693. +         || GET_CODE (operands[1]) == CONST)
  3694. +        && push_operand (operands[0], SImode))
  3695. +     return \"pea %a1\";
  3696. +   else if ((GET_CODE (operands[1]) == SYMBOL_REF
  3697. +         || GET_CODE (operands[1]) == CONST)
  3698. +        && ADDRESS_REG_P (operands[0]))
  3699. +     return \"lea %a1,%0\";
  3700. +   return \"move%.l %1,%0\";
  3701. + }")
  3702. + (define_insn "movhi"
  3703. +   [(set (match_operand:HI 0 "general_operand" "=g")
  3704. +     (match_operand:HI 1 "general_operand" "g"))]
  3705. +   ""
  3706. +   "*
  3707. + {
  3708. +   if (GET_CODE (operands[1]) == CONST_INT)
  3709. +     {
  3710. +       if (operands[1] == const0_rtx
  3711. +       && (DATA_REG_P (operands[0])
  3712. +           || GET_CODE (operands[0]) == MEM)
  3713. +       /* clr insns on 68000 read before writing.
  3714. +          This isn't so on the 68010, but we have no alternative for it.  */
  3715. +       && (TARGET_68020
  3716. +           || !(GET_CODE (operands[0]) == MEM
  3717. +            && MEM_VOLATILE_P (operands[0]))))
  3718. +     return \"clr%.w %0\";
  3719. +       else if (DATA_REG_P (operands[0])
  3720. +            && INTVAL (operands[1]) < 128
  3721. +            && INTVAL (operands[1]) >= -128)
  3722. +         {
  3723. + #if defined(MOTOROLA) && !defined(CRDS)
  3724. +           return \"moveq%.l %1,%0\";
  3725. + #else
  3726. +       return \"moveq %1,%0\";
  3727. + #endif
  3728. +     }
  3729. +       else if (INTVAL (operands[1]) < 0x8000
  3730. +            && INTVAL (operands[1]) >= -0x8000)
  3731. +     return \"move%.w %1,%0\";
  3732. +     }
  3733. +   else if (CONSTANT_P (operands[1]))
  3734. +     return \"move%.l %1,%0\";
  3735. + #ifndef SGS_NO_LI
  3736. +   /* Recognize the insn before a tablejump, one that refers
  3737. +      to a table of offsets.  Such an insn will need to refer
  3738. +      to a label on the insn.  So output one.  Use the label-number
  3739. +      of the table of offsets to generate this label.  */
  3740. +   if (GET_CODE (operands[1]) == MEM
  3741. +       && GET_CODE (XEXP (operands[1], 0)) == PLUS
  3742. +       && (GET_CODE (XEXP (XEXP (operands[1], 0), 0)) == LABEL_REF
  3743. +       || GET_CODE (XEXP (XEXP (operands[1], 0), 1)) == LABEL_REF)
  3744. +       && GET_CODE (XEXP (XEXP (operands[1], 0), 0)) != PLUS
  3745. +       && GET_CODE (XEXP (XEXP (operands[1], 0), 1)) != PLUS)
  3746. +     {
  3747. +       rtx labelref;
  3748. +       if (GET_CODE (XEXP (XEXP (operands[1], 0), 0)) == LABEL_REF)
  3749. +     labelref = XEXP (XEXP (operands[1], 0), 0);
  3750. +       else
  3751. +     labelref = XEXP (XEXP (operands[1], 0), 1);
  3752. + #if defined (MOTOROLA) && !defined (SGS_SWITCH_TABLES)
  3753. + #ifdef SGS
  3754. +       asm_fprintf (asm_out_file, \"\\tset %LLI%d,.+2\\n\",
  3755. +            CODE_LABEL_NUMBER (XEXP (labelref, 0)));
  3756. + #else /* not SGS */
  3757. +       asm_fprintf (asm_out_file, \"\\t.set %LLI%d,.+2\\n\",
  3758. +                CODE_LABEL_NUMBER (XEXP (labelref, 0)));
  3759. + #endif /* not SGS */
  3760. + #else /* SGS_SWITCH_TABLES or not MOTOROLA */
  3761. +       ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"LI\",
  3762. +                  CODE_LABEL_NUMBER (XEXP (labelref, 0)));
  3763. + #ifdef SGS_SWITCH_TABLES
  3764. +       /* Set flag saying we need to define the symbol
  3765. +      LD%n (with value L%n-LI%n) at the end of the switch table.  */
  3766. +       switch_table_difference_label_flag = 1;
  3767. + #endif /* SGS_SWITCH_TABLES */
  3768. + #endif /* SGS_SWITCH_TABLES or not MOTOROLA */
  3769. +     }
  3770. + #endif /* SGS_NO_LI */
  3771. +   return \"move%.w %1,%0\";
  3772. + }")
  3773. + (define_insn "movstricthi"
  3774. +   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+dm"))
  3775. +     (match_operand:HI 1 "general_operand" "rmn"))]
  3776. +   ""
  3777. +   "*
  3778. + {
  3779. +   if (GET_CODE (operands[1]) == CONST_INT)
  3780. +     {
  3781. +       if (operands[1] == const0_rtx
  3782. +       && (DATA_REG_P (operands[0])
  3783. +           || GET_CODE (operands[0]) == MEM)
  3784. +       /* clr insns on 68000 read before writing.
  3785. +          This isn't so on the 68010, but we have no alternative for it.  */
  3786. +       && (TARGET_68020
  3787. +           || !(GET_CODE (operands[0]) == MEM
  3788. +            && MEM_VOLATILE_P (operands[0]))))
  3789. +     return \"clr%.w %0\";
  3790. +     }
  3791. +   return \"move%.w %1,%0\";
  3792. + }")
  3793. + (define_insn "movqi"
  3794. +   [(set (match_operand:QI 0 "general_operand" "=d,*a,m,m,?*a")
  3795. +     (match_operand:QI 1 "general_operand" "dmi*a,d*a,dmi,?*a,m"))]
  3796. +   ""
  3797. +   "*
  3798. + {
  3799. +   rtx xoperands[4];
  3800. +   /* This is probably useless, since it loses for pushing a struct
  3801. +      of several bytes a byte at a time.  */
  3802. +   if (GET_CODE (operands[0]) == MEM
  3803. +       && GET_CODE (XEXP (operands[0], 0)) == PRE_DEC
  3804. +       && XEXP (XEXP (operands[0], 0), 0) == stack_pointer_rtx
  3805. +       && ! ADDRESS_REG_P (operands[1]))
  3806. +     {
  3807. +       xoperands[1] = operands[1];
  3808. +       xoperands[2]
  3809. +         = gen_rtx (MEM, QImode,
  3810. +            gen_rtx (PLUS, VOIDmode, stack_pointer_rtx, const1_rtx));
  3811. +       /* Just pushing a byte puts it in the high byte of the halfword.  */
  3812. +       /* We must put it in the low-order, high-numbered byte.  */
  3813. +       output_asm_insn (\"move%.b %1,%-\;move%.b %@,%2\", xoperands);
  3814. +       return \"\";
  3815. +     }
  3816. +   /* Moving a byte into an address register is not possible.  */
  3817. +   /* Use d0 as an intermediate, but don't clobber its contents.  */
  3818. +   if (ADDRESS_REG_P (operands[0]) && GET_CODE (operands[1]) == MEM)
  3819. +     {
  3820. +       /* ??? For 2.5, don't allow this choice and use secondary reloads
  3821. +      instead.
  3822. +      See if the address register is used in the address.  If it
  3823. +      is, we have to generate a more complex sequence than those below.  */
  3824. +       if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
  3825. +                  operands[1], NULL_RTX))
  3826. +     {
  3827. +       /* See if the stack pointer is used in the address.  If it isn't,
  3828. +          we can push d0 or d1 (the insn can't use both of them) on
  3829. +          the stack, perform our move into d0/d1, copy the byte from d0/1,
  3830. +          and pop d0/1.  */
  3831. +       if (! reg_mentioned_p (stack_pointer_rtx, operands[1]))
  3832. +         {
  3833. +           if (refers_to_regno_p (0, 1, operands[1], NULL_RTX))
  3834. +         return \"move%.l %/d0,%-\;move%.b %1,%/d0\;move%.l %/d0,%0\;move%.l %+,%/d0\";
  3835. +           else
  3836. +         return \"move%.l %/d1,%-\;move%.b %1,%/d1\;move%.l %/d1,%0\;move%.l %+,%/d1\";
  3837. +         }
  3838. +       else
  3839. +         {
  3840. +           /* Otherwise, we know that d0 cannot be used in the address
  3841. +          (since sp and one address register is).  Assume that sp is
  3842. +          being used as a base register and replace the address
  3843. +          register that is our operand[0] with d0.  */
  3844. +           rtx reg_map[FIRST_PSEUDO_REGISTER];
  3845. +           int i;
  3846. +           for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
  3847. +         reg_map[i] = 0;
  3848. +           reg_map[REGNO (operands[0])] = gen_rtx (REG, Pmode, 0);
  3849. +           operands[1] = copy_rtx (operands[1]);
  3850. +           replace_regs (operands[1], reg_map, FIRST_PSEUDO_REGISTER, 0);
  3851. +           return \"exg %/d0,%0\;move%.b %1,%/d0\;exg %/d0,%0\";
  3852. +         }
  3853. +     }
  3854. +       /* If the address of operand 1 uses d0, choose d1 as intermediate.  */
  3855. +       if (refers_to_regno_p (0, 1, operands[1], NULL_RTX))
  3856. +     return \"exg %/d1,%0\;move%.b %1,%/d1\;exg %/d1,%0\";
  3857. +       /* Otherwise d0 is usable.
  3858. +      (An effective address on the 68k can't use two d-regs.)  */
  3859. +       else
  3860. +     return \"exg %/d0,%0\;move%.b %1,%/d0\;exg %/d0,%0\";
  3861. +     }
  3862. +     
  3863. +   /* Likewise for moving from an address reg.  */
  3864. +   if (ADDRESS_REG_P (operands[1]) && GET_CODE (operands[0]) == MEM)
  3865. +     {
  3866. +       /* ??? For 2.5, don't allow this choice and use secondary reloads
  3867. +      instead.
  3868. +      See if the address register is used in the address.  If it
  3869. +      is, we have to generate a more complex sequence than those below.  */
  3870. +       if (refers_to_regno_p (REGNO (operands[1]), REGNO (operands[1]) + 1,
  3871. +                  operands[0], NULL_RTX))
  3872. +     {
  3873. +       /* See if the stack pointer is used in the address.  If it isn't,
  3874. +          we can push d0 or d1 (the insn can't use both of them) on
  3875. +          the stack, copy the byte to d0/1, perform our move from d0/d1, 
  3876. +          and pop d0/1.  */
  3877. +       if (! reg_mentioned_p (stack_pointer_rtx, operands[0]))
  3878. +         {
  3879. +           if (refers_to_regno_p (0, 1, operands[0], NULL_RTX))
  3880. +         return \"move%.l %/d0,%-\;move%.l %1,%/d0\;move%.b %/d0,%0\;move%.l %+,%/d0\";
  3881. +           else
  3882. +         return \"move%.l %/d1,%-\;move%.l %1,%/d1\;move%.b %/d1,%0\;move%.l %+,%/d1\";
  3883. +         }
  3884. +       else
  3885. +         {
  3886. +           /* Otherwise, we know that d0 cannot be used in the address
  3887. +          (since sp and one address register is).  Assume that sp is
  3888. +          being used as a base register and replace the address
  3889. +          register that is our operand[1] with d0.  */
  3890. +           rtx reg_map[FIRST_PSEUDO_REGISTER];
  3891. +           int i;
  3892. +           for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
  3893. +         reg_map[i] = 0;
  3894. +           reg_map[REGNO (operands[1])] = gen_rtx (REG, Pmode, 0);
  3895. +           operands[0] = copy_rtx (operands[0]);
  3896. +           replace_regs (operands[0], reg_map, FIRST_PSEUDO_REGISTER, 0);
  3897. +           return \"exg %/d0,%1\;move%.b %/d0,%0\;exg %/d0,%1\";
  3898. +         }
  3899. +     }
  3900. +       if (refers_to_regno_p (0, 1, operands[0], NULL_RTX))
  3901. +         return \"exg %/d1,%1\;move%.b %/d1,%0\;exg %/d1,%1\";
  3902. +       else
  3903. +         return \"exg %/d0,%1\;move%.b %/d0,%0\;exg %/d0,%1\";
  3904. +     }
  3905. +   /* clr and st insns on 68000 read before writing.
  3906. +      This isn't so on the 68010, but we have no alternative for it.  */
  3907. +   if (TARGET_68020
  3908. +       || !(GET_CODE (operands[0]) == MEM && MEM_VOLATILE_P (operands[0])))
  3909. +     {
  3910. +       if (operands[1] == const0_rtx)
  3911. +     return \"clr%.b %0\";
  3912. +       if (GET_CODE (operands[1]) == CONST_INT
  3913. +       && INTVAL (operands[1]) == -1)
  3914. +     {
  3915. +       CC_STATUS_INIT;
  3916. +       return \"st %0\";
  3917. +     }
  3918. +     }
  3919. +   if (GET_CODE (operands[1]) != CONST_INT && CONSTANT_P (operands[1]))
  3920. +     return \"move%.l %1,%0\";
  3921. +   if (ADDRESS_REG_P (operands[0]) || ADDRESS_REG_P (operands[1]))
  3922. +     return \"move%.w %1,%0\";
  3923. +   return \"move%.b %1,%0\";
  3924. + }")
  3925. + (define_insn "movstrictqi"
  3926. +   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+dm"))
  3927. +     (match_operand:QI 1 "general_operand" "dmn"))]
  3928. +   ""
  3929. +   "*
  3930. + {
  3931. +   if (operands[1] == const0_rtx
  3932. +       /* clr insns on 68000 read before writing.
  3933. +          This isn't so on the 68010, but we have no alternative for it.  */
  3934. +       && (TARGET_68020
  3935. +           || !(GET_CODE (operands[0]) == MEM && MEM_VOLATILE_P (operands[0]))))
  3936. +     return \"clr%.b %0\";
  3937. +   return \"move%.b %1,%0\";
  3938. + }")
  3939. + (define_insn "movsf"
  3940. +   [(set (match_operand:SF 0 "general_operand" "=rmf,x,y,rm,!x,!rm")
  3941. +     (match_operand:SF 1 "general_operand" "rmfF,xH,rmF,y,rm,x"))]
  3942. + ;  [(set (match_operand:SF 0 "general_operand" "=rmf")
  3943. + ;    (match_operand:SF 1 "general_operand" "rmfF"))]
  3944. +   ""
  3945. +   "*
  3946. + {
  3947. +   if (which_alternative >= 4)
  3948. +     return \"fpmove%.s %1,fpa0\;fpmove%.s fpa0,%0\";
  3949. +   if (FPA_REG_P (operands[0]))
  3950. +     {
  3951. +       if (FPA_REG_P (operands[1]))
  3952. +     return \"fpmove%.s %x1,%x0\";
  3953. +       else if (GET_CODE (operands[1]) == CONST_DOUBLE)
  3954. +     return output_move_const_single (operands);
  3955. +       else if (FP_REG_P (operands[1]))
  3956. +         return \"fmove%.s %1,sp@-\;fpmove%.d sp@+, %0\";
  3957. +       return \"fpmove%.s %x1,%x0\";
  3958. +     }
  3959. +   if (FPA_REG_P (operands[1]))
  3960. +     {
  3961. +       if (FP_REG_P (operands[0]))
  3962. +     return \"fpmove%.s %x1,sp@-\;fmove%.s sp@+,%0\";
  3963. +       else
  3964. +     return \"fpmove%.s %x1,%x0\";
  3965. +     }
  3966. +   if (FP_REG_P (operands[0]))
  3967. +     {
  3968. +       if (FP_REG_P (operands[1]))
  3969. +     return \"f%$move%.x %1,%0\";
  3970. +       else if (ADDRESS_REG_P (operands[1]))
  3971. +     return \"move%.l %1,%-\;f%$move%.s %+,%0\";
  3972. +       else if (GET_CODE (operands[1]) == CONST_DOUBLE)
  3973. +     return output_move_const_single (operands);
  3974. +       return \"f%$move%.s %f1,%0\";
  3975. +     }
  3976. +   if (FP_REG_P (operands[1]))
  3977. +     {
  3978. +       if (ADDRESS_REG_P (operands[0]))
  3979. +     return \"fmove%.s %1,%-\;move%.l %+,%0\";
  3980. +       return \"fmove%.s %f1,%0\";
  3981. +     }
  3982. +   return \"move%.l %1,%0\";
  3983. + }")
  3984. + (define_insn "movdf"
  3985. +   [(set (match_operand:DF 0 "general_operand" "=rm,rf,rf,&rof<>,y,rm,x,!x,!rm")
  3986. +     (match_operand:DF 1 "general_operand" "rf,m,0,rofE<>,rmE,y,xH,rm,x"))]
  3987. + ;  [(set (match_operand:DF 0 "general_operand" "=rm,&rf,&rof<>")
  3988. + ;    (match_operand:DF 1 "general_operand" "rf,m,rofF<>"))]
  3989. +   ""
  3990. +   "*
  3991. + {
  3992. +   if (which_alternative == 7)
  3993. +     return \"fpmove%.d %x1,fpa0\;fpmove%.d fpa0,%x0\";
  3994. +   if (FPA_REG_P (operands[0]))
  3995. +     {
  3996. +       if (GET_CODE (operands[1]) == CONST_DOUBLE)
  3997. +     return output_move_const_double (operands);
  3998. +       if (FP_REG_P (operands[1]))
  3999. +         return \"fmove%.d %1,sp@-\;fpmove%.d sp@+,%x0\";
  4000. +       return \"fpmove%.d %x1,%x0\";
  4001. +     }
  4002. +   else if (FPA_REG_P (operands[1]))
  4003. +     {
  4004. +       if (FP_REG_P(operands[0]))
  4005. +         return \"fpmove%.d %x1,sp@-\;fmoved sp@+,%0\";
  4006. +       else
  4007. +         return \"fpmove%.d %x1,%x0\";
  4008. +     }
  4009. +   if (FP_REG_P (operands[0]))
  4010. +     {
  4011. +       if (FP_REG_P (operands[1]))
  4012. +     return \"f%&move%.x %1,%0\";
  4013. +       if (REG_P (operands[1]))
  4014. +     {
  4015. +       rtx xoperands[2];
  4016. +       xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
  4017. +       output_asm_insn (\"move%.l %1,%-\", xoperands);
  4018. +       output_asm_insn (\"move%.l %1,%-\", operands);
  4019. +       return \"f%&move%.d %+,%0\";
  4020. +     }
  4021. +       if (GET_CODE (operands[1]) == CONST_DOUBLE)
  4022. +     return output_move_const_double (operands);
  4023. +       return \"f%&move%.d %f1,%0\";
  4024. +     }
  4025. +   else if (FP_REG_P (operands[1]))
  4026. +     {
  4027. +       if (REG_P (operands[0]))
  4028. +     {
  4029. +       output_asm_insn (\"fmove%.d %f1,%-\;move%.l %+,%0\", operands);
  4030. +       operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
  4031. +       return \"move%.l %+,%0\";
  4032. +     }
  4033. +       else
  4034. +         return \"fmove%.d %f1,%0\";
  4035. +     }
  4036. +   return output_move_double (operands);
  4037. + }
  4038. + ")
  4039. + (define_expand "movxf"
  4040. +   [(set (match_operand:XF 0 "nonimmediate_operand" "")
  4041. +     (match_operand:XF 1 "general_operand" ""))]
  4042. +   ""
  4043. +   "
  4044. + {
  4045. +   if (CONSTANT_P (operands[1]))
  4046. +     {
  4047. +       operands[1] = force_const_mem (XFmode, operands[1]);
  4048. +       if (! memory_address_p (XFmode, XEXP (operands[1], 0))
  4049. +       && ! reload_in_progress)
  4050. +     operands[1] = change_address (operands[1], XFmode,
  4051. +                       XEXP (operands[1], 0));
  4052. +     }
  4053. + }")
  4054. + (define_insn ""
  4055. +   [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m,f,!r,!f")
  4056. +     (match_operand:XF 1 "nonimmediate_operand" "m,f,f,f,r"))]
  4057. +   "TARGET_68881"
  4058. +   "*
  4059. + {
  4060. +   if (FP_REG_P (operands[0]))
  4061. +     {
  4062. +       if (FP_REG_P (operands[1]))
  4063. +     return \"fmove%.x %1,%0\";
  4064. +       if (REG_P (operands[1]))
  4065. +     {
  4066. +       rtx xoperands[2];
  4067. +       xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 2);
  4068. +       output_asm_insn (\"move%.l %1,%-\", xoperands);
  4069. +       xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
  4070. +       output_asm_insn (\"move%.l %1,%-\", xoperands);
  4071. +       output_asm_insn (\"move%.l %1,%-\", operands);
  4072. +       return \"fmove%.x %+,%0\";
  4073. +     }
  4074. +       if (GET_CODE (operands[1]) == CONST_DOUBLE)
  4075. +         return \"fmove%.x %1,%0\";
  4076. +       return \"fmove%.x %f1,%0\";
  4077. +     }
  4078. +   if (REG_P (operands[0]))
  4079. +     {
  4080. +       output_asm_insn (\"fmove%.x %f1,%-\;move%.l %+,%0\", operands);
  4081. +       operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
  4082. +       output_asm_insn (\"move%.l %+,%0\", operands);
  4083. +       operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
  4084. +       return \"move%.l %+,%0\";
  4085. +     }
  4086. +   return \"fmove%.x %f1,%0\";
  4087. + }
  4088. + ")
  4089. + (define_insn ""
  4090. +   [(set (match_operand:XF 0 "nonimmediate_operand" "=rm,rf,&rof<>")
  4091. +     (match_operand:XF 1 "nonimmediate_operand" "rf,m,rof<>"))]
  4092. +   "! TARGET_68881"
  4093. +   "*
  4094. + {
  4095. +   if (FP_REG_P (operands[0]))
  4096. +     {
  4097. +       if (FP_REG_P (operands[1]))
  4098. +     return \"fmove%.x %1,%0\";
  4099. +       if (REG_P (operands[1]))
  4100. +     {
  4101. +       rtx xoperands[2];
  4102. +       xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 2);
  4103. +       output_asm_insn (\"move%.l %1,%-\", xoperands);
  4104. +       xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
  4105. +       output_asm_insn (\"move%.l %1,%-\", xoperands);
  4106. +       output_asm_insn (\"move%.l %1,%-\", operands);
  4107. +       return \"fmove%.x %+,%0\";
  4108. +     }
  4109. +       if (GET_CODE (operands[1]) == CONST_DOUBLE)
  4110. +         return \"fmove%.x %1,%0\";
  4111. +       return \"fmove%.x %f1,%0\";
  4112. +     }
  4113. +   if (FP_REG_P (operands[1]))
  4114. +     {
  4115. +       if (REG_P (operands[0]))
  4116. +         {
  4117. +           output_asm_insn (\"fmove%.x %f1,%-\;move%.l %+,%0\", operands);
  4118. +           operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
  4119. +           output_asm_insn (\"move%.l %+,%0\", operands);
  4120. +           operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
  4121. +           return \"move%.l %+,%0\";
  4122. +         }
  4123. +       else
  4124. +         return \"fmove%.x %f1,%0\";
  4125. +     }
  4126. +   return output_move_double (operands);
  4127. + }
  4128. + ")
  4129. + ;; movdi can apply to fp regs in some cases
  4130. + (define_insn "movdi"
  4131. +   ;; Let's see if it really still needs to handle fp regs, and, if so, why.
  4132. +   [(set (match_operand:DI 0 "general_operand" "=rm,r,&ro<>,y,rm,!*x,!rm")
  4133. +     (match_operand:DI 1 "general_operand" "rF,m,roi<>F,rmiF,y,rmF,*x"))]
  4134. + ;  [(set (match_operand:DI 0 "general_operand" "=rm,&r,&ro<>,!&rm,!&f,y,rm,x,!x,!rm")
  4135. + ;    (match_operand:DI 1 "general_operand" "r,m,roi<>,fF,rfmF,rmi,y,rm,x"))]
  4136. + ;  [(set (match_operand:DI 0 "general_operand" "=rm,&rf,&ro<>,!&rm,!&f")
  4137. + ;    (match_operand:DI 1 "general_operand" "r,m,roi<>,fF,rfF"))]
  4138. +   ""
  4139. +   "*
  4140. + {
  4141. +   if (which_alternative == 8)
  4142. +     return \"fpmove%.d %x1,fpa0\;fpmove%.d fpa0,%x0\";
  4143. +   if (FPA_REG_P (operands[0]) || FPA_REG_P (operands[1]))
  4144. +     return \"fpmove%.d %x1,%x0\";
  4145. +   if (FP_REG_P (operands[0]))
  4146. +     {
  4147. +       if (FP_REG_P (operands[1]))
  4148. +     return \"fmove%.x %1,%0\";
  4149. +       if (REG_P (operands[1]))
  4150. +     {
  4151. +       rtx xoperands[2];
  4152. +       xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
  4153. +       output_asm_insn (\"move%.l %1,%-\", xoperands);
  4154. +       output_asm_insn (\"move%.l %1,%-\", operands);
  4155. +       return \"fmove%.d %+,%0\";
  4156. +     }
  4157. +       if (GET_CODE (operands[1]) == CONST_DOUBLE)
  4158. +     return output_move_const_double (operands);
  4159. +       return \"fmove%.d %f1,%0\";
  4160. +     }
  4161. +   else if (FP_REG_P (operands[1]))
  4162. +     {
  4163. +       if (REG_P (operands[0]))
  4164. +     {
  4165. +       output_asm_insn (\"fmove%.d %f1,%-\;move%.l %+,%0\", operands);
  4166. +       operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
  4167. +       return \"move%.l %+,%0\";
  4168. +     }
  4169. +       else
  4170. +         return \"fmove%.d %f1,%0\";
  4171. +     }
  4172. +   return output_move_double (operands);
  4173. + }
  4174. + ")
  4175. + ;; Thus goes after the move instructions
  4176. + ;; because the move instructions are better (require no spilling)
  4177. + ;; when they can apply.  It goes before the add/sub insns
  4178. + ;; so we will prefer it to them.
  4179. + (define_insn "pushasi"
  4180. +   [(set (match_operand:SI 0 "push_operand" "=m")
  4181. +     (match_operand:SI 1 "address_operand" "p"))]
  4182. +   ""
  4183. +   "pea %a1")
  4184. + ;; truncation instructions
  4185. + (define_insn "truncsiqi2"
  4186. +   [(set (match_operand:QI 0 "general_operand" "=dm,d")
  4187. +     (truncate:QI
  4188. +      (match_operand:SI 1 "general_operand" "doJ,i")))]
  4189. +   ""
  4190. +   "*
  4191. + {
  4192. +   if (GET_CODE (operands[0]) == REG)
  4193. +     {
  4194. +       /* Must clear condition codes, since the move.l bases them on
  4195. +      the entire 32 bits, not just the desired 8 bits.  */
  4196. +       CC_STATUS_INIT;
  4197. +       return \"move%.l %1,%0\";
  4198. +     }
  4199. +   if (GET_CODE (operands[1]) == MEM)
  4200. +     operands[1] = adj_offsettable_operand (operands[1], 3);
  4201. +   return \"move%.b %1,%0\";
  4202. + }")
  4203. + (define_insn "trunchiqi2"
  4204. +   [(set (match_operand:QI 0 "general_operand" "=dm,d")
  4205. +     (truncate:QI
  4206. +      (match_operand:HI 1 "general_operand" "doJ,i")))]
  4207. +   ""
  4208. +   "*
  4209. + {
  4210. +   if (GET_CODE (operands[0]) == REG
  4211. +       && (GET_CODE (operands[1]) == MEM
  4212. +       || GET_CODE (operands[1]) == CONST_INT))
  4213. +     {
  4214. +       /* Must clear condition codes, since the move.w bases them on
  4215. +      the entire 16 bits, not just the desired 8 bits.  */
  4216. +       CC_STATUS_INIT;
  4217. +       return \"move%.w %1,%0\";
  4218. +     }
  4219. +   if (GET_CODE (operands[0]) == REG)
  4220. +     {
  4221. +       /* Must clear condition codes, since the move.l bases them on
  4222. +      the entire 32 bits, not just the desired 8 bits.  */
  4223. +       CC_STATUS_INIT;
  4224. +       return \"move%.l %1,%0\";
  4225. +     }
  4226. +   if (GET_CODE (operands[1]) == MEM)
  4227. +     operands[1] = adj_offsettable_operand (operands[1], 1);
  4228. +   return \"move%.b %1,%0\";
  4229. + }")
  4230. + (define_insn "truncsihi2"
  4231. +   [(set (match_operand:HI 0 "general_operand" "=dm,d")
  4232. +     (truncate:HI
  4233. +      (match_operand:SI 1 "general_operand" "roJ,i")))]
  4234. +   ""
  4235. +   "*
  4236. + {
  4237. +   if (GET_CODE (operands[0]) == REG)
  4238. +     {
  4239. +       /* Must clear condition codes, since the move.l bases them on
  4240. +      the entire 32 bits, not just the desired 8 bits.  */
  4241. +       CC_STATUS_INIT;
  4242. +       return \"move%.l %1,%0\";
  4243. +     }
  4244. +   if (GET_CODE (operands[1]) == MEM)
  4245. +     operands[1] = adj_offsettable_operand (operands[1], 2);
  4246. +   return \"move%.w %1,%0\";
  4247. + }")
  4248. + ;; zero extension instructions
  4249. + (define_expand "zero_extendhisi2"
  4250. +   [(set (match_operand:SI 0 "register_operand" "")
  4251. +     (const_int 0))
  4252. +    (set (strict_low_part (match_dup 2))
  4253. +     (match_operand:HI 1 "general_operand" ""))]
  4254. +   ""
  4255. +   "
  4256. + {
  4257. +   operands[1] = make_safe_from (operands[1], operands[0]);
  4258. +   if (GET_CODE (operands[0]) == SUBREG)
  4259. +     operands[2] = gen_rtx (SUBREG, HImode, SUBREG_REG (operands[0]),
  4260. +                SUBREG_WORD (operands[0]));
  4261. +   else
  4262. +     operands[2] = gen_rtx (SUBREG, HImode, operands[0], 0);
  4263. + }")
  4264. + (define_expand "zero_extendqihi2"
  4265. +   [(set (match_operand:HI 0 "register_operand" "")
  4266. +     (const_int 0))
  4267. +    (set (strict_low_part (match_dup 2))
  4268. +     (match_operand:QI 1 "general_operand" ""))]
  4269. +   ""
  4270. +   "
  4271. + {
  4272. +   operands[1] = make_safe_from (operands[1], operands[0]);
  4273. +   if (GET_CODE (operands[0]) == SUBREG)
  4274. +     operands[2] = gen_rtx (SUBREG, QImode, SUBREG_REG (operands[0]),
  4275. +                SUBREG_WORD (operands[0]));
  4276. +   else
  4277. +     operands[2] = gen_rtx (SUBREG, QImode, operands[0], 0);
  4278. + }")
  4279. + (define_expand "zero_extendqisi2"
  4280. +   [(set (match_operand:SI 0 "register_operand" "")
  4281. +     (const_int 0))
  4282. +    (set (strict_low_part (match_dup 2))
  4283. +     (match_operand:QI 1 "general_operand" ""))]
  4284. +   ""
  4285. +   "
  4286. + {
  4287. +   operands[1] = make_safe_from (operands[1], operands[0]);
  4288. +   if (GET_CODE (operands[0]) == SUBREG)
  4289. +     operands[2] = gen_rtx (SUBREG, QImode, SUBREG_REG (operands[0]),
  4290. +                SUBREG_WORD (operands[0]));
  4291. +   else
  4292. +     operands[2] = gen_rtx (SUBREG, QImode, operands[0], 0);
  4293. + }")
  4294. + ;; Patterns to recognize zero-extend insns produced by the combiner.
  4295. + ;; We don't allow both operands in memory, because of aliasing problems.
  4296. + ;; Explicitly disallow two memory operands via the condition since reloading
  4297. + ;; of this case will result in worse code than the uncombined patterns.
  4298. + (define_insn ""
  4299. +   [(set (match_operand:SI 0 "general_operand" "=do<>,d<")
  4300. +     (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "r,m")))]
  4301. +   "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM"
  4302. +   "*
  4303. + {
  4304. +   if (DATA_REG_P (operands[0]))
  4305. +     {
  4306. +       if (GET_CODE (operands[1]) == REG
  4307. +       && REGNO (operands[0]) == REGNO (operands[1]))
  4308. +     return \"and%.l %#0xFFFF,%0\";
  4309. +       if (reg_mentioned_p (operands[0], operands[1]))
  4310. +         return \"move%.w %1,%0\;and%.l %#0xFFFF,%0\";
  4311. +       return \"clr%.l %0\;move%.w %1,%0\";
  4312. +     }
  4313. +   else if (GET_CODE (operands[0]) == MEM
  4314. +        && GET_CODE (XEXP (operands[0], 0)) == PRE_DEC)
  4315. +     return \"move%.w %1,%0\;clr%.w %0\";
  4316. +   else if (GET_CODE (operands[0]) == MEM
  4317. +        && GET_CODE (XEXP (operands[0], 0)) == POST_INC)
  4318. +     return \"clr%.w %0\;move%.w %1,%0\";
  4319. +   else
  4320. +     {
  4321. +       output_asm_insn (\"clr%.w %0\", operands);
  4322. +       operands[0] = adj_offsettable_operand (operands[0], 2);
  4323. +       return \"move%.w %1,%0\";
  4324. +     }
  4325. + }")
  4326. + (define_insn ""
  4327. +   [(set (match_operand:HI 0 "general_operand" "=do<>,d")
  4328. +     (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "d,m")))]
  4329. +   "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM"
  4330. +   "*
  4331. + {
  4332. +   if (DATA_REG_P (operands[0]))
  4333. +     {
  4334. +       if (GET_CODE (operands[1]) == REG
  4335. +       && REGNO (operands[0]) == REGNO (operands[1]))
  4336. +     return \"and%.w %#0xFF,%0\";
  4337. +       if (reg_mentioned_p (operands[0], operands[1]))
  4338. +         return \"move%.b %1,%0\;and%.w %#0xFF,%0\";
  4339. +       return \"clr%.w %0\;move%.b %1,%0\";
  4340. +     }
  4341. +   else if (GET_CODE (operands[0]) == MEM
  4342. +        && GET_CODE (XEXP (operands[0], 0)) == PRE_DEC)
  4343. +     {
  4344. +       if (REGNO (XEXP (XEXP (operands[0], 0), 0))
  4345. +       == STACK_POINTER_REGNUM)
  4346. +     {
  4347. +       output_asm_insn (\"clr%.w %-\", operands);
  4348. +       operands[0] = gen_rtx (MEM, GET_MODE (operands[0]),
  4349. +                  plus_constant (stack_pointer_rtx, 1));
  4350. +       return \"move%.b %1,%0\";
  4351. +     }
  4352. +       else
  4353. +     return \"move%.b %1,%0\;clr%.b %0\";
  4354. +     }
  4355. +   else if (GET_CODE (operands[0]) == MEM
  4356. +        && GET_CODE (XEXP (operands[0], 0)) == POST_INC)
  4357. +     return \"clr%.b %0\;move%.b %1,%0\";
  4358. +   else
  4359. +     {
  4360. +       output_asm_insn (\"clr%.b %0\", operands);
  4361. +       operands[0] = adj_offsettable_operand (operands[0], 1);
  4362. +       return \"move%.b %1,%0\";
  4363. +     }
  4364. + }")
  4365. + (define_insn ""
  4366. +   [(set (match_operand:SI 0 "general_operand" "=do<>,d")
  4367. +     (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "d,m")))]
  4368. +   "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM"
  4369. +   "*
  4370. + {
  4371. +   if (DATA_REG_P (operands[0]))
  4372. +     {
  4373. +       if (GET_CODE (operands[1]) == REG
  4374. +       && REGNO (operands[0]) == REGNO (operands[1]))
  4375. +     return \"and%.l %#0xFF,%0\";
  4376. +       if (reg_mentioned_p (operands[0], operands[1]))
  4377. +         return \"move%.b %1,%0\;and%.l %#0xFF,%0\";
  4378. +       return \"clr%.l %0\;move%.b %1,%0\";
  4379. +     }
  4380. +   else if (GET_CODE (operands[0]) == MEM
  4381. +        && GET_CODE (XEXP (operands[0], 0)) == PRE_DEC)
  4382. +     {
  4383. +       operands[0] = XEXP (XEXP (operands[0], 0), 0);
  4384. + #ifdef MOTOROLA
  4385. + #ifdef SGS
  4386. +       return \"clr%.l -(%0)\;move%.b %1,3(%0)\";
  4387. + #else
  4388. +       return \"clr%.l -(%0)\;move%.b %1,(3,%0)\";
  4389. + #endif
  4390. + #else
  4391. +       return \"clrl %0@-\;moveb %1,%0@(3)\";
  4392. + #endif
  4393. +     }
  4394. +   else if (GET_CODE (operands[0]) == MEM
  4395. +        && GET_CODE (XEXP (operands[0], 0)) == POST_INC)
  4396. +     {
  4397. +       operands[0] = XEXP (XEXP (operands[0], 0), 0);
  4398. + #ifdef MOTOROLA
  4399. + #ifdef SGS
  4400. +       return \"clr%.l (%0)+\;move%.b %1,-1(%0)\";
  4401. + #else
  4402. +       return \"clr%.l (%0)+\;move%.b %1,(-1,%0)\";
  4403. + #endif
  4404. + #else
  4405. +       return \"clrl %0@+\;moveb %1,%0@(-1)\";
  4406. + #endif
  4407. +     }
  4408. +   else
  4409. +     {
  4410. +       output_asm_insn (\"clr%.l %0\", operands);
  4411. +       operands[0] = adj_offsettable_operand (operands[0], 3);
  4412. +       return \"move%.b %1,%0\";
  4413. +     }
  4414. + }")
  4415. + ;; sign extension instructions
  4416. + (define_insn "extendhisi2"
  4417. +   [(set (match_operand:SI 0 "general_operand" "=*d,a")
  4418. +     (sign_extend:SI
  4419. +      (match_operand:HI 1 "nonimmediate_operand" "0,rm")))]
  4420. +   ""
  4421. +   "*
  4422. + {
  4423. +   if (ADDRESS_REG_P (operands[0]))
  4424. +     return \"move%.w %1,%0\";
  4425. +   return \"ext%.l %0\";
  4426. + }")
  4427. + (define_insn "extendqihi2"
  4428. +   [(set (match_operand:HI 0 "general_operand" "=d")
  4429. +     (sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "0")))]
  4430. +   ""
  4431. +   "ext%.w %0")
  4432. + (define_insn "extendqisi2"
  4433. +   [(set (match_operand:SI 0 "general_operand" "=d")
  4434. +     (sign_extend:SI (match_operand:QI 1 "nonimmediate_operand" "0")))]
  4435. +   "TARGET_68020"
  4436. +   "extb%.l %0")
  4437. + ;; Conversions between float and double.
  4438. + (define_expand "extendsfdf2"
  4439. +   [(set (match_operand:DF 0 "general_operand" "")
  4440. +     (float_extend:DF
  4441. +      (match_operand:SF 1 "general_operand" "")))]
  4442. +   "TARGET_68881 || TARGET_FPA"
  4443. +   "")
  4444. + (define_insn ""
  4445. +   [(set (match_operand:DF 0 "general_operand" "=x,y")
  4446. +     (float_extend:DF
  4447. +      (match_operand:SF 1 "general_operand" "xH,rmF")))]
  4448. +   "TARGET_FPA"
  4449. +   "fpstod %w1,%0")
  4450. + (define_insn ""
  4451. +   [(set (match_operand:DF 0 "general_operand" "=*fdm,f")
  4452. +     (float_extend:DF
  4453. +       (match_operand:SF 1 "general_operand" "f,dmF")))]
  4454. +   "TARGET_68881"
  4455. +   "*
  4456. + {
  4457. +   if (FP_REG_P (operands[0]) && FP_REG_P (operands[1]))
  4458. +     {
  4459. +       if (REGNO (operands[0]) == REGNO (operands[1]))
  4460. +     {
  4461. +       /* Extending float to double in an fp-reg is a no-op.
  4462. +          NOTICE_UPDATE_CC has already assumed that the
  4463. +          cc will be set.  So cancel what it did.  */
  4464. +       cc_status = cc_prev_status;
  4465. +       return \"\";
  4466. +     }
  4467. +       return \"f%&move%.x %1,%0\";
  4468. +     }
  4469. +   if (FP_REG_P (operands[0]))
  4470. +     return \"f%&move%.s %f1,%0\";
  4471. +   if (DATA_REG_P (operands[0]) && FP_REG_P (operands[1]))
  4472. +     {
  4473. +       output_asm_insn (\"fmove%.d %f1,%-\;move%.l %+,%0\", operands);
  4474. +       operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
  4475. +       return \"move%.l %+,%0\";
  4476. +     }
  4477. +   return \"fmove%.d %f1,%0\";
  4478. + }")
  4479. + ;; This cannot output into an f-reg because there is no way to be
  4480. + ;; sure of truncating in that case.
  4481. + ;; But on the Sun FPA, we can be sure.
  4482. + (define_expand "truncdfsf2"
  4483. +   [(set (match_operand:SF 0 "general_operand" "")
  4484. +     (float_truncate:SF
  4485. +       (match_operand:DF 1 "general_operand" "")))]
  4486. +   "TARGET_68881 || TARGET_FPA"
  4487. +   "")
  4488. + (define_insn ""
  4489. +   [(set (match_operand:SF 0 "general_operand" "=x,y")
  4490. +     (float_truncate:SF
  4491. +       (match_operand:DF 1 "general_operand" "xH,rmF")))]
  4492. +   "TARGET_FPA"
  4493. +   "fpdtos %y1,%0")
  4494. + ;; On the '040 we can truncate in a register accurately and easily.
  4495. + (define_insn ""
  4496. +   [(set (match_operand:SF 0 "general_operand" "=f")
  4497. +     (float_truncate:SF
  4498. +       (match_operand:DF 1 "general_operand" "fmG")))]
  4499. +   "TARGET_68040_ONLY"
  4500. +   "*
  4501. + {
  4502. +   if (FP_REG_P (operands[1]))
  4503. +     return \"f%$move%.x %1,%0\";
  4504. +   return \"f%$move%.d %f1,%0\";
  4505. + }")
  4506. + (define_insn ""
  4507. +   [(set (match_operand:SF 0 "general_operand" "=dm")
  4508. +     (float_truncate:SF
  4509. +       (match_operand:DF 1 "general_operand" "f")))]
  4510. +   "TARGET_68881"
  4511. +   "fmove%.s %f1,%0")
  4512. + ;; Conversion between fixed point and floating point.
  4513. + ;; Note that among the fix-to-float insns
  4514. + ;; the ones that start with SImode come first.
  4515. + ;; That is so that an operand that is a CONST_INT
  4516. + ;; (and therefore lacks a specific machine mode).
  4517. + ;; will be recognized as SImode (which is always valid)
  4518. + ;; rather than as QImode or HImode.
  4519. + (define_expand "floatsisf2"
  4520. +   [(set (match_operand:SF 0 "general_operand" "")
  4521. +     (float:SF (match_operand:SI 1 "general_operand" "")))]
  4522. +   "TARGET_68881 || TARGET_FPA"
  4523. +   "")
  4524. + (define_insn ""
  4525. +   [(set (match_operand:SF 0 "general_operand" "=y,x")
  4526. +     (float:SF (match_operand:SI 1 "general_operand" "rmi,x")))]
  4527. +   "TARGET_FPA"
  4528. +   "fpltos %1,%0")
  4529. + (define_insn ""
  4530. +   [(set (match_operand:SF 0 "general_operand" "=f")
  4531. +     (float:SF (match_operand:SI 1 "general_operand" "dmi")))]
  4532. +   "TARGET_68881"
  4533. +   "f%$move%.l %1,%0")
  4534. + (define_expand "floatsidf2"
  4535. +   [(set (match_operand:DF 0 "general_operand" "")
  4536. +     (float:DF (match_operand:SI 1 "general_operand" "")))]
  4537. +   "TARGET_68881 || TARGET_FPA"
  4538. +   "")
  4539. + (define_insn ""
  4540. +   [(set (match_operand:DF 0 "general_operand" "=y,x")
  4541. +     (float:DF (match_operand:SI 1 "general_operand" "rmi,x")))]
  4542. +   "TARGET_FPA"
  4543. +   "fpltod %1,%0")
  4544. + (define_insn ""
  4545. +   [(set (match_operand:DF 0 "general_operand" "=f")
  4546. +     (float:DF (match_operand:SI 1 "general_operand" "dmi")))]
  4547. +   "TARGET_68881"
  4548. +   "f%&move%.l %1,%0")
  4549. + (define_insn "floathisf2"
  4550. +   [(set (match_operand:SF 0 "general_operand" "=f")
  4551. +     (float:SF (match_operand:HI 1 "general_operand" "dmn")))]
  4552. +   "TARGET_68881"
  4553. +   "f%$move%.w %1,%0")
  4554. + (define_insn "floathidf2"
  4555. +   [(set (match_operand:DF 0 "general_operand" "=f")
  4556. +     (float:DF (match_operand:HI 1 "general_operand" "dmn")))]
  4557. +   "TARGET_68881"
  4558. +   "fmove%.w %1,%0")
  4559. + (define_insn "floatqisf2"
  4560. +   [(set (match_operand:SF 0 "general_operand" "=f")
  4561. +     (float:SF (match_operand:QI 1 "general_operand" "dmn")))]
  4562. +   "TARGET_68881"
  4563. +   "fmove%.b %1,%0")
  4564. + (define_insn "floatqidf2"
  4565. +   [(set (match_operand:DF 0 "general_operand" "=f")
  4566. +     (float:DF (match_operand:QI 1 "general_operand" "dmn")))]
  4567. +   "TARGET_68881"
  4568. +   "f%&move%.b %1,%0")
  4569. + ;; New routines to convert floating-point values to integers
  4570. + ;; to be used on the '040.  These should be faster than trapping
  4571. + ;; into the kernel to emulate fintrz.  They should also be faster
  4572. + ;; than calling the subroutines fixsfsi or fixdfsi.
  4573. + (define_insn "fix_truncdfsi2"
  4574. +   [(set (match_operand:SI 0 "general_operand" "=dm")
  4575. +     (fix:SI (fix:DF (match_operand:DF 1 "register_operand" "f"))))
  4576. +    (clobber (match_scratch:SI 2 "=d"))
  4577. +    (clobber (match_scratch:SI 3 "=d"))]
  4578. +   "TARGET_68881 && TARGET_68040"
  4579. +   "*
  4580. + {
  4581. +   CC_STATUS_INIT;
  4582. +   return \"fmovem%.l %!,%2\;moveq %#16,%3\;or%.l %2,%3\;and%.w %#-33,%3\;fmovem%.l %3,%!\;fmove%.l %1,%0\;fmovem%.l %2,%!\";
  4583. + }")
  4584. + (define_insn "fix_truncdfhi2"
  4585. +   [(set (match_operand:HI 0 "general_operand" "=dm")
  4586. +     (fix:HI (fix:DF (match_operand:DF 1 "register_operand" "f"))))
  4587. +    (clobber (match_scratch:SI 2 "=d"))
  4588. +    (clobber (match_scratch:SI 3 "=d"))]
  4589. +   "TARGET_68881 && TARGET_68040"
  4590. +   "*
  4591. + {
  4592. +   CC_STATUS_INIT;
  4593. +   return \"fmovem%.l %!,%2\;moveq %#16,%3\;or%.l %2,%3\;and%.w %#-33,%3\;fmovem%.l %3,%!\;fmove%.w %1,%0\;fmovem%.l %2,%!\";
  4594. + }")
  4595. + (define_insn "fix_truncdfqi2"
  4596. +   [(set (match_operand:QI 0 "general_operand" "=dm")
  4597. +     (fix:QI (fix:DF (match_operand:DF 1 "register_operand" "f"))))
  4598. +    (clobber (match_scratch:SI 2 "=d"))
  4599. +    (clobber (match_scratch:SI 3 "=d"))]
  4600. +   "TARGET_68881 && TARGET_68040"
  4601. +   "*
  4602. + {
  4603. +   CC_STATUS_INIT;
  4604. +   return \"fmovem%.l %!,%2\;moveq %#16,%3\;or%.l %2,%3\;and%.w %#-33,%3\;fmovem%.l %3,%!\;fmove%.b %1,%0\;fmovem%.l %2,%!\";
  4605. + }")
  4606. + ;; Convert a float to a float whose value is an integer.
  4607. + ;; This is the first stage of converting it to an integer type.
  4608. + (define_insn "ftruncdf2"
  4609. +   [(set (match_operand:DF 0 "general_operand" "=f")
  4610. +     (fix:DF (match_operand:DF 1 "general_operand" "fFm")))]
  4611. +   "TARGET_68881 && !TARGET_68040"
  4612. +   "*
  4613. + {
  4614. +   if (FP_REG_P (operands[1]))
  4615. +     return \"fintrz%.x %f1,%0\";
  4616. +   return \"fintrz%.d %f1,%0\";
  4617. + }")
  4618. + (define_insn "ftruncsf2"
  4619. +   [(set (match_operand:SF 0 "general_operand" "=f")
  4620. +     (fix:SF (match_operand:SF 1 "general_operand" "dfFm")))]
  4621. +   "TARGET_68881 && !TARGET_68040"
  4622. +   "*
  4623. + {
  4624. +   if (FP_REG_P (operands[1]))
  4625. +     return \"fintrz%.x %f1,%0\";
  4626. +   return \"fintrz%.s %f1,%0\";
  4627. + }")
  4628. + ;; Convert a float whose value is an integer
  4629. + ;; to an actual integer.  Second stage of converting float to integer type.
  4630. + (define_insn "fixsfqi2"
  4631. +   [(set (match_operand:QI 0 "general_operand" "=dm")
  4632. +     (fix:QI (match_operand:SF 1 "general_operand" "f")))]
  4633. +   "TARGET_68881"
  4634. +   "fmove%.b %1,%0")
  4635. + (define_insn "fixsfhi2"
  4636. +   [(set (match_operand:HI 0 "general_operand" "=dm")
  4637. +     (fix:HI (match_operand:SF 1 "general_operand" "f")))]
  4638. +   "TARGET_68881"
  4639. +   "fmove%.w %1,%0")
  4640. + (define_insn "fixsfsi2"
  4641. +   [(set (match_operand:SI 0 "general_operand" "=dm")
  4642. +     (fix:SI (match_operand:SF 1 "general_operand" "f")))]
  4643. +   "TARGET_68881"
  4644. +   "fmove%.l %1,%0")
  4645. + (define_insn "fixdfqi2"
  4646. +   [(set (match_operand:QI 0 "general_operand" "=dm")
  4647. +     (fix:QI (match_operand:DF 1 "general_operand" "f")))]
  4648. +   "TARGET_68881"
  4649. +   "fmove%.b %1,%0")
  4650. + (define_insn "fixdfhi2"
  4651. +   [(set (match_operand:HI 0 "general_operand" "=dm")
  4652. +     (fix:HI (match_operand:DF 1 "general_operand" "f")))]
  4653. +   "TARGET_68881"
  4654. +   "fmove%.w %1,%0")
  4655. + (define_insn "fixdfsi2"
  4656. +   [(set (match_operand:SI 0 "general_operand" "=dm")
  4657. +     (fix:SI (match_operand:DF 1 "general_operand" "f")))]
  4658. +   "TARGET_68881"
  4659. +   "fmove%.l %1,%0")
  4660. + ;; Convert a float to an integer.
  4661. + ;; On the Sun FPA, this is done in one step.
  4662. + (define_insn ""
  4663. +   [(set (match_operand:SI 0 "general_operand" "=x,y")
  4664. +     (fix:SI (fix:SF (match_operand:SF 1 "general_operand" "xH,rmF"))))]
  4665. +   "TARGET_FPA"
  4666. +   "fpstol %w1,%0")
  4667. + (define_insn ""
  4668. +   [(set (match_operand:SI 0 "general_operand" "=x,y")
  4669. +     (fix:SI (fix:DF (match_operand:DF 1 "general_operand" "xH,rmF"))))]
  4670. +   "TARGET_FPA"
  4671. +   "fpdtol %y1,%0")
  4672. + ;; add instructions
  4673. + ;; Note that the middle two alternatives are near-duplicates
  4674. + ;; in order to handle insns generated by reload.
  4675. + ;; This is needed since they are not themselves reloaded,
  4676. + ;; so commutativity won't apply to them.
  4677. + (define_insn "addsi3"
  4678. +   [(set (match_operand:SI 0 "general_operand" "=m,?a,?a,r")
  4679. +     (plus:SI (match_operand:SI 1 "general_operand" "%0,a,rJK,0")
  4680. +          (match_operand:SI 2 "general_operand" "dIKLs,rJK,a,mrIKLs")))]
  4681. +   ""
  4682. +   "*
  4683. + {
  4684. +   if (! operands_match_p (operands[0], operands[1]))
  4685. +     {
  4686. +       if (!ADDRESS_REG_P (operands[1]))
  4687. +     {
  4688. +       rtx tmp = operands[1];
  4689. +       operands[1] = operands[2];
  4690. +       operands[2] = tmp;
  4691. +     }
  4692. +       /* These insns can result from reloads to access
  4693. +      stack slots over 64k from the frame pointer.  */
  4694. +       if (((GET_CODE (operands[2]) == CONST_INT
  4695. +        && INTVAL (operands[2]) + 0x8000 >= (unsigned) 0x10000))
  4696. +       || (flag_pic == 4 && operands[1] == pic_offset_table_rtx))
  4697. +         return \"move%.l %2,%0\;add%.l %1,%0\";
  4698. + #ifdef SGS
  4699. +       if (GET_CODE (operands[2]) == REG)
  4700. +     return \"lea 0(%1,%2.l),%0\";
  4701. +       else
  4702. +     return \"lea %c2(%1),%0\";
  4703. + #else /* not SGS */
  4704. + #ifdef MOTOROLA
  4705. +       if (GET_CODE (operands[2]) == REG)
  4706. +     return \"lea (%1,%2.l),%0\";
  4707. +       else
  4708. +     return \"lea (%c2,%1),%0\";
  4709. + #else /* not MOTOROLA (MIT syntax) */
  4710. +       if (GET_CODE (operands[2]) == REG)
  4711. +     return \"lea %1@(0,%2:l),%0\";
  4712. +       else
  4713. +     return \"lea %1@(%c2),%0\";
  4714. + #endif /* not MOTOROLA */
  4715. + #endif /* not SGS */
  4716. +     }
  4717. +   if (GET_CODE (operands[2]) == CONST_INT)
  4718. +     {
  4719. + #ifndef NO_ADDSUB_Q
  4720. +       if (INTVAL (operands[2]) > 0
  4721. +       && INTVAL (operands[2]) <= 8)
  4722. +     return (ADDRESS_REG_P (operands[0])
  4723. +         ? \"addq%.w %2,%0\"
  4724. +         : \"addq%.l %2,%0\");
  4725. +       if (INTVAL (operands[2]) < 0
  4726. +       && INTVAL (operands[2]) >= -8)
  4727. +         {
  4728. +       operands[2] = gen_rtx (CONST_INT, VOIDmode,
  4729. +                      - INTVAL (operands[2]));
  4730. +       return (ADDRESS_REG_P (operands[0])
  4731. +           ? \"subq%.w %2,%0\"
  4732. +           : \"subq%.l %2,%0\");
  4733. +     }
  4734. +       /* On everything except the 68000 it is faster to use two
  4735. +      addqw instructions to add a small integer (8 < N <= 16)
  4736. +      to an address register.  Likewise for subqw.*/
  4737. +       if (INTVAL (operands[2]) > 8
  4738. +       && INTVAL (operands[2]) <= 16
  4739. +       && ADDRESS_REG_P (operands[0])
  4740. +       && TARGET_68020) 
  4741. +     {
  4742. +       operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 8);
  4743. +       return \"addq%.w %#8,%0\;addq%.w %2,%0\";
  4744. +     }
  4745. +       if (INTVAL (operands[2]) < -8
  4746. +       && INTVAL (operands[2]) >= -16
  4747. +       && ADDRESS_REG_P (operands[0])
  4748. +       && TARGET_68020) 
  4749. +     {
  4750. +       operands[2] = gen_rtx (CONST_INT, VOIDmode, 
  4751. +                   - INTVAL (operands[2]) - 8);
  4752. +       return \"subq%.w %#8,%0\;subq%.w %2,%0\";
  4753. +     }
  4754. + #endif
  4755. +       if (ADDRESS_REG_P (operands[0])
  4756. +       && INTVAL (operands[2]) >= -0x8000
  4757. +       && INTVAL (operands[2]) < 0x8000)
  4758. +     return \"add%.w %2,%0\";
  4759. +     }
  4760. +   return \"add%.l %2,%0\";
  4761. + }")
  4762. + (define_insn ""
  4763. +   [(set (match_operand:SI 0 "general_operand" "=a")
  4764. +     (plus:SI (match_operand:SI 1 "general_operand" "0")
  4765. +          (sign_extend:SI
  4766. +           (match_operand:HI 2 "nonimmediate_operand" "rm"))))]
  4767. +   ""
  4768. +   "add%.w %2,%0")
  4769. + (define_insn "addhi3"
  4770. +   [(set (match_operand:HI 0 "general_operand" "=m,r")
  4771. +     (plus:HI (match_operand:HI 1 "general_operand" "%0,0")
  4772. +          (match_operand:HI 2 "general_operand" "dn,rmn")))]
  4773. +   ""
  4774. +   "*
  4775. + {
  4776. + #ifndef NO_ADDSUB_Q
  4777. +   if (GET_CODE (operands[2]) == CONST_INT)
  4778. +     {
  4779. +       /* If the constant would be a negative number when interpreted as
  4780. +      HImode, make it negative.  This is usually, but not always, done
  4781. +      elsewhere in the compiler.  First check for constants out of range,
  4782. +      which could confuse us.  */
  4783. +       if (INTVAL (operands[2]) >= 32768)
  4784. +     operands[2] = gen_rtx (CONST_INT, VOIDmode,
  4785. +                    INTVAL (operands[2]) - 65536);
  4786. +       if (INTVAL (operands[2]) > 0
  4787. +       && INTVAL (operands[2]) <= 8)
  4788. +     return \"addq%.w %2,%0\";
  4789. +       if (INTVAL (operands[2]) < 0
  4790. +       && INTVAL (operands[2]) >= -8)
  4791. +     {
  4792. +       operands[2] = gen_rtx (CONST_INT, VOIDmode,
  4793. +                      - INTVAL (operands[2]));
  4794. +       return \"subq%.w %2,%0\";
  4795. +     }
  4796. +       /* On everything except the 68000 it is faster to use two
  4797. +      addqw instructions to add a small integer (8 < N <= 16)
  4798. +      to an address register.  Likewise for subqw. */
  4799. +       if (INTVAL (operands[2]) > 8
  4800. +       && INTVAL (operands[2]) <= 16
  4801. +       && ADDRESS_REG_P (operands[0])
  4802. +       && TARGET_68020) 
  4803. +     {
  4804. +       operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 8);
  4805. +       return \"addq%.w %#8,%0\;addq%.w %2,%0\";
  4806. +     }
  4807. +       if (INTVAL (operands[2]) < -8
  4808. +       && INTVAL (operands[2]) >= -16
  4809. +       && ADDRESS_REG_P (operands[0])
  4810. +       && TARGET_68020) 
  4811. +     {
  4812. +       operands[2] = gen_rtx (CONST_INT, VOIDmode, 
  4813. +                  - INTVAL (operands[2]) - 8);
  4814. +       return \"subq%.w %#8,%0\;subq%.w %2,%0\";
  4815. +     }
  4816. +     }
  4817. + #endif
  4818. +   return \"add%.w %2,%0\";
  4819. + }")
  4820. + ;; These insns must use MATCH_DUP instead of the more expected
  4821. + ;; use of a matching constraint because the "output" here is also
  4822. + ;; an input, so you can't use the matching constraint.  That also means
  4823. + ;; that you can't use the "%", so you need patterns with the matched
  4824. + ;; operand in both positions.
  4825. + (define_insn ""
  4826. +   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d"))
  4827. +     (plus:HI (match_dup 0)
  4828. +          (match_operand:HI 1 "general_operand" "dn,rmn")))]
  4829. +   ""
  4830. +   "*
  4831. + {
  4832. + #ifndef NO_ADDSUB_Q
  4833. +   if (GET_CODE (operands[1]) == CONST_INT)
  4834. +     {
  4835. +       /* If the constant would be a negative number when interpreted as
  4836. +      HImode, make it negative.  This is usually, but not always, done
  4837. +      elsewhere in the compiler.  First check for constants out of range,
  4838. +      which could confuse us.  */
  4839. +       if (INTVAL (operands[1]) >= 32768)
  4840. +     operands[1] = gen_rtx (CONST_INT, VOIDmode,
  4841. +                    INTVAL (operands[1]) - 65536);
  4842. +       if (INTVAL (operands[1]) > 0
  4843. +       && INTVAL (operands[1]) <= 8)
  4844. +     return \"addq%.w %1,%0\";
  4845. +       if (INTVAL (operands[1]) < 0
  4846. +       && INTVAL (operands[1]) >= -8)
  4847. +     {
  4848. +       operands[1] = gen_rtx (CONST_INT, VOIDmode,
  4849. +                      - INTVAL (operands[1]));
  4850. +       return \"subq%.w %1,%0\";
  4851. +     }
  4852. +       /* On everything except the 68000 it is faster to use two
  4853. +      addqw instructions to add a small integer (8 < N <= 16)
  4854. +      to an address register.  Likewise for subqw. */
  4855. +       if (INTVAL (operands[1]) > 8
  4856. +       && INTVAL (operands[1]) <= 16
  4857. +       && ADDRESS_REG_P (operands[0])
  4858. +       && TARGET_68020) 
  4859. +     {
  4860. +       operands[1] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) - 8);
  4861. +       return \"addq%.w %#8,%0\;addq%.w %1,%0\";
  4862. +     }
  4863. +       if (INTVAL (operands[1]) < -8
  4864. +       && INTVAL (operands[1]) >= -16
  4865. +       && ADDRESS_REG_P (operands[0])
  4866. +       && TARGET_68020) 
  4867. +     {
  4868. +       operands[1] = gen_rtx (CONST_INT, VOIDmode, 
  4869. +                  - INTVAL (operands[1]) - 8);
  4870. +       return \"subq%.w %#8,%0\;subq%.w %1,%0\";
  4871. +     }
  4872. +     }
  4873. + #endif
  4874. +   return \"add%.w %1,%0\";
  4875. + }")
  4876. + (define_insn ""
  4877. +   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d"))
  4878. +     (plus:HI (match_operand:HI 1 "general_operand" "dn,rmn")
  4879. +          (match_dup 0)))]
  4880. +   ""
  4881. +   "*
  4882. + {
  4883. + #ifndef NO_ADDSUB_Q
  4884. +   if (GET_CODE (operands[1]) == CONST_INT)
  4885. +     {
  4886. +       /* If the constant would be a negative number when interpreted as
  4887. +      HImode, make it negative.  This is usually, but not always, done
  4888. +      elsewhere in the compiler.  First check for constants out of range,
  4889. +      which could confuse us.  */
  4890. +       if (INTVAL (operands[1]) >= 32768)
  4891. +     operands[1] = gen_rtx (CONST_INT, VOIDmode,
  4892. +                    INTVAL (operands[1]) - 65536);
  4893. +       if (INTVAL (operands[1]) > 0
  4894. +       && INTVAL (operands[1]) <= 8)
  4895. +     return \"addq%.w %1,%0\";
  4896. +       if (INTVAL (operands[1]) < 0
  4897. +       && INTVAL (operands[1]) >= -8)
  4898. +     {
  4899. +       operands[1] = gen_rtx (CONST_INT, VOIDmode,
  4900. +                      - INTVAL (operands[1]));
  4901. +       return \"subq%.w %1,%0\";
  4902. +     }
  4903. +       /* On everything except the 68000 it is faster to use two
  4904. +      addqw instructions to add a small integer (8 < N <= 16)
  4905. +      to an address register.  Likewise for subqw. */
  4906. +       if (INTVAL (operands[1]) > 8
  4907. +       && INTVAL (operands[1]) <= 16
  4908. +       && ADDRESS_REG_P (operands[0])
  4909. +       && TARGET_68020) 
  4910. +     {
  4911. +       operands[1] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) - 8);
  4912. +       return \"addq%.w %#8,%0\;addq%.w %1,%0\";
  4913. +     }
  4914. +       if (INTVAL (operands[1]) < -8
  4915. +       && INTVAL (operands[1]) >= -16
  4916. +       && ADDRESS_REG_P (operands[0])
  4917. +       && TARGET_68020) 
  4918. +     {
  4919. +       operands[1] = gen_rtx (CONST_INT, VOIDmode, 
  4920. +                  - INTVAL (operands[1]) - 8);
  4921. +       return \"subq%.w %#8,%0\;subq%.w %1,%0\";
  4922. +     }
  4923. +     }
  4924. + #endif
  4925. +   return \"add%.w %1,%0\";
  4926. + }")
  4927. + (define_insn "addqi3"
  4928. +   [(set (match_operand:QI 0 "general_operand" "=m,d")
  4929. +     (plus:QI (match_operand:QI 1 "general_operand" "%0,0")
  4930. +          (match_operand:QI 2 "general_operand" "dn,dmn")))]
  4931. +   ""
  4932. +   "*
  4933. + {
  4934. + #ifndef NO_ADDSUB_Q
  4935. +   if (GET_CODE (operands[2]) == CONST_INT)
  4936. +     {
  4937. +       if (INTVAL (operands[2]) >= 128)
  4938. +     operands[2] = gen_rtx (CONST_INT, VOIDmode,
  4939. +                    INTVAL (operands[2]) - 256);
  4940. +       if (INTVAL (operands[2]) > 0
  4941. +       && INTVAL (operands[2]) <= 8)
  4942. +     return \"addq%.b %2,%0\";
  4943. +       if (INTVAL (operands[2]) < 0 && INTVAL (operands[2]) >= -8)
  4944. +        {
  4945. +      operands[2] = gen_rtx (CONST_INT, VOIDmode, - INTVAL (operands[2]));
  4946. +      return \"subq%.b %2,%0\";
  4947. +        }
  4948. +     }
  4949. + #endif
  4950. +   return \"add%.b %2,%0\";
  4951. + }")
  4952. + (define_insn ""
  4953. +   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d"))
  4954. +     (plus:QI (match_dup 0)
  4955. +          (match_operand:QI 1 "general_operand" "dn,dmn")))]
  4956. +   ""
  4957. +   "*
  4958. + {
  4959. + #ifndef NO_ADDSUB_Q
  4960. +   if (GET_CODE (operands[1]) == CONST_INT)
  4961. +     {
  4962. +       if (INTVAL (operands[1]) >= 128)
  4963. +     operands[1] = gen_rtx (CONST_INT, VOIDmode,
  4964. +                    INTVAL (operands[1]) - 256);
  4965. +       if (INTVAL (operands[1]) > 0
  4966. +       && INTVAL (operands[1]) <= 8)
  4967. +     return \"addq%.b %1,%0\";
  4968. +       if (INTVAL (operands[1]) < 0 && INTVAL (operands[1]) >= -8)
  4969. +        {
  4970. +      operands[1] = gen_rtx (CONST_INT, VOIDmode, - INTVAL (operands[1]));
  4971. +      return \"subq%.b %1,%0\";
  4972. +        }
  4973. +     }
  4974. + #endif
  4975. +   return \"add%.b %1,%0\";
  4976. + }")
  4977. + (define_insn ""
  4978. +   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d"))
  4979. +     (plus:QI (match_operand:QI 1 "general_operand" "dn,dmn")
  4980. +          (match_dup 0)))]
  4981. +   ""
  4982. +   "*
  4983. + {
  4984. + #ifndef NO_ADDSUB_Q
  4985. +   if (GET_CODE (operands[1]) == CONST_INT)
  4986. +     {
  4987. +       if (INTVAL (operands[1]) >= 128)
  4988. +     operands[1] = gen_rtx (CONST_INT, VOIDmode,
  4989. +                    INTVAL (operands[1]) - 256);
  4990. +       if (INTVAL (operands[1]) > 0
  4991. +       && INTVAL (operands[1]) <= 8)
  4992. +     return \"addq%.b %1,%0\";
  4993. +       if (INTVAL (operands[1]) < 0 && INTVAL (operands[1]) >= -8)
  4994. +        {
  4995. +      operands[1] = gen_rtx (CONST_INT, VOIDmode, - INTVAL (operands[1]));
  4996. +      return \"subq%.b %1,%0\";
  4997. +        }
  4998. +     }
  4999. + #endif
  5000. +   return \"add%.b %1,%0\";
  5001. + }")
  5002. + (define_expand "adddf3"
  5003. +   [(set (match_operand:DF 0 "general_operand" "")
  5004. +     (plus:DF (match_operand:DF 1 "general_operand" "")
  5005. +          (match_operand:DF 2 "general_operand" "")))]
  5006. +   "TARGET_68881 || TARGET_FPA"
  5007. +   "")
  5008. + (define_insn ""
  5009. +   [(set (match_operand:DF 0 "general_operand" "=x,y")
  5010. +     (plus:DF (match_operand:DF 1 "general_operand" "%xH,y")
  5011. +          (match_operand:DF 2 "general_operand" "xH,dmF")))]
  5012. +   "TARGET_FPA"
  5013. +   "*
  5014. + {
  5015. +   if (rtx_equal_p (operands[0], operands[1]))
  5016. +     return \"fpadd%.d %y2,%0\";
  5017. +   if (rtx_equal_p (operands[0], operands[2]))
  5018. +     return \"fpadd%.d %y1,%0\";
  5019. +   if (which_alternative == 0)
  5020. +     return \"fpadd3%.d %w2,%w1,%0\";
  5021. +   return \"fpadd3%.d %x2,%x1,%0\";
  5022. + }")
  5023. + (define_insn ""
  5024. +   [(set (match_operand:DF 0 "general_operand" "=f")
  5025. +     (plus:DF (match_operand:DF 1 "general_operand" "%0")
  5026. +          (match_operand:DF 2 "general_operand" "fmG")))]
  5027. +   "TARGET_68881"
  5028. +   "*
  5029. + {
  5030. +   if (REG_P (operands[2]))
  5031. +     return \"f%&add%.x %2,%0\";
  5032. +   return \"f%&add%.d %f2,%0\";
  5033. + }")
  5034. + (define_expand "addsf3"
  5035. +   [(set (match_operand:SF 0 "general_operand" "")
  5036. +     (plus:SF (match_operand:SF 1 "general_operand" "")
  5037. +          (match_operand:SF 2 "general_operand" "")))]
  5038. +   "TARGET_68881 || TARGET_FPA"
  5039. +   "")
  5040. + (define_insn ""
  5041. +   [(set (match_operand:SF 0 "general_operand" "=x,y")
  5042. +     (plus:SF (match_operand:SF 1 "general_operand" "%xH,y")
  5043. +          (match_operand:SF 2 "general_operand" "xH,rmF")))]
  5044. +   "TARGET_FPA"
  5045. +   "*
  5046. + {
  5047. +   if (rtx_equal_p (operands[0], operands[1]))
  5048. +     return \"fpadd%.s %w2,%0\";
  5049. +   if (rtx_equal_p (operands[0], operands[2]))
  5050. +     return \"fpadd%.s %w1,%0\";
  5051. +   if (which_alternative == 0)
  5052. +     return \"fpadd3%.s %w2,%w1,%0\";
  5053. +   return \"fpadd3%.s %2,%1,%0\";
  5054. + }")
  5055. + (define_insn ""
  5056. +   [(set (match_operand:SF 0 "general_operand" "=f")
  5057. +     (plus:SF (match_operand:SF 1 "general_operand" "%0")
  5058. +          (match_operand:SF 2 "general_operand" "fdmF")))]
  5059. +   "TARGET_68881"
  5060. +   "*
  5061. + {
  5062. +   if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
  5063. +     return \"f%$add%.x %2,%0\";
  5064. +   return \"f%$add%.s %f2,%0\";
  5065. + }")
  5066. + ;; subtract instructions
  5067. + (define_insn "subsi3"
  5068. +   [(set (match_operand:SI 0 "general_operand" "=m,r,!a,?d")
  5069. +     (minus:SI (match_operand:SI 1 "general_operand" "0,0,a,mrIKs")
  5070. +           (match_operand:SI 2 "general_operand" "dIKs,mrIKs,J,0")))]
  5071. +   ""
  5072. +   "*
  5073. + {
  5074. +   if (! operands_match_p (operands[0], operands[1]))
  5075. +     {
  5076. +       if (operands_match_p (operands[0], operands[2]))
  5077. +     {
  5078. + #ifndef NO_ADDSUB_Q
  5079. +       if (GET_CODE (operands[1]) == CONST_INT)
  5080. +         {
  5081. +           if (INTVAL (operands[1]) > 0
  5082. +           && INTVAL (operands[1]) <= 8)
  5083. +         return \"subq%.l %1,%0\;neg%.l %0\";
  5084. +         }
  5085. + #endif
  5086. +       return \"sub%.l %1,%0\;neg%.l %0\";
  5087. +     }
  5088. +       /* This case is matched by J, but negating -0x8000
  5089. +          in an lea would give an invalid displacement.
  5090. +      So do this specially.  */
  5091. +       if (INTVAL (operands[2]) == -0x8000)
  5092. +     return \"move%.l %1,%0\;sub%.l %2,%0\";
  5093. + #ifdef SGS
  5094. +       return \"lea %n2(%1),%0\";
  5095. + #else
  5096. + #ifdef MOTOROLA
  5097. +       return \"lea (%n2,%1),%0\";
  5098. + #else /* not MOTOROLA (MIT syntax) */
  5099. +       return \"lea %1@(%n2),%0\";
  5100. + #endif /* not MOTOROLA */
  5101. + #endif /* not SGS */
  5102. +     }
  5103. +   if (GET_CODE (operands[2]) == CONST_INT)
  5104. +     {
  5105. + #ifndef NO_ADDSUB_Q
  5106. +       if (INTVAL (operands[2]) > 0
  5107. +       && INTVAL (operands[2]) <= 8)
  5108. +     return \"subq%.l %2,%0\";
  5109. +       /* Using two subqw for 8 < N <= 16 being subtracted from an
  5110. +      address register is faster on all but 68000 */
  5111. +       if (INTVAL (operands[2]) > 8
  5112. +       && INTVAL (operands[2]) <= 16
  5113. +       && ADDRESS_REG_P (operands[0])
  5114. +       && TARGET_68020)
  5115. +     {
  5116. +       operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 8);
  5117. +       return \"subq%.w %#8,%0\;subq%.w %2,%0\";
  5118. +     }
  5119. + #endif
  5120. +       if (ADDRESS_REG_P (operands[0])
  5121. +       && INTVAL (operands[2]) >= -0x8000
  5122. +       && INTVAL (operands[2]) < 0x8000)
  5123. +     return \"sub%.w %2,%0\";
  5124. +     }
  5125. +   return \"sub%.l %2,%0\";
  5126. + }")
  5127. + (define_insn ""
  5128. +   [(set (match_operand:SI 0 "general_operand" "=a")
  5129. +     (minus:SI (match_operand:SI 1 "general_operand" "0")
  5130. +           (sign_extend:SI
  5131. +            (match_operand:HI 2 "nonimmediate_operand" "rm"))))]
  5132. +   ""
  5133. +   "sub%.w %2,%0")
  5134. + (define_insn "subhi3"
  5135. +   [(set (match_operand:HI 0 "general_operand" "=m,r")
  5136. +     (minus:HI (match_operand:HI 1 "general_operand" "0,0")
  5137. +           (match_operand:HI 2 "general_operand" "dn,rmn")))]
  5138. +   ""
  5139. +   "sub%.w %2,%0")
  5140. + (define_insn ""
  5141. +   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d"))
  5142. +     (minus:HI (match_dup 0)
  5143. +           (match_operand:HI 1 "general_operand" "dn,rmn")))]
  5144. +   ""
  5145. +   "sub%.w %1,%0")
  5146. + (define_insn "subqi3"
  5147. +   [(set (match_operand:QI 0 "general_operand" "=m,d")
  5148. +     (minus:QI (match_operand:QI 1 "general_operand" "0,0")
  5149. +           (match_operand:QI 2 "general_operand" "dn,dmn")))]
  5150. +   ""
  5151. +   "sub%.b %2,%0")
  5152. + (define_insn ""
  5153. +   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d"))
  5154. +     (minus:QI (match_dup 0)
  5155. +           (match_operand:QI 1 "general_operand" "dn,dmn")))]
  5156. +   ""
  5157. +   "sub%.b %1,%0")
  5158. + (define_expand "subdf3"
  5159. +   [(set (match_operand:DF 0 "general_operand" "")
  5160. +     (minus:DF (match_operand:DF 1 "general_operand" "")
  5161. +           (match_operand:DF 2 "general_operand" "")))]
  5162. +   "TARGET_68881 || TARGET_FPA"
  5163. +   "")
  5164. + (define_insn ""
  5165. +   [(set (match_operand:DF 0 "general_operand" "=x,y,y")
  5166. +     (minus:DF (match_operand:DF 1 "general_operand" "xH,y,dmF")
  5167. +           (match_operand:DF 2 "general_operand" "xH,dmF,0")))]
  5168. +   "TARGET_FPA"
  5169. +   "*
  5170. + {
  5171. +   if (rtx_equal_p (operands[0], operands[2]))
  5172. +     return \"fprsub%.d %y1,%0\";
  5173. +   if (rtx_equal_p (operands[0], operands[1]))
  5174. +     return \"fpsub%.d %y2,%0\";
  5175. +   if (which_alternative == 0)
  5176. +     return \"fpsub3%.d %w2,%w1,%0\";
  5177. +   return \"fpsub3%.d %x2,%x1,%0\";
  5178. + }")
  5179. + (define_insn ""
  5180. +   [(set (match_operand:DF 0 "general_operand" "=f")
  5181. +     (minus:DF (match_operand:DF 1 "general_operand" "0")
  5182. +           (match_operand:DF 2 "general_operand" "fmG")))]
  5183. +   "TARGET_68881"
  5184. +   "*
  5185. + {
  5186. +   if (REG_P (operands[2]))
  5187. +     return \"f%&sub%.x %2,%0\";
  5188. +   return \"f%&sub%.d %f2,%0\";
  5189. + }")
  5190. + (define_expand "subsf3"
  5191. +   [(set (match_operand:SF 0 "general_operand" "")
  5192. +     (minus:SF (match_operand:SF 1 "general_operand" "")
  5193. +           (match_operand:SF 2 "general_operand" "")))]
  5194. +   "TARGET_68881 || TARGET_FPA"
  5195. +   "")
  5196. + (define_insn ""
  5197. +   [(set (match_operand:SF 0 "general_operand" "=x,y,y")
  5198. +     (minus:SF (match_operand:SF 1 "general_operand" "xH,y,rmF")
  5199. +           (match_operand:SF 2 "general_operand" "xH,rmF,0")))]
  5200. +   "TARGET_FPA"
  5201. +   "*
  5202. + {
  5203. +   if (rtx_equal_p (operands[0], operands[2]))
  5204. +     return \"fprsub%.s %w1,%0\";
  5205. +   if (rtx_equal_p (operands[0], operands[1]))
  5206. +     return \"fpsub%.s %w2,%0\";
  5207. +   if (which_alternative == 0)
  5208. +     return \"fpsub3%.s %w2,%w1,%0\";
  5209. +   return \"fpsub3%.s %2,%1,%0\";
  5210. + }")
  5211. + (define_insn ""
  5212. +   [(set (match_operand:SF 0 "general_operand" "=f")
  5213. +     (minus:SF (match_operand:SF 1 "general_operand" "0")
  5214. +           (match_operand:SF 2 "general_operand" "fdmF")))]
  5215. +   "TARGET_68881"
  5216. +   "*
  5217. + {
  5218. +   if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
  5219. +     return \"f%$sub%.x %2,%0\";
  5220. +   return \"f%$sub%.s %f2,%0\";
  5221. + }")
  5222. + ;; multiply instructions
  5223. + (define_insn "mulhi3"
  5224. +   [(set (match_operand:HI 0 "general_operand" "=d")
  5225. +     (mult:HI (match_operand:HI 1 "general_operand" "%0")
  5226. +          (match_operand:HI 2 "general_operand" "dmn")))]
  5227. +   ""
  5228. +   "*
  5229. + {
  5230. + #if defined(MOTOROLA) && !defined(CRDS)
  5231. +   return \"muls%.w %2,%0\";
  5232. + #else
  5233. +   return \"muls %2,%0\";
  5234. + #endif
  5235. + }")
  5236. + (define_insn "mulhisi3"
  5237. +   [(set (match_operand:SI 0 "general_operand" "=d")
  5238. +     (mult:SI (sign_extend:SI
  5239. +           (match_operand:HI 1 "nonimmediate_operand" "%0"))
  5240. +          (sign_extend:SI
  5241. +           (match_operand:HI 2 "nonimmediate_operand" "dm"))))]
  5242. +   ""
  5243. +   "*
  5244. + {
  5245. + #if defined(MOTOROLA) && !defined(CRDS)
  5246. +   return \"muls%.w %2,%0\";
  5247. + #else
  5248. +   return \"muls %2,%0\";
  5249. + #endif
  5250. + }")
  5251. + (define_insn ""
  5252. +   [(set (match_operand:SI 0 "general_operand" "=d")
  5253. +     (mult:SI (sign_extend:SI
  5254. +           (match_operand:HI 1 "nonimmediate_operand" "%0"))
  5255. +          (match_operand:SI 2 "const_int_operand" "n")))]
  5256. +   "INTVAL (operands[2]) >= -0x8000 && INTVAL (operands[2]) <= 0x7fff"
  5257. +   "*
  5258. + {
  5259. + #if defined(MOTOROLA) && !defined(CRDS)
  5260. +   return \"muls%.w %2,%0\";
  5261. + #else
  5262. +   return \"muls %2,%0\";
  5263. + #endif
  5264. + }")
  5265. + (define_insn "mulsi3"
  5266. +   [(set (match_operand:SI 0 "general_operand" "=d")
  5267. +     (mult:SI (match_operand:SI 1 "general_operand" "%0")
  5268. +          (match_operand:SI 2 "general_operand" "dmsK")))]
  5269. +   "TARGET_68020"
  5270. +   "muls%.l %2,%0")
  5271. + (define_insn "umulhisi3"
  5272. +   [(set (match_operand:SI 0 "general_operand" "=d")
  5273. +     (mult:SI (zero_extend:SI
  5274. +           (match_operand:HI 1 "nonimmediate_operand" "%0"))
  5275. +          (zero_extend:SI
  5276. +           (match_operand:HI 2 "nonimmediate_operand" "dm"))))]
  5277. +   ""
  5278. +   "*
  5279. + {
  5280. + #if defined(MOTOROLA) && !defined(CRDS)
  5281. +   return \"mulu%.w %2,%0\";
  5282. + #else
  5283. +   return \"mulu %2,%0\";
  5284. + #endif
  5285. + }")
  5286. + (define_insn ""
  5287. +   [(set (match_operand:SI 0 "general_operand" "=d")
  5288. +     (mult:SI (zero_extend:SI
  5289. +           (match_operand:HI 1 "nonimmediate_operand" "%0"))
  5290. +          (match_operand:SI 2 "const_int_operand" "n")))]
  5291. +   "INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) <= 0xffff"
  5292. +   "*
  5293. + {
  5294. + #if defined(MOTOROLA) && !defined(CRDS)
  5295. +   return \"mulu%.w %2,%0\";
  5296. + #else
  5297. +   return \"mulu %2,%0\";
  5298. + #endif
  5299. + }")
  5300. + ;; We need a separate DEFINE_EXPAND for u?mulsidi3 to be able to use the
  5301. + ;; proper matching constraint.  This is because the matching is between
  5302. + ;; the high-numbered word of the DImode operand[0] and operand[1].
  5303. + (define_expand "umulsidi3"
  5304. +   [(parallel
  5305. +     [(set (subreg:SI (match_operand:DI 0 "register_operand" "") 1)
  5306. +       (mult:SI (match_operand:SI 1 "register_operand" "")
  5307. +            (match_operand:SI 2 "nonimmediate_operand" "")))
  5308. +      (set (subreg:SI (match_dup 0) 0)
  5309. +       (truncate:SI (lshiftrt:DI (mult:DI (zero_extend:DI (match_dup 1))
  5310. +                          (zero_extend:DI (match_dup 2)))
  5311. +                     (const_int 32))))])]
  5312. +   "TARGET_68020"
  5313. +   "")
  5314. + (define_insn ""
  5315. +   [(set (match_operand:SI 0 "register_operand" "=d")
  5316. +     (mult:SI (match_operand:SI 1 "register_operand" "%0")
  5317. +           (match_operand:SI 2 "nonimmediate_operand" "dm")))
  5318. +    (set (match_operand:SI 3 "register_operand" "=d")
  5319. +     (truncate:SI (lshiftrt:DI (mult:DI (zero_extend:DI (match_dup 1))
  5320. +                        (zero_extend:DI (match_dup 2)))
  5321. +                   (const_int 32))))]
  5322. +   "TARGET_68020"
  5323. +   "mulu%.l %2,%3:%0")
  5324. + ; Match immediate case.  For 2.4 only match things < 2^31.
  5325. + ; It's tricky with larger values in these patterns since we need to match
  5326. + ; values between the two parallel multiplies, between a CONST_DOUBLE and
  5327. + ; a CONST_INT.
  5328. + (define_insn ""
  5329. +   [(set (match_operand:SI 0 "register_operand" "=d")
  5330. +     (mult:SI (match_operand:SI 1 "register_operand" "%0")
  5331. +          (match_operand:SI 2 "const_int_operand" "n")))
  5332. +    (set (match_operand:SI 3 "register_operand" "=d")
  5333. +     (truncate:SI (lshiftrt:DI (mult:DI (zero_extend:DI (match_dup 1))
  5334. +                        (match_dup 2))
  5335. +                   (const_int 32))))]
  5336. +   "TARGET_68020
  5337. +    && (unsigned) INTVAL (operands[2]) <= 0x7fffffff"
  5338. +   "mulu%.l %2,%3:%0")
  5339. + (define_expand "mulsidi3"
  5340. +   [(parallel
  5341. +     [(set (subreg:SI (match_operand:DI 0 "register_operand" "") 1)
  5342. +       (mult:SI (match_operand:SI 1 "register_operand" "")
  5343. +            (match_operand:SI 2 "nonimmediate_operand" "")))
  5344. +      (set (subreg:SI (match_dup 0) 0)
  5345. +       (truncate:SI (lshiftrt:DI (mult:DI (sign_extend:DI (match_dup 1))
  5346. +                          (sign_extend:DI (match_dup 2)))
  5347. +                     (const_int 32))))])]
  5348. +   "TARGET_68020"
  5349. +   "")
  5350. + (define_insn ""
  5351. +   [(set (match_operand:SI 0 "register_operand" "=d")
  5352. +     (mult:SI (match_operand:SI 1 "register_operand" "%0")
  5353. +          (match_operand:SI 2 "nonimmediate_operand" "dm")))
  5354. +    (set (match_operand:SI 3 "register_operand" "=d")
  5355. +     (truncate:SI (lshiftrt:DI (mult:DI (sign_extend:DI (match_dup 1))
  5356. +                        (sign_extend:DI (match_dup 2)))
  5357. +                   (const_int 32))))]
  5358. +   "TARGET_68020"
  5359. +   "muls%.l %2,%3:%0")
  5360. + (define_insn ""
  5361. +   [(set (match_operand:SI 0 "register_operand" "=d")
  5362. +     (mult:SI (match_operand:SI 1 "register_operand" "%0")
  5363. +          (match_operand:SI 2 "const_int_operand" "n")))
  5364. +    (set (match_operand:SI 3 "register_operand" "=d")
  5365. +     (truncate:SI (lshiftrt:DI (mult:DI (sign_extend:DI (match_dup 1))
  5366. +                        (match_dup 2))
  5367. +                   (const_int 32))))]
  5368. +   "TARGET_68020
  5369. +    /* This test is a noop on 32 bit machines,
  5370. +       but important for a cross-compiler hosted on 64-bit machines.  */
  5371. +    && INTVAL (operands[2]) <= 0x7fffffff
  5372. +    && INTVAL (operands[2]) >= -0x80000000"
  5373. +   "muls%.l %2,%3:%0")
  5374. + (define_expand "muldf3"
  5375. +   [(set (match_operand:DF 0 "general_operand" "")
  5376. +     (mult:DF (match_operand:DF 1 "general_operand" "")
  5377. +          (match_operand:DF 2 "general_operand" "")))]
  5378. +   "TARGET_68881 || TARGET_FPA"
  5379. +   "")
  5380. + (define_insn ""
  5381. +   [(set (match_operand:DF 0 "general_operand" "=x,y")
  5382. +     (mult:DF (match_operand:DF 1 "general_operand" "%xH,y")
  5383. +          (match_operand:DF 2 "general_operand" "xH,rmF")))]
  5384. +   "TARGET_FPA"
  5385. +   "*
  5386. + {
  5387. +   if (rtx_equal_p (operands[1], operands[2]))
  5388. +     return \"fpsqr%.d %y1,%0\";
  5389. +   if (rtx_equal_p (operands[0], operands[1]))
  5390. +     return \"fpmul%.d %y2,%0\";
  5391. +   if (rtx_equal_p (operands[0], operands[2]))
  5392. +     return \"fpmul%.d %y1,%0\";
  5393. +   if (which_alternative == 0)
  5394. +     return \"fpmul3%.d %w2,%w1,%0\";
  5395. +   return \"fpmul3%.d %x2,%x1,%0\";
  5396. + }")
  5397. + (define_insn ""
  5398. +   [(set (match_operand:DF 0 "general_operand" "=f")
  5399. +     (mult:DF (match_operand:DF 1 "general_operand" "%0")
  5400. +          (match_operand:DF 2 "general_operand" "fmG")))]
  5401. +   "TARGET_68881"
  5402. +   "*
  5403. + {
  5404. +   if (GET_CODE (operands[2]) == CONST_DOUBLE
  5405. +       && floating_exact_log2 (operands[2]) && !TARGET_68040)
  5406. +     {
  5407. +       int i = floating_exact_log2 (operands[2]);
  5408. +       operands[2] = gen_rtx (CONST_INT, VOIDmode, i);
  5409. +       return \"fscale%.l %2,%0\";
  5410. +     }
  5411. +   if (REG_P (operands[2]))
  5412. +     return \"f%&mul%.x %2,%0\";
  5413. +   return \"f%&mul%.d %f2,%0\";
  5414. + }")
  5415. + (define_expand "mulsf3"
  5416. +   [(set (match_operand:SF 0 "general_operand" "")
  5417. +     (mult:SF (match_operand:SF 1 "general_operand" "")
  5418. +          (match_operand:SF 2 "general_operand" "")))]
  5419. +   "TARGET_68881 || TARGET_FPA"
  5420. +   "")
  5421. + (define_insn ""
  5422. +   [(set (match_operand:SF 0 "general_operand" "=x,y")
  5423. +     (mult:SF (match_operand:SF 1 "general_operand" "%xH,y")
  5424. +          (match_operand:SF 2 "general_operand" "xH,rmF")))]
  5425. +   "TARGET_FPA"
  5426. +   "*
  5427. + {
  5428. +   if (rtx_equal_p (operands[1], operands[2]))
  5429. +     return \"fpsqr%.s %w1,%0\";
  5430. +   if (rtx_equal_p (operands[0], operands[1]))
  5431. +     return \"fpmul%.s %w2,%0\";
  5432. +   if (rtx_equal_p (operands[0], operands[2]))
  5433. +     return \"fpmul%.s %w1,%0\";
  5434. +   if (which_alternative == 0)
  5435. +     return \"fpmul3%.s %w2,%w1,%0\";
  5436. +   return \"fpmul3%.s %2,%1,%0\";
  5437. + }")
  5438. + (define_insn ""
  5439. +   [(set (match_operand:SF 0 "general_operand" "=f")
  5440. +     (mult:SF (match_operand:SF 1 "general_operand" "%0")
  5441. +          (match_operand:SF 2 "general_operand" "fdmF")))]
  5442. +   "TARGET_68881"
  5443. +   "*
  5444. + {
  5445. + #ifdef FSGLMUL_USE_S
  5446. +   if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
  5447. +     return (TARGET_68040_ONLY
  5448. +         ? \"fsmul%.s %2,%0\"
  5449. +         : \"fsglmul%.s %2,%0\");
  5450. + #else
  5451. +   if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
  5452. +     return (TARGET_68040_ONLY
  5453. +         ? \"fsmul%.x %2,%0\"
  5454. +         : \"fsglmul%.x %2,%0\");
  5455. + #endif
  5456. +   return (TARGET_68040_ONLY
  5457. +       ? \"fsmul%.s %f2,%0\"
  5458. +       : \"fsglmul%.s %f2,%0\");
  5459. + }")
  5460. + ;; divide instructions
  5461. + (define_insn "divhi3"
  5462. +   [(set (match_operand:HI 0 "general_operand" "=d")
  5463. +     (div:HI (match_operand:HI 1 "general_operand" "0")
  5464. +         (match_operand:HI 2 "general_operand" "dmn")))]
  5465. +   ""
  5466. +   "*
  5467. + {
  5468. + #ifdef MOTOROLA
  5469. +   return \"ext%.l %0\;divs%.w %2,%0\";
  5470. + #else
  5471. +   return \"extl %0\;divs %2,%0\";
  5472. + #endif
  5473. + }")
  5474. + ;; These patterns don't work because the divs instruction is undefined if
  5475. + ;; the quotient is more than 16 bits.  This valid C would be miscompiled:
  5476. + ;; int n; short d; unsigned short q; ... q = (unsigned int) (n / d);
  5477. + ;; Imagine what happens when n = 100000 and d = 1.
  5478. + ;;(define_insn "divhisi3"
  5479. + ;;  [(set (match_operand:HI 0 "general_operand" "=d")
  5480. + ;;    (truncate:HI
  5481. + ;;     (div:SI
  5482. + ;;      (match_operand:SI 1 "general_operand" "0")
  5483. + ;;      (sign_extend:SI (match_operand:HI 2 "nonimmediate_operand" "dm")))))]
  5484. + ;;  ""
  5485. + ;;  "*
  5486. + ;;{
  5487. + ;;#ifdef MOTOROLA
  5488. + ;;  return \"divs%.w %2,%0\";
  5489. + ;;#else
  5490. + ;;  return \"divs %2,%0\";
  5491. + ;;#endif
  5492. + ;;}")
  5493. + ;;(define_insn ""
  5494. + ;;  [(set (match_operand:HI 0 "general_operand" "=d")
  5495. + ;;    (truncate:HI (div:SI (match_operand:SI 1 "general_operand" "0")
  5496. + ;;                 (match_operand:SI 2 "const_int_operand" "n"))))]
  5497. + ;;  ""
  5498. + ;;  "*
  5499. + ;;{
  5500. + ;;#ifdef MOTOROLA
  5501. + ;;  return \"divs%.w %2,%0\";
  5502. + ;;#else
  5503. + ;;  return \"divs %2,%0\";
  5504. + ;;#endif
  5505. + ;;}")
  5506. + (define_insn "udivhi3"
  5507. +   [(set (match_operand:HI 0 "general_operand" "=d")
  5508. +     (udiv:HI (match_operand:HI 1 "general_operand" "0")
  5509. +          (match_operand:HI 2 "general_operand" "dmn")))]
  5510. +   ""
  5511. +   "*
  5512. + {
  5513. + #ifdef MOTOROLA
  5514. +   return \"and%.l %#0xFFFF,%0\;divu%.w %2,%0\";
  5515. + #else
  5516. +   return \"andl %#0xFFFF,%0\;divu %2,%0\";
  5517. + #endif
  5518. + }")
  5519. + ;; See comment before divhisi3 why these are commented out.
  5520. + ;;(define_insn "udivhisi3"
  5521. + ;;  [(set (match_operand:HI 0 "general_operand" "=d")
  5522. + ;;    (truncate:HI
  5523. + ;;     (udiv:SI
  5524. + ;;      (match_operand:SI 1 "general_operand" "0")
  5525. + ;;      (zero_extend:SI (match_operand:HI 2 "nonimmediate_operand" "dm")))))]
  5526. + ;;  ""
  5527. + ;;  "*
  5528. + ;;{
  5529. + ;;#ifdef MOTOROLA
  5530. + ;;  return \"divu%.w %2,%0\";
  5531. + ;;#else
  5532. + ;;  return \"divu %2,%0\";
  5533. + ;;#endif
  5534. + ;;}")
  5535. + ;;(define_insn ""
  5536. + ;;  [(set (match_operand:HI 0 "general_operand" "=d")
  5537. + ;;    (truncate:HI (udiv:SI (match_operand:SI 1 "general_operand" "0")
  5538. + ;;                  (match_operand:SI 2 "const_int_operand" "n"))))]
  5539. + ;;  ""
  5540. + ;;  "*
  5541. + ;;{
  5542. + ;;#ifdef MOTOROLA
  5543. + ;;  return \"divu%.w %2,%0\";
  5544. + ;;#else
  5545. + ;;  return \"divu %2,%0\";
  5546. + ;;#endif
  5547. + ;;}")
  5548. + (define_expand "divdf3"
  5549. +   [(set (match_operand:DF 0 "general_operand" "")
  5550. +     (div:DF (match_operand:DF 1 "general_operand" "")
  5551. +         (match_operand:DF 2 "general_operand" "")))]
  5552. +   "TARGET_68881 || TARGET_FPA"
  5553. +   "")
  5554. + (define_insn ""
  5555. +   [(set (match_operand:DF 0 "general_operand" "=x,y,y")
  5556. +     (div:DF (match_operand:DF 1 "general_operand" "xH,y,rmF")
  5557. +         (match_operand:DF 2 "general_operand" "xH,rmF,0")))]
  5558. +   "TARGET_FPA"
  5559. +   "*
  5560. + {
  5561. +   if (rtx_equal_p (operands[0], operands[2]))
  5562. +     return \"fprdiv%.d %y1,%0\";
  5563. +   if (rtx_equal_p (operands[0], operands[1]))
  5564. +     return \"fpdiv%.d %y2,%0\";
  5565. +   if (which_alternative == 0)
  5566. +     return \"fpdiv3%.d %w2,%w1,%0\";
  5567. +   return \"fpdiv3%.d %x2,%x1,%x0\";
  5568. + }")
  5569. + (define_insn ""
  5570. +   [(set (match_operand:DF 0 "general_operand" "=f")
  5571. +     (div:DF (match_operand:DF 1 "general_operand" "0")
  5572. +         (match_operand:DF 2 "general_operand" "fmG")))]
  5573. +   "TARGET_68881"
  5574. +   "*
  5575. + {
  5576. +   if (REG_P (operands[2]))
  5577. +     return \"f%&div%.x %2,%0\";
  5578. +   return \"f%&div%.d %f2,%0\";
  5579. + }")
  5580. + (define_expand "divsf3"
  5581. +   [(set (match_operand:SF 0 "general_operand" "")
  5582. +     (div:SF (match_operand:SF 1 "general_operand" "")
  5583. +         (match_operand:SF 2 "general_operand" "")))]
  5584. +   "TARGET_68881 || TARGET_FPA"
  5585. +   "")
  5586. + (define_insn ""
  5587. +   [(set (match_operand:SF 0 "general_operand" "=x,y,y")
  5588. +     (div:SF (match_operand:SF 1 "general_operand" "xH,y,rmF")
  5589. +         (match_operand:SF 2 "general_operand" "xH,rmF,0")))]
  5590. +   "TARGET_FPA"
  5591. +   "*
  5592. + {
  5593. +   if (rtx_equal_p (operands[0], operands[1]))
  5594. +     return \"fpdiv%.s %w2,%0\";
  5595. +   if (rtx_equal_p (operands[0], operands[2]))
  5596. +     return \"fprdiv%.s %w1,%0\";
  5597. +   if (which_alternative == 0)
  5598. +     return \"fpdiv3%.s %w2,%w1,%0\";
  5599. +   return \"fpdiv3%.s %2,%1,%0\";
  5600. + }")
  5601. + (define_insn ""
  5602. +   [(set (match_operand:SF 0 "general_operand" "=f")
  5603. +     (div:SF (match_operand:SF 1 "general_operand" "0")
  5604. +         (match_operand:SF 2 "general_operand" "fdmF")))]
  5605. +   "TARGET_68881"
  5606. +   "*
  5607. + {
  5608. + #ifdef FSGLDIV_USE_S
  5609. +   if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
  5610. +     return (TARGET_68040_ONLY
  5611. +         ? \"fsdiv%.s %2,%0\"
  5612. +         : \"fsgldiv%.s %2,%0\");
  5613. + #else
  5614. +   if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
  5615. +     return (TARGET_68040_ONLY
  5616. +         ? \"fsdiv%.x %2,%0\"
  5617. +         : \"fsgldiv%.x %2,%0\");
  5618. + #endif
  5619. +   return (TARGET_68040_ONLY
  5620. +       ? \"fsdiv%.s %f2,%0\"
  5621. +       : \"fsgldiv%.s %f2,%0\");
  5622. + }")
  5623. + ;; Remainder instructions.
  5624. + (define_insn "modhi3"
  5625. +   [(set (match_operand:HI 0 "general_operand" "=d")
  5626. +     (mod:HI (match_operand:HI 1 "general_operand" "0")
  5627. +         (match_operand:HI 2 "general_operand" "dmn")))]
  5628. +   ""
  5629. +   "*
  5630. + {
  5631. +   /* The swap insn produces cc's that don't correspond to the result.  */
  5632. +   CC_STATUS_INIT;
  5633. + #ifdef MOTOROLA
  5634. +   return \"ext%.l %0\;divs%.w %2,%0\;swap %0\";
  5635. + #else
  5636. +   return \"extl %0\;divs %2,%0\;swap %0\";
  5637. + #endif
  5638. + }")
  5639. + ;; See comment before divhisi3 why these are commented out.
  5640. + ;;(define_insn "modhisi3"
  5641. + ;;  [(set (match_operand:HI 0 "general_operand" "=d")
  5642. + ;;    (truncate:HI
  5643. + ;;     (mod:SI
  5644. + ;;      (match_operand:SI 1 "general_operand" "0")
  5645. + ;;      (sign_extend:SI (match_operand:HI 2 "nonimmediate_operand" "dm")))))]
  5646. + ;;  ""
  5647. + ;;  "*
  5648. + ;;{
  5649. + ;;  /* The swap insn produces cc's that don't correspond to the result.  */
  5650. + ;;  CC_STATUS_INIT;
  5651. + ;;#ifdef MOTOROLA
  5652. + ;;  return \"divs%.w %2,%0\;swap %0\";
  5653. + ;;#else
  5654. + ;;  return \"divs %2,%0\;swap %0\";
  5655. + ;;#endif
  5656. + ;;}")
  5657. + ;;(define_insn ""
  5658. + ;;  [(set (match_operand:HI 0 "general_operand" "=d")
  5659. + ;;    (truncate:HI (mod:SI (match_operand:SI 1 "general_operand" "0")
  5660. + ;;                 (match_operand:SI 2 "const_int_operand" "n"))))]
  5661. + ;;  ""
  5662. + ;;  "*
  5663. + ;;{
  5664. + ;;  /* The swap insn produces cc's that don't correspond to the result.  */
  5665. + ;;  CC_STATUS_INIT;
  5666. + ;;#ifdef MOTOROLA
  5667. + ;;  return \"divs%.w %2,%0\;swap %0\";
  5668. + ;;#else
  5669. + ;;  return \"divs %2,%0\;swap %0\";
  5670. + ;;#endif
  5671. + ;;}")
  5672. + (define_insn "umodhi3"
  5673. +   [(set (match_operand:HI 0 "general_operand" "=d")
  5674. +     (umod:HI (match_operand:HI 1 "general_operand" "0")
  5675. +          (match_operand:HI 2 "general_operand" "dmn")))]
  5676. +   ""
  5677. +   "*
  5678. + {
  5679. +   /* The swap insn produces cc's that don't correspond to the result.  */
  5680. +   CC_STATUS_INIT;
  5681. + #ifdef MOTOROLA
  5682. +   return \"and%.l %#0xFFFF,%0\;divu%.w %2,%0\;swap %0\";
  5683. + #else
  5684. +   return \"andl %#0xFFFF,%0\;divu %2,%0\;swap %0\";
  5685. + #endif
  5686. + }")
  5687. + ;; See comment before divhisi3 why these are commented out.
  5688. + ;;(define_insn "umodhisi3"
  5689. + ;;  [(set (match_operand:HI 0 "general_operand" "=d")
  5690. + ;;    (truncate:HI
  5691. + ;;     (umod:SI
  5692. + ;;      (match_operand:SI 1 "general_operand" "0")
  5693. + ;;      (zero_extend:SI (match_operand:HI 2 "nonimmediate_operand" "dm")))))]
  5694. + ;;  ""
  5695. + ;;  "*
  5696. + ;;{
  5697. + ;;  /* The swap insn produces cc's that don't correspond to the result.  */
  5698. + ;;  CC_STATUS_INIT;
  5699. + ;;#ifdef MOTOROLA
  5700. + ;;  return \"divu%.w %2,%0\;swap %0\";
  5701. + ;;#else
  5702. + ;;  return \"divu %2,%0\;swap %0\";
  5703. + ;;#endif
  5704. + ;;}")
  5705. + ;;(define_insn ""
  5706. + ;;  [(set (match_operand:HI 0 "general_operand" "=d")
  5707. + ;;    (truncate:HI (umod:SI (match_operand:SI 1 "general_operand" "0")
  5708. + ;;                  (match_operand:SI 2 "const_int_operand" "n"))))]
  5709. + ;;  ""
  5710. + ;;  "*
  5711. + ;;{
  5712. + ;;  /* The swap insn produces cc's that don't correspond to the result.  */
  5713. + ;;  CC_STATUS_INIT;
  5714. + ;;#ifdef MOTOROLA
  5715. + ;;  return \"divu%.w %2,%0\;swap %0\";
  5716. + ;;#else
  5717. + ;;  return \"divu %2,%0\;swap %0\";
  5718. + ;;#endif
  5719. + ;;}")
  5720. + (define_insn "divmodsi4"
  5721. +   [(set (match_operand:SI 0 "general_operand" "=d")
  5722. +     (div:SI (match_operand:SI 1 "general_operand" "0")
  5723. +         (match_operand:SI 2 "general_operand" "dmsK")))
  5724. +    (set (match_operand:SI 3 "general_operand" "=d")
  5725. +     (mod:SI (match_dup 1) (match_dup 2)))]
  5726. +   "TARGET_68020"
  5727. +   "*
  5728. + {
  5729. +   if (find_reg_note (insn, REG_UNUSED, operands[3]))
  5730. +     return \"divs%.l %2,%0\";
  5731. +   else
  5732. +     return \"divsl%.l %2,%3:%0\";
  5733. + }")
  5734. + (define_insn "udivmodsi4"
  5735. +   [(set (match_operand:SI 0 "general_operand" "=d")
  5736. +     (udiv:SI (match_operand:SI 1 "general_operand" "0")
  5737. +          (match_operand:SI 2 "general_operand" "dmsK")))
  5738. +    (set (match_operand:SI 3 "general_operand" "=d")
  5739. +     (umod:SI (match_dup 1) (match_dup 2)))]
  5740. +   "TARGET_68020"
  5741. +   "*
  5742. + {
  5743. +   if (find_reg_note (insn, REG_UNUSED, operands[3]))
  5744. +     return \"divu%.l %2,%0\";
  5745. +   else
  5746. +     return \"divul%.l %2,%3:%0\";
  5747. + }")
  5748. + ;; logical-and instructions
  5749. + ;; Prevent AND from being made with sp.  This doesn't exist in the machine
  5750. + ;; and reload will cause inefficient code.  Since sp is a FIXED_REG, we
  5751. + ;; can't allocate pseudos into it.
  5752. + (define_insn "andsi3"
  5753. +   [(set (match_operand:SI 0 "not_sp_operand" "=m,d")
  5754. +     (and:SI (match_operand:SI 1 "general_operand" "%0,0")
  5755. +         (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
  5756. +   ""
  5757. +   "*
  5758. + {
  5759. +   int logval;
  5760. +   if (GET_CODE (operands[2]) == CONST_INT
  5761. +       && (INTVAL (operands[2]) | 0xffff) == 0xffffffff
  5762. +       && (DATA_REG_P (operands[0])
  5763. +       || offsettable_memref_p (operands[0])))
  5764. +     { 
  5765. +       if (GET_CODE (operands[0]) != REG)
  5766. +         operands[0] = adj_offsettable_operand (operands[0], 2);
  5767. +       operands[2] = gen_rtx (CONST_INT, VOIDmode,
  5768. +                  INTVAL (operands[2]) & 0xffff);
  5769. +       /* Do not delete a following tstl %0 insn; that would be incorrect.  */
  5770. +       CC_STATUS_INIT;
  5771. +       if (operands[2] == const0_rtx)
  5772. +         return \"clr%.w %0\";
  5773. +       return \"and%.w %2,%0\";
  5774. +     }
  5775. +   if (GET_CODE (operands[2]) == CONST_INT
  5776. +       && (logval = exact_log2 (~ INTVAL (operands[2]))) >= 0
  5777. +       && (DATA_REG_P (operands[0])
  5778. +           || offsettable_memref_p (operands[0])))
  5779. +     { 
  5780. +       if (DATA_REG_P (operands[0]))
  5781. +         {
  5782. +           operands[1] = gen_rtx (CONST_INT, VOIDmode, logval);
  5783. +         }
  5784. +       else
  5785. +         {
  5786. +           operands[0] = adj_offsettable_operand (operands[0], 3 - (logval / 8));          operands[1] = gen_rtx (CONST_INT, VOIDmode, logval % 8);
  5787. +         }
  5788. +       /* This does not set condition codes in a standard way.  */
  5789. +       CC_STATUS_INIT;
  5790. +       return \"bclr %1,%0\";
  5791. +     }
  5792. +   return \"and%.l %2,%0\";
  5793. + }")
  5794. + (define_insn "andhi3"
  5795. +   [(set (match_operand:HI 0 "general_operand" "=m,d")
  5796. +     (and:HI (match_operand:HI 1 "general_operand" "%0,0")
  5797. +         (match_operand:HI 2 "general_operand" "dn,dmn")))]
  5798. +   ""
  5799. +   "and%.w %2,%0")
  5800. + (define_insn ""
  5801. +   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d"))
  5802. +     (and:HI (match_dup 0)
  5803. +         (match_operand:HI 1 "general_operand" "dn,dmn")))]
  5804. +   ""
  5805. +   "and%.w %1,%0")
  5806. + (define_insn ""
  5807. +   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d"))
  5808. +     (and:HI (match_operand:HI 1 "general_operand" "dn,dmn")
  5809. +         (match_dup 0)))]
  5810. +   ""
  5811. +   "and%.w %1,%0")
  5812. + (define_insn "andqi3"
  5813. +   [(set (match_operand:QI 0 "general_operand" "=m,d")
  5814. +     (and:QI (match_operand:QI 1 "general_operand" "%0,0")
  5815. +         (match_operand:QI 2 "general_operand" "dn,dmn")))]
  5816. +   ""
  5817. +   "and%.b %2,%0")
  5818. + (define_insn ""
  5819. +   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d"))
  5820. +     (and:QI (match_dup 0)
  5821. +         (match_operand:QI 1 "general_operand" "dn,dmn")))]
  5822. +   ""
  5823. +   "and%.b %1,%0")
  5824. + (define_insn ""
  5825. +   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d"))
  5826. +     (and:QI (match_operand:QI 1 "general_operand" "dn,dmn")
  5827. +         (match_dup 0)))]
  5828. +   ""
  5829. +   "and%.b %1,%0")
  5830. + ;; inclusive-or instructions
  5831. + (define_insn "iorsi3"
  5832. +   [(set (match_operand:SI 0 "general_operand" "=m,d")
  5833. +     (ior:SI (match_operand:SI 1 "general_operand" "%0,0")
  5834. +         (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
  5835. +   ""
  5836. +   "*
  5837. + {
  5838. +   register int logval;
  5839. +   if (GET_CODE (operands[2]) == CONST_INT
  5840. +       && INTVAL (operands[2]) >> 16 == 0
  5841. +       && (DATA_REG_P (operands[0])
  5842. +       || offsettable_memref_p (operands[0])))
  5843. +     { 
  5844. +       if (GET_CODE (operands[0]) != REG)
  5845. +         operands[0] = adj_offsettable_operand (operands[0], 2);
  5846. +       /* Do not delete a following tstl %0 insn; that would be incorrect.  */
  5847. +       CC_STATUS_INIT;
  5848. +       return \"or%.w %2,%0\";
  5849. +     }
  5850. +   if (GET_CODE (operands[2]) == CONST_INT
  5851. +       && (logval = exact_log2 (INTVAL (operands[2]))) >= 0
  5852. +       && (DATA_REG_P (operands[0])
  5853. +       || offsettable_memref_p (operands[0])))
  5854. +     { 
  5855. +       if (DATA_REG_P (operands[0]))
  5856. +     {
  5857. +       operands[1] = gen_rtx (CONST_INT, VOIDmode, logval);
  5858. +     }
  5859. +       else
  5860. +         {
  5861. +       operands[0] = adj_offsettable_operand (operands[0], 3 - (logval / 8));
  5862. +       operands[1] = gen_rtx (CONST_INT, VOIDmode, logval % 8);
  5863. +     }
  5864. +       CC_STATUS_INIT;
  5865. +       return \"bset %1,%0\";
  5866. +     }
  5867. +   return \"or%.l %2,%0\";
  5868. + }")
  5869. + (define_insn "iorhi3"
  5870. +   [(set (match_operand:HI 0 "general_operand" "=m,d")
  5871. +     (ior:HI (match_operand:HI 1 "general_operand" "%0,0")
  5872. +         (match_operand:HI 2 "general_operand" "dn,dmn")))]
  5873. +   ""
  5874. +   "or%.w %2,%0")
  5875. + (define_insn ""
  5876. +   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d"))
  5877. +     (ior:HI (match_dup 0)
  5878. +         (match_operand:HI 1 "general_operand" "dn,dmn")))]
  5879. +   ""
  5880. +   "or%.w %1,%0")
  5881. + (define_insn ""
  5882. +   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d"))
  5883. +     (ior:HI (match_operand:HI 1 "general_operand" "dn,dmn")
  5884. +         (match_dup 0)))]
  5885. +   ""
  5886. +   "or%.w %1,%0")
  5887. + (define_insn "iorqi3"
  5888. +   [(set (match_operand:QI 0 "general_operand" "=m,d")
  5889. +     (ior:QI (match_operand:QI 1 "general_operand" "%0,0")
  5890. +         (match_operand:QI 2 "general_operand" "dn,dmn")))]
  5891. +   ""
  5892. +   "or%.b %2,%0")
  5893. + (define_insn ""
  5894. +   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d"))
  5895. +     (ior:QI (match_dup 0)
  5896. +         (match_operand:QI 1 "general_operand" "dn,dmn")))]
  5897. +   ""
  5898. +   "or%.b %1,%0")
  5899. + (define_insn ""
  5900. +   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d"))
  5901. +     (ior:QI (match_operand:QI 1 "general_operand" "dn,dmn")
  5902. +         (match_dup 0)))]
  5903. +   ""
  5904. +   "or%.b %1,%0")
  5905. + ;; xor instructions
  5906. + (define_insn "xorsi3"
  5907. +   [(set (match_operand:SI 0 "general_operand" "=do,m")
  5908. +     (xor:SI (match_operand:SI 1 "general_operand" "%0,0")
  5909. +         (match_operand:SI 2 "general_operand" "di,dKs")))]
  5910. +   ""
  5911. +   "*
  5912. + {
  5913. +   if (GET_CODE (operands[2]) == CONST_INT
  5914. +       && INTVAL (operands[2]) >> 16 == 0
  5915. +       && (offsettable_memref_p (operands[0]) || DATA_REG_P (operands[0])))
  5916. +     { 
  5917. +       if (! DATA_REG_P (operands[0]))
  5918. +     operands[0] = adj_offsettable_operand (operands[0], 2);
  5919. +       /* Do not delete a following tstl %0 insn; that would be incorrect.  */
  5920. +       CC_STATUS_INIT;
  5921. +       return \"eor%.w %2,%0\";
  5922. +     }
  5923. +   return \"eor%.l %2,%0\";
  5924. + }")
  5925. + (define_insn "xorhi3"
  5926. +   [(set (match_operand:HI 0 "general_operand" "=dm")
  5927. +     (xor:HI (match_operand:HI 1 "general_operand" "%0")
  5928. +         (match_operand:HI 2 "general_operand" "dn")))]
  5929. +   ""
  5930. +   "eor%.w %2,%0")
  5931. + (define_insn ""
  5932. +   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+dm"))
  5933. +     (xor:HI (match_dup 0)
  5934. +         (match_operand:HI 1 "general_operand" "dn")))]
  5935. +   ""
  5936. +   "eor%.w %1,%0")
  5937. + (define_insn ""
  5938. +   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+dm"))
  5939. +     (xor:HI (match_operand:HI 1 "general_operand" "dn")
  5940. +         (match_dup 0)))]
  5941. +   ""
  5942. +   "eor%.w %1,%0")
  5943. + (define_insn "xorqi3"
  5944. +   [(set (match_operand:QI 0 "general_operand" "=dm")
  5945. +     (xor:QI (match_operand:QI 1 "general_operand" "%0")
  5946. +         (match_operand:QI 2 "general_operand" "dn")))]
  5947. +   ""
  5948. +   "eor%.b %2,%0")
  5949. + (define_insn ""
  5950. +   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+dm"))
  5951. +     (xor:QI (match_dup 0)
  5952. +         (match_operand:QI 1 "general_operand" "dn")))]
  5953. +   ""
  5954. +   "eor%.b %1,%0")
  5955. + (define_insn ""
  5956. +   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+dm"))
  5957. +     (xor:QI (match_operand:QI 1 "general_operand" "dn")
  5958. +         (match_dup 0)))]
  5959. +   ""
  5960. +   "eor%.b %1,%0")
  5961. + ;; negation instructions
  5962. + (define_insn "negsi2"
  5963. +   [(set (match_operand:SI 0 "general_operand" "=dm")
  5964. +     (neg:SI (match_operand:SI 1 "general_operand" "0")))]
  5965. +   ""
  5966. +   "neg%.l %0")
  5967. + (define_insn "neghi2"
  5968. +   [(set (match_operand:HI 0 "general_operand" "=dm")
  5969. +     (neg:HI (match_operand:HI 1 "general_operand" "0")))]
  5970. +   ""
  5971. +   "neg%.w %0")
  5972. + (define_insn ""
  5973. +   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+dm"))
  5974. +     (neg:HI (match_dup 0)))]
  5975. +   ""
  5976. +   "neg%.w %0")
  5977. + (define_insn "negqi2"
  5978. +   [(set (match_operand:QI 0 "general_operand" "=dm")
  5979. +     (neg:QI (match_operand:QI 1 "general_operand" "0")))]
  5980. +   ""
  5981. +   "neg%.b %0")
  5982. + (define_insn ""
  5983. +   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+dm"))
  5984. +     (neg:QI (match_dup 0)))]
  5985. +   ""
  5986. +   "neg%.b %0")
  5987. + (define_expand "negsf2"
  5988. +   [(set (match_operand:SF 0 "general_operand" "")
  5989. +     (neg:SF (match_operand:SF 1 "general_operand" "")))]
  5990. +   "TARGET_68881 || TARGET_FPA"
  5991. +   "")
  5992. + (define_insn ""
  5993. +   [(set (match_operand:SF 0 "general_operand" "=x,y")
  5994. +     (neg:SF (match_operand:SF 1 "general_operand" "xH,rmF")))]
  5995. +   "TARGET_FPA"
  5996. +   "fpneg%.s %w1,%0")
  5997. + (define_insn ""
  5998. +   [(set (match_operand:SF 0 "general_operand" "=f,d")
  5999. +     (neg:SF (match_operand:SF 1 "general_operand" "fdmF,0")))]
  6000. +   "TARGET_68881"
  6001. +   "*
  6002. + {
  6003. +   if (DATA_REG_P (operands[0]))
  6004. +     {
  6005. +       operands[1] = gen_rtx (CONST_INT, VOIDmode, 31);
  6006. +       return \"bchg %1,%0\";
  6007. +     }
  6008. +   if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
  6009. +     return \"f%$neg%.x %1,%0\";
  6010. +   return \"f%$neg%.s %f1,%0\";
  6011. + }")
  6012. + (define_expand "negdf2"
  6013. +   [(set (match_operand:DF 0 "general_operand" "")
  6014. +     (neg:DF (match_operand:DF 1 "general_operand" "")))]
  6015. +   "TARGET_68881 || TARGET_FPA"
  6016. +   "")
  6017. + (define_insn ""
  6018. +   [(set (match_operand:DF 0 "general_operand" "=x,y")
  6019. +     (neg:DF (match_operand:DF 1 "general_operand" "xH,rmF")))]
  6020. +   "TARGET_FPA"
  6021. +   "fpneg%.d %y1, %0")
  6022. + (define_insn ""
  6023. +   [(set (match_operand:DF 0 "general_operand" "=f,d")
  6024. +     (neg:DF (match_operand:DF 1 "general_operand" "fmF,0")))]
  6025. +   "TARGET_68881"
  6026. +   "*
  6027. + {
  6028. +   if (DATA_REG_P (operands[0]))
  6029. +     {
  6030. +       operands[1] = gen_rtx (CONST_INT, VOIDmode, 31);
  6031. +       return \"bchg %1,%0\";
  6032. +     }
  6033. +   if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
  6034. +     return \"f%&neg%.x %1,%0\";
  6035. +   return \"f%&neg%.d %f1,%0\";
  6036. + }")
  6037. + ;; Sqrt instruction for the 68881
  6038. + (define_insn "sqrtdf2"
  6039. +   [(set (match_operand:DF 0 "general_operand" "=f")
  6040. +     (sqrt:DF (match_operand:DF 1 "general_operand" "fm")))]
  6041. +   "TARGET_68881"
  6042. +   "*
  6043. + {
  6044. +   if (FP_REG_P (operands[1]))
  6045. +     return \"fsqrt%.x %1,%0\";
  6046. +   else
  6047. +     return \"fsqrt%.d %1,%0\";
  6048. + }")
  6049. + ;; Absolute value instructions
  6050. + (define_expand "abssf2"
  6051. +   [(set (match_operand:SF 0 "general_operand" "")
  6052. +     (abs:SF (match_operand:SF 1 "general_operand" "")))]
  6053. +   "TARGET_68881 || TARGET_FPA"
  6054. +   "")
  6055. + (define_insn ""
  6056. +   [(set (match_operand:SF 0 "general_operand" "=x,y")
  6057. +     (abs:SF (match_operand:SF 1 "general_operand" "xH,rmF")))]
  6058. +   "TARGET_FPA"
  6059. +   "fpabs%.s %y1,%0")
  6060. + (define_insn ""
  6061. +   [(set (match_operand:SF 0 "general_operand" "=f")
  6062. +     (abs:SF (match_operand:SF 1 "general_operand" "fdmF")))]
  6063. +   "TARGET_68881"
  6064. +   "*
  6065. + {
  6066. +   if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
  6067. +     return \"f%$abs%.x %1,%0\";
  6068. +   return \"f%$abs%.s %f1,%0\";
  6069. + }")
  6070. + (define_expand "absdf2"
  6071. +   [(set (match_operand:DF 0 "general_operand" "")
  6072. +     (abs:DF (match_operand:DF 1 "general_operand" "")))]
  6073. +   "TARGET_68881 || TARGET_FPA"
  6074. +   "")
  6075. + (define_insn ""
  6076. +   [(set (match_operand:DF 0 "general_operand" "=x,y")
  6077. +     (abs:DF (match_operand:DF 1 "general_operand" "xH,rmF")))]
  6078. +   "TARGET_FPA"
  6079. +   "fpabs%.d %y1,%0")
  6080. + (define_insn ""
  6081. +   [(set (match_operand:DF 0 "general_operand" "=f")
  6082. +     (abs:DF (match_operand:DF 1 "general_operand" "fmF")))]
  6083. +   "TARGET_68881"
  6084. +   "*
  6085. + {
  6086. +   if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
  6087. +     return \"f%&abs%.x %1,%0\";
  6088. +   return \"f%&abs%.d %f1,%0\";
  6089. + }")
  6090. + ;; one complement instructions
  6091. + (define_insn "one_cmplsi2"
  6092. +   [(set (match_operand:SI 0 "general_operand" "=dm")
  6093. +     (not:SI (match_operand:SI 1 "general_operand" "0")))]
  6094. +   ""
  6095. +   "not%.l %0")
  6096. + (define_insn "one_cmplhi2"
  6097. +   [(set (match_operand:HI 0 "general_operand" "=dm")
  6098. +     (not:HI (match_operand:HI 1 "general_operand" "0")))]
  6099. +   ""
  6100. +   "not%.w %0")
  6101. + (define_insn ""
  6102. +   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+dm"))
  6103. +     (not:HI (match_dup 0)))]
  6104. +   ""
  6105. +   "not%.w %0")
  6106. + (define_insn "one_cmplqi2"
  6107. +   [(set (match_operand:QI 0 "general_operand" "=dm")
  6108. +     (not:QI (match_operand:QI 1 "general_operand" "0")))]
  6109. +   ""
  6110. +   "not%.b %0")
  6111. + (define_insn ""
  6112. +   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+dm"))
  6113. +     (not:QI (match_dup 0)))]
  6114. +   ""
  6115. +   "not%.b %0")
  6116. + ;; arithmetic shift instructions
  6117. + ;; We don't need the shift memory by 1 bit instruction
  6118. + ;; On all 68k models, this makes faster code in a special case.
  6119. + (define_insn ""
  6120. +   [(set (match_operand:SI 0 "register_operand" "=d")
  6121. +     (ashift:SI (match_operand:SI 1 "register_operand" "0")
  6122. +            (match_operand:SI 2 "immediate_operand" "i")))]
  6123. +   "(GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 16)"
  6124. +   "*
  6125. + {
  6126. +   CC_STATUS_INIT;
  6127. +   return \"swap %0\;clr%.w %0\";
  6128. + }")
  6129. + ;; On the 68000, this makes faster code in a special case.
  6130. + (define_insn ""
  6131. +   [(set (match_operand:SI 0 "register_operand" "=d")
  6132. +     (ashift:SI (match_operand:SI 1 "register_operand" "0")
  6133. +            (match_operand:SI 2 "immediate_operand" "i")))]
  6134. +   "(! TARGET_68020 && GET_CODE (operands[2]) == CONST_INT
  6135. +     && INTVAL (operands[2]) > 16 && INTVAL (operands[2]) <= 24)"
  6136. +   "*
  6137. + {
  6138. +   CC_STATUS_INIT;
  6139. +   operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 16);
  6140. +   return \"asl%.w %2,%0\;swap %0\;clr%.w %0\";
  6141. + }")
  6142. + (define_insn "ashlsi3"
  6143. +   [(set (match_operand:SI 0 "register_operand" "=d")
  6144. +     (ashift:SI (match_operand:SI 1 "register_operand" "0")
  6145. +            (match_operand:SI 2 "general_operand" "dI")))]
  6146. +   ""
  6147. +   "*
  6148. + {
  6149. +   if (operands[2] == const1_rtx)
  6150. +     return \"add%.l %0,%0\";
  6151. +   return \"asl%.l %2,%0\";
  6152. + }")
  6153. + (define_insn "ashlhi3"
  6154. +   [(set (match_operand:HI 0 "register_operand" "=d")
  6155. +     (ashift:HI (match_operand:HI 1 "register_operand" "0")
  6156. +            (match_operand:HI 2 "general_operand" "dI")))]
  6157. +   ""
  6158. +   "asl%.w %2,%0")
  6159. + (define_insn ""
  6160. +   [(set (strict_low_part (match_operand:HI 0 "register_operand" "+d"))
  6161. +     (ashift:HI (match_dup 0)
  6162. +            (match_operand:HI 1 "general_operand" "dI")))]
  6163. +   ""
  6164. +   "asl%.w %1,%0")
  6165. + (define_insn "ashlqi3"
  6166. +   [(set (match_operand:QI 0 "register_operand" "=d")
  6167. +     (ashift:QI (match_operand:QI 1 "register_operand" "0")
  6168. +            (match_operand:QI 2 "general_operand" "dI")))]
  6169. +   ""
  6170. +   "asl%.b %2,%0")
  6171. + (define_insn ""
  6172. +   [(set (strict_low_part (match_operand:QI 0 "register_operand" "+d"))
  6173. +     (ashift:QI (match_dup 0)
  6174. +            (match_operand:QI 1 "general_operand" "dI")))]
  6175. +   ""
  6176. +   "asl%.b %1,%0")
  6177. + ;; On all 68k models, this makes faster code in a special case.
  6178. + (define_insn ""
  6179. +   [(set (match_operand:SI 0 "register_operand" "=d")
  6180. +     (ashiftrt:SI (match_operand:SI 1 "register_operand" "0")
  6181. +              (match_operand:SI 2 "immediate_operand" "i")))]
  6182. +   "(GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 16)" 
  6183. +   "swap %0\;ext%.l %0")
  6184. + ;; On the 68000, this makes faster code in a special case.
  6185. + (define_insn ""
  6186. +   [(set (match_operand:SI 0 "register_operand" "=d")
  6187. +     (ashiftrt:SI (match_operand:SI 1 "register_operand" "0")
  6188. +              (match_operand:SI 2 "immediate_operand" "i")))]
  6189. +   "(! TARGET_68020 && GET_CODE (operands[2]) == CONST_INT
  6190. +     && INTVAL (operands[2]) > 16 && INTVAL (operands[2]) <= 24)"
  6191. +   "*
  6192. + {
  6193. +   operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 16);
  6194. +   return \"swap %0\;asr%.w %2,%0\;ext%.l %0\";
  6195. + }")
  6196. + (define_insn "ashrsi3"
  6197. +   [(set (match_operand:SI 0 "register_operand" "=d")
  6198. +     (ashiftrt:SI (match_operand:SI 1 "register_operand" "0")
  6199. +              (match_operand:SI 2 "general_operand" "dI")))]
  6200. +   ""
  6201. +   "*
  6202. + {
  6203. +   return \"asr%.l %2,%0\";
  6204. + }")
  6205. + (define_insn "ashrhi3"
  6206. +   [(set (match_operand:HI 0 "register_operand" "=d")
  6207. +     (ashiftrt:HI (match_operand:HI 1 "register_operand" "0")
  6208. +              (match_operand:HI 2 "general_operand" "dI")))]
  6209. +   ""
  6210. +   "asr%.w %2,%0")
  6211. + (define_insn ""
  6212. +   [(set (strict_low_part (match_operand:HI 0 "register_operand" "+d"))
  6213. +     (ashiftrt:HI (match_dup 0)
  6214. +              (match_operand:HI 1 "general_operand" "dI")))]
  6215. +   ""
  6216. +   "asr%.w %1,%0")
  6217. + (define_insn "ashrqi3"
  6218. +   [(set (match_operand:QI 0 "register_operand" "=d")
  6219. +     (ashiftrt:QI (match_operand:QI 1 "register_operand" "0")
  6220. +              (match_operand:QI 2 "general_operand" "dI")))]
  6221. +   ""
  6222. +   "asr%.b %2,%0")
  6223. + (define_insn ""
  6224. +   [(set (strict_low_part (match_operand:QI 0 "register_operand" "+d"))
  6225. +     (ashiftrt:QI (match_dup 0)
  6226. +              (match_operand:QI 1 "general_operand" "dI")))]
  6227. +   ""
  6228. +   "asr%.b %1,%0")
  6229. + ;; logical shift instructions
  6230. + ;; On all 68k models, this makes faster code in a special case.
  6231. + (define_insn ""
  6232. +   [(set (match_operand:SI 0 "register_operand" "=d")
  6233. +     (lshift:SI (match_operand:SI 1 "register_operand" "0")
  6234. +            (match_operand:SI 2 "immediate_operand" "i")))]
  6235. +   "(GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 16)"
  6236. +   "*
  6237. + {
  6238. +   CC_STATUS_INIT;
  6239. +   return \"swap %0\;clr%.w %0\";
  6240. + }")
  6241. + ;; On the 68000, this makes faster code in a special case.
  6242. + (define_insn ""
  6243. +   [(set (match_operand:SI 0 "register_operand" "=d")
  6244. +     (lshift:SI (match_operand:SI 1 "register_operand" "0")
  6245. +            (match_operand:SI 2 "immediate_operand" "i")))]
  6246. +   "(! TARGET_68020 && GET_CODE (operands[2]) == CONST_INT
  6247. +     && INTVAL (operands[2]) > 16 && INTVAL (operands[2]) <= 24)"
  6248. +   "*
  6249. + {
  6250. +   CC_STATUS_INIT;
  6251. +   operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 16);
  6252. +   return \"lsl%.w %2,%0\;swap %0\;clr%.w %0\";
  6253. + }")
  6254. + (define_insn "lshlsi3"
  6255. +   [(set (match_operand:SI 0 "register_operand" "=d")
  6256. +     (lshift:SI (match_operand:SI 1 "register_operand" "0")
  6257. +            (match_operand:SI 2 "general_operand" "dI")))]
  6258. +   ""
  6259. +   "*
  6260. + {
  6261. +   if (operands[2] == const1_rtx)
  6262. +     return \"add%.l %0,%0\";
  6263. +   return \"lsl%.l %2,%0\";
  6264. + }")
  6265. + (define_insn "lshlhi3"
  6266. +   [(set (match_operand:HI 0 "register_operand" "=d")
  6267. +     (lshift:HI (match_operand:HI 1 "register_operand" "0")
  6268. +            (match_operand:HI 2 "general_operand" "dI")))]
  6269. +   ""
  6270. +   "lsl%.w %2,%0")
  6271. + (define_insn ""
  6272. +   [(set (strict_low_part (match_operand:HI 0 "register_operand" "+d"))
  6273. +     (lshift:HI (match_dup 0)
  6274. +            (match_operand:HI 1 "general_operand" "dI")))]
  6275. +   ""
  6276. +   "lsl%.w %1,%0")
  6277. + (define_insn "lshlqi3"
  6278. +   [(set (match_operand:QI 0 "register_operand" "=d")
  6279. +     (lshift:QI (match_operand:QI 1 "register_operand" "0")
  6280. +            (match_operand:QI 2 "general_operand" "dI")))]
  6281. +   ""
  6282. +   "lsl%.b %2,%0")
  6283. + (define_insn ""
  6284. +   [(set (strict_low_part (match_operand:QI 0 "register_operand" "+d"))
  6285. +     (lshift:QI (match_dup 0)
  6286. +            (match_operand:QI 1 "general_operand" "dI")))]
  6287. +   ""
  6288. +   "lsl%.b %1,%0")
  6289. + ;; On all 68k models, this makes faster code in a special case.
  6290. + (define_insn ""
  6291. +   [(set (match_operand:SI 0 "register_operand" "=d")
  6292. +     (lshiftrt:SI (match_operand:SI 1 "register_operand" "0")
  6293. +              (match_operand:SI 2 "immediate_operand" "i")))]
  6294. +   "(GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 16)" 
  6295. +   "*
  6296. + {
  6297. +   CC_STATUS_INIT;
  6298. +   return \"clr%.w %0\;swap %0\";
  6299. + }")
  6300. + ;; On the 68000, this makes faster code in a special case.
  6301. + (define_insn ""
  6302. +   [(set (match_operand:SI 0 "register_operand" "=d")
  6303. +     (lshiftrt:SI (match_operand:SI 1 "register_operand" "0")
  6304. +              (match_operand:SI 2 "immediate_operand" "i")))]
  6305. +   "(! TARGET_68020 && GET_CODE (operands[2]) == CONST_INT
  6306. +     && INTVAL (operands[2]) > 16 && INTVAL (operands[2]) <= 24)"
  6307. +   "*
  6308. + {
  6309. +   /* I think lsr%.w sets the CC properly.  */
  6310. +   operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 16);
  6311. +   return \"clr%.w %0\;swap %0\;lsr%.w %2,%0\";
  6312. + }")
  6313. + (define_insn "lshrsi3"
  6314. +   [(set (match_operand:SI 0 "register_operand" "=d")
  6315. +     (lshiftrt:SI (match_operand:SI 1 "register_operand" "0")
  6316. +              (match_operand:SI 2 "general_operand" "dI")))]
  6317. +   ""
  6318. +   "*
  6319. + {
  6320. +   return \"lsr%.l %2,%0\";
  6321. + }")
  6322. + (define_insn "lshrhi3"
  6323. +   [(set (match_operand:HI 0 "register_operand" "=d")
  6324. +     (lshiftrt:HI (match_operand:HI 1 "register_operand" "0")
  6325. +              (match_operand:HI 2 "general_operand" "dI")))]
  6326. +   ""
  6327. +   "lsr%.w %2,%0")
  6328. + (define_insn ""
  6329. +   [(set (strict_low_part (match_operand:HI 0 "register_operand" "+d"))
  6330. +     (lshiftrt:HI (match_dup 0)
  6331. +              (match_operand:HI 1 "general_operand" "dI")))]
  6332. +   ""
  6333. +   "lsr%.w %1,%0")
  6334. + (define_insn "lshrqi3"
  6335. +   [(set (match_operand:QI 0 "register_operand" "=d")
  6336. +     (lshiftrt:QI (match_operand:QI 1 "register_operand" "0")
  6337. +              (match_operand:QI 2 "general_operand" "dI")))]
  6338. +   ""
  6339. +   "lsr%.b %2,%0")
  6340. + (define_insn ""
  6341. +   [(set (strict_low_part (match_operand:QI 0 "register_operand" "+d"))
  6342. +     (lshiftrt:QI (match_dup 0)
  6343. +              (match_operand:QI 1 "general_operand" "dI")))]
  6344. +   ""
  6345. +   "lsr%.b %1,%0")
  6346. + ;; rotate instructions
  6347. + (define_insn "rotlsi3"
  6348. +   [(set (match_operand:SI 0 "register_operand" "=d")
  6349. +     (rotate:SI (match_operand:SI 1 "register_operand" "0")
  6350. +            (match_operand:SI 2 "general_operand" "dI")))]
  6351. +   ""
  6352. +   "rol%.l %2,%0")
  6353. + (define_insn "rotlhi3"
  6354. +   [(set (match_operand:HI 0 "register_operand" "=d")
  6355. +     (rotate:HI (match_operand:HI 1 "register_operand" "0")
  6356. +            (match_operand:HI 2 "general_operand" "dI")))]
  6357. +   ""
  6358. +   "rol%.w %2,%0")
  6359. + (define_insn ""
  6360. +   [(set (strict_low_part (match_operand:HI 0 "register_operand" "+d"))
  6361. +     (rotate:HI (match_dup 0)
  6362. +            (match_operand:HI 1 "general_operand" "dI")))]
  6363. +   ""
  6364. +   "rol%.w %1,%0")
  6365. + (define_insn "rotlqi3"
  6366. +   [(set (match_operand:QI 0 "register_operand" "=d")
  6367. +     (rotate:QI (match_operand:QI 1 "register_operand" "0")
  6368. +            (match_operand:QI 2 "general_operand" "dI")))]
  6369. +   ""
  6370. +   "rol%.b %2,%0")
  6371. + (define_insn ""
  6372. +   [(set (strict_low_part (match_operand:QI 0 "register_operand" "+d"))
  6373. +     (rotate:QI (match_dup 0)
  6374. +            (match_operand:QI 1 "general_operand" "dI")))]
  6375. +   ""
  6376. +   "rol%.b %1,%0")
  6377. + (define_insn "rotrsi3"
  6378. +   [(set (match_operand:SI 0 "register_operand" "=d")
  6379. +     (rotatert:SI (match_operand:SI 1 "register_operand" "0")
  6380. +              (match_operand:SI 2 "general_operand" "dI")))]
  6381. +   ""
  6382. +   "ror%.l %2,%0")
  6383. + (define_insn "rotrhi3"
  6384. +   [(set (match_operand:HI 0 "register_operand" "=d")
  6385. +     (rotatert:HI (match_operand:HI 1 "register_operand" "0")
  6386. +              (match_operand:HI 2 "general_operand" "dI")))]
  6387. +   ""
  6388. +   "ror%.w %2,%0")
  6389. + (define_insn ""
  6390. +   [(set (strict_low_part (match_operand:HI 0 "register_operand" "+d"))
  6391. +     (rotatert:HI (match_dup 0)
  6392. +              (match_operand:HI 1 "general_operand" "dI")))]
  6393. +   ""
  6394. +   "ror%.w %1,%0")
  6395. + (define_insn "rotrqi3"
  6396. +   [(set (match_operand:QI 0 "register_operand" "=d")
  6397. +     (rotatert:QI (match_operand:QI 1 "register_operand" "0")
  6398. +              (match_operand:QI 2 "general_operand" "dI")))]
  6399. +   ""
  6400. +   "ror%.b %2,%0")
  6401. + (define_insn ""
  6402. +   [(set (strict_low_part (match_operand:QI 0 "register_operand" "+d"))
  6403. +     (rotatert:QI (match_dup 0)
  6404. +              (match_operand:QI 1 "general_operand" "dI")))]
  6405. +   ""
  6406. +   "ror%.b %1,%0")
  6407. + ;; Special cases of bit-field insns which we should
  6408. + ;; recognize in preference to the general case.
  6409. + ;; These handle aligned 8-bit and 16-bit fields,
  6410. + ;; which can usually be done with move instructions.
  6411. + ;
  6412. + ; Special case for 32-bit field in memory.  This only occurs when 32-bit
  6413. + ; alignment of structure members is specified.
  6414. + ;
  6415. + ; The move is allowed to be odd byte aligned, because that's still faster
  6416. + ; than an odd byte aligned bit field instruction.
  6417. + ;
  6418. + (define_insn ""
  6419. +   [(set (zero_extract:SI (match_operand:QI 0 "nonimmediate_operand" "+o")
  6420. +              (match_operand:SI 1 "immediate_operand" "i")
  6421. +              (match_operand:SI 2 "immediate_operand" "i"))
  6422. +     (match_operand:SI 3 "general_operand" "rmi"))]
  6423. +   "TARGET_68020 && TARGET_BITFIELD
  6424. +    && GET_CODE (operands[1]) == CONST_INT
  6425. +    && (INTVAL (operands[1]) == 32)
  6426. +    && GET_CODE (operands[2]) == CONST_INT
  6427. +    && (INTVAL (operands[2]) % 8) == 0
  6428. +    && ! mode_dependent_address_p (XEXP (operands[0], 0))"
  6429. +   "*
  6430. + {
  6431. +   operands[0]
  6432. +     = adj_offsettable_operand (operands[0], INTVAL (operands[2]) / 8);
  6433. +   return \"move%.l %3,%0\";
  6434. + }")
  6435. + (define_insn ""
  6436. +   [(set (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "+do")
  6437. +              (match_operand:SI 1 "immediate_operand" "i")
  6438. +              (match_operand:SI 2 "immediate_operand" "i"))
  6439. +     (match_operand:SI 3 "general_operand" "d"))]
  6440. +   "TARGET_68020 && TARGET_BITFIELD
  6441. +    && GET_CODE (operands[1]) == CONST_INT
  6442. +    && (INTVAL (operands[1]) == 8 || INTVAL (operands[1]) == 16)
  6443. +    && GET_CODE (operands[2]) == CONST_INT
  6444. +    && INTVAL (operands[2]) % INTVAL (operands[1]) == 0
  6445. +    && (GET_CODE (operands[0]) == REG
  6446. +        || ! mode_dependent_address_p (XEXP (operands[0], 0)))"
  6447. +   "*
  6448. + {
  6449. +   if (REG_P (operands[0]))
  6450. +     {
  6451. +       if (INTVAL (operands[1]) + INTVAL (operands[2]) != 32)
  6452. +         return \"bfins %3,%0{%b2:%b1}\";
  6453. +     }
  6454. +   else
  6455. +     operands[0]
  6456. +       = adj_offsettable_operand (operands[0], INTVAL (operands[2]) / 8);
  6457. +   if (GET_CODE (operands[3]) == MEM)
  6458. +     operands[3] = adj_offsettable_operand (operands[3],
  6459. +                        (32 - INTVAL (operands[1])) / 8);
  6460. +   if (INTVAL (operands[1]) == 8)
  6461. +     return \"move%.b %3,%0\";
  6462. +   return \"move%.w %3,%0\";
  6463. + }")
  6464. + ;
  6465. + ; Special case for 32-bit field in memory.  This only occurs when 32-bit
  6466. + ; alignment of structure members is specified.
  6467. + ;
  6468. + ; The move is allowed to be odd byte aligned, because that's still faster
  6469. + ; than an odd byte aligned bit field instruction.
  6470. + ;
  6471. + (define_insn ""
  6472. +   [(set (match_operand:SI 0 "general_operand" "=rm")
  6473. +     (zero_extract:SI (match_operand:QI 1 "nonimmediate_operand" "o")
  6474. +              (match_operand:SI 2 "immediate_operand" "i")
  6475. +              (match_operand:SI 3 "immediate_operand" "i")))]
  6476. +   "TARGET_68020 && TARGET_BITFIELD
  6477. +    && GET_CODE (operands[2]) == CONST_INT
  6478. +    && (INTVAL (operands[2]) == 32)
  6479. +    && GET_CODE (operands[3]) == CONST_INT
  6480. +    && (INTVAL (operands[3]) % 8) == 0
  6481. +    && ! mode_dependent_address_p (XEXP (operands[1], 0))"
  6482. +   "*
  6483. + {
  6484. +   operands[1]
  6485. +     = adj_offsettable_operand (operands[1], INTVAL (operands[3]) / 8);
  6486. +   return \"move%.l %1,%0\";
  6487. + }")
  6488. + (define_insn ""
  6489. +   [(set (match_operand:SI 0 "general_operand" "=&d")
  6490. +     (zero_extract:SI (match_operand:SI 1 "nonimmediate_operand" "do")
  6491. +              (match_operand:SI 2 "immediate_operand" "i")
  6492. +              (match_operand:SI 3 "immediate_operand" "i")))]
  6493. +   "TARGET_68020 && TARGET_BITFIELD
  6494. +    && GET_CODE (operands[2]) == CONST_INT
  6495. +    && (INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16)
  6496. +    && GET_CODE (operands[3]) == CONST_INT
  6497. +    && INTVAL (operands[3]) % INTVAL (operands[2]) == 0
  6498. +    && (GET_CODE (operands[1]) == REG
  6499. +        || ! mode_dependent_address_p (XEXP (operands[1], 0)))"
  6500. +   "*
  6501. + {
  6502. +   cc_status.flags |= CC_NOT_NEGATIVE;
  6503. +   if (REG_P (operands[1]))
  6504. +     {
  6505. +       if (INTVAL (operands[2]) + INTVAL (operands[3]) != 32)
  6506. +     return \"bfextu %1{%b3:%b2},%0\";
  6507. +     }
  6508. +   else
  6509. +     operands[1]
  6510. +       = adj_offsettable_operand (operands[1], INTVAL (operands[3]) / 8);
  6511. +   output_asm_insn (\"clr%.l %0\", operands);
  6512. +   if (GET_CODE (operands[0]) == MEM)
  6513. +     operands[0] = adj_offsettable_operand (operands[0],
  6514. +                        (32 - INTVAL (operands[1])) / 8);
  6515. +   if (INTVAL (operands[2]) == 8)
  6516. +     return \"move%.b %1,%0\";
  6517. +   return \"move%.w %1,%0\";
  6518. + }")
  6519. + ;
  6520. + ; Special case for 32-bit field in memory.  This only occurs when 32-bit
  6521. + ; alignment of structure members is specified.
  6522. + ;
  6523. + ; The move is allowed to be odd byte aligned, because that's still faster
  6524. + ; than an odd byte aligned bit field instruction.
  6525. + ;
  6526. + (define_insn ""
  6527. +   [(set (match_operand:SI 0 "general_operand" "=rm")
  6528. +     (sign_extract:SI (match_operand:QI 1 "nonimmediate_operand" "o")
  6529. +              (match_operand:SI 2 "immediate_operand" "i")
  6530. +              (match_operand:SI 3 "immediate_operand" "i")))]
  6531. +   "TARGET_68020 && TARGET_BITFIELD
  6532. +    && GET_CODE (operands[2]) == CONST_INT
  6533. +    && (INTVAL (operands[2]) == 32)
  6534. +    && GET_CODE (operands[3]) == CONST_INT
  6535. +    && (INTVAL (operands[3]) % 8) == 0
  6536. +    && ! mode_dependent_address_p (XEXP (operands[1], 0))"
  6537. +   "*
  6538. + {
  6539. +   operands[1]
  6540. +     = adj_offsettable_operand (operands[1], INTVAL (operands[3]) / 8);
  6541. +   return \"move%.l %1,%0\";
  6542. + }")
  6543. + (define_insn ""
  6544. +   [(set (match_operand:SI 0 "general_operand" "=d")
  6545. +     (sign_extract:SI (match_operand:SI 1 "nonimmediate_operand" "do")
  6546. +              (match_operand:SI 2 "immediate_operand" "i")
  6547. +              (match_operand:SI 3 "immediate_operand" "i")))]
  6548. +   "TARGET_68020 && TARGET_BITFIELD
  6549. +    && GET_CODE (operands[2]) == CONST_INT
  6550. +    && (INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16)
  6551. +    && GET_CODE (operands[3]) == CONST_INT
  6552. +    && INTVAL (operands[3]) % INTVAL (operands[2]) == 0
  6553. +    && (GET_CODE (operands[1]) == REG
  6554. +        || ! mode_dependent_address_p (XEXP (operands[1], 0)))"
  6555. +   "*
  6556. + {
  6557. +   if (REG_P (operands[1]))
  6558. +     {
  6559. +       if (INTVAL (operands[2]) + INTVAL (operands[3]) != 32)
  6560. +     return \"bfexts %1{%b3:%b2},%0\";
  6561. +     }
  6562. +   else
  6563. +     operands[1]
  6564. +       = adj_offsettable_operand (operands[1], INTVAL (operands[3]) / 8);
  6565. +   if (INTVAL (operands[2]) == 8)
  6566. +     return \"move%.b %1,%0\;extb%.l %0\";
  6567. +   return \"move%.w %1,%0\;ext%.l %0\";
  6568. + }")
  6569. + ;; Bit field instructions, general cases.
  6570. + ;; "o,d" constraint causes a nonoffsettable memref to match the "o"
  6571. + ;; so that its address is reloaded.
  6572. + (define_insn "extv"
  6573. +   [(set (match_operand:SI 0 "general_operand" "=d,d")
  6574. +     (sign_extract:SI (match_operand:QI 1 "nonimmediate_operand" "o,d")
  6575. +              (match_operand:SI 2 "general_operand" "di,di")
  6576. +              (match_operand:SI 3 "general_operand" "di,di")))]
  6577. +   "TARGET_68020 && TARGET_BITFIELD"
  6578. +   "bfexts %1{%b3:%b2},%0")
  6579. + (define_insn "extzv"
  6580. +   [(set (match_operand:SI 0 "general_operand" "=d,d")
  6581. +     (zero_extract:SI (match_operand:QI 1 "nonimmediate_operand" "o,d")
  6582. +              (match_operand:SI 2 "general_operand" "di,di")
  6583. +              (match_operand:SI 3 "general_operand" "di,di")))]
  6584. +   "TARGET_68020 && TARGET_BITFIELD"
  6585. +   "*
  6586. + {
  6587. +   if (GET_CODE (operands[2]) == CONST_INT)
  6588. +     {
  6589. +       if (INTVAL (operands[2]) != 32)
  6590. +     cc_status.flags |= CC_NOT_NEGATIVE;
  6591. +     }
  6592. +   else
  6593. +     {
  6594. +       CC_STATUS_INIT;
  6595. +     }
  6596. +   return \"bfextu %1{%b3:%b2},%0\";
  6597. + }")
  6598. + (define_insn ""
  6599. +   [(set (zero_extract:SI (match_operand:QI 0 "nonimmediate_operand" "+o,d")
  6600. +              (match_operand:SI 1 "general_operand" "di,di")
  6601. +              (match_operand:SI 2 "general_operand" "di,di"))
  6602. +         (xor:SI (zero_extract:SI (match_dup 0) (match_dup 1) (match_dup 2))
  6603. +         (match_operand 3 "immediate_operand" "i,i")))]
  6604. +   "TARGET_68020 && TARGET_BITFIELD
  6605. +    && GET_CODE (operands[3]) == CONST_INT
  6606. +    && (INTVAL (operands[3]) == -1
  6607. +        || (GET_CODE (operands[1]) == CONST_INT
  6608. +            && (~ INTVAL (operands[3]) & ((1 << INTVAL (operands[1]))- 1)) == 0))"
  6609. +   "*
  6610. + {
  6611. +   CC_STATUS_INIT;
  6612. +   return \"bfchg %0{%b2:%b1}\";
  6613. + }")
  6614. + (define_insn ""
  6615. +   [(set (zero_extract:SI (match_operand:QI 0 "nonimmediate_operand" "+o,d")
  6616. +              (match_operand:SI 1 "general_operand" "di,di")
  6617. +              (match_operand:SI 2 "general_operand" "di,di"))
  6618. +     (const_int 0))]
  6619. +   "TARGET_68020 && TARGET_BITFIELD"
  6620. +   "*
  6621. + {
  6622. +   CC_STATUS_INIT;
  6623. +   return \"bfclr %0{%b2:%b1}\";
  6624. + }")
  6625. + (define_insn ""
  6626. +   [(set (zero_extract:SI (match_operand:QI 0 "nonimmediate_operand" "+o,d")
  6627. +              (match_operand:SI 1 "general_operand" "di,di")
  6628. +              (match_operand:SI 2 "general_operand" "di,di"))
  6629. +     (const_int -1))]
  6630. +   "TARGET_68020 && TARGET_BITFIELD"
  6631. +   "*
  6632. + {
  6633. +   CC_STATUS_INIT;
  6634. +   return \"bfset %0{%b2:%b1}\";
  6635. + }")
  6636. + (define_insn "insv"
  6637. +   [(set (zero_extract:SI (match_operand:QI 0 "nonimmediate_operand" "+o,d")
  6638. +              (match_operand:SI 1 "general_operand" "di,di")
  6639. +              (match_operand:SI 2 "general_operand" "di,di"))
  6640. +     (match_operand:SI 3 "general_operand" "d,d"))]
  6641. +   "TARGET_68020 && TARGET_BITFIELD"
  6642. +   "bfins %3,%0{%b2:%b1}")
  6643. + ;; Now recognize bit field insns that operate on registers
  6644. + ;; (or at least were intended to do so).
  6645. + (define_insn ""
  6646. +   [(set (match_operand:SI 0 "general_operand" "=d")
  6647. +     (sign_extract:SI (match_operand:SI 1 "nonimmediate_operand" "d")
  6648. +              (match_operand:SI 2 "general_operand" "di")
  6649. +              (match_operand:SI 3 "general_operand" "di")))]
  6650. +   "TARGET_68020 && TARGET_BITFIELD"
  6651. +   "bfexts %1{%b3:%b2},%0")
  6652. + (define_insn ""
  6653. +   [(set (match_operand:SI 0 "general_operand" "=d")
  6654. +     (zero_extract:SI (match_operand:SI 1 "nonimmediate_operand" "d")
  6655. +              (match_operand:SI 2 "general_operand" "di")
  6656. +              (match_operand:SI 3 "general_operand" "di")))]
  6657. +   "TARGET_68020 && TARGET_BITFIELD"
  6658. +   "*
  6659. + {
  6660. +   if (GET_CODE (operands[2]) == CONST_INT)
  6661. +     {
  6662. +       if (INTVAL (operands[2]) != 32)
  6663. +     cc_status.flags |= CC_NOT_NEGATIVE;
  6664. +     }
  6665. +   else
  6666. +     {
  6667. +       CC_STATUS_INIT;
  6668. +     }
  6669. +   return \"bfextu %1{%b3:%b2},%0\";
  6670. + }")
  6671. + (define_insn ""
  6672. +   [(set (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "+d")
  6673. +              (match_operand:SI 1 "general_operand" "di")
  6674. +              (match_operand:SI 2 "general_operand" "di"))
  6675. +     (const_int 0))]
  6676. +   "TARGET_68020 && TARGET_BITFIELD"
  6677. +   "*
  6678. + {
  6679. +   CC_STATUS_INIT;
  6680. +   return \"bfclr %0{%b2:%b1}\";
  6681. + }")
  6682. + (define_insn ""
  6683. +   [(set (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "+d")
  6684. +              (match_operand:SI 1 "general_operand" "di")
  6685. +              (match_operand:SI 2 "general_operand" "di"))
  6686. +     (const_int -1))]
  6687. +   "TARGET_68020 && TARGET_BITFIELD"
  6688. +   "*
  6689. + {
  6690. +   CC_STATUS_INIT;
  6691. +   return \"bfset %0{%b2:%b1}\";
  6692. + }")
  6693. + (define_insn ""
  6694. +   [(set (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "+d")
  6695. +              (match_operand:SI 1 "general_operand" "di")
  6696. +              (match_operand:SI 2 "general_operand" "di"))
  6697. +     (match_operand:SI 3 "general_operand" "d"))]
  6698. +   "TARGET_68020 && TARGET_BITFIELD"
  6699. +   "*
  6700. + {
  6701. + #if 0
  6702. +   /* These special cases are now recognized by a specific pattern.  */
  6703. +   if (GET_CODE (operands[1]) == CONST_INT && GET_CODE (operands[2]) == CONST_INT
  6704. +       && INTVAL (operands[1]) == 16 && INTVAL (operands[2]) == 16)
  6705. +     return \"move%.w %3,%0\";
  6706. +   if (GET_CODE (operands[1]) == CONST_INT && GET_CODE (operands[2]) == CONST_INT
  6707. +       && INTVAL (operands[1]) == 24 && INTVAL (operands[2]) == 8)
  6708. +     return \"move%.b %3,%0\";
  6709. + #endif
  6710. +   return \"bfins %3,%0{%b2:%b1}\";
  6711. + }")
  6712. + ;; Special patterns for optimizing bit-field instructions.
  6713. + (define_insn ""
  6714. +   [(set (cc0)
  6715. +     (zero_extract:SI (match_operand:QI 0 "memory_operand" "o")
  6716. +              (match_operand:SI 1 "general_operand" "di")
  6717. +              (match_operand:SI 2 "general_operand" "di")))]
  6718. +   "TARGET_68020 && TARGET_BITFIELD
  6719. +    && GET_CODE (operands[1]) == CONST_INT"
  6720. +   "*
  6721. + {
  6722. +   if (operands[1] == const1_rtx
  6723. +       && GET_CODE (operands[2]) == CONST_INT)
  6724. +     {    
  6725. +       int width = GET_CODE (operands[0]) == REG ? 31 : 7;
  6726. +       return output_btst (operands,
  6727. +               gen_rtx (CONST_INT, VOIDmode,
  6728. +                    width - INTVAL (operands[2])),
  6729. +               operands[0],
  6730. +               insn, 1000);
  6731. +       /* Pass 1000 as SIGNPOS argument so that btst will
  6732. +          not think we are testing the sign bit for an `and'
  6733. +      and assume that nonzero implies a negative result.  */
  6734. +     }
  6735. +   if (INTVAL (operands[1]) != 32)
  6736. +     cc_status.flags = CC_NOT_NEGATIVE;
  6737. +   return \"bftst %0{%b2:%b1}\";
  6738. + }")
  6739. +   
  6740. + ;;; now handle the register cases
  6741. + (define_insn ""
  6742. +   [(set (cc0)
  6743. +     (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "d")
  6744. +              (match_operand:SI 1 "general_operand" "di")
  6745. +              (match_operand:SI 2 "general_operand" "di")))]
  6746. +   "TARGET_68020 && TARGET_BITFIELD
  6747. +    && GET_CODE (operands[1]) == CONST_INT"
  6748. +   "*
  6749. + {
  6750. +   if (operands[1] == const1_rtx
  6751. +       && GET_CODE (operands[2]) == CONST_INT)
  6752. +     {    
  6753. +       int width = GET_CODE (operands[0]) == REG ? 31 : 7;
  6754. +       return output_btst (operands,
  6755. +               gen_rtx (CONST_INT, VOIDmode,
  6756. +                    width - INTVAL (operands[2])),
  6757. +               operands[0],
  6758. +               insn, 1000);
  6759. +       /* Pass 1000 as SIGNPOS argument so that btst will
  6760. +          not think we are testing the sign bit for an `and'
  6761. +      and assume that nonzero implies a negative result.  */
  6762. +     }
  6763. +   if (INTVAL (operands[1]) != 32)
  6764. +     cc_status.flags = CC_NOT_NEGATIVE;
  6765. +   return \"bftst %0{%b2:%b1}\";
  6766. + }")
  6767. + (define_insn "seq"
  6768. +   [(set (match_operand:QI 0 "general_operand" "=d")
  6769. +     (eq:QI (cc0) (const_int 0)))]
  6770. +   ""
  6771. +   "*
  6772. +   cc_status = cc_prev_status;
  6773. +   OUTPUT_JUMP (\"seq %0\", \"fseq %0\", \"seq %0\");
  6774. + ")
  6775. + (define_insn "sne"
  6776. +   [(set (match_operand:QI 0 "general_operand" "=d")
  6777. +     (ne:QI (cc0) (const_int 0)))]
  6778. +   ""
  6779. +   "*
  6780. +   cc_status = cc_prev_status;
  6781. +   OUTPUT_JUMP (\"sne %0\", \"fsne %0\", \"sne %0\");
  6782. + ")
  6783. + (define_insn "sgt"
  6784. +   [(set (match_operand:QI 0 "general_operand" "=d")
  6785. +     (gt:QI (cc0) (const_int 0)))]
  6786. +   ""
  6787. +   "*
  6788. +   cc_status = cc_prev_status;
  6789. +   OUTPUT_JUMP (\"sgt %0\", \"fsgt %0\", 0);
  6790. + ")
  6791. + (define_insn "sgtu"
  6792. +   [(set (match_operand:QI 0 "general_operand" "=d")
  6793. +     (gtu:QI (cc0) (const_int 0)))]
  6794. +   ""
  6795. +   "* cc_status = cc_prev_status;
  6796. +      return \"shi %0\"; ")
  6797. + (define_insn "slt"
  6798. +   [(set (match_operand:QI 0 "general_operand" "=d")
  6799. +     (lt:QI (cc0) (const_int 0)))]
  6800. +   ""
  6801. +   "* cc_status = cc_prev_status;
  6802. +      OUTPUT_JUMP (\"slt %0\", \"fslt %0\", \"smi %0\"); ")
  6803. + (define_insn "sltu"
  6804. +   [(set (match_operand:QI 0 "general_operand" "=d")
  6805. +     (ltu:QI (cc0) (const_int 0)))]
  6806. +   ""
  6807. +   "* cc_status = cc_prev_status;
  6808. +      return \"scs %0\"; ")
  6809. + (define_insn "sge"
  6810. +   [(set (match_operand:QI 0 "general_operand" "=d")
  6811. +     (ge:QI (cc0) (const_int 0)))]
  6812. +   ""
  6813. +   "* cc_status = cc_prev_status;
  6814. +      OUTPUT_JUMP (\"sge %0\", \"fsge %0\", \"spl %0\"); ")
  6815. + (define_insn "sgeu"
  6816. +   [(set (match_operand:QI 0 "general_operand" "=d")
  6817. +     (geu:QI (cc0) (const_int 0)))]
  6818. +   ""
  6819. +   "* cc_status = cc_prev_status;
  6820. +      return \"scc %0\"; ")
  6821. + (define_insn "sle"
  6822. +   [(set (match_operand:QI 0 "general_operand" "=d")
  6823. +     (le:QI (cc0) (const_int 0)))]
  6824. +   ""
  6825. +   "*
  6826. +   cc_status = cc_prev_status;
  6827. +   OUTPUT_JUMP (\"sle %0\", \"fsle %0\", 0);
  6828. + ")
  6829. + (define_insn "sleu"
  6830. +   [(set (match_operand:QI 0 "general_operand" "=d")
  6831. +     (leu:QI (cc0) (const_int 0)))]
  6832. +   ""
  6833. +   "* cc_status = cc_prev_status;
  6834. +      return \"sls %0\"; ")
  6835. + ;; Basic conditional jump instructions.
  6836. + (define_insn "beq"
  6837. +   [(set (pc)
  6838. +     (if_then_else (eq (cc0)
  6839. +               (const_int 0))
  6840. +               (label_ref (match_operand 0 "" ""))
  6841. +               (pc)))]
  6842. +   ""
  6843. +   "*
  6844. + {
  6845. + #ifdef MOTOROLA
  6846. +   OUTPUT_JUMP (\"jbeq %l0\", \"fbeq %l0\", \"jbeq %l0\");
  6847. + #else
  6848. +   OUTPUT_JUMP (\"jeq %l0\", \"fjeq %l0\", \"jeq %l0\");
  6849. + #endif
  6850. + }")
  6851. + (define_insn "bne"
  6852. +   [(set (pc)
  6853. +     (if_then_else (ne (cc0)
  6854. +               (const_int 0))
  6855. +               (label_ref (match_operand 0 "" ""))
  6856. +               (pc)))]
  6857. +   ""
  6858. +   "*
  6859. + {
  6860. + #ifdef MOTOROLA
  6861. +   OUTPUT_JUMP (\"jbne %l0\", \"fbne %l0\", \"jbne %l0\");
  6862. + #else
  6863. +   OUTPUT_JUMP (\"jne %l0\", \"fjne %l0\", \"jne %l0\");
  6864. + #endif
  6865. + }")
  6866. + (define_insn "bgt"
  6867. +   [(set (pc)
  6868. +     (if_then_else (gt (cc0)
  6869. +               (const_int 0))
  6870. +               (label_ref (match_operand 0 "" ""))
  6871. +               (pc)))]
  6872. +   ""
  6873. +   "*
  6874. + #ifdef MOTOROLA
  6875. +   OUTPUT_JUMP (\"jbgt %l0\", \"fbgt %l0\", 0);
  6876. + #else
  6877. +   OUTPUT_JUMP (\"jgt %l0\", \"fjgt %l0\", 0);
  6878. + #endif
  6879. + ")
  6880. + (define_insn "bgtu"
  6881. +   [(set (pc)
  6882. +     (if_then_else (gtu (cc0)
  6883. +                (const_int 0))
  6884. +               (label_ref (match_operand 0 "" ""))
  6885. +               (pc)))]
  6886. +   ""
  6887. +   "*
  6888. + #ifdef MOTOROLA
  6889. +   return \"jbhi %l0\";
  6890. + #else
  6891. +   return \"jhi %l0\";
  6892. + #endif
  6893. + ")
  6894. + (define_insn "blt"
  6895. +   [(set (pc)
  6896. +     (if_then_else (lt (cc0)
  6897. +               (const_int 0))
  6898. +               (label_ref (match_operand 0 "" ""))
  6899. +               (pc)))]
  6900. +   ""
  6901. +   "*
  6902. + #ifdef MOTOROLA
  6903. +   OUTPUT_JUMP (\"jblt %l0\", \"fblt %l0\", \"jbmi %l0\");
  6904. + #else
  6905. +   OUTPUT_JUMP (\"jlt %l0\", \"fjlt %l0\", \"jmi %l0\");
  6906. + #endif
  6907. + ")
  6908. + (define_insn "bltu"
  6909. +   [(set (pc)
  6910. +     (if_then_else (ltu (cc0)
  6911. +                (const_int 0))
  6912. +               (label_ref (match_operand 0 "" ""))
  6913. +               (pc)))]
  6914. +   ""
  6915. +   "*
  6916. + #ifdef MOTOROLA
  6917. +   return \"jbcs %l0\";
  6918. + #else
  6919. +   return \"jcs %l0\";
  6920. + #endif
  6921. + ")
  6922. + (define_insn "bge"
  6923. +   [(set (pc)
  6924. +     (if_then_else (ge (cc0)
  6925. +               (const_int 0))
  6926. +               (label_ref (match_operand 0 "" ""))
  6927. +               (pc)))]
  6928. +   ""
  6929. +   "*
  6930. + #ifdef MOTOROLA
  6931. +   OUTPUT_JUMP (\"jbge %l0\", \"fbge %l0\", \"jbpl %l0\");
  6932. + #else
  6933. +   OUTPUT_JUMP (\"jge %l0\", \"fjge %l0\", \"jpl %l0\");
  6934. + #endif
  6935. + ")
  6936. + (define_insn "bgeu"
  6937. +   [(set (pc)
  6938. +     (if_then_else (geu (cc0)
  6939. +                (const_int 0))
  6940. +               (label_ref (match_operand 0 "" ""))
  6941. +               (pc)))]
  6942. +   ""
  6943. +   "*
  6944. + #ifdef MOTOROLA
  6945. +   return \"jbcc %l0\";
  6946. + #else
  6947. +   return \"jcc %l0\";
  6948. + #endif
  6949. + ")
  6950. + (define_insn "ble"
  6951. +   [(set (pc)
  6952. +     (if_then_else (le (cc0)
  6953. +               (const_int 0))
  6954. +               (label_ref (match_operand 0 "" ""))
  6955. +               (pc)))]
  6956. +   ""
  6957. +   "*
  6958. + #ifdef MOTOROLA
  6959. +   OUTPUT_JUMP (\"jble %l0\", \"fble %l0\", 0);
  6960. + #else
  6961. +   OUTPUT_JUMP (\"jle %l0\", \"fjle %l0\", 0);
  6962. + #endif
  6963. + ")
  6964. + (define_insn "bleu"
  6965. +   [(set (pc)
  6966. +     (if_then_else (leu (cc0)
  6967. +                (const_int 0))
  6968. +               (label_ref (match_operand 0 "" ""))
  6969. +               (pc)))]
  6970. +   ""
  6971. +   "*
  6972. + #ifdef MOTOROLA
  6973. +   return \"jbls %l0\";
  6974. + #else
  6975. +   return \"jls %l0\";
  6976. + #endif
  6977. + ")
  6978. + ;; Negated conditional jump instructions.
  6979. + (define_insn ""
  6980. +   [(set (pc)
  6981. +     (if_then_else (eq (cc0)
  6982. +               (const_int 0))
  6983. +               (pc)
  6984. +               (label_ref (match_operand 0 "" ""))))]
  6985. +   ""
  6986. +   "*
  6987. + {
  6988. + #ifdef MOTOROLA
  6989. +   OUTPUT_JUMP (\"jbne %l0\", \"fbne %l0\", \"jbne %l0\");
  6990. + #else
  6991. +   OUTPUT_JUMP (\"jne %l0\", \"fjne %l0\", \"jne %l0\");
  6992. + #endif
  6993. + }")
  6994. + (define_insn ""
  6995. +   [(set (pc)
  6996. +     (if_then_else (ne (cc0)
  6997. +               (const_int 0))
  6998. +               (pc)
  6999. +               (label_ref (match_operand 0 "" ""))))]
  7000. +   ""
  7001. +   "*
  7002. + {
  7003. + #ifdef MOTOROLA
  7004. +   OUTPUT_JUMP (\"jbeq %l0\", \"fbeq %l0\", \"jbeq %l0\");
  7005. + #else
  7006. +   OUTPUT_JUMP (\"jeq %l0\", \"fjeq %l0\", \"jeq %l0\");
  7007. + #endif
  7008. + }")
  7009. + (define_insn ""
  7010. +   [(set (pc)
  7011. +     (if_then_else (gt (cc0)
  7012. +               (const_int 0))
  7013. +               (pc)
  7014. +               (label_ref (match_operand 0 "" ""))))]
  7015. +   ""
  7016. +   "*
  7017. + #ifdef MOTOROLA
  7018. +   OUTPUT_JUMP (\"jble %l0\", \"fbngt %l0\", 0);
  7019. + #else
  7020. +   OUTPUT_JUMP (\"jle %l0\", \"fjngt %l0\", 0);
  7021. + #endif
  7022. + ")
  7023. + (define_insn ""
  7024. +   [(set (pc)
  7025. +     (if_then_else (gtu (cc0)
  7026. +                (const_int 0))
  7027. +               (pc)
  7028. +               (label_ref (match_operand 0 "" ""))))]
  7029. +   ""
  7030. +   "*
  7031. + #ifdef MOTOROLA
  7032. +   return \"jbls %l0\";
  7033. + #else
  7034. +   return \"jls %l0\";
  7035. + #endif
  7036. + ")
  7037. + (define_insn ""
  7038. +   [(set (pc)
  7039. +     (if_then_else (lt (cc0)
  7040. +               (const_int 0))
  7041. +               (pc)
  7042. +               (label_ref (match_operand 0 "" ""))))]
  7043. +   ""
  7044. +   "*
  7045. + #ifdef MOTOROLA
  7046. +   OUTPUT_JUMP (\"jbge %l0\", \"fbnlt %l0\", \"jbpl %l0\");
  7047. + #else
  7048. +   OUTPUT_JUMP (\"jge %l0\", \"fjnlt %l0\", \"jpl %l0\");
  7049. + #endif
  7050. + ")
  7051. + (define_insn ""
  7052. +   [(set (pc)
  7053. +     (if_then_else (ltu (cc0)
  7054. +                (const_int 0))
  7055. +               (pc)
  7056. +               (label_ref (match_operand 0 "" ""))))]
  7057. +   ""
  7058. +   "*
  7059. + #ifdef MOTOROLA
  7060. +   return \"jbcc %l0\";
  7061. + #else
  7062. +   return \"jcc %l0\";
  7063. + #endif
  7064. + ")
  7065. + (define_insn ""
  7066. +   [(set (pc)
  7067. +     (if_then_else (ge (cc0)
  7068. +               (const_int 0))
  7069. +               (pc)
  7070. +               (label_ref (match_operand 0 "" ""))))]
  7071. +   ""
  7072. +   "*
  7073. + #ifdef MOTOROLA
  7074. +   OUTPUT_JUMP (\"jblt %l0\", \"fbnge %l0\", \"jbmi %l0\");
  7075. + #else
  7076. +   OUTPUT_JUMP (\"jlt %l0\", \"fjnge %l0\", \"jmi %l0\");
  7077. + #endif
  7078. + ")
  7079. + (define_insn ""
  7080. +   [(set (pc)
  7081. +     (if_then_else (geu (cc0)
  7082. +                (const_int 0))
  7083. +               (pc)
  7084. +               (label_ref (match_operand 0 "" ""))))]
  7085. +   ""
  7086. +   "*
  7087. + #ifdef MOTOROLA
  7088. +   return \"jbcs %l0\";
  7089. + #else
  7090. +   return \"jcs %l0\";
  7091. + #endif
  7092. + ")
  7093. + (define_insn ""
  7094. +   [(set (pc)
  7095. +     (if_then_else (le (cc0)
  7096. +               (const_int 0))
  7097. +               (pc)
  7098. +               (label_ref (match_operand 0 "" ""))))]
  7099. +   ""
  7100. +   "*
  7101. + #ifdef MOTOROLA
  7102. +   OUTPUT_JUMP (\"jbgt %l0\", \"fbnle %l0\", 0);
  7103. + #else
  7104. +   OUTPUT_JUMP (\"jgt %l0\", \"fjnle %l0\", 0);
  7105. + #endif
  7106. + ")
  7107. + (define_insn ""
  7108. +   [(set (pc)
  7109. +     (if_then_else (leu (cc0)
  7110. +                (const_int 0))
  7111. +               (pc)
  7112. +               (label_ref (match_operand 0 "" ""))))]
  7113. +   ""
  7114. +   "*
  7115. + #ifdef MOTOROLA
  7116. +   return \"jbhi %l0\";
  7117. + #else
  7118. +   return \"jhi %l0\";
  7119. + #endif
  7120. + ")
  7121. + ;; Unconditional and other jump instructions
  7122. + (define_insn "jump"
  7123. +   [(set (pc)
  7124. +     (label_ref (match_operand 0 "" "")))]
  7125. +   ""
  7126. +   "*
  7127. + #ifdef MOTOROLA
  7128. +   return \"jbra %l0\";
  7129. + #else
  7130. +   return \"jra %l0\";
  7131. + #endif
  7132. + ")
  7133. + ;; We support two different ways of handling dispatch tables.
  7134. + ;; The NeXT uses absolute tables, and other machines use relative.
  7135. + ;; This define_expand can generate either kind.
  7136. + (define_expand "tablejump"
  7137. +   [(parallel [(set (pc) (match_operand 0 "" ""))
  7138. +           (use (label_ref (match_operand 1 "" "")))])]
  7139. +   ""
  7140. +   "
  7141. + {
  7142. + #ifdef CASE_VECTOR_PC_RELATIVE
  7143. +     operands[0] = gen_rtx (PLUS, SImode, pc_rtx, operands[0]);
  7144. + #endif
  7145. + }")
  7146. + ;; Jump to variable address from dispatch table of absolute addresses.
  7147. + (define_insn ""
  7148. +   [(set (pc) (match_operand:SI 0 "register_operand" "a"))
  7149. +    (use (label_ref (match_operand 1 "" "")))]
  7150. +   ""
  7151. +   "*
  7152. + #ifdef MOTOROLA
  7153. +   return \"jmp (%0)\";
  7154. + #else
  7155. +   return \"jmp %0@\";
  7156. + #endif
  7157. + ")
  7158. + ;; Jump to variable address from dispatch table of relative addresses.
  7159. + (define_insn ""
  7160. +   [(set (pc)
  7161. +     (plus:SI (pc) (match_operand:HI 0 "register_operand" "r")))
  7162. +    (use (label_ref (match_operand 1 "" "")))]
  7163. +   ""
  7164. +   "*
  7165. + #ifdef ASM_RETURN_CASE_JUMP
  7166. +  ASM_RETURN_CASE_JUMP;
  7167. + #else
  7168. + #ifdef SGS
  7169. + #ifdef ASM_OUTPUT_CASE_LABEL
  7170. +   return \"jmp 6(%%pc,%0.w)\";
  7171. + #else
  7172. + #ifdef CRDS
  7173. +   return \"jmp 2(pc,%0.w)\";
  7174. + #else
  7175. +   return \"jmp 2(%%pc,%0.w)\";
  7176. + #endif  /* end !CRDS */
  7177. + #endif
  7178. + #else /* not SGS */
  7179. + #ifdef MOTOROLA
  7180. +   return \"jmp (2,pc,%0.w)\";
  7181. + #else
  7182. +   return \"jmp pc@(2,%0:w)\";
  7183. + #endif
  7184. + #endif
  7185. + #endif
  7186. + ")
  7187. + ;; Decrement-and-branch insns.
  7188. + (define_insn ""
  7189. +   [(set (pc)
  7190. +     (if_then_else
  7191. +      (ne (match_operand:HI 0 "general_operand" "+g")
  7192. +          (const_int 0))
  7193. +      (label_ref (match_operand 1 "" ""))
  7194. +      (pc)))
  7195. +    (set (match_dup 0)
  7196. +     (plus:HI (match_dup 0)
  7197. +          (const_int -1)))]
  7198. +   ""
  7199. +   "*
  7200. + {
  7201. +   CC_STATUS_INIT;
  7202. +   if (DATA_REG_P (operands[0]))
  7203. +     return \"dbra %0,%l1\";
  7204. +   if (GET_CODE (operands[0]) == MEM)
  7205. +     {
  7206. + #ifdef MOTOROLA
  7207. + #ifdef NO_ADDSUB_Q
  7208. +       return \"sub%.w %#1,%0\;jbcc %l1\";
  7209. + #else
  7210. +       return \"subq%.w %#1,%0\;jbcc %l1\";
  7211. + #endif
  7212. + #else /* not MOTOROLA */
  7213. +       return \"subqw %#1,%0\;jcc %l1\";
  7214. + #endif
  7215. +     }
  7216. + #ifdef MOTOROLA
  7217. + #ifdef SGS_CMP_ORDER
  7218. + #ifdef NO_ADDSUB_Q
  7219. +   return \"sub%.w %#1,%0\;cmp%.w %0,%#-1\;jbne %l1\";
  7220. + #else
  7221. +   return \"subq%.w %#1,%0\;cmp%.w %0,%#-1\;jbne %l1\";
  7222. + #endif
  7223. + #else /* not SGS_CMP_ORDER */
  7224. +   return \"subq%.w %#1,%0\;cmp%.w %#-1,%0\;jbne %l1\";
  7225. + #endif
  7226. + #else /* not MOTOROLA */
  7227. +   return \"subqw %#1,%0\;cmpw %#-1,%0\;jne %l1\";
  7228. + #endif
  7229. + }")
  7230. + (define_insn ""
  7231. +   [(set (pc)
  7232. +     (if_then_else
  7233. +      (ne (match_operand:SI 0 "general_operand" "+g")
  7234. +          (const_int 0))
  7235. +      (label_ref (match_operand 1 "" ""))
  7236. +      (pc)))
  7237. +    (set (match_dup 0)
  7238. +     (plus:SI (match_dup 0)
  7239. +          (const_int -1)))]
  7240. +   ""
  7241. +   "*
  7242. + {
  7243. +   CC_STATUS_INIT;
  7244. + #ifdef MOTOROLA
  7245. + #ifdef NO_ADDSUB_Q
  7246. +   if (DATA_REG_P (operands[0]))
  7247. +     return \"dbra %0,%l1\;clr%.w %0\;sub%.l %#1,%0\;jbcc %l1\";
  7248. +   if (GET_CODE (operands[0]) == MEM)
  7249. +     return \"sub%.l %#1,%0\;jbcc %l1\";
  7250. + #else
  7251. +   if (DATA_REG_P (operands[0]))
  7252. +     return \"dbra %0,%l1\;clr%.w %0\;subq%.l %#1,%0\;jbcc %l1\";
  7253. +   if (GET_CODE (operands[0]) == MEM)
  7254. +     return \"subq%.l %#1,%0\;jbcc %l1\";
  7255. + #endif /* NO_ADDSUB_Q */
  7256. + #ifdef SGS_CMP_ORDER
  7257. + #ifdef NO_ADDSUB_Q
  7258. +   return \"sub.l %#1,%0\;cmp.l %0,%#-1\;jbne %l1\";
  7259. + #else
  7260. +   return \"subq.l %#1,%0\;cmp.l %0,%#-1\;jbne %l1\";
  7261. + #endif
  7262. + #else /* not SGS_CMP_ORDER */
  7263. +   return \"subq.l %#1,%0\;cmp.l %#-1,%0\;jbne %l1\";
  7264. + #endif /* not SGS_CMP_ORDER */
  7265. + #else /* not MOTOROLA */
  7266. +   if (DATA_REG_P (operands[0]))
  7267. +     return \"dbra %0,%l1\;clr%.w %0\;subql %#1,%0\;jcc %l1\";
  7268. +   if (GET_CODE (operands[0]) == MEM)
  7269. +     return \"subql %#1,%0\;jcc %l1\";
  7270. +   return \"subql %#1,%0\;cmpl %#-1,%0\;jne %l1\";
  7271. + #endif /* not MOTOROLA */
  7272. + }")
  7273. + ;; Two dbra patterns that use REG_NOTES info generated by strength_reduce.
  7274. + (define_insn ""
  7275. +   [(set (pc)
  7276. +     (if_then_else
  7277. +       (ge (plus:HI (match_operand:HI 0 "general_operand" "+g")
  7278. +                (const_int -1))
  7279. +           (const_int 0))
  7280. +       (label_ref (match_operand 1 "" ""))
  7281. +       (pc)))
  7282. +    (set (match_dup 0)
  7283. +     (plus:HI (match_dup 0)
  7284. +          (const_int -1)))]
  7285. +   "find_reg_note (insn, REG_NONNEG, 0)"
  7286. +   "*
  7287. + {
  7288. +   CC_STATUS_INIT;
  7289. + #ifdef MOTOROLA
  7290. + #ifdef NO_ADDSUB_Q
  7291. +   if (DATA_REG_P (operands[0]))
  7292. +     return \"dbra %0,%l1\";
  7293. +   if (GET_CODE (operands[0]) == MEM)
  7294. +     return \"sub%.w %#1,%0\;jbcc %l1\";
  7295. + #else
  7296. +   if (DATA_REG_P (operands[0]))
  7297. +     return \"dbra %0,%l1\";
  7298. +   if (GET_CODE (operands[0]) == MEM)
  7299. +     return \"subq%.w %#1,%0\;jbcc %l1\";
  7300. + #endif
  7301. + #ifdef SGS_CMP_ORDER
  7302. + #ifdef NO_ADDSUB_Q
  7303. +   return \"sub.w %#1,%0\;cmp.w %0,%#-1\;jbne %l1\";
  7304. + #else
  7305. +   return \"subq.w %#1,%0\;cmp.w %0,%#-1\;jbne %l1\";
  7306. + #endif
  7307. + #else /* not SGS_CMP_ORDER */
  7308. +   return \"subq.w %#1,%0\;cmp.w %#-1,%0\;jbne %l1\";
  7309. + #endif /* not SGS_CMP_ORDER */
  7310. + #else /* not MOTOROLA */
  7311. +   if (DATA_REG_P (operands[0]))
  7312. +     return \"dbra %0,%l1\";
  7313. +   if (GET_CODE (operands[0]) == MEM)
  7314. +     return \"subqw %#1,%0\;jcc %l1\";
  7315. +   return \"subqw %#1,%0\;cmpw %#-1,%0\;jne %l1\";
  7316. + #endif /* not MOTOROLA */
  7317. + }")
  7318. + (define_insn "decrement_and_branch_until_zero"
  7319. +   [(set (pc)
  7320. +     (if_then_else
  7321. +       (ge (plus:SI (match_operand:SI 0 "general_operand" "+g")
  7322. +                (const_int -1))
  7323. +           (const_int 0))
  7324. +       (label_ref (match_operand 1 "" ""))
  7325. +       (pc)))
  7326. +    (set (match_dup 0)
  7327. +     (plus:SI (match_dup 0)
  7328. +          (const_int -1)))]
  7329. +   "find_reg_note (insn, REG_NONNEG, 0)"
  7330. +   "*
  7331. + {
  7332. +   CC_STATUS_INIT;
  7333. + #ifdef MOTOROLA
  7334. + #ifdef NO_ADDSUB_Q
  7335. +   if (DATA_REG_P (operands[0]))
  7336. +     return \"dbra %0,%l1\;clr%.w %0\;sub%.l %#1,%0\;jbcc %l1\";
  7337. +   if (GET_CODE (operands[0]) == MEM)
  7338. +     return \"sub%.l %#1,%0\;jbcc %l1\";
  7339. + #else
  7340. +   if (DATA_REG_P (operands[0]))
  7341. +     return \"dbra %0,%l1\;clr%.w %0\;subq%.l %#1,%0\;jbcc %l1\";
  7342. +   if (GET_CODE (operands[0]) == MEM)
  7343. +     return \"subq%.l %#1,%0\;jbcc %l1\";
  7344. + #endif
  7345. + #ifdef SGS_CMP_ORDER
  7346. + #ifdef NO_ADDSUB_Q
  7347. +   return \"sub.l %#1,%0\;cmp.l %0,%#-1\;jbne %l1\";
  7348. + #else
  7349. +   return \"subq.l %#1,%0\;cmp.l %0,%#-1\;jbne %l1\";
  7350. + #endif
  7351. + #else /* not SGS_CMP_ORDER */
  7352. +   return \"subq.l %#1,%0\;cmp.l %#-1,%0\;jbne %l1\";
  7353. + #endif /* not SGS_CMP_ORDER */
  7354. + #else /* not MOTOROLA */
  7355. +   if (DATA_REG_P (operands[0]))
  7356. +     return \"dbra %0,%l1\;clr%.w %0\;subql %#1,%0\;jcc %l1\";
  7357. +   if (GET_CODE (operands[0]) == MEM)
  7358. +     return \"subql %#1,%0\;jcc %l1\";
  7359. +   return \"subql %#1,%0\;cmpl %#-1,%0\;jne %l1\";
  7360. + #endif /* not MOTOROLA */
  7361. + }")
  7362. + ;; PIC calls are handled by loading the address of the function into a 
  7363. + ;; register (via movsi), then emitting a register indirect call using
  7364. + ;; the "jsr" function call syntax.
  7365. + ;;
  7366. + ;; It is important to note that the "jsr" syntax is always used for 
  7367. + ;; PIC calls, even on machines in which GCC normally uses the "jbsr"
  7368. + ;; syntax for non-PIC calls.  This keeps at least 1 assembler (Sun)
  7369. + ;; from emitting incorrect code for a PIC call.
  7370. + ;;
  7371. + ;; We have different patterns for PIC calls and non-PIC calls.  The
  7372. + ;; different patterns are only used to choose the right syntax
  7373. + ;; ("jsr" vs "jbsr").
  7374. + ;;
  7375. + ;; On svr4 m68k, PIC stuff is done differently. To be able to support
  7376. + ;; dynamic linker LAZY BINDING, all the procedure calls need to go 
  7377. + ;; through the PLT (Procedure Linkage Table) section in PIC mode. The 
  7378. + ;; svr4 m68k assembler recognizes this syntax: `bsr FUNC@PLTPC' and it 
  7379. + ;; will create the correct relocation entry (R_68K_PLT32) for `FUNC', 
  7380. + ;; that tells the linker editor to create an entry for `FUNC' in PLT
  7381. + ;; section at link time. However, all global objects reference are still
  7382. + ;; done by using `OBJ@GOT'. So, the goal here is to output the function 
  7383. + ;; call operand as `FUNC@PLTPC', but output object operand as `OBJ@GOT'. 
  7384. + ;; We need to have a way to differentiate these two different operands.
  7385. + ;;
  7386. + ;; The strategy I use here is to use SYMBOL_REF_FLAG to differentiate 
  7387. + ;; these two different operands. The macro LEGITIMATE_PIC_OPERAND_P needs
  7388. + ;; to be changed to recognize function calls symbol_ref operand as a legal 
  7389. + ;; PIC operand (by checking whether SYMBOL_REF_FLAG is set). This will 
  7390. + ;; avoid the compiler to load this symbol_ref operand into a register. 
  7391. + ;; Remember, the operand "foo@PLTPC" cannot be called via jsr directly 
  7392. + ;; since the value is a PC relative offset, not a real address.
  7393. + ;;
  7394. + ;; All global objects are treated in the similar way as in SUN3. The only 
  7395. + ;; difference is: on m68k svr4, the reference of such global object needs 
  7396. + ;; to end with a suffix "@GOT" so the assembler and linker know to create
  7397. + ;; an entry for it in GOT (Global Offset Table) section. This is done in 
  7398. + ;; m68k.c.
  7399. + ;; Call subroutine with no return value.
  7400. + (define_expand "call"
  7401. +   [(call (match_operand:QI 0 "memory_operand" "")
  7402. +      (match_operand:SI 1 "general_operand" ""))]
  7403. +   ;; Operand 1 not really used on the m68000.
  7404. +   ""
  7405. +   "
  7406. + {
  7407. +   if (flag_pic && flag_pic < 3 && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)
  7408. + #ifdef MOTOROLA
  7409. +     SYMBOL_REF_FLAG (XEXP (operands[0], 0)) = 1;
  7410. + #else
  7411. +     operands[0] = gen_rtx (MEM, GET_MODE (operands[0]),
  7412. +                force_reg (Pmode, XEXP (operands[0], 0)));
  7413. + #endif
  7414. + }")
  7415. + ;; This is a normal call sequence.
  7416. + (define_insn ""
  7417. +   [(call (match_operand:QI 0 "memory_operand" "o")
  7418. +      (match_operand:SI 1 "general_operand" "g"))]
  7419. +   ;; Operand 1 not really used on the m68000.
  7420. +   "(! flag_pic || flag_pic >= 3)"
  7421. +   "*
  7422. + #ifdef MOTOROLA
  7423. +   return \"jsr %0\";
  7424. + #else
  7425. +   return \"jbsr %0\";
  7426. + #endif
  7427. + ")
  7428. + ;; This is a PIC call sequence.
  7429. + (define_insn ""
  7430. +   [(call (match_operand:QI 0 "memory_operand" "o")
  7431. +      (match_operand:SI 1 "general_operand" "g"))]
  7432. +   ;; Operand 1 not really used on the m68000.
  7433. +   "(flag_pic && flag_pic < 3)"
  7434. +   "*
  7435. + #ifdef HPUX_ASM
  7436. +   return \"bsr %0\";
  7437. + #else
  7438. + #ifdef MOTOROLA
  7439. +   if (GET_CODE (operands[0]) == MEM 
  7440. +       && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)
  7441. +     return \"bsr %0@PLTPC\";
  7442. + #endif
  7443. +   return \"jsr %0\";
  7444. + #endif
  7445. + ")
  7446. + ;; Call subroutine, returning value in operand 0
  7447. + ;; (which must be a hard register).
  7448. + ;; See comments before "call" regarding PIC calls.
  7449. + (define_expand "call_value"
  7450. +   [(set (match_operand 0 "" "")
  7451. +     (call (match_operand:QI 1 "memory_operand" "")
  7452. +      (match_operand:SI 2 "general_operand" "")))]
  7453. +   ;; Operand 2 not really used on the m68000.
  7454. +   ""
  7455. +   "
  7456. + {
  7457. +   if (flag_pic && flag_pic < 3 && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
  7458. + #ifdef MOTOROLA
  7459. +     SYMBOL_REF_FLAG (XEXP (operands[1], 0)) = 1;
  7460. + #else
  7461. +     operands[1] = gen_rtx (MEM, GET_MODE (operands[1]),
  7462. +                force_reg (Pmode, XEXP (operands[1], 0)));
  7463. + #endif
  7464. + }")
  7465. + ;; This is a normal call_value
  7466. + (define_insn ""
  7467. +   [(set (match_operand 0 "" "=rf")
  7468. +     (call (match_operand:QI 1 "memory_operand" "o")
  7469. +           (match_operand:SI 2 "general_operand" "g")))]
  7470. +   ;; Operand 2 not really used on the m68000.
  7471. +   "(! flag_pic || flag_pic >= 3)"
  7472. +   "*
  7473. + #ifdef MOTOROLA
  7474. +   return \"jsr %1\";
  7475. + #else
  7476. +   return \"jbsr %1\";
  7477. + #endif
  7478. + ")
  7479. + ;; This is a PIC call_value
  7480. + (define_insn ""
  7481. +   [(set (match_operand 0 "" "=rf")
  7482. +     (call (match_operand:QI 1 "memory_operand" "o")
  7483. +           (match_operand:SI 2 "general_operand" "g")))]
  7484. +   ;; Operand 2 not really used on the m68000.
  7485. +   "(flag_pic && flag_pic < 3)"
  7486. +   "*
  7487. + #ifdef HPUX_ASM
  7488. +   return \"bsr %1\";
  7489. + #else
  7490. + #ifdef MOTOROLA
  7491. +   if (GET_CODE (operands[1]) == MEM 
  7492. +       && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
  7493. +     return \"bsr %1@PLTPC\";
  7494. + #endif
  7495. +   return \"jsr %1\";
  7496. + #endif
  7497. + ")
  7498. + ;; Call subroutine returning any type.
  7499. + (define_expand "untyped_call"
  7500. +   [(parallel [(call (match_operand 0 "" "")
  7501. +             (const_int 0))
  7502. +           (match_operand 1 "" "")
  7503. +           (match_operand 2 "" "")])]
  7504. +   "NEEDS_UNTYPED_CALL"
  7505. +   "
  7506. + {
  7507. +   int i;
  7508. +   emit_call_insn (gen_call (operands[0], const0_rtx, NULL, const0_rtx));
  7509. +   for (i = 0; i < XVECLEN (operands[2], 0); i++)
  7510. +     {
  7511. +       rtx set = XVECEXP (operands[2], 0, i);
  7512. +       emit_move_insn (SET_DEST (set), SET_SRC (set));
  7513. +     }
  7514. +   /* The optimizer does not know that the call sets the function value
  7515. +      registers we stored in the result block.  We avoid problems by
  7516. +      claiming that all hard registers are used and clobbered at this
  7517. +      point.  */
  7518. +   emit_insn (gen_blockage ());
  7519. +   DONE;
  7520. + }")
  7521. + ;; UNSPEC_VOLATILE is considered to use and clobber all hard registers and
  7522. + ;; all of memory.  This blocks insns from being moved across this point.
  7523. + (define_insn "blockage"
  7524. +   [(unspec_volatile [(const_int 0)] 0)]
  7525. +   ""
  7526. +   "")
  7527. + (define_insn "nop"
  7528. +   [(const_int 0)]
  7529. +   ""
  7530. +   "nop")
  7531. + (define_insn "probe"
  7532. +  [(reg:SI 15)]
  7533. +  "NEED_PROBE"
  7534. +  "*
  7535. + {
  7536. +   operands[0] = gen_rtx (PLUS, SImode, stack_pointer_rtx,
  7537. +              gen_rtx (CONST_INT, VOIDmode, NEED_PROBE));
  7538. +   return \"tstl %a0\";
  7539. + }")
  7540. + ;; Used for frameless functions which save no regs and allocate no locals.
  7541. + (define_insn "return"
  7542. +   [(return)]
  7543. +   "USE_RETURN_INSN"
  7544. +   "*
  7545. + {
  7546. +   if (current_function_pops_args == 0)
  7547. +     return \"rts\";
  7548. +   operands[0] = gen_rtx (CONST_INT, VOIDmode, current_function_pops_args);
  7549. +   return \"rtd %0\";
  7550. + }")
  7551. + (define_insn "indirect_jump"
  7552. +   [(set (pc) (match_operand:SI 0 "address_operand" "p"))]
  7553. +   ""
  7554. +   "jmp %a0")
  7555. + ;; This should not be used unless the add/sub insns can't be.
  7556. + (define_insn ""
  7557. +   [(set (match_operand:SI 0 "general_operand" "=a")
  7558. +     (match_operand:QI 1 "address_operand" "p"))]
  7559. +   ""
  7560. +   "lea %a1,%0")
  7561. + ;; This is the first machine-dependent peephole optimization.
  7562. + ;; It is useful when a floating value is returned from a function call
  7563. + ;; and then is moved into an FP register.
  7564. + ;; But it is mainly intended to test the support for these optimizations.
  7565. + (define_peephole
  7566. +   [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4)))
  7567. +    (set (match_operand:DF 0 "register_operand" "=f")
  7568. +     (match_operand:DF 1 "register_operand" "ad"))]
  7569. +   "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])"
  7570. +   "*
  7571. + {
  7572. +   rtx xoperands[2];
  7573. +   xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
  7574. +   output_asm_insn (\"move%.l %1,%@\", xoperands);
  7575. +   output_asm_insn (\"move%.l %1,%-\", operands);
  7576. +   return \"fmove%.d %+,%0\";
  7577. + }
  7578. + ")
  7579. + ;; Optimize a stack-adjust followed by a push of an argument.
  7580. + ;; This is said to happen frequently with -msoft-float
  7581. + ;; when there are consecutive library calls.
  7582. + (define_peephole
  7583. +   [(set (reg:SI 15) (plus:SI (reg:SI 15)
  7584. +                  (match_operand:SI 0 "immediate_operand" "n")))
  7585. +    (set (match_operand:SF 1 "push_operand" "=m")
  7586. +     (match_operand:SF 2 "general_operand" "rmfF"))]
  7587. +   "GET_CODE (operands[0]) == CONST_INT && INTVAL (operands[0]) >= 4
  7588. +    && ! reg_mentioned_p (stack_pointer_rtx, operands[2])"
  7589. +   "*
  7590. + {
  7591. +   if (INTVAL (operands[0]) > 4)
  7592. +     {
  7593. +       rtx xoperands[2];
  7594. +       xoperands[0] = stack_pointer_rtx;
  7595. +       xoperands[1] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[0]) - 4);
  7596. + #ifndef NO_ADDSUB_Q
  7597. +       if (INTVAL (xoperands[1]) <= 8)
  7598. +         output_asm_insn (\"addq%.w %1,%0\", xoperands);
  7599. +       else if (INTVAL (xoperands[1]) <= 16 && TARGET_68020)
  7600. +     {
  7601. +       xoperands[1] = gen_rtx (CONST_INT, VOIDmode, 
  7602. +                   INTVAL (xoperands[1]) - 8);
  7603. +       output_asm_insn (\"addq%.w %#8,%0\;addq%.w %1,%0\", xoperands);
  7604. +     }
  7605. +       else
  7606. + #endif
  7607. +         if (INTVAL (xoperands[1]) <= 0x7FFF)
  7608. +           output_asm_insn (\"add%.w %1,%0\", xoperands);
  7609. +       else
  7610. +         output_asm_insn (\"add%.l %1,%0\", xoperands);
  7611. +     }
  7612. +   if (FP_REG_P (operands[2]))
  7613. +     return \"fmove%.s %2,%@\";
  7614. +   return \"move%.l %2,%@\";
  7615. + }")
  7616. + ;; Speed up stack adjust followed by a fullword fixedpoint push.
  7617. + (define_peephole
  7618. +   [(set (reg:SI 15) (plus:SI (reg:SI 15)
  7619. +                  (match_operand:SI 0 "immediate_operand" "n")))
  7620. +    (set (match_operand:SI 1 "push_operand" "=m")
  7621. +     (match_operand:SI 2 "general_operand" "g"))]
  7622. +   "GET_CODE (operands[0]) == CONST_INT && INTVAL (operands[0]) >= 4
  7623. +    && ! reg_mentioned_p (stack_pointer_rtx, operands[2])"
  7624. +   "*
  7625. + {
  7626. +   if (INTVAL (operands[0]) > 4)
  7627. +     {
  7628. +       rtx xoperands[2];
  7629. +       xoperands[0] = stack_pointer_rtx;
  7630. +       xoperands[1] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[0]) - 4);
  7631. + #ifndef NO_ADDSUB_Q
  7632. +       if (INTVAL (xoperands[1]) <= 8)
  7633. +         output_asm_insn (\"addq%.w %1,%0\", xoperands);
  7634. +       else if (INTVAL (xoperands[1]) <= 16 && TARGET_68020)
  7635. +     {
  7636. +       xoperands[1] = gen_rtx (CONST_INT, VOIDmode, 
  7637. +                   INTVAL (xoperands[1]) - 8);
  7638. +       output_asm_insn (\"addq%.w %#8,%0\;addq%.w %1,%0\", xoperands);
  7639. +     }
  7640. +       else
  7641. + #endif
  7642. +         if (INTVAL (xoperands[1]) <= 0x7FFF)
  7643. +           output_asm_insn (\"add%.w %1,%0\", xoperands);
  7644. +       else
  7645. +         output_asm_insn (\"add%.l %1,%0\", xoperands);
  7646. +     }
  7647. +   if (operands[2] == const0_rtx)
  7648. +     return \"clr%.l %@\";
  7649. +   return \"move%.l %2,%@\";
  7650. + }")
  7651. + ;; Speed up pushing a single byte but leaving four bytes of space.
  7652. + (define_peephole
  7653. +   [(set (mem:QI (pre_dec:SI (reg:SI 15)))
  7654. +     (match_operand:QI 1 "general_operand" "dami"))
  7655. +    (set (reg:SI 15) (minus:SI (reg:SI 15) (const_int 2)))]
  7656. +   "! reg_mentioned_p (stack_pointer_rtx, operands[1])"
  7657. +   "*
  7658. + {
  7659. +   rtx xoperands[4];
  7660. +   if (GET_CODE (operands[1]) == REG)
  7661. +     return \"move%.l %1,%-\";
  7662. +   xoperands[1] = operands[1];
  7663. +   xoperands[2]
  7664. +     = gen_rtx (MEM, QImode,
  7665. +            gen_rtx (PLUS, VOIDmode, stack_pointer_rtx,
  7666. +             gen_rtx (CONST_INT, VOIDmode, 3)));
  7667. +   xoperands[3] = stack_pointer_rtx;
  7668. +   output_asm_insn (\"subq%.w %#4,%3\;move%.b %1,%2\", xoperands);
  7669. +   return \"\";
  7670. + }")
  7671. + (define_peephole
  7672. +   [(set (match_operand:SI 0 "register_operand" "=d")
  7673. +     (const_int 0))
  7674. +    (set (strict_low_part (subreg:HI (match_dup 0) 0))
  7675. +     (match_operand:HI 1 "general_operand" "rmn"))]
  7676. +   "strict_low_part_peephole_ok (HImode, prev_nonnote_insn (insn), operands[0])"
  7677. +   "*
  7678. + {
  7679. +   if (GET_CODE (operands[1]) == CONST_INT)
  7680. +     {
  7681. +       if (operands[1] == const0_rtx
  7682. +       && (DATA_REG_P (operands[0])
  7683. +           || GET_CODE (operands[0]) == MEM)
  7684. +       /* clr insns on 68000 read before writing.
  7685. +          This isn't so on the 68010, but we have no alternative for it.  */
  7686. +       && (TARGET_68020
  7687. +           || !(GET_CODE (operands[0]) == MEM
  7688. +            && MEM_VOLATILE_P (operands[0]))))
  7689. +     return \"clr%.w %0\";
  7690. +     }
  7691. +   return \"move%.w %1,%0\";
  7692. + }")
  7693. + ;; dbCC peepholes
  7694. + ;;
  7695. + ;; Turns
  7696. + ;;   loop:
  7697. + ;;           [ ... ]
  7698. + ;;           jCC label        ; abnormal loop termination
  7699. + ;;           dbra dN, loop    ; normal loop termination
  7700. + ;;
  7701. + ;; Into
  7702. + ;;   loop:
  7703. + ;;           [ ... ]
  7704. + ;;           dbCC dN, loop
  7705. + ;;           jCC label
  7706. + ;;
  7707. + ;; Which moves the jCC condition outside the inner loop for free.
  7708. + ;;
  7709. + (define_peephole
  7710. +   [(set (pc) (if_then_else (match_operator 3 "valid_dbcc_comparison_p"
  7711. +                              [(cc0) (const_int 0)])
  7712. +                            (label_ref (match_operand 2 "" ""))
  7713. +                            (pc)))
  7714. +    (parallel
  7715. +     [(set (pc)
  7716. +       (if_then_else
  7717. +         (ge (plus:HI (match_operand:HI 0 "register_operand" "+d")
  7718. +                  (const_int -1))
  7719. +             (const_int 0))
  7720. +         (label_ref (match_operand 1 "" ""))
  7721. +         (pc)))
  7722. +      (set (match_dup 0)
  7723. +       (plus:HI (match_dup 0)
  7724. +            (const_int -1)))])]
  7725. +   "DATA_REG_P (operands[0])"
  7726. +   "*
  7727. + {
  7728. +   CC_STATUS_INIT;
  7729. +   output_dbcc_and_branch (operands);
  7730. +   return \"\";
  7731. + }")
  7732. + (define_peephole
  7733. +   [(set (pc) (if_then_else (match_operator 3 "valid_dbcc_comparison_p"
  7734. +                              [(cc0) (const_int 0)])
  7735. +                            (label_ref (match_operand 2 "" ""))
  7736. +                            (pc)))
  7737. +    (parallel
  7738. +     [(set (pc)
  7739. +       (if_then_else
  7740. +         (ge (plus:SI (match_operand:SI 0 "register_operand" "+d")
  7741. +                  (const_int -1))
  7742. +             (const_int 0))
  7743. +         (label_ref (match_operand 1 "" ""))
  7744. +         (pc)))
  7745. +      (set (match_dup 0)
  7746. +       (plus:SI (match_dup 0)
  7747. +            (const_int -1)))])]
  7748. +   "DATA_REG_P (operands[0])"
  7749. +   "*
  7750. + {
  7751. +   CC_STATUS_INIT;
  7752. +   output_dbcc_and_branch (operands);
  7753. +   return \"\";
  7754. + }")
  7755. + ;; FPA multiply and add.
  7756. + (define_insn ""
  7757. +   [(set (match_operand:DF 0 "register_operand" "=x,y,y")
  7758. +     (plus:DF (mult:DF (match_operand:DF 1 "general_operand" "%x,dmF,y")
  7759. +               (match_operand:DF 2 "general_operand" "xH,y,y"))
  7760. +          (match_operand:DF 3 "general_operand" "xH,y,dmF")))]
  7761. +    "TARGET_FPA"
  7762. +    "@
  7763. +     fpma%.d %1,%w2,%w3,%0
  7764. +     fpma%.d %x1,%x2,%x3,%0
  7765. +     fpma%.d %x1,%x2,%x3,%0")
  7766. + (define_insn ""
  7767. +   [(set (match_operand:SF 0 "register_operand" "=x,y,y")
  7768. +     (plus:SF (mult:SF (match_operand:SF 1 "general_operand" "%x,ydmF,y")
  7769. +               (match_operand:SF 2 "general_operand" "xH,y,ydmF"))
  7770. +          (match_operand:SF 3 "general_operand" "xH,ydmF,ydmF")))]
  7771. +    "TARGET_FPA"
  7772. +    "@
  7773. +     fpma%.s %1,%w2,%w3,%0
  7774. +     fpma%.s %1,%2,%3,%0
  7775. +     fpma%.s %1,%2,%3,%0")
  7776. + ;; FPA Multiply and subtract
  7777. + (define_insn ""
  7778. +   [(set (match_operand:DF 0 "register_operand" "=x,y,y")
  7779. +     (minus:DF (match_operand:DF 1 "general_operand" "xH,rmF,y")
  7780. +           (mult:DF (match_operand:DF 2 "general_operand" "%xH,y,y")
  7781. +                (match_operand:DF 3 "general_operand" "x,y,rmF"))))]
  7782. +   "TARGET_FPA"
  7783. +   "@
  7784. +    fpms%.d %3,%w2,%w1,%0
  7785. +    fpms%.d %x3,%2,%x1,%0
  7786. +    fpms%.d %x3,%2,%x1,%0")
  7787. + (define_insn ""
  7788. +   [(set (match_operand:SF 0 "register_operand" "=x,y,y")
  7789. +     (minus:SF (match_operand:SF 1 "general_operand" "xH,rmF,yrmF")
  7790. +           (mult:SF (match_operand:SF 2 "general_operand" "%xH,rmF,y")
  7791. +                (match_operand:SF 3 "general_operand" "x,y,yrmF"))))]
  7792. +   "TARGET_FPA"
  7793. +   "@
  7794. +    fpms%.s %3,%w2,%w1,%0
  7795. +    fpms%.s %3,%2,%1,%0
  7796. +    fpms%.s %3,%2,%1,%0")
  7797. + (define_insn ""
  7798. +   [(set (match_operand:DF 0 "register_operand" "=x,y,y")
  7799. +     (minus:DF (mult:DF (match_operand:DF 1 "general_operand" "%xH,y,y")
  7800. +                (match_operand:DF 2 "general_operand" "x,y,rmF"))
  7801. +           (match_operand:DF 3 "general_operand" "xH,rmF,y")))]
  7802. +   "TARGET_FPA"
  7803. +   "@
  7804. +    fpmr%.d %2,%w1,%w3,%0
  7805. +    fpmr%.d %x2,%1,%x3,%0
  7806. +    fpmr%.d %x2,%1,%x3,%0")
  7807. + (define_insn ""
  7808. +   [(set (match_operand:SF 0 "register_operand" "=x,y,y")
  7809. +     (minus:SF (mult:SF (match_operand:SF 1 "general_operand" "%xH,rmF,y")
  7810. +                (match_operand:SF 2 "general_operand" "x,y,yrmF"))
  7811. +           (match_operand:SF 3 "general_operand" "xH,rmF,yrmF")))]
  7812. +   "TARGET_FPA"
  7813. +   "@
  7814. +    fpmr%.s %2,%w1,%w3,%0
  7815. +    fpmr%.s %x2,%1,%x3,%0
  7816. +    fpmr%.s %x2,%1,%x3,%0")
  7817. + ;; FPA Add and multiply
  7818. + (define_insn ""
  7819. +   [(set (match_operand:DF 0 "register_operand" "=x,y,y")
  7820. +     (mult:DF (plus:DF (match_operand:DF 1 "general_operand" "%xH,y,y")
  7821. +               (match_operand:DF 2 "general_operand" "x,y,rmF"))
  7822. +          (match_operand:DF 3 "general_operand" "xH,rmF,y")))]
  7823. +   "TARGET_FPA"
  7824. +   "@
  7825. +    fpam%.d %2,%w1,%w3,%0
  7826. +    fpam%.d %x2,%1,%x3,%0
  7827. +    fpam%.d %x2,%1,%x3,%0")
  7828. + (define_insn ""
  7829. +   [(set (match_operand:SF 0 "register_operand" "=x,y,y")
  7830. +     (mult:SF (plus:SF (match_operand:SF 1 "general_operand" "%xH,rmF,y")
  7831. +               (match_operand:SF 2 "general_operand" "x,y,yrmF"))
  7832. +          (match_operand:SF 3 "general_operand" "xH,rmF,yrmF")))]
  7833. +   "TARGET_FPA"
  7834. +   "@
  7835. +    fpam%.s %2,%w1,%w3,%0
  7836. +    fpam%.s %x2,%1,%x3,%0
  7837. +    fpam%.s %x2,%1,%x3,%0")
  7838. + ;;FPA Subtract and multiply
  7839. + (define_insn ""
  7840. +   [(set (match_operand:DF 0 "register_operand" "=x,y,y")
  7841. +     (mult:DF (minus:DF (match_operand:DF 1 "general_operand" "xH,y,y")
  7842. +                (match_operand:DF 2 "general_operand" "x,y,rmF"))
  7843. +          (match_operand:DF 3 "general_operand" "xH,rmF,y")))]
  7844. +   "TARGET_FPA"
  7845. +   "@
  7846. +    fpsm%.d %2,%w1,%w3,%0
  7847. +    fpsm%.d %x2,%1,%x3,%0
  7848. +    fpsm%.d %x2,%1,%x3,%0")
  7849. + (define_insn ""
  7850. +   [(set (match_operand:DF 0 "register_operand" "=x,y,y")
  7851. +     (mult:DF (match_operand:DF 1 "general_operand" "xH,rmF,y")
  7852. +          (minus:DF (match_operand:DF 2 "general_operand" "xH,y,y")
  7853. +                (match_operand:DF 3 "general_operand" "x,y,rmF"))))]
  7854. +   "TARGET_FPA"
  7855. +   "@
  7856. +    fpsm%.d %3,%w2,%w1,%0
  7857. +    fpsm%.d %x3,%2,%x1,%0
  7858. +    fpsm%.d %x3,%2,%x1,%0")
  7859. + (define_insn ""
  7860. +   [(set (match_operand:SF 0 "register_operand" "=x,y,y")
  7861. +     (mult:SF (minus:SF (match_operand:SF 1 "general_operand" "xH,rmF,y")
  7862. +                (match_operand:SF 2 "general_operand" "x,y,yrmF"))
  7863. +          (match_operand:SF 3 "general_operand" "xH,rmF,yrmF")))]
  7864. +   "TARGET_FPA"
  7865. +   "@
  7866. +    fpsm%.s %2,%w1,%w3,%0
  7867. +    fpsm%.s %x2,%1,%x3,%0
  7868. +    fpsm%.s %x2,%1,%x3,%0")
  7869. + (define_insn ""
  7870. +   [(set (match_operand:SF 0 "register_operand" "=x,y,y")
  7871. +     (mult:SF (match_operand:SF 1 "general_operand" "xH,rmF,yrmF")
  7872. +          (minus:SF (match_operand:SF 2 "general_operand" "xH,rmF,y")
  7873. +                (match_operand:SF 3 "general_operand" "x,y,yrmF"))))]
  7874. +   "TARGET_FPA"
  7875. +   "@
  7876. +    fpsm%.s %3,%w2,%w1,%0
  7877. +    fpsm%.s %x3,%2,%x1,%0
  7878. +    fpsm%.s %x3,%2,%x1,%0")
  7879. + (define_insn "tstxf"
  7880. +   [(set (cc0)
  7881. +     (match_operand:XF 0 "nonimmediate_operand" "fm"))]
  7882. +   "TARGET_68881"
  7883. +   "*
  7884. + {
  7885. +   cc_status.flags = CC_IN_68881;
  7886. +   return \"ftst%.x %0\";
  7887. + }")
  7888. + (define_expand "cmpxf"
  7889. +   [(set (cc0)
  7890. +     (compare (match_operand:XF 0 "general_operand" "f,mG")
  7891. +          (match_operand:XF 1 "general_operand" "fmG,f")))]
  7892. +   "TARGET_68881"
  7893. +   "
  7894. + {
  7895. +   if (CONSTANT_P (operands[0]))
  7896. +       operands[0] = force_const_mem (XFmode, operands[0]);
  7897. +   if (CONSTANT_P (operands[1]))
  7898. +       operands[1] = force_const_mem (XFmode, operands[1]);
  7899. + }")
  7900. + (define_insn ""
  7901. +   [(set (cc0)
  7902. +     (compare (match_operand:XF 0 "nonimmediate_operand" "f,mG")
  7903. +          (match_operand:XF 1 "nonimmediate_operand" "fmG,f")))]
  7904. +   "TARGET_68881"
  7905. +   "*
  7906. + {
  7907. +   cc_status.flags = CC_IN_68881;
  7908. + #ifdef SGS_CMP_ORDER
  7909. +   if (REG_P (operands[0]))
  7910. +     {
  7911. +       if (REG_P (operands[1]))
  7912. +     return \"fcmp%.x %0,%1\";
  7913. +       else
  7914. +         return \"fcmp%.x %0,%f1\";
  7915. +     }
  7916. +   cc_status.flags |= CC_REVERSED;
  7917. +   return \"fcmp%.x %1,%f0\";
  7918. + #else
  7919. +   if (REG_P (operands[0]))
  7920. +     {
  7921. +       if (REG_P (operands[1]))
  7922. +     return \"fcmp%.x %1,%0\";
  7923. +       else
  7924. +         return \"fcmp%.x %f1,%0\";
  7925. +     }
  7926. +   cc_status.flags |= CC_REVERSED;
  7927. +   return \"fcmp%.x %f0,%1\";
  7928. + #endif
  7929. + }")
  7930. + (define_insn "extendsfxf2"
  7931. +   [(set (match_operand:XF 0 "general_operand" "=fm,f")
  7932. +     (float_extend:XF (match_operand:SF 1 "general_operand" "f,m")))]
  7933. +   "TARGET_68881"
  7934. +   "*
  7935. + {
  7936. +   if (FP_REG_P (operands[0]) && FP_REG_P (operands[1]))
  7937. +     {
  7938. +       if (REGNO (operands[0]) == REGNO (operands[1]))
  7939. +     {
  7940. +       /* Extending float to double in an fp-reg is a no-op.
  7941. +          NOTICE_UPDATE_CC has already assumed that the
  7942. +          cc will be set.  So cancel what it did.  */
  7943. +       cc_status = cc_prev_status;
  7944. +       return \"\";
  7945. +     }
  7946. +       return \"f%$move%.x %1,%0\";
  7947. +     }
  7948. +   if (FP_REG_P (operands[0]))
  7949. +     return \"f%$move%.s %f1,%0\";
  7950. +   return \"fmove%.x %f1,%0\";
  7951. + }")
  7952. + (define_insn "extenddfxf2"
  7953. +   [(set (match_operand:XF 0 "general_operand" "=fm,f")
  7954. +     (float_extend:XF
  7955. +           (match_operand:DF 1 "general_operand" "f,m")))]
  7956. +   "TARGET_68881"
  7957. +   "*
  7958. + {
  7959. +   if (FP_REG_P (operands[0]) && FP_REG_P (operands[1]))
  7960. +     {
  7961. +       if (REGNO (operands[0]) == REGNO (operands[1]))
  7962. +     {
  7963. +       /* Extending float to double in an fp-reg is a no-op.
  7964. +          NOTICE_UPDATE_CC has already assumed that the
  7965. +          cc will be set.  So cancel what it did.  */
  7966. +       cc_status = cc_prev_status;
  7967. +       return \"\";
  7968. +     }
  7969. +       return \"fmove%.x %1,%0\";
  7970. +     }
  7971. +   if (FP_REG_P (operands[0]))
  7972. +     return \"f%&move%.d %f1,%0\";
  7973. +   return \"fmove%.x %f1,%0\";
  7974. + }")
  7975. + (define_insn "truncxfdf2"
  7976. +   [(set (match_operand:DF 0 "general_operand" "=m,!r")
  7977. +     (float_truncate:DF
  7978. +           (match_operand:XF 1 "general_operand" "f,f")))]
  7979. +   "TARGET_68881"
  7980. +   "*
  7981. + {
  7982. +   if (REG_P (operands[0]))
  7983. +     {
  7984. +       output_asm_insn (\"fmove%.d %f1,%-\;move%.l %+,%0\", operands);
  7985. +       operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
  7986. +       return \"move%.l %+,%0\";
  7987. +     }
  7988. +   return \"fmove%.d %f1,%0\";
  7989. + }")
  7990. +  
  7991. + (define_insn "truncxfsf2"
  7992. +   [(set (match_operand:SF 0 "general_operand" "=dm")
  7993. +     (float_truncate:SF
  7994. +       (match_operand:XF 1 "general_operand" "f")))]
  7995. +   "TARGET_68881"
  7996. +   "fmove%.s %f1,%0")
  7997. + (define_insn "floatsixf2"
  7998. +   [(set (match_operand:XF 0 "general_operand" "=f")
  7999. +     (float:XF (match_operand:SI 1 "general_operand" "dmi")))]
  8000. +   "TARGET_68881"
  8001. +   "fmove%.l %1,%0")
  8002. + (define_insn "floathixf2"
  8003. +   [(set (match_operand:XF 0 "general_operand" "=f")
  8004. +     (float:XF (match_operand:HI 1 "general_operand" "dmn")))]
  8005. +   "TARGET_68881"
  8006. +   "fmove%.w %1,%0")
  8007. + (define_insn "floatqixf2"
  8008. +   [(set (match_operand:XF 0 "general_operand" "=f")
  8009. +     (float:XF (match_operand:QI 1 "general_operand" "dmn")))]
  8010. +   "TARGET_68881"
  8011. +   "fmove%.b %1,%0")
  8012. + (define_insn "ftruncxf2"
  8013. +   [(set (match_operand:XF 0 "general_operand" "=f")
  8014. +     (fix:XF (match_operand:XF 1 "general_operand" "fFm")))]
  8015. +   "TARGET_68881"
  8016. +   "*
  8017. + {
  8018. +   if (FP_REG_P (operands[1]))
  8019. +     return \"fintrz%.x %f1,%0\";
  8020. +   return \"fintrz%.x %f1,%0\";
  8021. + }")
  8022. + (define_insn "fixxfqi2"
  8023. +   [(set (match_operand:QI 0 "general_operand" "=dm")
  8024. +     (fix:QI (match_operand:XF 1 "general_operand" "f")))]
  8025. +   "TARGET_68881"
  8026. +   "fmove%.b %1,%0")
  8027. + (define_insn "fixxfhi2"
  8028. +   [(set (match_operand:HI 0 "general_operand" "=dm")
  8029. +     (fix:HI (match_operand:XF 1 "general_operand" "f")))]
  8030. +   "TARGET_68881"
  8031. +   "fmove%.w %1,%0")
  8032. + (define_insn "fixxfsi2"
  8033. +   [(set (match_operand:SI 0 "general_operand" "=dm")
  8034. +     (fix:SI (match_operand:XF 1 "general_operand" "f")))]
  8035. +   "TARGET_68881"
  8036. +   "fmove%.l %1,%0")
  8037. + (define_expand "addxf3"
  8038. +   [(set (match_operand:XF 0 "general_operand" "")
  8039. +     (plus:XF (match_operand:XF 1 "general_operand" "")
  8040. +          (match_operand:XF 2 "general_operand" "")))]
  8041. +   "TARGET_68881"
  8042. +   "
  8043. + {
  8044. +   if (CONSTANT_P (operands[1]))
  8045. +     operands[1] = force_const_mem (XFmode, operands[1]);
  8046. +   if (CONSTANT_P (operands[2]))
  8047. +     operands[2] = force_const_mem (XFmode, operands[2]);
  8048. + }")
  8049. + (define_insn ""
  8050. +   [(set (match_operand:XF 0 "general_operand" "=f")
  8051. +     (plus:XF (match_operand:XF 1 "nonimmediate_operand" "%0")
  8052. +          (match_operand:XF 2 "nonimmediate_operand" "fmG")))]
  8053. +   "TARGET_68881"
  8054. +   "*
  8055. + {
  8056. +   if (REG_P (operands[2]))
  8057. +     return \"fadd%.x %2,%0\";
  8058. +   return \"fadd%.x %f2,%0\";
  8059. + }")
  8060. + (define_expand "subxf3"
  8061. +   [(set (match_operand:XF 0 "general_operand" "")
  8062. +     (minus:XF (match_operand:XF 1 "general_operand" "")
  8063. +          (match_operand:XF 2 "general_operand" "")))]
  8064. +   "TARGET_68881"
  8065. +   "
  8066. + {
  8067. +   if (CONSTANT_P (operands[1]))
  8068. +     operands[1] = force_const_mem (XFmode, operands[1]);
  8069. +   if (CONSTANT_P (operands[2]))
  8070. +     operands[2] = force_const_mem (XFmode, operands[2]);
  8071. + }")
  8072. + (define_insn ""
  8073. +   [(set (match_operand:XF 0 "general_operand" "=f")
  8074. +     (minus:XF (match_operand:XF 1 "nonimmediate_operand" "0")
  8075. +          (match_operand:XF 2 "nonimmediate_operand" "fmG")))]
  8076. +   "TARGET_68881"
  8077. +   "*
  8078. + {
  8079. +   if (REG_P (operands[2]))
  8080. +     return \"fsub%.x %2,%0\";
  8081. +   return \"fsub%.x %f2,%0\";
  8082. + }")
  8083. + (define_expand "mulxf3"
  8084. +   [(set (match_operand:XF 0 "general_operand" "")
  8085. +     (mult:XF (match_operand:XF 1 "general_operand" "")
  8086. +         (match_operand:XF 2 "general_operand" "")))]
  8087. +   "TARGET_68881"
  8088. +   "
  8089. + {
  8090. +   if (CONSTANT_P (operands[1]))
  8091. +     operands[1] = force_const_mem (XFmode, operands[1]);
  8092. +   if (CONSTANT_P (operands[2]))
  8093. +     operands[2] = force_const_mem (XFmode, operands[2]);
  8094. + }")
  8095. + (define_insn ""
  8096. +   [(set (match_operand:XF 0 "general_operand" "=f")
  8097. +     (mult:XF (match_operand:XF 1 "nonimmediate_operand" "%0")
  8098. +         (match_operand:XF 2 "nonimmediate_operand" "fmG")))]
  8099. +   "TARGET_68881"
  8100. +   "*
  8101. + {
  8102. +   if (REG_P (operands[2]))
  8103. +     return \"fmul%.x %2,%0\";
  8104. +   return \"fmul%.x %f2,%0\";
  8105. + }")
  8106. + (define_expand "divxf3"
  8107. +   [(set (match_operand:XF 0 "general_operand" "")
  8108. +     (div:XF (match_operand:XF 1 "general_operand" "")
  8109. +         (match_operand:XF 2 "general_operand" "")))]
  8110. +   "TARGET_68881"
  8111. +   "
  8112. + {
  8113. +   if (CONSTANT_P (operands[1]))
  8114. +     operands[1] = force_const_mem (XFmode, operands[1]);
  8115. +   if (CONSTANT_P (operands[2]))
  8116. +     operands[2] = force_const_mem (XFmode, operands[2]);
  8117. + }")
  8118. + (define_insn ""
  8119. +   [(set (match_operand:XF 0 "general_operand" "=f")
  8120. +     (div:XF (match_operand:XF 1 "nonimmediate_operand" "0")
  8121. +         (match_operand:XF 2 "nonimmediate_operand" "fmG")))]
  8122. +   "TARGET_68881"
  8123. +   "*
  8124. + {
  8125. +   if (REG_P (operands[2]))
  8126. +     return \"fdiv%.x %2,%0\";
  8127. +   return \"fdiv%.x %f2,%0\";
  8128. + }")
  8129. + (define_insn "negxf2"
  8130. +   [(set (match_operand:XF 0 "general_operand" "=f")
  8131. +     (neg:XF (match_operand:XF 1 "nonimmediate_operand" "fmF")))]
  8132. +   "TARGET_68881"
  8133. +   "*
  8134. + {
  8135. +   if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
  8136. +     return \"fneg%.x %1,%0\";
  8137. +   return \"fneg%.x %f1,%0\";
  8138. + }")
  8139. + (define_insn "absxf2"
  8140. +   [(set (match_operand:XF 0 "general_operand" "=f")
  8141. +     (abs:XF (match_operand:XF 1 "nonimmediate_operand" "fmF")))]
  8142. +   "TARGET_68881"
  8143. +   "*
  8144. + {
  8145. +   if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
  8146. +     return \"fabs%.x %1,%0\";
  8147. +   return \"fabs%.x %f1,%0\";
  8148. + }")
  8149. + (define_insn "sqrtxf2"
  8150. +   [(set (match_operand:XF 0 "general_operand" "=f")
  8151. +     (sqrt:XF (match_operand:DF 1 "nonimmediate_operand" "fm")))]
  8152. +   "TARGET_68881"
  8153. +   "*
  8154. + {
  8155. +     return \"fsqrt%.x %1,%0\";
  8156. + }")
  8157. diff -rc --new-file /src/baseline/gnat-1.80/amiga/corrections/m68k.md.orig gnat-1.80/amiga/corrections/m68k.md.orig
  8158. *** /src/baseline/gnat-1.80/amiga/corrections/m68k.md.orig    Thu Jan  1 00:00:00 1970
  8159. --- gnat-1.80/amiga/corrections/m68k.md.orig    Thu Jun 23 13:13:13 1994
  8160. ***************
  8161. *** 0 ****
  8162. --- 1,5689 ----
  8163. + ;;- Machine description for GNU compiler
  8164. + ;;- Motorola 68000 Version
  8165. + ;;   Copyright (C) 1987, 1988, 1993 Free Software Foundation, Inc.
  8166. + ;; This file is part of GNU CC.
  8167. + ;; GNU CC is free software; you can redistribute it and/or modify
  8168. + ;; it under the terms of the GNU General Public License as published by
  8169. + ;; the Free Software Foundation; either version 2, or (at your option)
  8170. + ;; any later version.
  8171. + ;; GNU CC is distributed in the hope that it will be useful,
  8172. + ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  8173. + ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  8174. + ;; GNU General Public License for more details.
  8175. + ;; You should have received a copy of the GNU General Public License
  8176. + ;; along with GNU CC; see the file COPYING.  If not, write to
  8177. + ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  8178. + ;;- instruction definitions
  8179. + ;;- @@The original PO technology requires these to be ordered by speed,
  8180. + ;;- @@    so that assigner will pick the fastest.
  8181. + ;;- See file "rtl.def" for documentation on define_insn, match_*, et. al.
  8182. + ;;- When naming insn's (operand 0 of define_insn) be careful about using
  8183. + ;;- names from other targets machine descriptions.
  8184. + ;;- cpp macro #define NOTICE_UPDATE_CC in file tm.h handles condition code
  8185. + ;;- updates for most instructions.
  8186. + ;;- Operand classes for the register allocator:
  8187. + ;;- 'a' one of the address registers can be used.
  8188. + ;;- 'd' one of the data registers can be used.
  8189. + ;;- 'f' one of the m68881 registers can be used
  8190. + ;;- 'r' either a data or an address register can be used.
  8191. + ;;- 'x' if one of the Sun FPA registers                    
  8192. + ;;- 'y' if one of the Low Sun FPA registers (fpa0-fpa15).
  8193. + ;;- Immediate Floating point operator constraints
  8194. + ;;- 'G' a floating point constant that is *NOT* one of the standard
  8195. + ;;   68881 constant values (to force calling output_move_const_double
  8196. + ;;   to get it from rom if it is a 68881 constant).
  8197. + ;;- 'H' one of the standard FPA constant values
  8198. + ;;
  8199. + ;;   See the functions standard_XXX_constant_p in output-m68k.c for more
  8200. + ;; info.
  8201. + ;;- Immediate integer operand constraints:
  8202. + ;;- 'I'  1 .. 8
  8203. + ;;- 'J'  -32768 .. 32767
  8204. + ;;- 'K'  all integers EXCEPT -128 .. 127
  8205. + ;;- 'L'  -8 .. -1
  8206. + ;;- Assembler specs:
  8207. + ;;- "%."    size separator ("." or "")            move%.l d0,d1
  8208. + ;;- "%#"    immediate separator ("#" or "")        move%.l %#0,d0
  8209. + ;;- "%-"    push operand "sp@-"                move%.l d0,%-
  8210. + ;;- "%+"    pop operand "sp@+"                move%.l d0,%+
  8211. + ;;- "%@"    top of stack "sp@"                move%.l d0,%@
  8212. + ;;- "%!"    fpcr register
  8213. + ;;- "%$"    single-precision fp specifier ("s" or "")    f%$add.x fp0,fp1
  8214. + ;;- "%&"    double-precision fp specifier ("d" or "")    f%&add.x fp0,fp1
  8215. + ;;- Information about 68040 port.
  8216. + ;;- The 68040 executes all 68030 and 68881/2 instructions, but some must
  8217. + ;;- be emulated in software by the OS.  It is faster to avoid these
  8218. + ;;- instructions and issue a library call rather than trapping into
  8219. + ;;- the kernel.  The affected instructions are fintrz and fscale.  The
  8220. + ;;- TARGET_68040 flag turns the use of the opcodes off.
  8221. + ;;- The '040 also implements a set of new floating-point instructions
  8222. + ;;- which specify the rounding precision in the opcode.  This finally
  8223. + ;;- permit the 68k series to be truly IEEE compliant, and solves all
  8224. + ;;- issues of excess precision accumulating in the extended registers.
  8225. + ;;- By default, GCC does not use these instructions, since such code will
  8226. + ;;- not run on an '030.  To use these instructions, use the -m68040-only
  8227. + ;;- switch.  By changing TARGET_DEFAULT to include TARGET_68040_ONLY,
  8228. + ;;- you can make these instructions the default.
  8229. + ;;- These new instructions aren't directly in the md.  They are brought
  8230. + ;;- into play by defining "%$" and "%&" to expand to "s" and "d" rather
  8231. + ;;- than "".
  8232. + ;;-         FPA port explanation:
  8233. + ;;-        Usage of the Sun FPA and the 68881 together
  8234. + ;;- The current port of gcc to the sun fpa disallows use of the m68881
  8235. + ;;- instructions completely if code is targeted for the fpa.  This is
  8236. + ;;- for the following reasons:
  8237. + ;;- 1) Expressing the preference hierarchy (ie. use the fpa if you
  8238. + ;;- can, the 68881 otherwise, and data registers only if you are
  8239. + ;;- forced to it) is a bitch with the current constraint scheme,
  8240. + ;;- especially since it would have to work for any combination of
  8241. + ;;- -mfpa, -m68881.
  8242. + ;;- 2) There are no instructions to move between the two types of
  8243. + ;;- registers; the stack must be used as an intermediary.
  8244. + ;;- It could indeed be done; I think the best way would be to have
  8245. + ;;- separate patterns for TARGET_FPA (which implies a 68881),
  8246. + ;;- TARGET_68881, and no floating point co-processor.  Use
  8247. + ;;- define_expands for all of the named instruction patterns, and
  8248. + ;;- include code in the FPA instruction to deal with the 68881 with
  8249. + ;;- preferences specifically set to favor the fpa.  Some of this has
  8250. + ;;- already been done:
  8251. + ;;-
  8252. + ;;-     1) Separation of most of the patterns out into a TARGET_FPA
  8253. + ;;- case and a TARGET_68881 case (the exceptions are the patterns
  8254. + ;;- which would need one define_expand and three define_insn's under
  8255. + ;;- it (with a lot of duplicate code between them) to replace the
  8256. + ;;- current single define_insn.  These are mov{[ds]f,[ds]i} and the
  8257. + ;;- first two patterns in the md.
  8258. + ;;-
  8259. + ;;- Some would still have to be done:
  8260. + ;;-
  8261. + ;;-    1) Add code to the fpa patterns which correspond to 68881
  8262. + ;;- patterns to deal with the 68881 case (including preferences!).
  8263. + ;;- What you might actually do here is combine the fpa and 68881 code
  8264. + ;;- back together into one pattern for those instructions where it's
  8265. + ;;- absolutely necessary and save yourself some duplicate code.  I'm
  8266. + ;;- not completely sure as to whether you could get away with doing
  8267. + ;;- this only for the mov* insns, or if you'd have to do it for all
  8268. + ;;- named insns.
  8269. + ;;-     2) Add code to the mov{[ds]f,[ds]i} instructions to handle
  8270. + ;;- moving between fpa regs and 68881 regs.
  8271. + ;;- Since the fpa is more powerful than the 68881 and also has more
  8272. + ;;- registers, and since I think the resultant md would be medium ugly
  8273. + ;;- (lot's of duplicate code, ugly constraint strings), I elected not
  8274. + ;;- to do this change.
  8275. + ;;- Another reason why someone *might* want to do the change is to
  8276. + ;;- control which register classes are accessed in a slightly cleaner
  8277. + ;;- way than I have.  See the blurb on CONDITIONAL_REGISTER_USAGE in
  8278. + ;;- the internals manual.
  8279. + ;;- Yet another reason why someone might want to do this change is to
  8280. + ;;- allow use of some of the 68881 insns which have no equivalent on
  8281. + ;;- the fpa.  The sqrt instruction comes fairly quickly to mind.
  8282. + ;;- If this is ever done, don't forget to change sun3.h so that
  8283. + ;;- it *will* define __HAVE_68881__ when the FPA is in use.
  8284. + ;;-        Condition code hack
  8285. + ;;- When a floating point compare is done in the fpa, the resulting
  8286. + ;;- condition codes are left in the fpastatus register.  The values in
  8287. + ;;- this register must be moved into the 68000 cc register before any
  8288. + ;;- jump is executed.  Once this has been done, regular jump
  8289. + ;;- instructions are fine (ie. floating point jumps are not necessary.
  8290. + ;;- They are only done if the cc is in the 68881).
  8291. + ;;- The instructions that move the fpastatus register to the 68000
  8292. + ;;- register clobber a data register (the move cannot be done direct).
  8293. + ;;- These instructions might be bundled either with the compare
  8294. + ;;- instruction, or the branch instruction.  If we were using both the
  8295. + ;;- fpa and the 68881 together, we would wish to only mark the
  8296. + ;;- register clobbered if we were doing the compare in the fpa, but I
  8297. + ;;- think that that decision (whether to clobber the register or not)
  8298. + ;;- must be done before register allocation (makes sense) and hence we
  8299. + ;;- can't know if the floating point compare will be done in the fpa
  8300. + ;;- or the fp.  So whenever we are asked for code that uses the fpa,
  8301. + ;;- we will mark a data register as clobbered.  This is reasonable, as
  8302. + ;;- almost all floating point compare operations done with fpa code
  8303. + ;;- enabled will be done in the fpa.  It's even more reasonable since
  8304. + ;;- we decided to make the 68881 and the fpa mutually exclusive.
  8305. + ;;- We place to code to move the fpastatus register inside of a
  8306. + ;;- define_expand so that we can do it conditionally based on whether
  8307. + ;;- we are targeting an fpa or not.
  8308. + ;;- This still leaves us with the question of where we wish to put the
  8309. + ;;- code to move the fpastatus reg.  If we put it in the compare
  8310. + ;;- instruction, we can restrict the clobbering of the register to
  8311. + ;;- floating point compares, but we can't take advantage of floating
  8312. + ;;- point subtracts & etc. that alter the fpastatus register.  If we
  8313. + ;;- put it in the branch instruction, all branches compiled with fpa
  8314. + ;;- code enabled will clobber a data register, but we will be able to
  8315. + ;;- take advantage of fpa subtracts.  This balance favors putting the
  8316. + ;;- code in with the compare instruction.
  8317. + ;;- Note that if some enterprising hacker should decide to switch
  8318. + ;;- this, he'll need to modify the code in NOTICE_UPDATE_CC.
  8319. + ;;-        Usage of the top 16 fpa registers
  8320. + ;;- The only locations which we may transfer fpa registers 16-31 from
  8321. + ;;- or to are the fpa registers 0-15.  (68000 registers and memory
  8322. + ;;- locations are impossible).  This causes problems in gcc, which
  8323. + ;;- assumes that mov?? instructions require no additional registers
  8324. + ;;- (see section 11.7) and since floating point moves *must* be
  8325. + ;;- supported into general registers (see section 12.3 under
  8326. + ;;- HARD_REGNO_OK_FOR_MODE_P) from anywhere.
  8327. + ;;- My solution was to reserve fpa0 for moves into or out of these top
  8328. + ;;- 16 registers and to disparage the choice to reload into or out of
  8329. + ;;- these registers as much as I could.  That alternative is always
  8330. + ;;- last in the list, so it will not be used unless all else fails.  I
  8331. + ;;- will note that according to my current information, sun's compiler
  8332. + ;;- doesn't use these top 16 registers at all.
  8333. + ;;- There is another possible way to do it.  I *believe* that if you
  8334. + ;;- make absolutely sure that the code will not be executed in the
  8335. + ;;- reload pass, you can support the mov?? names with define_expands
  8336. + ;;- which require new registers.  This may be possible by the
  8337. + ;;- appropriate juggling of constraints.  I may come back to this later.
  8338. + ;;-         Usage of constant RAM
  8339. + ;;- This has been handled correctly (I believe) but the way I've done
  8340. + ;;- it could use a little explanation.  The constant RAM can only be
  8341. + ;;- accessed when the instruction is in "command register" mode.
  8342. + ;;- "command register" mode means that no accessing of memory or the
  8343. + ;;- 68000 registers is being done.  This can be expressed easily in
  8344. + ;;- constraints, so generally the mode of the instruction is
  8345. + ;;- determined by a branch off of which_alternative.  In outputting
  8346. + ;;- instructions, a 'w' means to output an access to the constant ram
  8347. + ;;- (if the arg is CONST_DOUBLE and is one of the available
  8348. + ;;- constants), and 'x' means to output a register pair (if the arg is
  8349. + ;;- a 68000 register) and a 'y' is the combination of the above two
  8350. + ;;- processes.  You use a 'y' in two operand DF instructions where you
  8351. + ;;- *know* the other operand is an fpa register, you use an 'x' in DF
  8352. + ;;- instructions where the arg might be a 68000 register and the
  8353. + ;;- instruction is *not* in "command register" mode, and you use a 'w'
  8354. + ;;- in two situations: 1) The instruction *is* in command register
  8355. + ;;- mode (and hence won't be accessing 68000 registers), or 2) The
  8356. + ;;- instruction is a two operand SF instruction where you know the
  8357. + ;;- other operand is an fpa register.
  8358. + ;;-        Optimization issues
  8359. + ;;- I actually think that I've included all of the fpa instructions
  8360. + ;;- that should be included.  Note that if someone is interested in
  8361. + ;;- doing serious floating point work on the sun fpa, I would advise
  8362. + ;;- the use of the "asm" instruction in gcc to allow you to use the
  8363. + ;;- sin, cos, and exponential functions on the fpa board.
  8364. + ;;- END FPA Explanation Section.
  8365. + ;;- Some of these insn's are composites of several m68000 op codes.
  8366. + ;;- The assembler (or final @@??) insures that the appropriate one is
  8367. + ;;- selected.
  8368. + (define_insn ""
  8369. +   [(set (match_operand:DF 0 "push_operand" "=m")
  8370. +     (match_operand:DF 1 "general_operand" "ro<>fyE"))]
  8371. +   ""
  8372. +   "*
  8373. + {
  8374. +   if (FP_REG_P (operands[1]))
  8375. +     return \"fmove%.d %f1,%0\";
  8376. +   if (FPA_REG_P (operands[1]))
  8377. +     return \"fpmove%.d %1, %x0\";
  8378. +   return output_move_double (operands);
  8379. + }")
  8380. + (define_insn ""
  8381. +   [(set (match_operand:DI 0 "push_operand" "=m")
  8382. +     (match_operand:DI 1 "general_operand" "ro<>Fy"))]
  8383. +   ""
  8384. +   "*
  8385. + {
  8386. +   return output_move_double (operands);
  8387. + }")
  8388. + ;; We don't want to allow a constant operand for test insns because
  8389. + ;; (set (cc0) (const_int foo)) has no mode information.  Such insns will
  8390. + ;; be folded while optimizing anyway.
  8391. + (define_insn "tstsi"
  8392. +   [(set (cc0)
  8393. +     (match_operand:SI 0 "nonimmediate_operand" "rm"))]
  8394. +   ""
  8395. +   "*
  8396. + {
  8397. + #ifdef ISI_OV
  8398. +   /* ISI's assembler fails to handle tstl a0.  */
  8399. +   if (! ADDRESS_REG_P (operands[0]))
  8400. + #else
  8401. +   if (TARGET_68020 || ! ADDRESS_REG_P (operands[0]))
  8402. + #endif
  8403. +     return \"tst%.l %0\";
  8404. +   /* If you think that the 68020 does not support tstl a0,
  8405. +      reread page B-167 of the 68020 manual more carefully.  */
  8406. +   /* On an address reg, cmpw may replace cmpl.  */
  8407. + #ifdef SGS_CMP_ORDER
  8408. +   return \"cmp%.w %0,%#0\";
  8409. + #else
  8410. +   return \"cmp%.w %#0,%0\";
  8411. + #endif
  8412. + }")
  8413. + ;; This can't use an address register, because comparisons
  8414. + ;; with address registers as second operand always test the whole word.
  8415. + (define_insn "tsthi"
  8416. +   [(set (cc0)
  8417. +     (match_operand:HI 0 "nonimmediate_operand" "dm"))]
  8418. +   ""
  8419. +   "tst%.w %0")
  8420. + (define_insn "tstqi"
  8421. +   [(set (cc0)
  8422. +     (match_operand:QI 0 "nonimmediate_operand" "dm"))]
  8423. +   ""
  8424. +   "tst%.b %0")
  8425. +   
  8426. + (define_expand "tstsf"
  8427. +   [(set (cc0)
  8428. +     (match_operand:SF 0 "general_operand" ""))]
  8429. +   "TARGET_68881 || TARGET_FPA"
  8430. +   "
  8431. + {
  8432. +   if (TARGET_FPA)
  8433. +     {
  8434. +       emit_insn (gen_tstsf_fpa (operands[0]));
  8435. +       DONE;
  8436. +     }
  8437. + }")
  8438. + (define_insn "tstsf_fpa"
  8439. +   [(set (cc0)
  8440. +     (match_operand:SF 0 "general_operand" "xmdF"))
  8441. +    (clobber (match_scratch:SI 1 "=d"))]
  8442. +   "TARGET_FPA"
  8443. +   "fptst%.s %x0\;fpmove fpastatus,%1\;movw %1,cc")
  8444. + (define_insn ""
  8445. +   [(set (cc0)
  8446. +     (match_operand:SF 0 "general_operand" "fdm"))]
  8447. +   "TARGET_68881"
  8448. +   "*
  8449. + {
  8450. +   cc_status.flags = CC_IN_68881;
  8451. +   if (FP_REG_P (operands[0]))
  8452. +     return \"ftst%.x %0\";
  8453. +   return \"ftst%.s %0\";
  8454. + }")
  8455. + (define_expand "tstdf"
  8456. +   [(set (cc0)
  8457. +     (match_operand:DF 0 "general_operand" ""))]
  8458. +   "TARGET_68881 || TARGET_FPA"
  8459. +   "
  8460. + {
  8461. +   if (TARGET_FPA)
  8462. +     {
  8463. +       emit_insn (gen_tstsf_fpa (operands[0]));
  8464. +       DONE;
  8465. +     }
  8466. + }")
  8467. + (define_insn "tstdf_fpa"
  8468. +   [(set (cc0)
  8469. +     (match_operand:DF 0 "general_operand" "xrmF"))
  8470. +    (clobber (match_scratch:SI 1 "=d"))]
  8471. +   "TARGET_FPA"
  8472. +   "fptst%.d %x0\;fpmove fpastatus,%1\;movw %1,cc")
  8473. + (define_insn ""
  8474. +   [(set (cc0)
  8475. +     (match_operand:DF 0 "general_operand" "fm"))]
  8476. +   "TARGET_68881"
  8477. +   "*
  8478. + {
  8479. +   cc_status.flags = CC_IN_68881;
  8480. +   if (FP_REG_P (operands[0]))
  8481. +     return \"ftst%.x %0\";
  8482. +   return \"ftst%.d %0\";
  8483. + }")
  8484. + ;; compare instructions.
  8485. + ;; A composite of the cmp, cmpa, & cmpi m68000 op codes.
  8486. + (define_insn "cmpsi"
  8487. +   [(set (cc0)
  8488. +     (compare (match_operand:SI 0 "nonimmediate_operand" "rKs,mr,>")
  8489. +          (match_operand:SI 1 "general_operand" "mr,Ksr,>")))]
  8490. +   ""
  8491. +   "*
  8492. + {
  8493. +   if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM)
  8494. + #ifdef SGS_CMP_ORDER
  8495. +     return \"cmpm%.l %0,%1\";
  8496. + #else
  8497. +     return \"cmpm%.l %1,%0\";
  8498. + #endif
  8499. +   if (REG_P (operands[1])
  8500. +       || (!REG_P (operands[0]) && GET_CODE (operands[0]) != MEM))
  8501. +     { cc_status.flags |= CC_REVERSED;
  8502. + #ifdef SGS_CMP_ORDER
  8503. +       return \"cmp%.l %d1,%d0\";
  8504. + #else
  8505. +       return \"cmp%.l %d0,%d1\";
  8506. + #endif
  8507. +     }
  8508. + #ifdef SGS_CMP_ORDER
  8509. +   return \"cmp%.l %d0,%d1\";
  8510. + #else
  8511. +   return \"cmp%.l %d1,%d0\";
  8512. + #endif
  8513. + }")
  8514. + (define_insn "cmphi"
  8515. +   [(set (cc0)
  8516. +     (compare (match_operand:HI 0 "nonimmediate_operand" "rnm,d,n,m,>")
  8517. +          (match_operand:HI 1 "general_operand" "d,rnm,m,n,>")))]
  8518. +   ""
  8519. +   "*
  8520. + {
  8521. +   if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM)
  8522. + #ifdef SGS_CMP_ORDER
  8523. +     return \"cmpm%.w %0,%1\";
  8524. + #else
  8525. +     return \"cmpm%.w %1,%0\";
  8526. + #endif
  8527. +   if ((REG_P (operands[1]) && !ADDRESS_REG_P (operands[1]))
  8528. +       || (!REG_P (operands[0]) && GET_CODE (operands[0]) != MEM))
  8529. +     { cc_status.flags |= CC_REVERSED;
  8530. + #ifdef SGS_CMP_ORDER
  8531. +       return \"cmp%.w %d1,%d0\";
  8532. + #else
  8533. +       return \"cmp%.w %d0,%d1\";
  8534. + #endif
  8535. +     }
  8536. + #ifdef SGS_CMP_ORDER
  8537. +   return \"cmp%.w %d0,%d1\";
  8538. + #else
  8539. +   return \"cmp%.w %d1,%d0\";
  8540. + #endif
  8541. + }")
  8542. + (define_insn "cmpqi"
  8543. +   [(set (cc0)
  8544. +     (compare (match_operand:QI 0 "nonimmediate_operand" "dn,md,>")
  8545. +          (match_operand:QI 1 "general_operand" "dm,nd,>")))]
  8546. +   ""
  8547. +   "*
  8548. + {
  8549. +   if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM)
  8550. + #ifdef SGS_CMP_ORDER
  8551. +     return \"cmpm%.b %0,%1\";
  8552. + #else
  8553. +     return \"cmpm%.b %1,%0\";
  8554. + #endif
  8555. +   if (REG_P (operands[1])
  8556. +       || (!REG_P (operands[0]) && GET_CODE (operands[0]) != MEM))
  8557. +     { cc_status.flags |= CC_REVERSED;
  8558. + #ifdef SGS_CMP_ORDER
  8559. +       return \"cmp%.b %d1,%d0\";
  8560. + #else
  8561. +       return \"cmp%.b %d0,%d1\";
  8562. + #endif
  8563. +     }
  8564. + #ifdef SGS_CMP_ORDER
  8565. +   return \"cmp%.b %d0,%d1\";
  8566. + #else
  8567. +   return \"cmp%.b %d1,%d0\";
  8568. + #endif
  8569. + }")
  8570. + (define_expand "cmpdf"
  8571. +   [(set (cc0)
  8572. +     (compare (match_operand:DF 0 "general_operand" "")
  8573. +          (match_operand:DF 1 "general_operand" "")))]
  8574. +   "TARGET_68881 || TARGET_FPA"
  8575. +   "
  8576. + {
  8577. +   if (TARGET_FPA)
  8578. +     {
  8579. +       emit_insn (gen_cmpdf_fpa (operands[0], operands[1]));
  8580. +       DONE;
  8581. +     }
  8582. + }")
  8583. + (define_insn "cmpdf_fpa"
  8584. +   [(set (cc0)
  8585. +     (compare (match_operand:DF 0 "general_operand" "x,y")
  8586. +          (match_operand:DF 1 "general_operand" "xH,rmF")))
  8587. +    (clobber (match_scratch:SI 2 "=d,d"))]
  8588. +   "TARGET_FPA"
  8589. +   "fpcmp%.d %y1,%0\;fpmove fpastatus,%2\;movw %2,cc")
  8590. + (define_insn ""
  8591. +   [(set (cc0)
  8592. +     (compare (match_operand:DF 0 "general_operand" "f,mG")
  8593. +          (match_operand:DF 1 "general_operand" "fmG,f")))]
  8594. +   "TARGET_68881"
  8595. +   "*
  8596. + {
  8597. +   cc_status.flags = CC_IN_68881;
  8598. + #ifdef SGS_CMP_ORDER
  8599. +   if (REG_P (operands[0]))
  8600. +     {
  8601. +       if (REG_P (operands[1]))
  8602. +     return \"fcmp%.x %0,%1\";
  8603. +       else
  8604. +         return \"fcmp%.d %0,%f1\";
  8605. +     }
  8606. +   cc_status.flags |= CC_REVERSED;
  8607. +   return \"fcmp%.d %1,%f0\";
  8608. + #else
  8609. +   if (REG_P (operands[0]))
  8610. +     {
  8611. +       if (REG_P (operands[1]))
  8612. +     return \"fcmp%.x %1,%0\";
  8613. +       else
  8614. +         return \"fcmp%.d %f1,%0\";
  8615. +     }
  8616. +   cc_status.flags |= CC_REVERSED;
  8617. +   return \"fcmp%.d %f0,%1\";
  8618. + #endif
  8619. + }")
  8620. + (define_expand "cmpsf"
  8621. +  [(set (cc0)
  8622. +        (compare (match_operand:SF 0 "general_operand" "")
  8623. +         (match_operand:SF 1 "general_operand" "")))]
  8624. +  "TARGET_68881 || TARGET_FPA"
  8625. +  "
  8626. + {
  8627. +   if (TARGET_FPA)
  8628. +     {
  8629. +       emit_insn (gen_cmpsf_fpa (operands[0], operands[1]));
  8630. +       DONE;
  8631. +     }
  8632. + }")
  8633. + (define_insn "cmpsf_fpa"
  8634. +   [(set (cc0)
  8635. +     (compare (match_operand:SF 0 "general_operand" "x,y")
  8636. +          (match_operand:SF 1 "general_operand" "xH,rmF")))
  8637. +    (clobber (match_scratch:SI 2 "=d,d"))]
  8638. +   "TARGET_FPA"
  8639. +   "fpcmp%.s %w1,%x0\;fpmove fpastatus,%2\;movw %2,cc")
  8640. + (define_insn ""
  8641. +   [(set (cc0)
  8642. +     (compare (match_operand:SF 0 "general_operand" "f,mdG")
  8643. +          (match_operand:SF 1 "general_operand" "fmdG,f")))]
  8644. +   "TARGET_68881"
  8645. +   "*
  8646. + {
  8647. +   cc_status.flags = CC_IN_68881;
  8648. + #ifdef SGS_CMP_ORDER
  8649. +   if (FP_REG_P (operands[0]))
  8650. +     {
  8651. +       if (FP_REG_P (operands[1]))
  8652. +     return \"fcmp%.x %0,%1\";
  8653. +       else
  8654. +         return \"fcmp%.s %0,%f1\";
  8655. +     }
  8656. +   cc_status.flags |= CC_REVERSED;
  8657. +   return \"fcmp%.s %1,%f0\";
  8658. + #else
  8659. +   if (FP_REG_P (operands[0]))
  8660. +     {
  8661. +       if (FP_REG_P (operands[1]))
  8662. +     return \"fcmp%.x %1,%0\";
  8663. +       else
  8664. +         return \"fcmp%.s %f1,%0\";
  8665. +     }
  8666. +   cc_status.flags |= CC_REVERSED;
  8667. +   return \"fcmp%.s %f0,%1\";
  8668. + #endif
  8669. + }")
  8670. + ;; Recognizers for btst instructions.
  8671. + (define_insn ""
  8672. +   [(set (cc0) (zero_extract (match_operand:QI 0 "nonimmediate_operand" "do")
  8673. +                 (const_int 1)
  8674. +                 (minus:SI (const_int 7)
  8675. +                       (match_operand:SI 1 "general_operand" "di"))))]
  8676. +   ""
  8677. +   "* { return output_btst (operands, operands[1], operands[0], insn, 7); }")
  8678. + (define_insn ""
  8679. +   [(set (cc0) (zero_extract (match_operand:SI 0 "nonimmediate_operand" "d")
  8680. +                 (const_int 1)
  8681. +                 (minus:SI (const_int 31)
  8682. +                       (match_operand:SI 1 "general_operand" "di"))))]
  8683. +   ""
  8684. +   "* { return output_btst (operands, operands[1], operands[0], insn, 31); }")
  8685. + ;; The following two patterns are like the previous two
  8686. + ;; except that they use the fact that bit-number operands
  8687. + ;; are automatically masked to 3 or 5 bits.
  8688. + (define_insn ""
  8689. +   [(set (cc0) (zero_extract (match_operand:QI 0 "nonimmediate_operand" "do")
  8690. +                 (const_int 1)
  8691. +                 (minus:SI (const_int 7)
  8692. +                       (and:SI
  8693. +                        (match_operand:SI 1 "general_operand" "d")
  8694. +                        (const_int 7)))))]
  8695. +   ""
  8696. +   "* { return output_btst (operands, operands[1], operands[0], insn, 7); }")
  8697. + (define_insn ""
  8698. +   [(set (cc0) (zero_extract (match_operand:SI 0 "nonimmediate_operand" "d")
  8699. +                 (const_int 1)
  8700. +                 (minus:SI (const_int 31)
  8701. +                       (and:SI
  8702. +                        (match_operand:SI 1 "general_operand" "d")
  8703. +                        (const_int 31)))))]
  8704. +   ""
  8705. +   "* { return output_btst (operands, operands[1], operands[0], insn, 31); }")
  8706. + ;; Nonoffsettable mem refs are ok in this one pattern
  8707. + ;; since we don't try to adjust them.
  8708. + (define_insn ""
  8709. +   [(set (cc0) (zero_extract (match_operand:QI 0 "nonimmediate_operand" "md")
  8710. +                 (const_int 1)
  8711. +                 (match_operand:SI 1 "general_operand" "i")))]
  8712. +   "GET_CODE (operands[1]) == CONST_INT
  8713. +    && (unsigned) INTVAL (operands[1]) < 8"
  8714. +   "*
  8715. + {
  8716. +   operands[1] = gen_rtx (CONST_INT, VOIDmode, 7 - INTVAL (operands[1]));
  8717. +   return output_btst (operands, operands[1], operands[0], insn, 7);
  8718. + }")
  8719. + (define_insn ""
  8720. +   [(set (cc0) (zero_extract (match_operand:SI 0 "nonimmediate_operand" "do")
  8721. +                 (const_int 1)
  8722. +                 (match_operand:SI 1 "general_operand" "i")))]
  8723. +   "GET_CODE (operands[1]) == CONST_INT"
  8724. +   "*
  8725. + {
  8726. +   if (GET_CODE (operands[0]) == MEM)
  8727. +     {
  8728. +       operands[0] = adj_offsettable_operand (operands[0],
  8729. +                          INTVAL (operands[1]) / 8);
  8730. +       operands[1] = gen_rtx (CONST_INT, VOIDmode, 
  8731. +                  7 - INTVAL (operands[1]) % 8);
  8732. +       return output_btst (operands, operands[1], operands[0], insn, 7);
  8733. +     }
  8734. +   operands[1] = gen_rtx (CONST_INT, VOIDmode,
  8735. +              31 - INTVAL (operands[1]));
  8736. +   return output_btst (operands, operands[1], operands[0], insn, 31);
  8737. + }")
  8738. + ;; move instructions
  8739. + ;; A special case in which it is not desirable
  8740. + ;; to reload the constant into a data register.
  8741. + (define_insn ""
  8742. +   [(set (match_operand:SI 0 "push_operand" "=m")
  8743. +     (match_operand:SI 1 "general_operand" "J"))]
  8744. +   "GET_CODE (operands[1]) == CONST_INT
  8745. +    && INTVAL (operands[1]) >= -0x8000
  8746. +    && INTVAL (operands[1]) < 0x8000"
  8747. +   "*
  8748. + {
  8749. +   if (operands[1] == const0_rtx)
  8750. +     return \"clr%.l %0\";
  8751. +   return \"pea %a1\";
  8752. + }")
  8753. + ;This is never used.
  8754. + ;(define_insn "swapsi"
  8755. + ;  [(set (match_operand:SI 0 "general_operand" "+r")
  8756. + ;    (match_operand:SI 1 "general_operand" "+r"))
  8757. + ;   (set (match_dup 1) (match_dup 0))]
  8758. + ;  ""
  8759. + ;  "exg %1,%0")
  8760. + ;; Special case of fullword move when source is zero.
  8761. + ;; The reason this is special is to avoid loading a zero
  8762. + ;; into a data reg with moveq in order to store it elsewhere.
  8763. +    
  8764. + (define_insn ""
  8765. +   [(set (match_operand:SI 0 "general_operand" "=g")
  8766. +     (const_int 0))]
  8767. +   ;; clr insns on 68000 read before writing.
  8768. +   ;; This isn't so on the 68010, but we have no alternative for it.
  8769. +   "(TARGET_68020
  8770. +     || !(GET_CODE (operands[0]) == MEM && MEM_VOLATILE_P (operands[0])))"
  8771. +   "*
  8772. + {
  8773. +   if (ADDRESS_REG_P (operands[0]))
  8774. +     return \"sub%.l %0,%0\";
  8775. +   /* moveq is faster on the 68000.  */
  8776. +   if (DATA_REG_P (operands[0]) && !TARGET_68020)
  8777. + #if defined(MOTOROLA) && !defined(CRDS)
  8778. +     return \"moveq%.l %#0,%0\";
  8779. + #else
  8780. +     return \"moveq %#0,%0\";
  8781. + #endif
  8782. +   return \"clr%.l %0\";
  8783. + }")
  8784. + ;; General case of fullword move. 
  8785. + ;;
  8786. + ;; This is the main "hook" for PIC code.  When generating
  8787. + ;; PIC, movsi is responsible for determining when the source address
  8788. + ;; needs PIC relocation and appropriately calling legitimize_pic_address
  8789. + ;; to perform the actual relocation.
  8790. + ;;
  8791. + ;; In both the PIC and non-PIC cases the patterns generated will
  8792. + ;; matched by the next define_insn. 
  8793. + (define_expand "movsi"
  8794. +   [(set (match_operand:SI 0 "general_operand" "")
  8795. +     (match_operand:SI 1 "general_operand" ""))]
  8796. +   ""
  8797. +   "
  8798. + {
  8799. +   if (flag_pic && symbolic_operand (operands[1], SImode)) 
  8800. +     {
  8801. + #ifdef LEGITIMATE_BASEREL_OPERAND_P
  8802. +       if (flag_pic < 3 || !LEGITIMATE_BASEREL_OPERAND_P (operands[1]))
  8803. + #endif
  8804. +       {
  8805. +         /* The source is an address which requires PIC relocation.  
  8806. +            Call legitimize_pic_address with the source, mode, and a relocation
  8807. +            register (a new pseudo, or the final destination if reload_in_progress
  8808. +            is set).   Then fall through normally */
  8809. +         extern rtx legitimize_pic_address();
  8810. +         rtx temp = reload_in_progress ? operands[0] : gen_reg_rtx (Pmode);
  8811. +         operands[1] = legitimize_pic_address (operands[1], SImode, temp);
  8812. +       }
  8813. +     }
  8814. + }")
  8815. + ;; General case of fullword move.  The register constraints
  8816. + ;; force integer constants in range for a moveq to be reloaded
  8817. + ;; if they are headed for memory.
  8818. + (define_insn ""
  8819. +   ;; Notes: make sure no alternative allows g vs g.
  8820. +   ;; We don't allow f-regs since fixed point cannot go in them.
  8821. +   ;; We do allow y and x regs since fixed point is allowed in them.
  8822. +   [(set (match_operand:SI 0 "general_operand" "=g,da,y,!*x*r*m")
  8823. +     (match_operand:SI 1 "general_operand" "daymKs,i,g,*x*r*m"))]
  8824. +   ""
  8825. +   "*
  8826. + {
  8827. +   if (which_alternative == 3)
  8828. +     return \"fpmove%.l %x1,fpa0\;fpmove%.l fpa0,%x0\";    
  8829. +   if (FPA_REG_P (operands[1]) || FPA_REG_P (operands[0]))
  8830. +     return \"fpmove%.l %x1,%x0\";
  8831. +   if (GET_CODE (operands[1]) == CONST_INT)
  8832. +     {
  8833. +       if (operands[1] == const0_rtx
  8834. +       && (DATA_REG_P (operands[0])
  8835. +           || GET_CODE (operands[0]) == MEM)
  8836. +       /* clr insns on 68000 read before writing.
  8837. +          This isn't so on the 68010, but we have no alternative for it.  */
  8838. +       && (TARGET_68020
  8839. +           || !(GET_CODE (operands[0]) == MEM
  8840. +            && MEM_VOLATILE_P (operands[0]))))
  8841. +     return \"clr%.l %0\";
  8842. +       else if (DATA_REG_P (operands[0])
  8843. +            && INTVAL (operands[1]) < 128
  8844. +            && INTVAL (operands[1]) >= -128)
  8845. +         {
  8846. + #if defined(MOTOROLA) && !defined(CRDS)
  8847. +           return \"moveq%.l %1,%0\";
  8848. + #else
  8849. +       return \"moveq %1,%0\";
  8850. + #endif
  8851. +     }
  8852. + #ifndef NO_ADDSUB_Q
  8853. +       else if (DATA_REG_P (operands[0])
  8854. +            /* Do this with a moveq #N-8, dreg; addq #8,dreg */
  8855. +            && INTVAL (operands[1]) < 136
  8856. +            && INTVAL (operands[1]) >= 128)
  8857. +         {
  8858. +       operands[1] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) - 8);
  8859. + #if defined(MOTOROLA) && !defined(CRDS)
  8860. +           return \"moveq%.l %1,%0\;addq%.w %#8,%0\";
  8861. + #else
  8862. +       return \"moveq %1,%0\;addq%.w %#8,%0\";
  8863. + #endif
  8864. +     }
  8865. +       else if (DATA_REG_P (operands[0])
  8866. +            /* Do this with a moveq #N+8, dreg; subq #8,dreg */
  8867. +            && INTVAL (operands[1]) < -128
  8868. +            && INTVAL (operands[1]) >= -136)
  8869. +         {
  8870. +       operands[1] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) + 8);
  8871. + #if defined(MOTOROLA) && !defined(CRDS)
  8872. +           return \"moveq%.l %1,%0;subq%.w %#8,%0\";
  8873. + #else
  8874. +       return \"moveq %1,%0;subq%.w %#8,%0\";
  8875. + #endif
  8876. +     }
  8877. + #endif
  8878. +       else if (DATA_REG_P (operands[0])
  8879. +            /* If N is in the right range and is even, then use
  8880. +               moveq #N/2, dreg; addl dreg,dreg */
  8881. +            && INTVAL (operands[1]) > 127
  8882. +            && INTVAL (operands[1]) <= 254
  8883. +            && INTVAL (operands[1]) % 2 == 0)
  8884. +         {
  8885. +       operands[1] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) / 2);
  8886. + #if defined(MOTOROLA) && !defined(CRDS)
  8887. +           return \"moveq%.l %1,%0\;add%.w %0,%0\";
  8888. + #else
  8889. +       return \"moveq %1,%0\;add%.w %0,%0\";
  8890. + #endif
  8891. +     }
  8892. +       else if (ADDRESS_REG_P (operands[0])
  8893. +            && INTVAL (operands[1]) < 0x8000
  8894. +            && INTVAL (operands[1]) >= -0x8000)
  8895. +     return \"move%.w %1,%0\";
  8896. +       else if (push_operand (operands[0], SImode)
  8897. +            && INTVAL (operands[1]) < 0x8000
  8898. +            && INTVAL (operands[1]) >= -0x8000)
  8899. +         return \"pea %a1\";
  8900. +     }
  8901. +   else if ((GET_CODE (operands[1]) == SYMBOL_REF
  8902. +         || GET_CODE (operands[1]) == CONST)
  8903. +        && push_operand (operands[0], SImode))
  8904. +     return \"pea %a1\";
  8905. +   else if ((GET_CODE (operands[1]) == SYMBOL_REF
  8906. +         || GET_CODE (operands[1]) == CONST)
  8907. +        && ADDRESS_REG_P (operands[0]))
  8908. +     return \"lea %a1,%0\";
  8909. +   return \"move%.l %1,%0\";
  8910. + }")
  8911. + (define_insn "movhi"
  8912. +   [(set (match_operand:HI 0 "general_operand" "=g")
  8913. +     (match_operand:HI 1 "general_operand" "g"))]
  8914. +   ""
  8915. +   "*
  8916. + {
  8917. +   if (GET_CODE (operands[1]) == CONST_INT)
  8918. +     {
  8919. +       if (operands[1] == const0_rtx
  8920. +       && (DATA_REG_P (operands[0])
  8921. +           || GET_CODE (operands[0]) == MEM)
  8922. +       /* clr insns on 68000 read before writing.
  8923. +          This isn't so on the 68010, but we have no alternative for it.  */
  8924. +       && (TARGET_68020
  8925. +           || !(GET_CODE (operands[0]) == MEM
  8926. +            && MEM_VOLATILE_P (operands[0]))))
  8927. +     return \"clr%.w %0\";
  8928. +       else if (DATA_REG_P (operands[0])
  8929. +            && INTVAL (operands[1]) < 128
  8930. +            && INTVAL (operands[1]) >= -128)
  8931. +         {
  8932. + #if defined(MOTOROLA) && !defined(CRDS)
  8933. +           return \"moveq%.l %1,%0\";
  8934. + #else
  8935. +       return \"moveq %1,%0\";
  8936. + #endif
  8937. +     }
  8938. +       else if (INTVAL (operands[1]) < 0x8000
  8939. +            && INTVAL (operands[1]) >= -0x8000)
  8940. +     return \"move%.w %1,%0\";
  8941. +     }
  8942. +   else if (CONSTANT_P (operands[1]))
  8943. +     return \"move%.l %1,%0\";
  8944. + #ifndef SGS_NO_LI
  8945. +   /* Recognize the insn before a tablejump, one that refers
  8946. +      to a table of offsets.  Such an insn will need to refer
  8947. +      to a label on the insn.  So output one.  Use the label-number
  8948. +      of the table of offsets to generate this label.  */
  8949. +   if (GET_CODE (operands[1]) == MEM
  8950. +       && GET_CODE (XEXP (operands[1], 0)) == PLUS
  8951. +       && (GET_CODE (XEXP (XEXP (operands[1], 0), 0)) == LABEL_REF
  8952. +       || GET_CODE (XEXP (XEXP (operands[1], 0), 1)) == LABEL_REF)
  8953. +       && GET_CODE (XEXP (XEXP (operands[1], 0), 0)) != PLUS
  8954. +       && GET_CODE (XEXP (XEXP (operands[1], 0), 1)) != PLUS)
  8955. +     {
  8956. +       rtx labelref;
  8957. +       if (GET_CODE (XEXP (XEXP (operands[1], 0), 0)) == LABEL_REF)
  8958. +     labelref = XEXP (XEXP (operands[1], 0), 0);
  8959. +       else
  8960. +     labelref = XEXP (XEXP (operands[1], 0), 1);
  8961. + #if defined (MOTOROLA) && !defined (SGS_SWITCH_TABLES)
  8962. + #ifdef SGS
  8963. +       asm_fprintf (asm_out_file, \"\\tset %LLI%d,.+2\\n\",
  8964. +            CODE_LABEL_NUMBER (XEXP (labelref, 0)));
  8965. + #else /* not SGS */
  8966. +       asm_fprintf (asm_out_file, \"\\t.set %LLI%d,.+2\\n\",
  8967. +                CODE_LABEL_NUMBER (XEXP (labelref, 0)));
  8968. + #endif /* not SGS */
  8969. + #else /* SGS_SWITCH_TABLES or not MOTOROLA */
  8970. +       ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"LI\",
  8971. +                  CODE_LABEL_NUMBER (XEXP (labelref, 0)));
  8972. + #ifdef SGS_SWITCH_TABLES
  8973. +       /* Set flag saying we need to define the symbol
  8974. +      LD%n (with value L%n-LI%n) at the end of the switch table.  */
  8975. +       switch_table_difference_label_flag = 1;
  8976. + #endif /* SGS_SWITCH_TABLES */
  8977. + #endif /* SGS_SWITCH_TABLES or not MOTOROLA */
  8978. +     }
  8979. + #endif /* SGS_NO_LI */
  8980. +   return \"move%.w %1,%0\";
  8981. + }")
  8982. + (define_insn "movstricthi"
  8983. +   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+dm"))
  8984. +     (match_operand:HI 1 "general_operand" "rmn"))]
  8985. +   ""
  8986. +   "*
  8987. + {
  8988. +   if (GET_CODE (operands[1]) == CONST_INT)
  8989. +     {
  8990. +       if (operands[1] == const0_rtx
  8991. +       && (DATA_REG_P (operands[0])
  8992. +           || GET_CODE (operands[0]) == MEM)
  8993. +       /* clr insns on 68000 read before writing.
  8994. +          This isn't so on the 68010, but we have no alternative for it.  */
  8995. +       && (TARGET_68020
  8996. +           || !(GET_CODE (operands[0]) == MEM
  8997. +            && MEM_VOLATILE_P (operands[0]))))
  8998. +     return \"clr%.w %0\";
  8999. +     }
  9000. +   return \"move%.w %1,%0\";
  9001. + }")
  9002. + (define_insn "movqi"
  9003. +   [(set (match_operand:QI 0 "general_operand" "=d,*a,m,m,?*a")
  9004. +     (match_operand:QI 1 "general_operand" "dmi*a,d*a,dmi,?*a,m"))]
  9005. +   ""
  9006. +   "*
  9007. + {
  9008. +   rtx xoperands[4];
  9009. +   /* This is probably useless, since it loses for pushing a struct
  9010. +      of several bytes a byte at a time.  */
  9011. +   if (GET_CODE (operands[0]) == MEM
  9012. +       && GET_CODE (XEXP (operands[0], 0)) == PRE_DEC
  9013. +       && XEXP (XEXP (operands[0], 0), 0) == stack_pointer_rtx)
  9014. +     {
  9015. +       xoperands[1] = operands[1];
  9016. +       xoperands[2]
  9017. +         = gen_rtx (MEM, QImode,
  9018. +            gen_rtx (PLUS, VOIDmode, stack_pointer_rtx, const1_rtx));
  9019. +       /* Just pushing a byte puts it in the high byte of the halfword.  */
  9020. +       /* We must put it in the low-order, high-numbered byte.  */
  9021. +       output_asm_insn (\"move%.b %1,%-\;move%.b %@,%2\", xoperands);
  9022. +       return \"\";
  9023. +     }
  9024. +   /* Moving a byte into an address register is not possible.  */
  9025. +   /* Use d0 as an intermediate, but don't clobber its contents.  */
  9026. +   if (ADDRESS_REG_P (operands[0]) && GET_CODE (operands[1]) == MEM)
  9027. +     {
  9028. +       /* ??? For 2.5, don't allow this choice and use secondary reloads
  9029. +      instead.
  9030. +      See if the address register is used in the address.  If it
  9031. +      is, we have to generate a more complex sequence than those below.  */
  9032. +       if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
  9033. +                  operands[1], NULL_RTX))
  9034. +     {
  9035. +       /* See if the stack pointer is used in the address.  If it isn't,
  9036. +          we can push d0 or d1 (the insn can't use both of them) on
  9037. +          the stack, perform our move into d0/d1, copy the byte from d0/1,
  9038. +          and pop d0/1.  */
  9039. +       if (! reg_mentioned_p (stack_pointer_rtx, operands[1]))
  9040. +         {
  9041. +           if (refers_to_regno_p (0, 1, operands[1], NULL_RTX))
  9042. +         return \"move%.l %/d0,%-\;move%.b %1,%/d0\;move%.l %/d0,%0\;move%.l %+,%/d0\";
  9043. +           else
  9044. +         return \"move%.l %/d1,%-\;move%.b %1,%/d1\;move%.l %/d1,%0\;move%.l %+,%/d1\";
  9045. +         }
  9046. +       else
  9047. +         {
  9048. +           /* Otherwise, we know that d0 cannot be used in the address
  9049. +          (since sp and one address register is).  Assume that sp is
  9050. +          being used as a base register and replace the address
  9051. +          register that is our operand[0] with d0.  */
  9052. +           rtx reg_map[FIRST_PSEUDO_REGISTER];
  9053. +           int i;
  9054. +           for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
  9055. +         reg_map[i] = 0;
  9056. +           reg_map[REGNO (operands[0])] = gen_rtx (REG, Pmode, 0);
  9057. +           operands[1] = copy_rtx (operands[1]);
  9058. +           replace_regs (operands[1], reg_map, FIRST_PSEUDO_REGISTER, 0);
  9059. +           return \"exg %/d0,%0\;move%.b %1,%/d0\;exg %/d0,%0\";
  9060. +         }
  9061. +     }
  9062. +       /* If the address of operand 1 uses d0, choose d1 as intermediate.  */
  9063. +       if (refers_to_regno_p (0, 1, operands[1], NULL_RTX))
  9064. +     return \"exg %/d1,%0\;move%.b %1,%/d1\;exg %/d1,%0\";
  9065. +       /* Otherwise d0 is usable.
  9066. +      (An effective address on the 68k can't use two d-regs.)  */
  9067. +       else
  9068. +     return \"exg %/d0,%0\;move%.b %1,%/d0\;exg %/d0,%0\";
  9069. +     }
  9070. +     
  9071. +   /* Likewise for moving from an address reg.  */
  9072. +   if (ADDRESS_REG_P (operands[1]) && GET_CODE (operands[0]) == MEM)
  9073. +     {
  9074. +       /* ??? For 2.5, don't allow this choice and use secondary reloads
  9075. +      instead.
  9076. +      See if the address register is used in the address.  If it
  9077. +      is, we have to generate a more complex sequence than those below.  */
  9078. +       if (refers_to_regno_p (REGNO (operands[1]), REGNO (operands[1]) + 1,
  9079. +                  operands[0], NULL_RTX))
  9080. +     {
  9081. +       /* See if the stack pointer is used in the address.  If it isn't,
  9082. +          we can push d0 or d1 (the insn can't use both of them) on
  9083. +          the stack, copy the byte to d0/1, perform our move from d0/d1, 
  9084. +          and pop d0/1.  */
  9085. +       if (! reg_mentioned_p (stack_pointer_rtx, operands[0]))
  9086. +         {
  9087. +           if (refers_to_regno_p (0, 1, operands[0], NULL_RTX))
  9088. +         return \"move%.l %/d0,%-\;move%.l %1,%/d0\;move%.b %/d0,%0\;move%.l %+,%/d0\";
  9089. +           else
  9090. +         return \"move%.l %/d1,%-\;move%.l %1,%/d1\;move%.b %/d1,%0\;move%.l %+,%/d1\";
  9091. +         }
  9092. +       else
  9093. +         {
  9094. +           /* Otherwise, we know that d0 cannot be used in the address
  9095. +          (since sp and one address register is).  Assume that sp is
  9096. +          being used as a base register and replace the address
  9097. +          register that is our operand[1] with d0.  */
  9098. +           rtx reg_map[FIRST_PSEUDO_REGISTER];
  9099. +           int i;
  9100. +           for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
  9101. +         reg_map[i] = 0;
  9102. +           reg_map[REGNO (operands[1])] = gen_rtx (REG, Pmode, 0);
  9103. +           operands[0] = copy_rtx (operands[0]);
  9104. +           replace_regs (operands[0], reg_map, FIRST_PSEUDO_REGISTER, 0);
  9105. +           return \"exg %/d0,%1\;move%.b %/d0,%0\;exg %/d0,%1\";
  9106. +         }
  9107. +     }
  9108. +       if (refers_to_regno_p (0, 1, operands[0], NULL_RTX))
  9109. +         return \"exg %/d1,%1\;move%.b %/d1,%0\;exg %/d1,%1\";
  9110. +       else
  9111. +         return \"exg %/d0,%1\;move%.b %/d0,%0\;exg %/d0,%1\";
  9112. +     }
  9113. +   /* clr and st insns on 68000 read before writing.
  9114. +      This isn't so on the 68010, but we have no alternative for it.  */
  9115. +   if (TARGET_68020
  9116. +       || !(GET_CODE (operands[0]) == MEM && MEM_VOLATILE_P (operands[0])))
  9117. +     {
  9118. +       if (operands[1] == const0_rtx)
  9119. +     return \"clr%.b %0\";
  9120. +       if (GET_CODE (operands[1]) == CONST_INT
  9121. +       && INTVAL (operands[1]) == -1)
  9122. +     {
  9123. +       CC_STATUS_INIT;
  9124. +       return \"st %0\";
  9125. +     }
  9126. +     }
  9127. +   if (GET_CODE (operands[1]) != CONST_INT && CONSTANT_P (operands[1]))
  9128. +     return \"move%.l %1,%0\";
  9129. +   if (ADDRESS_REG_P (operands[0]) || ADDRESS_REG_P (operands[1]))
  9130. +     return \"move%.w %1,%0\";
  9131. +   return \"move%.b %1,%0\";
  9132. + }")
  9133. + (define_insn "movstrictqi"
  9134. +   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+dm"))
  9135. +     (match_operand:QI 1 "general_operand" "dmn"))]
  9136. +   ""
  9137. +   "*
  9138. + {
  9139. +   if (operands[1] == const0_rtx
  9140. +       /* clr insns on 68000 read before writing.
  9141. +          This isn't so on the 68010, but we have no alternative for it.  */
  9142. +       && (TARGET_68020
  9143. +           || !(GET_CODE (operands[0]) == MEM && MEM_VOLATILE_P (operands[0]))))
  9144. +     return \"clr%.b %0\";
  9145. +   return \"move%.b %1,%0\";
  9146. + }")
  9147. + (define_insn "movsf"
  9148. +   [(set (match_operand:SF 0 "general_operand" "=rmf,x,y,rm,!x,!rm")
  9149. +     (match_operand:SF 1 "general_operand" "rmfF,xH,rmF,y,rm,x"))]
  9150. + ;  [(set (match_operand:SF 0 "general_operand" "=rmf")
  9151. + ;    (match_operand:SF 1 "general_operand" "rmfF"))]
  9152. +   ""
  9153. +   "*
  9154. + {
  9155. +   if (which_alternative >= 4)
  9156. +     return \"fpmove%.s %1,fpa0\;fpmove%.s fpa0,%0\";
  9157. +   if (FPA_REG_P (operands[0]))
  9158. +     {
  9159. +       if (FPA_REG_P (operands[1]))
  9160. +     return \"fpmove%.s %x1,%x0\";
  9161. +       else if (GET_CODE (operands[1]) == CONST_DOUBLE)
  9162. +     return output_move_const_single (operands);
  9163. +       else if (FP_REG_P (operands[1]))
  9164. +         return \"fmove%.s %1,sp@-\;fpmove%.d sp@+, %0\";
  9165. +       return \"fpmove%.s %x1,%x0\";
  9166. +     }
  9167. +   if (FPA_REG_P (operands[1]))
  9168. +     {
  9169. +       if (FP_REG_P (operands[0]))
  9170. +     return \"fpmove%.s %x1,sp@-\;fmove%.s sp@+,%0\";
  9171. +       else
  9172. +     return \"fpmove%.s %x1,%x0\";
  9173. +     }
  9174. +   if (FP_REG_P (operands[0]))
  9175. +     {
  9176. +       if (FP_REG_P (operands[1]))
  9177. +     return \"f%$move%.x %1,%0\";
  9178. +       else if (ADDRESS_REG_P (operands[1]))
  9179. +     return \"move%.l %1,%-\;f%$move%.s %+,%0\";
  9180. +       else if (GET_CODE (operands[1]) == CONST_DOUBLE)
  9181. +     return output_move_const_single (operands);
  9182. +       return \"f%$move%.s %f1,%0\";
  9183. +     }
  9184. +   if (FP_REG_P (operands[1]))
  9185. +     {
  9186. +       if (ADDRESS_REG_P (operands[0]))
  9187. +     return \"fmove%.s %1,%-\;move%.l %+,%0\";
  9188. +       return \"fmove%.s %f1,%0\";
  9189. +     }
  9190. +   return \"move%.l %1,%0\";
  9191. + }")
  9192. + (define_insn "movdf"
  9193. +   [(set (match_operand:DF 0 "general_operand" "=rm,rf,rf,&rof<>,y,rm,x,!x,!rm")
  9194. +     (match_operand:DF 1 "general_operand" "rf,m,0,rofE<>,rmE,y,xH,rm,x"))]
  9195. + ;  [(set (match_operand:DF 0 "general_operand" "=rm,&rf,&rof<>")
  9196. + ;    (match_operand:DF 1 "general_operand" "rf,m,rofF<>"))]
  9197. +   ""
  9198. +   "*
  9199. + {
  9200. +   if (which_alternative == 7)
  9201. +     return \"fpmove%.d %x1,fpa0\;fpmove%.d fpa0,%x0\";
  9202. +   if (FPA_REG_P (operands[0]))
  9203. +     {
  9204. +       if (GET_CODE (operands[1]) == CONST_DOUBLE)
  9205. +     return output_move_const_double (operands);
  9206. +       if (FP_REG_P (operands[1]))
  9207. +         return \"fmove%.d %1,sp@-\;fpmove%.d sp@+,%x0\";
  9208. +       return \"fpmove%.d %x1,%x0\";
  9209. +     }
  9210. +   else if (FPA_REG_P (operands[1]))
  9211. +     {
  9212. +       if (FP_REG_P(operands[0]))
  9213. +         return \"fpmove%.d %x1,sp@-\;fmoved sp@+,%0\";
  9214. +       else
  9215. +         return \"fpmove%.d %x1,%x0\";
  9216. +     }
  9217. +   if (FP_REG_P (operands[0]))
  9218. +     {
  9219. +       if (FP_REG_P (operands[1]))
  9220. +     return \"f%&move%.x %1,%0\";
  9221. +       if (REG_P (operands[1]))
  9222. +     {
  9223. +       rtx xoperands[2];
  9224. +       xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
  9225. +       output_asm_insn (\"move%.l %1,%-\", xoperands);
  9226. +       output_asm_insn (\"move%.l %1,%-\", operands);
  9227. +       return \"f%&move%.d %+,%0\";
  9228. +     }
  9229. +       if (GET_CODE (operands[1]) == CONST_DOUBLE)
  9230. +     return output_move_const_double (operands);
  9231. +       return \"f%&move%.d %f1,%0\";
  9232. +     }
  9233. +   else if (FP_REG_P (operands[1]))
  9234. +     {
  9235. +       if (REG_P (operands[0]))
  9236. +     {
  9237. +       output_asm_insn (\"fmove%.d %f1,%-\;move%.l %+,%0\", operands);
  9238. +       operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
  9239. +       return \"move%.l %+,%0\";
  9240. +     }
  9241. +       else
  9242. +         return \"fmove%.d %f1,%0\";
  9243. +     }
  9244. +   return output_move_double (operands);
  9245. + }
  9246. + ")
  9247. + (define_expand "movxf"
  9248. +   [(set (match_operand:XF 0 "nonimmediate_operand" "")
  9249. +     (match_operand:XF 1 "general_operand" ""))]
  9250. +   ""
  9251. +   "
  9252. + {
  9253. +   if (CONSTANT_P (operands[1]))
  9254. +     {
  9255. +       operands[1] = force_const_mem (XFmode, operands[1]);
  9256. +       if (! memory_address_p (XFmode, XEXP (operands[1], 0))
  9257. +       && ! reload_in_progress)
  9258. +     operands[1] = change_address (operands[1], XFmode,
  9259. +                       XEXP (operands[1], 0));
  9260. +     }
  9261. + }")
  9262. + (define_insn ""
  9263. +   [(set (match_operand:XF 0 "nonimmediate_operand" "=f,m,f,!r,!f")
  9264. +     (match_operand:XF 1 "nonimmediate_operand" "m,f,f,f,r"))]
  9265. +   "TARGET_68881"
  9266. +   "*
  9267. + {
  9268. +   if (FP_REG_P (operands[0]))
  9269. +     {
  9270. +       if (FP_REG_P (operands[1]))
  9271. +     return \"fmove%.x %1,%0\";
  9272. +       if (REG_P (operands[1]))
  9273. +     {
  9274. +       rtx xoperands[2];
  9275. +       xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 2);
  9276. +       output_asm_insn (\"move%.l %1,%-\", xoperands);
  9277. +       xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
  9278. +       output_asm_insn (\"move%.l %1,%-\", xoperands);
  9279. +       output_asm_insn (\"move%.l %1,%-\", operands);
  9280. +       return \"fmove%.x %+,%0\";
  9281. +     }
  9282. +       if (GET_CODE (operands[1]) == CONST_DOUBLE)
  9283. +         return \"fmove%.x %1,%0\";
  9284. +       return \"fmove%.x %f1,%0\";
  9285. +     }
  9286. +   if (REG_P (operands[0]))
  9287. +     {
  9288. +       output_asm_insn (\"fmove%.x %f1,%-\;move%.l %+,%0\", operands);
  9289. +       operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
  9290. +       output_asm_insn (\"move%.l %+,%0\", operands);
  9291. +       operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
  9292. +       return \"move%.l %+,%0\";
  9293. +     }
  9294. +   return \"fmove%.x %f1,%0\";
  9295. + }
  9296. + ")
  9297. + (define_insn ""
  9298. +   [(set (match_operand:XF 0 "nonimmediate_operand" "=rm,rf,&rof<>")
  9299. +     (match_operand:XF 1 "nonimmediate_operand" "rf,m,rof<>"))]
  9300. +   "! TARGET_68881"
  9301. +   "*
  9302. + {
  9303. +   if (FP_REG_P (operands[0]))
  9304. +     {
  9305. +       if (FP_REG_P (operands[1]))
  9306. +     return \"fmove%.x %1,%0\";
  9307. +       if (REG_P (operands[1]))
  9308. +     {
  9309. +       rtx xoperands[2];
  9310. +       xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 2);
  9311. +       output_asm_insn (\"move%.l %1,%-\", xoperands);
  9312. +       xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
  9313. +       output_asm_insn (\"move%.l %1,%-\", xoperands);
  9314. +       output_asm_insn (\"move%.l %1,%-\", operands);
  9315. +       return \"fmove%.x %+,%0\";
  9316. +     }
  9317. +       if (GET_CODE (operands[1]) == CONST_DOUBLE)
  9318. +         return \"fmove%.x %1,%0\";
  9319. +       return \"fmove%.x %f1,%0\";
  9320. +     }
  9321. +   if (FP_REG_P (operands[1]))
  9322. +     {
  9323. +       if (REG_P (operands[0]))
  9324. +         {
  9325. +           output_asm_insn (\"fmove%.x %f1,%-\;move%.l %+,%0\", operands);
  9326. +           operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
  9327. +           output_asm_insn (\"move%.l %+,%0\", operands);
  9328. +           operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
  9329. +           return \"move%.l %+,%0\";
  9330. +         }
  9331. +       else
  9332. +         return \"fmove%.x %f1,%0\";
  9333. +     }
  9334. +   return output_move_double (operands);
  9335. + }
  9336. + ")
  9337. + ;; movdi can apply to fp regs in some cases
  9338. + (define_insn "movdi"
  9339. +   ;; Let's see if it really still needs to handle fp regs, and, if so, why.
  9340. +   [(set (match_operand:DI 0 "general_operand" "=rm,r,&ro<>,y,rm,!*x,!rm")
  9341. +     (match_operand:DI 1 "general_operand" "rF,m,roi<>F,rmiF,y,rmF,*x"))]
  9342. + ;  [(set (match_operand:DI 0 "general_operand" "=rm,&r,&ro<>,!&rm,!&f,y,rm,x,!x,!rm")
  9343. + ;    (match_operand:DI 1 "general_operand" "r,m,roi<>,fF,rfmF,rmi,y,rm,x"))]
  9344. + ;  [(set (match_operand:DI 0 "general_operand" "=rm,&rf,&ro<>,!&rm,!&f")
  9345. + ;    (match_operand:DI 1 "general_operand" "r,m,roi<>,fF,rfF"))]
  9346. +   ""
  9347. +   "*
  9348. + {
  9349. +   if (which_alternative == 8)
  9350. +     return \"fpmove%.d %x1,fpa0\;fpmove%.d fpa0,%x0\";
  9351. +   if (FPA_REG_P (operands[0]) || FPA_REG_P (operands[1]))
  9352. +     return \"fpmove%.d %x1,%x0\";
  9353. +   if (FP_REG_P (operands[0]))
  9354. +     {
  9355. +       if (FP_REG_P (operands[1]))
  9356. +     return \"fmove%.x %1,%0\";
  9357. +       if (REG_P (operands[1]))
  9358. +     {
  9359. +       rtx xoperands[2];
  9360. +       xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
  9361. +       output_asm_insn (\"move%.l %1,%-\", xoperands);
  9362. +       output_asm_insn (\"move%.l %1,%-\", operands);
  9363. +       return \"fmove%.d %+,%0\";
  9364. +     }
  9365. +       if (GET_CODE (operands[1]) == CONST_DOUBLE)
  9366. +     return output_move_const_double (operands);
  9367. +       return \"fmove%.d %f1,%0\";
  9368. +     }
  9369. +   else if (FP_REG_P (operands[1]))
  9370. +     {
  9371. +       if (REG_P (operands[0]))
  9372. +     {
  9373. +       output_asm_insn (\"fmove%.d %f1,%-\;move%.l %+,%0\", operands);
  9374. +       operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
  9375. +       return \"move%.l %+,%0\";
  9376. +     }
  9377. +       else
  9378. +         return \"fmove%.d %f1,%0\";
  9379. +     }
  9380. +   return output_move_double (operands);
  9381. + }
  9382. + ")
  9383. + ;; Thus goes after the move instructions
  9384. + ;; because the move instructions are better (require no spilling)
  9385. + ;; when they can apply.  It goes before the add/sub insns
  9386. + ;; so we will prefer it to them.
  9387. + (define_insn "pushasi"
  9388. +   [(set (match_operand:SI 0 "push_operand" "=m")
  9389. +     (match_operand:SI 1 "address_operand" "p"))]
  9390. +   ""
  9391. +   "pea %a1")
  9392. + ;; truncation instructions
  9393. + (define_insn "truncsiqi2"
  9394. +   [(set (match_operand:QI 0 "general_operand" "=dm,d")
  9395. +     (truncate:QI
  9396. +      (match_operand:SI 1 "general_operand" "doJ,i")))]
  9397. +   ""
  9398. +   "*
  9399. + {
  9400. +   if (GET_CODE (operands[0]) == REG)
  9401. +     {
  9402. +       /* Must clear condition codes, since the move.l bases them on
  9403. +      the entire 32 bits, not just the desired 8 bits.  */
  9404. +       CC_STATUS_INIT;
  9405. +       return \"move%.l %1,%0\";
  9406. +     }
  9407. +   if (GET_CODE (operands[1]) == MEM)
  9408. +     operands[1] = adj_offsettable_operand (operands[1], 3);
  9409. +   return \"move%.b %1,%0\";
  9410. + }")
  9411. + (define_insn "trunchiqi2"
  9412. +   [(set (match_operand:QI 0 "general_operand" "=dm,d")
  9413. +     (truncate:QI
  9414. +      (match_operand:HI 1 "general_operand" "doJ,i")))]
  9415. +   ""
  9416. +   "*
  9417. + {
  9418. +   if (GET_CODE (operands[0]) == REG
  9419. +       && (GET_CODE (operands[1]) == MEM
  9420. +       || GET_CODE (operands[1]) == CONST_INT))
  9421. +     {
  9422. +       /* Must clear condition codes, since the move.w bases them on
  9423. +      the entire 16 bits, not just the desired 8 bits.  */
  9424. +       CC_STATUS_INIT;
  9425. +       return \"move%.w %1,%0\";
  9426. +     }
  9427. +   if (GET_CODE (operands[0]) == REG)
  9428. +     {
  9429. +       /* Must clear condition codes, since the move.l bases them on
  9430. +      the entire 32 bits, not just the desired 8 bits.  */
  9431. +       CC_STATUS_INIT;
  9432. +       return \"move%.l %1,%0\";
  9433. +     }
  9434. +   if (GET_CODE (operands[1]) == MEM)
  9435. +     operands[1] = adj_offsettable_operand (operands[1], 1);
  9436. +   return \"move%.b %1,%0\";
  9437. + }")
  9438. + (define_insn "truncsihi2"
  9439. +   [(set (match_operand:HI 0 "general_operand" "=dm,d")
  9440. +     (truncate:HI
  9441. +      (match_operand:SI 1 "general_operand" "roJ,i")))]
  9442. +   ""
  9443. +   "*
  9444. + {
  9445. +   if (GET_CODE (operands[0]) == REG)
  9446. +     {
  9447. +       /* Must clear condition codes, since the move.l bases them on
  9448. +      the entire 32 bits, not just the desired 8 bits.  */
  9449. +       CC_STATUS_INIT;
  9450. +       return \"move%.l %1,%0\";
  9451. +     }
  9452. +   if (GET_CODE (operands[1]) == MEM)
  9453. +     operands[1] = adj_offsettable_operand (operands[1], 2);
  9454. +   return \"move%.w %1,%0\";
  9455. + }")
  9456. + ;; zero extension instructions
  9457. + (define_expand "zero_extendhisi2"
  9458. +   [(set (match_operand:SI 0 "register_operand" "")
  9459. +     (const_int 0))
  9460. +    (set (strict_low_part (match_dup 2))
  9461. +     (match_operand:HI 1 "general_operand" ""))]
  9462. +   ""
  9463. +   "
  9464. + {
  9465. +   operands[1] = make_safe_from (operands[1], operands[0]);
  9466. +   if (GET_CODE (operands[0]) == SUBREG)
  9467. +     operands[2] = gen_rtx (SUBREG, HImode, SUBREG_REG (operands[0]),
  9468. +                SUBREG_WORD (operands[0]));
  9469. +   else
  9470. +     operands[2] = gen_rtx (SUBREG, HImode, operands[0], 0);
  9471. + }")
  9472. + (define_expand "zero_extendqihi2"
  9473. +   [(set (match_operand:HI 0 "register_operand" "")
  9474. +     (const_int 0))
  9475. +    (set (strict_low_part (match_dup 2))
  9476. +     (match_operand:QI 1 "general_operand" ""))]
  9477. +   ""
  9478. +   "
  9479. + {
  9480. +   operands[1] = make_safe_from (operands[1], operands[0]);
  9481. +   if (GET_CODE (operands[0]) == SUBREG)
  9482. +     operands[2] = gen_rtx (SUBREG, QImode, SUBREG_REG (operands[0]),
  9483. +                SUBREG_WORD (operands[0]));
  9484. +   else
  9485. +     operands[2] = gen_rtx (SUBREG, QImode, operands[0], 0);
  9486. + }")
  9487. + (define_expand "zero_extendqisi2"
  9488. +   [(set (match_operand:SI 0 "register_operand" "")
  9489. +     (const_int 0))
  9490. +    (set (strict_low_part (match_dup 2))
  9491. +     (match_operand:QI 1 "general_operand" ""))]
  9492. +   ""
  9493. +   "
  9494. + {
  9495. +   operands[1] = make_safe_from (operands[1], operands[0]);
  9496. +   if (GET_CODE (operands[0]) == SUBREG)
  9497. +     operands[2] = gen_rtx (SUBREG, QImode, SUBREG_REG (operands[0]),
  9498. +                SUBREG_WORD (operands[0]));
  9499. +   else
  9500. +     operands[2] = gen_rtx (SUBREG, QImode, operands[0], 0);
  9501. + }")
  9502. + ;; Patterns to recognize zero-extend insns produced by the combiner.
  9503. + ;; We don't allow both operands in memory, because of aliasing problems.
  9504. + ;; Explicitly disallow two memory operands via the condition since reloading
  9505. + ;; of this case will result in worse code than the uncombined patterns.
  9506. + (define_insn ""
  9507. +   [(set (match_operand:SI 0 "general_operand" "=do<>,d<")
  9508. +     (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "r,m")))]
  9509. +   "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM"
  9510. +   "*
  9511. + {
  9512. +   if (DATA_REG_P (operands[0]))
  9513. +     {
  9514. +       if (GET_CODE (operands[1]) == REG
  9515. +       && REGNO (operands[0]) == REGNO (operands[1]))
  9516. +     return \"and%.l %#0xFFFF,%0\";
  9517. +       if (reg_mentioned_p (operands[0], operands[1]))
  9518. +         return \"move%.w %1,%0\;and%.l %#0xFFFF,%0\";
  9519. +       return \"clr%.l %0\;move%.w %1,%0\";
  9520. +     }
  9521. +   else if (GET_CODE (operands[0]) == MEM
  9522. +        && GET_CODE (XEXP (operands[0], 0)) == PRE_DEC)
  9523. +     return \"move%.w %1,%0\;clr%.w %0\";
  9524. +   else if (GET_CODE (operands[0]) == MEM
  9525. +        && GET_CODE (XEXP (operands[0], 0)) == POST_INC)
  9526. +     return \"clr%.w %0\;move%.w %1,%0\";
  9527. +   else
  9528. +     {
  9529. +       output_asm_insn (\"clr%.w %0\", operands);
  9530. +       operands[0] = adj_offsettable_operand (operands[0], 2);
  9531. +       return \"move%.w %1,%0\";
  9532. +     }
  9533. + }")
  9534. + (define_insn ""
  9535. +   [(set (match_operand:HI 0 "general_operand" "=do<>,d")
  9536. +     (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "d,m")))]
  9537. +   "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM"
  9538. +   "*
  9539. + {
  9540. +   if (DATA_REG_P (operands[0]))
  9541. +     {
  9542. +       if (GET_CODE (operands[1]) == REG
  9543. +       && REGNO (operands[0]) == REGNO (operands[1]))
  9544. +     return \"and%.w %#0xFF,%0\";
  9545. +       if (reg_mentioned_p (operands[0], operands[1]))
  9546. +         return \"move%.b %1,%0\;and%.w %#0xFF,%0\";
  9547. +       return \"clr%.w %0\;move%.b %1,%0\";
  9548. +     }
  9549. +   else if (GET_CODE (operands[0]) == MEM
  9550. +        && GET_CODE (XEXP (operands[0], 0)) == PRE_DEC)
  9551. +     {
  9552. +       if (REGNO (XEXP (XEXP (operands[0], 0), 0))
  9553. +       == STACK_POINTER_REGNUM)
  9554. +     {
  9555. +       output_asm_insn (\"clr%.w %-\", operands);
  9556. +       operands[0] = gen_rtx (MEM, GET_MODE (operands[0]),
  9557. +                  plus_constant (stack_pointer_rtx, 1));
  9558. +       return \"move%.b %1,%0\";
  9559. +     }
  9560. +       else
  9561. +     return \"move%.b %1,%0\;clr%.b %0\";
  9562. +     }
  9563. +   else if (GET_CODE (operands[0]) == MEM
  9564. +        && GET_CODE (XEXP (operands[0], 0)) == POST_INC)
  9565. +     return \"clr%.b %0\;move%.b %1,%0\";
  9566. +   else
  9567. +     {
  9568. +       output_asm_insn (\"clr%.b %0\", operands);
  9569. +       operands[0] = adj_offsettable_operand (operands[0], 1);
  9570. +       return \"move%.b %1,%0\";
  9571. +     }
  9572. + }")
  9573. + (define_insn ""
  9574. +   [(set (match_operand:SI 0 "general_operand" "=do<>,d")
  9575. +     (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "d,m")))]
  9576. +   "GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM"
  9577. +   "*
  9578. + {
  9579. +   if (DATA_REG_P (operands[0]))
  9580. +     {
  9581. +       if (GET_CODE (operands[1]) == REG
  9582. +       && REGNO (operands[0]) == REGNO (operands[1]))
  9583. +     return \"and%.l %#0xFF,%0\";
  9584. +       if (reg_mentioned_p (operands[0], operands[1]))
  9585. +         return \"move%.b %1,%0\;and%.l %#0xFF,%0\";
  9586. +       return \"clr%.l %0\;move%.b %1,%0\";
  9587. +     }
  9588. +   else if (GET_CODE (operands[0]) == MEM
  9589. +        && GET_CODE (XEXP (operands[0], 0)) == PRE_DEC)
  9590. +     {
  9591. +       operands[0] = XEXP (XEXP (operands[0], 0), 0);
  9592. + #ifdef MOTOROLA
  9593. + #ifdef SGS
  9594. +       return \"clr%.l -(%0)\;move%.b %1,3(%0)\";
  9595. + #else
  9596. +       return \"clr%.l -(%0)\;move%.b %1,(3,%0)\";
  9597. + #endif
  9598. + #else
  9599. +       return \"clrl %0@-\;moveb %1,%0@(3)\";
  9600. + #endif
  9601. +     }
  9602. +   else if (GET_CODE (operands[0]) == MEM
  9603. +        && GET_CODE (XEXP (operands[0], 0)) == POST_INC)
  9604. +     {
  9605. +       operands[0] = XEXP (XEXP (operands[0], 0), 0);
  9606. + #ifdef MOTOROLA
  9607. + #ifdef SGS
  9608. +       return \"clr%.l (%0)+\;move%.b %1,-1(%0)\";
  9609. + #else
  9610. +       return \"clr%.l (%0)+\;move%.b %1,(-1,%0)\";
  9611. + #endif
  9612. + #else
  9613. +       return \"clrl %0@+\;moveb %1,%0@(-1)\";
  9614. + #endif
  9615. +     }
  9616. +   else
  9617. +     {
  9618. +       output_asm_insn (\"clr%.l %0\", operands);
  9619. +       operands[0] = adj_offsettable_operand (operands[0], 3);
  9620. +       return \"move%.b %1,%0\";
  9621. +     }
  9622. + }")
  9623. + ;; sign extension instructions
  9624. + (define_insn "extendhisi2"
  9625. +   [(set (match_operand:SI 0 "general_operand" "=*d,a")
  9626. +     (sign_extend:SI
  9627. +      (match_operand:HI 1 "nonimmediate_operand" "0,rm")))]
  9628. +   ""
  9629. +   "*
  9630. + {
  9631. +   if (ADDRESS_REG_P (operands[0]))
  9632. +     return \"move%.w %1,%0\";
  9633. +   return \"ext%.l %0\";
  9634. + }")
  9635. + (define_insn "extendqihi2"
  9636. +   [(set (match_operand:HI 0 "general_operand" "=d")
  9637. +     (sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "0")))]
  9638. +   ""
  9639. +   "ext%.w %0")
  9640. + (define_insn "extendqisi2"
  9641. +   [(set (match_operand:SI 0 "general_operand" "=d")
  9642. +     (sign_extend:SI (match_operand:QI 1 "nonimmediate_operand" "0")))]
  9643. +   "TARGET_68020"
  9644. +   "extb%.l %0")
  9645. + ;; Conversions between float and double.
  9646. + (define_expand "extendsfdf2"
  9647. +   [(set (match_operand:DF 0 "general_operand" "")
  9648. +     (float_extend:DF
  9649. +      (match_operand:SF 1 "general_operand" "")))]
  9650. +   "TARGET_68881 || TARGET_FPA"
  9651. +   "")
  9652. + (define_insn ""
  9653. +   [(set (match_operand:DF 0 "general_operand" "=x,y")
  9654. +     (float_extend:DF
  9655. +      (match_operand:SF 1 "general_operand" "xH,rmF")))]
  9656. +   "TARGET_FPA"
  9657. +   "fpstod %w1,%0")
  9658. + (define_insn ""
  9659. +   [(set (match_operand:DF 0 "general_operand" "=*fdm,f")
  9660. +     (float_extend:DF
  9661. +       (match_operand:SF 1 "general_operand" "f,dmF")))]
  9662. +   "TARGET_68881"
  9663. +   "*
  9664. + {
  9665. +   if (FP_REG_P (operands[0]) && FP_REG_P (operands[1]))
  9666. +     {
  9667. +       if (REGNO (operands[0]) == REGNO (operands[1]))
  9668. +     {
  9669. +       /* Extending float to double in an fp-reg is a no-op.
  9670. +          NOTICE_UPDATE_CC has already assumed that the
  9671. +          cc will be set.  So cancel what it did.  */
  9672. +       cc_status = cc_prev_status;
  9673. +       return \"\";
  9674. +     }
  9675. +       return \"f%&move%.x %1,%0\";
  9676. +     }
  9677. +   if (FP_REG_P (operands[0]))
  9678. +     return \"f%&move%.s %f1,%0\";
  9679. +   if (DATA_REG_P (operands[0]) && FP_REG_P (operands[1]))
  9680. +     {
  9681. +       output_asm_insn (\"fmove%.d %f1,%-\;move%.l %+,%0\", operands);
  9682. +       operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
  9683. +       return \"move%.l %+,%0\";
  9684. +     }
  9685. +   return \"fmove%.d %f1,%0\";
  9686. + }")
  9687. + ;; This cannot output into an f-reg because there is no way to be
  9688. + ;; sure of truncating in that case.
  9689. + ;; But on the Sun FPA, we can be sure.
  9690. + (define_expand "truncdfsf2"
  9691. +   [(set (match_operand:SF 0 "general_operand" "")
  9692. +     (float_truncate:SF
  9693. +       (match_operand:DF 1 "general_operand" "")))]
  9694. +   "TARGET_68881 || TARGET_FPA"
  9695. +   "")
  9696. + (define_insn ""
  9697. +   [(set (match_operand:SF 0 "general_operand" "=x,y")
  9698. +     (float_truncate:SF
  9699. +       (match_operand:DF 1 "general_operand" "xH,rmF")))]
  9700. +   "TARGET_FPA"
  9701. +   "fpdtos %y1,%0")
  9702. + ;; On the '040 we can truncate in a register accurately and easily.
  9703. + (define_insn ""
  9704. +   [(set (match_operand:SF 0 "general_operand" "=f")
  9705. +     (float_truncate:SF
  9706. +       (match_operand:DF 1 "general_operand" "fmG")))]
  9707. +   "TARGET_68040_ONLY"
  9708. +   "*
  9709. + {
  9710. +   if (FP_REG_P (operands[1]))
  9711. +     return \"f%$move%.x %1,%0\";
  9712. +   return \"f%$move%.d %f1,%0\";
  9713. + }")
  9714. + (define_insn ""
  9715. +   [(set (match_operand:SF 0 "general_operand" "=dm")
  9716. +     (float_truncate:SF
  9717. +       (match_operand:DF 1 "general_operand" "f")))]
  9718. +   "TARGET_68881"
  9719. +   "fmove%.s %f1,%0")
  9720. + ;; Conversion between fixed point and floating point.
  9721. + ;; Note that among the fix-to-float insns
  9722. + ;; the ones that start with SImode come first.
  9723. + ;; That is so that an operand that is a CONST_INT
  9724. + ;; (and therefore lacks a specific machine mode).
  9725. + ;; will be recognized as SImode (which is always valid)
  9726. + ;; rather than as QImode or HImode.
  9727. + (define_expand "floatsisf2"
  9728. +   [(set (match_operand:SF 0 "general_operand" "")
  9729. +     (float:SF (match_operand:SI 1 "general_operand" "")))]
  9730. +   "TARGET_68881 || TARGET_FPA"
  9731. +   "")
  9732. + (define_insn ""
  9733. +   [(set (match_operand:SF 0 "general_operand" "=y,x")
  9734. +     (float:SF (match_operand:SI 1 "general_operand" "rmi,x")))]
  9735. +   "TARGET_FPA"
  9736. +   "fpltos %1,%0")
  9737. + (define_insn ""
  9738. +   [(set (match_operand:SF 0 "general_operand" "=f")
  9739. +     (float:SF (match_operand:SI 1 "general_operand" "dmi")))]
  9740. +   "TARGET_68881"
  9741. +   "f%$move%.l %1,%0")
  9742. + (define_expand "floatsidf2"
  9743. +   [(set (match_operand:DF 0 "general_operand" "")
  9744. +     (float:DF (match_operand:SI 1 "general_operand" "")))]
  9745. +   "TARGET_68881 || TARGET_FPA"
  9746. +   "")
  9747. + (define_insn ""
  9748. +   [(set (match_operand:DF 0 "general_operand" "=y,x")
  9749. +     (float:DF (match_operand:SI 1 "general_operand" "rmi,x")))]
  9750. +   "TARGET_FPA"
  9751. +   "fpltod %1,%0")
  9752. + (define_insn ""
  9753. +   [(set (match_operand:DF 0 "general_operand" "=f")
  9754. +     (float:DF (match_operand:SI 1 "general_operand" "dmi")))]
  9755. +   "TARGET_68881"
  9756. +   "f%&move%.l %1,%0")
  9757. + (define_insn "floathisf2"
  9758. +   [(set (match_operand:SF 0 "general_operand" "=f")
  9759. +     (float:SF (match_operand:HI 1 "general_operand" "dmn")))]
  9760. +   "TARGET_68881"
  9761. +   "f%$move%.w %1,%0")
  9762. + (define_insn "floathidf2"
  9763. +   [(set (match_operand:DF 0 "general_operand" "=f")
  9764. +     (float:DF (match_operand:HI 1 "general_operand" "dmn")))]
  9765. +   "TARGET_68881"
  9766. +   "fmove%.w %1,%0")
  9767. + (define_insn "floatqisf2"
  9768. +   [(set (match_operand:SF 0 "general_operand" "=f")
  9769. +     (float:SF (match_operand:QI 1 "general_operand" "dmn")))]
  9770. +   "TARGET_68881"
  9771. +   "fmove%.b %1,%0")
  9772. + (define_insn "floatqidf2"
  9773. +   [(set (match_operand:DF 0 "general_operand" "=f")
  9774. +     (float:DF (match_operand:QI 1 "general_operand" "dmn")))]
  9775. +   "TARGET_68881"
  9776. +   "f%&move%.b %1,%0")
  9777. + ;; New routines to convert floating-point values to integers
  9778. + ;; to be used on the '040.  These should be faster than trapping
  9779. + ;; into the kernel to emulate fintrz.  They should also be faster
  9780. + ;; than calling the subroutines fixsfsi or fixdfsi.
  9781. + (define_insn "fix_truncdfsi2"
  9782. +   [(set (match_operand:SI 0 "general_operand" "=dm")
  9783. +     (fix:SI (fix:DF (match_operand:DF 1 "register_operand" "f"))))
  9784. +    (clobber (match_scratch:SI 2 "=d"))
  9785. +    (clobber (match_scratch:SI 3 "=d"))]
  9786. +   "TARGET_68881 && TARGET_68040"
  9787. +   "*
  9788. + {
  9789. +   CC_STATUS_INIT;
  9790. +   return \"fmovem%.l %!,%2\;moveq %#16,%3\;or%.l %2,%3\;and%.w %#-33,%3\;fmovem%.l %3,%!\;fmove%.l %1,%0\;fmovem%.l %2,%!\";
  9791. + }")
  9792. + (define_insn "fix_truncdfhi2"
  9793. +   [(set (match_operand:HI 0 "general_operand" "=dm")
  9794. +     (fix:HI (fix:DF (match_operand:DF 1 "register_operand" "f"))))
  9795. +    (clobber (match_scratch:SI 2 "=d"))
  9796. +    (clobber (match_scratch:SI 3 "=d"))]
  9797. +   "TARGET_68881 && TARGET_68040"
  9798. +   "*
  9799. + {
  9800. +   CC_STATUS_INIT;
  9801. +   return \"fmovem%.l %!,%2\;moveq %#16,%3\;or%.l %2,%3\;and%.w %#-33,%3\;fmovem%.l %3,%!\;fmove%.w %1,%0\;fmovem%.l %2,%!\";
  9802. + }")
  9803. + (define_insn "fix_truncdfqi2"
  9804. +   [(set (match_operand:QI 0 "general_operand" "=dm")
  9805. +     (fix:QI (fix:DF (match_operand:DF 1 "register_operand" "f"))))
  9806. +    (clobber (match_scratch:SI 2 "=d"))
  9807. +    (clobber (match_scratch:SI 3 "=d"))]
  9808. +   "TARGET_68881 && TARGET_68040"
  9809. +   "*
  9810. + {
  9811. +   CC_STATUS_INIT;
  9812. +   return \"fmovem%.l %!,%2\;moveq %#16,%3\;or%.l %2,%3\;and%.w %#-33,%3\;fmovem%.l %3,%!\;fmove%.b %1,%0\;fmovem%.l %2,%!\";
  9813. + }")
  9814. + ;; Convert a float to a float whose value is an integer.
  9815. + ;; This is the first stage of converting it to an integer type.
  9816. + (define_insn "ftruncdf2"
  9817. +   [(set (match_operand:DF 0 "general_operand" "=f")
  9818. +     (fix:DF (match_operand:DF 1 "general_operand" "fFm")))]
  9819. +   "TARGET_68881 && !TARGET_68040"
  9820. +   "*
  9821. + {
  9822. +   if (FP_REG_P (operands[1]))
  9823. +     return \"fintrz%.x %f1,%0\";
  9824. +   return \"fintrz%.d %f1,%0\";
  9825. + }")
  9826. + (define_insn "ftruncsf2"
  9827. +   [(set (match_operand:SF 0 "general_operand" "=f")
  9828. +     (fix:SF (match_operand:SF 1 "general_operand" "dfFm")))]
  9829. +   "TARGET_68881 && !TARGET_68040"
  9830. +   "*
  9831. + {
  9832. +   if (FP_REG_P (operands[1]))
  9833. +     return \"fintrz%.x %f1,%0\";
  9834. +   return \"fintrz%.s %f1,%0\";
  9835. + }")
  9836. + ;; Convert a float whose value is an integer
  9837. + ;; to an actual integer.  Second stage of converting float to integer type.
  9838. + (define_insn "fixsfqi2"
  9839. +   [(set (match_operand:QI 0 "general_operand" "=dm")
  9840. +     (fix:QI (match_operand:SF 1 "general_operand" "f")))]
  9841. +   "TARGET_68881"
  9842. +   "fmove%.b %1,%0")
  9843. + (define_insn "fixsfhi2"
  9844. +   [(set (match_operand:HI 0 "general_operand" "=dm")
  9845. +     (fix:HI (match_operand:SF 1 "general_operand" "f")))]
  9846. +   "TARGET_68881"
  9847. +   "fmove%.w %1,%0")
  9848. + (define_insn "fixsfsi2"
  9849. +   [(set (match_operand:SI 0 "general_operand" "=dm")
  9850. +     (fix:SI (match_operand:SF 1 "general_operand" "f")))]
  9851. +   "TARGET_68881"
  9852. +   "fmove%.l %1,%0")
  9853. + (define_insn "fixdfqi2"
  9854. +   [(set (match_operand:QI 0 "general_operand" "=dm")
  9855. +     (fix:QI (match_operand:DF 1 "general_operand" "f")))]
  9856. +   "TARGET_68881"
  9857. +   "fmove%.b %1,%0")
  9858. + (define_insn "fixdfhi2"
  9859. +   [(set (match_operand:HI 0 "general_operand" "=dm")
  9860. +     (fix:HI (match_operand:DF 1 "general_operand" "f")))]
  9861. +   "TARGET_68881"
  9862. +   "fmove%.w %1,%0")
  9863. + (define_insn "fixdfsi2"
  9864. +   [(set (match_operand:SI 0 "general_operand" "=dm")
  9865. +     (fix:SI (match_operand:DF 1 "general_operand" "f")))]
  9866. +   "TARGET_68881"
  9867. +   "fmove%.l %1,%0")
  9868. + ;; Convert a float to an integer.
  9869. + ;; On the Sun FPA, this is done in one step.
  9870. + (define_insn ""
  9871. +   [(set (match_operand:SI 0 "general_operand" "=x,y")
  9872. +     (fix:SI (fix:SF (match_operand:SF 1 "general_operand" "xH,rmF"))))]
  9873. +   "TARGET_FPA"
  9874. +   "fpstol %w1,%0")
  9875. + (define_insn ""
  9876. +   [(set (match_operand:SI 0 "general_operand" "=x,y")
  9877. +     (fix:SI (fix:DF (match_operand:DF 1 "general_operand" "xH,rmF"))))]
  9878. +   "TARGET_FPA"
  9879. +   "fpdtol %y1,%0")
  9880. + ;; add instructions
  9881. + ;; Note that the middle two alternatives are near-duplicates
  9882. + ;; in order to handle insns generated by reload.
  9883. + ;; This is needed since they are not themselves reloaded,
  9884. + ;; so commutativity won't apply to them.
  9885. + (define_insn "addsi3"
  9886. +   [(set (match_operand:SI 0 "general_operand" "=m,?a,?a,r")
  9887. +     (plus:SI (match_operand:SI 1 "general_operand" "%0,a,rJK,0")
  9888. +          (match_operand:SI 2 "general_operand" "dIKLs,rJK,a,mrIKLs")))]
  9889. +   ""
  9890. +   "*
  9891. + {
  9892. +   if (! operands_match_p (operands[0], operands[1]))
  9893. +     {
  9894. +       if (!ADDRESS_REG_P (operands[1]))
  9895. +     {
  9896. +       rtx tmp = operands[1];
  9897. +       operands[1] = operands[2];
  9898. +       operands[2] = tmp;
  9899. +     }
  9900. +       /* These insns can result from reloads to access
  9901. +      stack slots over 64k from the frame pointer.  */
  9902. +       if (((GET_CODE (operands[2]) == CONST_INT
  9903. +        && INTVAL (operands[2]) + 0x8000 >= (unsigned) 0x10000))
  9904. +       || (flag_pic == 4 && operands[1] == pic_offset_table_rtx))
  9905. +         return \"move%.l %2,%0\;add%.l %1,%0\";
  9906. + #ifdef SGS
  9907. +       if (GET_CODE (operands[2]) == REG)
  9908. +     return \"lea 0(%1,%2.l),%0\";
  9909. +       else
  9910. +     return \"lea %c2(%1),%0\";
  9911. + #else /* not SGS */
  9912. + #ifdef MOTOROLA
  9913. +       if (GET_CODE (operands[2]) == REG)
  9914. +     return \"lea (%1,%2.l),%0\";
  9915. +       else
  9916. +     return \"lea (%c2,%1),%0\";
  9917. + #else /* not MOTOROLA (MIT syntax) */
  9918. +       if (GET_CODE (operands[2]) == REG)
  9919. +     return \"lea %1@(0,%2:l),%0\";
  9920. +       else
  9921. +     return \"lea %1@(%c2),%0\";
  9922. + #endif /* not MOTOROLA */
  9923. + #endif /* not SGS */
  9924. +     }
  9925. +   if (GET_CODE (operands[2]) == CONST_INT)
  9926. +     {
  9927. + #ifndef NO_ADDSUB_Q
  9928. +       if (INTVAL (operands[2]) > 0
  9929. +       && INTVAL (operands[2]) <= 8)
  9930. +     return (ADDRESS_REG_P (operands[0])
  9931. +         ? \"addq%.w %2,%0\"
  9932. +         : \"addq%.l %2,%0\");
  9933. +       if (INTVAL (operands[2]) < 0
  9934. +       && INTVAL (operands[2]) >= -8)
  9935. +         {
  9936. +       operands[2] = gen_rtx (CONST_INT, VOIDmode,
  9937. +                      - INTVAL (operands[2]));
  9938. +       return (ADDRESS_REG_P (operands[0])
  9939. +           ? \"subq%.w %2,%0\"
  9940. +           : \"subq%.l %2,%0\");
  9941. +     }
  9942. +       /* On everything except the 68000 it is faster to use two
  9943. +      addqw instructions to add a small integer (8 < N <= 16)
  9944. +      to an address register.  Likewise for subqw.*/
  9945. +       if (INTVAL (operands[2]) > 8
  9946. +       && INTVAL (operands[2]) <= 16
  9947. +       && ADDRESS_REG_P (operands[0])
  9948. +       && TARGET_68020) 
  9949. +     {
  9950. +       operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 8);
  9951. +       return \"addq%.w %#8,%0\;addq%.w %2,%0\";
  9952. +     }
  9953. +       if (INTVAL (operands[2]) < -8
  9954. +       && INTVAL (operands[2]) >= -16
  9955. +       && ADDRESS_REG_P (operands[0])
  9956. +       && TARGET_68020) 
  9957. +     {
  9958. +       operands[2] = gen_rtx (CONST_INT, VOIDmode, 
  9959. +                   - INTVAL (operands[2]) - 8);
  9960. +       return \"subq%.w %#8,%0\;subq%.w %2,%0\";
  9961. +     }
  9962. + #endif
  9963. +       if (ADDRESS_REG_P (operands[0])
  9964. +       && INTVAL (operands[2]) >= -0x8000
  9965. +       && INTVAL (operands[2]) < 0x8000)
  9966. +     return \"add%.w %2,%0\";
  9967. +     }
  9968. +   return \"add%.l %2,%0\";
  9969. + }")
  9970. + (define_insn ""
  9971. +   [(set (match_operand:SI 0 "general_operand" "=a")
  9972. +     (plus:SI (match_operand:SI 1 "general_operand" "0")
  9973. +          (sign_extend:SI
  9974. +           (match_operand:HI 2 "nonimmediate_operand" "rm"))))]
  9975. +   ""
  9976. +   "add%.w %2,%0")
  9977. + (define_insn "addhi3"
  9978. +   [(set (match_operand:HI 0 "general_operand" "=m,r")
  9979. +     (plus:HI (match_operand:HI 1 "general_operand" "%0,0")
  9980. +          (match_operand:HI 2 "general_operand" "dn,rmn")))]
  9981. +   ""
  9982. +   "*
  9983. + {
  9984. + #ifndef NO_ADDSUB_Q
  9985. +   if (GET_CODE (operands[2]) == CONST_INT)
  9986. +     {
  9987. +       /* If the constant would be a negative number when interpreted as
  9988. +      HImode, make it negative.  This is usually, but not always, done
  9989. +      elsewhere in the compiler.  First check for constants out of range,
  9990. +      which could confuse us.  */
  9991. +       if (INTVAL (operands[2]) >= 32768)
  9992. +     operands[2] = gen_rtx (CONST_INT, VOIDmode,
  9993. +                    INTVAL (operands[2]) - 65536);
  9994. +       if (INTVAL (operands[2]) > 0
  9995. +       && INTVAL (operands[2]) <= 8)
  9996. +     return \"addq%.w %2,%0\";
  9997. +       if (INTVAL (operands[2]) < 0
  9998. +       && INTVAL (operands[2]) >= -8)
  9999. +     {
  10000. +       operands[2] = gen_rtx (CONST_INT, VOIDmode,
  10001. +                      - INTVAL (operands[2]));
  10002. +       return \"subq%.w %2,%0\";
  10003. +     }
  10004. +       /* On everything except the 68000 it is faster to use two
  10005. +      addqw instructions to add a small integer (8 < N <= 16)
  10006. +      to an address register.  Likewise for subqw. */
  10007. +       if (INTVAL (operands[2]) > 8
  10008. +       && INTVAL (operands[2]) <= 16
  10009. +       && ADDRESS_REG_P (operands[0])
  10010. +       && TARGET_68020) 
  10011. +     {
  10012. +       operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 8);
  10013. +       return \"addq%.w %#8,%0\;addq%.w %2,%0\";
  10014. +     }
  10015. +       if (INTVAL (operands[2]) < -8
  10016. +       && INTVAL (operands[2]) >= -16
  10017. +       && ADDRESS_REG_P (operands[0])
  10018. +       && TARGET_68020) 
  10019. +     {
  10020. +       operands[2] = gen_rtx (CONST_INT, VOIDmode, 
  10021. +                  - INTVAL (operands[2]) - 8);
  10022. +       return \"subq%.w %#8,%0\;subq%.w %2,%0\";
  10023. +     }
  10024. +     }
  10025. + #endif
  10026. +   return \"add%.w %2,%0\";
  10027. + }")
  10028. + ;; These insns must use MATCH_DUP instead of the more expected
  10029. + ;; use of a matching constraint because the "output" here is also
  10030. + ;; an input, so you can't use the matching constraint.  That also means
  10031. + ;; that you can't use the "%", so you need patterns with the matched
  10032. + ;; operand in both positions.
  10033. + (define_insn ""
  10034. +   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d"))
  10035. +     (plus:HI (match_dup 0)
  10036. +          (match_operand:HI 1 "general_operand" "dn,rmn")))]
  10037. +   ""
  10038. +   "*
  10039. + {
  10040. + #ifndef NO_ADDSUB_Q
  10041. +   if (GET_CODE (operands[1]) == CONST_INT)
  10042. +     {
  10043. +       /* If the constant would be a negative number when interpreted as
  10044. +      HImode, make it negative.  This is usually, but not always, done
  10045. +      elsewhere in the compiler.  First check for constants out of range,
  10046. +      which could confuse us.  */
  10047. +       if (INTVAL (operands[1]) >= 32768)
  10048. +     operands[1] = gen_rtx (CONST_INT, VOIDmode,
  10049. +                    INTVAL (operands[1]) - 65536);
  10050. +       if (INTVAL (operands[1]) > 0
  10051. +       && INTVAL (operands[1]) <= 8)
  10052. +     return \"addq%.w %1,%0\";
  10053. +       if (INTVAL (operands[1]) < 0
  10054. +       && INTVAL (operands[1]) >= -8)
  10055. +     {
  10056. +       operands[1] = gen_rtx (CONST_INT, VOIDmode,
  10057. +                      - INTVAL (operands[1]));
  10058. +       return \"subq%.w %1,%0\";
  10059. +     }
  10060. +       /* On everything except the 68000 it is faster to use two
  10061. +      addqw instructions to add a small integer (8 < N <= 16)
  10062. +      to an address register.  Likewise for subqw. */
  10063. +       if (INTVAL (operands[1]) > 8
  10064. +       && INTVAL (operands[1]) <= 16
  10065. +       && ADDRESS_REG_P (operands[0])
  10066. +       && TARGET_68020) 
  10067. +     {
  10068. +       operands[1] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) - 8);
  10069. +       return \"addq%.w %#8,%0\;addq%.w %1,%0\";
  10070. +     }
  10071. +       if (INTVAL (operands[1]) < -8
  10072. +       && INTVAL (operands[1]) >= -16
  10073. +       && ADDRESS_REG_P (operands[0])
  10074. +       && TARGET_68020) 
  10075. +     {
  10076. +       operands[1] = gen_rtx (CONST_INT, VOIDmode, 
  10077. +                  - INTVAL (operands[1]) - 8);
  10078. +       return \"subq%.w %#8,%0\;subq%.w %1,%0\";
  10079. +     }
  10080. +     }
  10081. + #endif
  10082. +   return \"add%.w %1,%0\";
  10083. + }")
  10084. + (define_insn ""
  10085. +   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d"))
  10086. +     (plus:HI (match_operand:HI 1 "general_operand" "dn,rmn")
  10087. +          (match_dup 0)))]
  10088. +   ""
  10089. +   "*
  10090. + {
  10091. + #ifndef NO_ADDSUB_Q
  10092. +   if (GET_CODE (operands[1]) == CONST_INT)
  10093. +     {
  10094. +       /* If the constant would be a negative number when interpreted as
  10095. +      HImode, make it negative.  This is usually, but not always, done
  10096. +      elsewhere in the compiler.  First check for constants out of range,
  10097. +      which could confuse us.  */
  10098. +       if (INTVAL (operands[1]) >= 32768)
  10099. +     operands[1] = gen_rtx (CONST_INT, VOIDmode,
  10100. +                    INTVAL (operands[1]) - 65536);
  10101. +       if (INTVAL (operands[1]) > 0
  10102. +       && INTVAL (operands[1]) <= 8)
  10103. +     return \"addq%.w %1,%0\";
  10104. +       if (INTVAL (operands[1]) < 0
  10105. +       && INTVAL (operands[1]) >= -8)
  10106. +     {
  10107. +       operands[1] = gen_rtx (CONST_INT, VOIDmode,
  10108. +                      - INTVAL (operands[1]));
  10109. +       return \"subq%.w %1,%0\";
  10110. +     }
  10111. +       /* On everything except the 68000 it is faster to use two
  10112. +      addqw instructions to add a small integer (8 < N <= 16)
  10113. +      to an address register.  Likewise for subqw. */
  10114. +       if (INTVAL (operands[1]) > 8
  10115. +       && INTVAL (operands[1]) <= 16
  10116. +       && ADDRESS_REG_P (operands[0])
  10117. +       && TARGET_68020) 
  10118. +     {
  10119. +       operands[1] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) - 8);
  10120. +       return \"addq%.w %#8,%0\;addq%.w %1,%0\";
  10121. +     }
  10122. +       if (INTVAL (operands[1]) < -8
  10123. +       && INTVAL (operands[1]) >= -16
  10124. +       && ADDRESS_REG_P (operands[0])
  10125. +       && TARGET_68020) 
  10126. +     {
  10127. +       operands[1] = gen_rtx (CONST_INT, VOIDmode, 
  10128. +                  - INTVAL (operands[1]) - 8);
  10129. +       return \"subq%.w %#8,%0\;subq%.w %1,%0\";
  10130. +     }
  10131. +     }
  10132. + #endif
  10133. +   return \"add%.w %1,%0\";
  10134. + }")
  10135. + (define_insn "addqi3"
  10136. +   [(set (match_operand:QI 0 "general_operand" "=m,d")
  10137. +     (plus:QI (match_operand:QI 1 "general_operand" "%0,0")
  10138. +          (match_operand:QI 2 "general_operand" "dn,dmn")))]
  10139. +   ""
  10140. +   "*
  10141. + {
  10142. + #ifndef NO_ADDSUB_Q
  10143. +   if (GET_CODE (operands[2]) == CONST_INT)
  10144. +     {
  10145. +       if (INTVAL (operands[2]) >= 128)
  10146. +     operands[2] = gen_rtx (CONST_INT, VOIDmode,
  10147. +                    INTVAL (operands[2]) - 256);
  10148. +       if (INTVAL (operands[2]) > 0
  10149. +       && INTVAL (operands[2]) <= 8)
  10150. +     return \"addq%.b %2,%0\";
  10151. +       if (INTVAL (operands[2]) < 0 && INTVAL (operands[2]) >= -8)
  10152. +        {
  10153. +      operands[2] = gen_rtx (CONST_INT, VOIDmode, - INTVAL (operands[2]));
  10154. +      return \"subq%.b %2,%0\";
  10155. +        }
  10156. +     }
  10157. + #endif
  10158. +   return \"add%.b %2,%0\";
  10159. + }")
  10160. + (define_insn ""
  10161. +   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d"))
  10162. +     (plus:QI (match_dup 0)
  10163. +          (match_operand:QI 1 "general_operand" "dn,dmn")))]
  10164. +   ""
  10165. +   "*
  10166. + {
  10167. + #ifndef NO_ADDSUB_Q
  10168. +   if (GET_CODE (operands[1]) == CONST_INT)
  10169. +     {
  10170. +       if (INTVAL (operands[1]) >= 128)
  10171. +     operands[1] = gen_rtx (CONST_INT, VOIDmode,
  10172. +                    INTVAL (operands[1]) - 256);
  10173. +       if (INTVAL (operands[1]) > 0
  10174. +       && INTVAL (operands[1]) <= 8)
  10175. +     return \"addq%.b %1,%0\";
  10176. +       if (INTVAL (operands[1]) < 0 && INTVAL (operands[1]) >= -8)
  10177. +        {
  10178. +      operands[1] = gen_rtx (CONST_INT, VOIDmode, - INTVAL (operands[1]));
  10179. +      return \"subq%.b %1,%0\";
  10180. +        }
  10181. +     }
  10182. + #endif
  10183. +   return \"add%.b %1,%0\";
  10184. + }")
  10185. + (define_insn ""
  10186. +   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d"))
  10187. +     (plus:QI (match_operand:QI 1 "general_operand" "dn,dmn")
  10188. +          (match_dup 0)))]
  10189. +   ""
  10190. +   "*
  10191. + {
  10192. + #ifndef NO_ADDSUB_Q
  10193. +   if (GET_CODE (operands[1]) == CONST_INT)
  10194. +     {
  10195. +       if (INTVAL (operands[1]) >= 128)
  10196. +     operands[1] = gen_rtx (CONST_INT, VOIDmode,
  10197. +                    INTVAL (operands[1]) - 256);
  10198. +       if (INTVAL (operands[1]) > 0
  10199. +       && INTVAL (operands[1]) <= 8)
  10200. +     return \"addq%.b %1,%0\";
  10201. +       if (INTVAL (operands[1]) < 0 && INTVAL (operands[1]) >= -8)
  10202. +        {
  10203. +      operands[1] = gen_rtx (CONST_INT, VOIDmode, - INTVAL (operands[1]));
  10204. +      return \"subq%.b %1,%0\";
  10205. +        }
  10206. +     }
  10207. + #endif
  10208. +   return \"add%.b %1,%0\";
  10209. + }")
  10210. + (define_expand "adddf3"
  10211. +   [(set (match_operand:DF 0 "general_operand" "")
  10212. +     (plus:DF (match_operand:DF 1 "general_operand" "")
  10213. +          (match_operand:DF 2 "general_operand" "")))]
  10214. +   "TARGET_68881 || TARGET_FPA"
  10215. +   "")
  10216. + (define_insn ""
  10217. +   [(set (match_operand:DF 0 "general_operand" "=x,y")
  10218. +     (plus:DF (match_operand:DF 1 "general_operand" "%xH,y")
  10219. +          (match_operand:DF 2 "general_operand" "xH,dmF")))]
  10220. +   "TARGET_FPA"
  10221. +   "*
  10222. + {
  10223. +   if (rtx_equal_p (operands[0], operands[1]))
  10224. +     return \"fpadd%.d %y2,%0\";
  10225. +   if (rtx_equal_p (operands[0], operands[2]))
  10226. +     return \"fpadd%.d %y1,%0\";
  10227. +   if (which_alternative == 0)
  10228. +     return \"fpadd3%.d %w2,%w1,%0\";
  10229. +   return \"fpadd3%.d %x2,%x1,%0\";
  10230. + }")
  10231. + (define_insn ""
  10232. +   [(set (match_operand:DF 0 "general_operand" "=f")
  10233. +     (plus:DF (match_operand:DF 1 "general_operand" "%0")
  10234. +          (match_operand:DF 2 "general_operand" "fmG")))]
  10235. +   "TARGET_68881"
  10236. +   "*
  10237. + {
  10238. +   if (REG_P (operands[2]))
  10239. +     return \"f%&add%.x %2,%0\";
  10240. +   return \"f%&add%.d %f2,%0\";
  10241. + }")
  10242. + (define_expand "addsf3"
  10243. +   [(set (match_operand:SF 0 "general_operand" "")
  10244. +     (plus:SF (match_operand:SF 1 "general_operand" "")
  10245. +          (match_operand:SF 2 "general_operand" "")))]
  10246. +   "TARGET_68881 || TARGET_FPA"
  10247. +   "")
  10248. + (define_insn ""
  10249. +   [(set (match_operand:SF 0 "general_operand" "=x,y")
  10250. +     (plus:SF (match_operand:SF 1 "general_operand" "%xH,y")
  10251. +          (match_operand:SF 2 "general_operand" "xH,rmF")))]
  10252. +   "TARGET_FPA"
  10253. +   "*
  10254. + {
  10255. +   if (rtx_equal_p (operands[0], operands[1]))
  10256. +     return \"fpadd%.s %w2,%0\";
  10257. +   if (rtx_equal_p (operands[0], operands[2]))
  10258. +     return \"fpadd%.s %w1,%0\";
  10259. +   if (which_alternative == 0)
  10260. +     return \"fpadd3%.s %w2,%w1,%0\";
  10261. +   return \"fpadd3%.s %2,%1,%0\";
  10262. + }")
  10263. + (define_insn ""
  10264. +   [(set (match_operand:SF 0 "general_operand" "=f")
  10265. +     (plus:SF (match_operand:SF 1 "general_operand" "%0")
  10266. +          (match_operand:SF 2 "general_operand" "fdmF")))]
  10267. +   "TARGET_68881"
  10268. +   "*
  10269. + {
  10270. +   if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
  10271. +     return \"f%$add%.x %2,%0\";
  10272. +   return \"f%$add%.s %f2,%0\";
  10273. + }")
  10274. + ;; subtract instructions
  10275. + (define_insn "subsi3"
  10276. +   [(set (match_operand:SI 0 "general_operand" "=m,r,!a,?d")
  10277. +     (minus:SI (match_operand:SI 1 "general_operand" "0,0,a,mrIKs")
  10278. +           (match_operand:SI 2 "general_operand" "dIKs,mrIKs,J,0")))]
  10279. +   ""
  10280. +   "*
  10281. + {
  10282. +   if (! operands_match_p (operands[0], operands[1]))
  10283. +     {
  10284. +       if (operands_match_p (operands[0], operands[2]))
  10285. +     {
  10286. + #ifndef NO_ADDSUB_Q
  10287. +       if (GET_CODE (operands[1]) == CONST_INT)
  10288. +         {
  10289. +           if (INTVAL (operands[1]) > 0
  10290. +           && INTVAL (operands[1]) <= 8)
  10291. +         return \"subq%.l %1,%0\;neg%.l %0\";
  10292. +         }
  10293. + #endif
  10294. +       return \"sub%.l %1,%0\;neg%.l %0\";
  10295. +     }
  10296. +       /* This case is matched by J, but negating -0x8000
  10297. +          in an lea would give an invalid displacement.
  10298. +      So do this specially.  */
  10299. +       if (INTVAL (operands[2]) == -0x8000)
  10300. +     return \"move%.l %1,%0\;sub%.l %2,%0\";
  10301. + #ifdef SGS
  10302. +       return \"lea %n2(%1),%0\";
  10303. + #else
  10304. + #ifdef MOTOROLA
  10305. +       return \"lea (%n2,%1),%0\";
  10306. + #else /* not MOTOROLA (MIT syntax) */
  10307. +       return \"lea %1@(%n2),%0\";
  10308. + #endif /* not MOTOROLA */
  10309. + #endif /* not SGS */
  10310. +     }
  10311. +   if (GET_CODE (operands[2]) == CONST_INT)
  10312. +     {
  10313. + #ifndef NO_ADDSUB_Q
  10314. +       if (INTVAL (operands[2]) > 0
  10315. +       && INTVAL (operands[2]) <= 8)
  10316. +     return \"subq%.l %2,%0\";
  10317. +       /* Using two subqw for 8 < N <= 16 being subtracted from an
  10318. +      address register is faster on all but 68000 */
  10319. +       if (INTVAL (operands[2]) > 8
  10320. +       && INTVAL (operands[2]) <= 16
  10321. +       && ADDRESS_REG_P (operands[0])
  10322. +       && TARGET_68020)
  10323. +     {
  10324. +       operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 8);
  10325. +       return \"subq%.w %#8,%0\;subq%.w %2,%0\";
  10326. +     }
  10327. + #endif
  10328. +       if (ADDRESS_REG_P (operands[0])
  10329. +       && INTVAL (operands[2]) >= -0x8000
  10330. +       && INTVAL (operands[2]) < 0x8000)
  10331. +     return \"sub%.w %2,%0\";
  10332. +     }
  10333. +   return \"sub%.l %2,%0\";
  10334. + }")
  10335. + (define_insn ""
  10336. +   [(set (match_operand:SI 0 "general_operand" "=a")
  10337. +     (minus:SI (match_operand:SI 1 "general_operand" "0")
  10338. +           (sign_extend:SI
  10339. +            (match_operand:HI 2 "nonimmediate_operand" "rm"))))]
  10340. +   ""
  10341. +   "sub%.w %2,%0")
  10342. + (define_insn "subhi3"
  10343. +   [(set (match_operand:HI 0 "general_operand" "=m,r")
  10344. +     (minus:HI (match_operand:HI 1 "general_operand" "0,0")
  10345. +           (match_operand:HI 2 "general_operand" "dn,rmn")))]
  10346. +   ""
  10347. +   "sub%.w %2,%0")
  10348. + (define_insn ""
  10349. +   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d"))
  10350. +     (minus:HI (match_dup 0)
  10351. +           (match_operand:HI 1 "general_operand" "dn,rmn")))]
  10352. +   ""
  10353. +   "sub%.w %1,%0")
  10354. + (define_insn "subqi3"
  10355. +   [(set (match_operand:QI 0 "general_operand" "=m,d")
  10356. +     (minus:QI (match_operand:QI 1 "general_operand" "0,0")
  10357. +           (match_operand:QI 2 "general_operand" "dn,dmn")))]
  10358. +   ""
  10359. +   "sub%.b %2,%0")
  10360. + (define_insn ""
  10361. +   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d"))
  10362. +     (minus:QI (match_dup 0)
  10363. +           (match_operand:QI 1 "general_operand" "dn,dmn")))]
  10364. +   ""
  10365. +   "sub%.b %1,%0")
  10366. + (define_expand "subdf3"
  10367. +   [(set (match_operand:DF 0 "general_operand" "")
  10368. +     (minus:DF (match_operand:DF 1 "general_operand" "")
  10369. +           (match_operand:DF 2 "general_operand" "")))]
  10370. +   "TARGET_68881 || TARGET_FPA"
  10371. +   "")
  10372. + (define_insn ""
  10373. +   [(set (match_operand:DF 0 "general_operand" "=x,y,y")
  10374. +     (minus:DF (match_operand:DF 1 "general_operand" "xH,y,dmF")
  10375. +           (match_operand:DF 2 "general_operand" "xH,dmF,0")))]
  10376. +   "TARGET_FPA"
  10377. +   "*
  10378. + {
  10379. +   if (rtx_equal_p (operands[0], operands[2]))
  10380. +     return \"fprsub%.d %y1,%0\";
  10381. +   if (rtx_equal_p (operands[0], operands[1]))
  10382. +     return \"fpsub%.d %y2,%0\";
  10383. +   if (which_alternative == 0)
  10384. +     return \"fpsub3%.d %w2,%w1,%0\";
  10385. +   return \"fpsub3%.d %x2,%x1,%0\";
  10386. + }")
  10387. + (define_insn ""
  10388. +   [(set (match_operand:DF 0 "general_operand" "=f")
  10389. +     (minus:DF (match_operand:DF 1 "general_operand" "0")
  10390. +           (match_operand:DF 2 "general_operand" "fmG")))]
  10391. +   "TARGET_68881"
  10392. +   "*
  10393. + {
  10394. +   if (REG_P (operands[2]))
  10395. +     return \"f%&sub%.x %2,%0\";
  10396. +   return \"f%&sub%.d %f2,%0\";
  10397. + }")
  10398. + (define_expand "subsf3"
  10399. +   [(set (match_operand:SF 0 "general_operand" "")
  10400. +     (minus:SF (match_operand:SF 1 "general_operand" "")
  10401. +           (match_operand:SF 2 "general_operand" "")))]
  10402. +   "TARGET_68881 || TARGET_FPA"
  10403. +   "")
  10404. + (define_insn ""
  10405. +   [(set (match_operand:SF 0 "general_operand" "=x,y,y")
  10406. +     (minus:SF (match_operand:SF 1 "general_operand" "xH,y,rmF")
  10407. +           (match_operand:SF 2 "general_operand" "xH,rmF,0")))]
  10408. +   "TARGET_FPA"
  10409. +   "*
  10410. + {
  10411. +   if (rtx_equal_p (operands[0], operands[2]))
  10412. +     return \"fprsub%.s %w1,%0\";
  10413. +   if (rtx_equal_p (operands[0], operands[1]))
  10414. +     return \"fpsub%.s %w2,%0\";
  10415. +   if (which_alternative == 0)
  10416. +     return \"fpsub3%.s %w2,%w1,%0\";
  10417. +   return \"fpsub3%.s %2,%1,%0\";
  10418. + }")
  10419. + (define_insn ""
  10420. +   [(set (match_operand:SF 0 "general_operand" "=f")
  10421. +     (minus:SF (match_operand:SF 1 "general_operand" "0")
  10422. +           (match_operand:SF 2 "general_operand" "fdmF")))]
  10423. +   "TARGET_68881"
  10424. +   "*
  10425. + {
  10426. +   if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
  10427. +     return \"f%$sub%.x %2,%0\";
  10428. +   return \"f%$sub%.s %f2,%0\";
  10429. + }")
  10430. + ;; multiply instructions
  10431. + (define_insn "mulhi3"
  10432. +   [(set (match_operand:HI 0 "general_operand" "=d")
  10433. +     (mult:HI (match_operand:HI 1 "general_operand" "%0")
  10434. +          (match_operand:HI 2 "general_operand" "dmn")))]
  10435. +   ""
  10436. +   "*
  10437. + {
  10438. + #if defined(MOTOROLA) && !defined(CRDS)
  10439. +   return \"muls%.w %2,%0\";
  10440. + #else
  10441. +   return \"muls %2,%0\";
  10442. + #endif
  10443. + }")
  10444. + (define_insn "mulhisi3"
  10445. +   [(set (match_operand:SI 0 "general_operand" "=d")
  10446. +     (mult:SI (sign_extend:SI
  10447. +           (match_operand:HI 1 "nonimmediate_operand" "%0"))
  10448. +          (sign_extend:SI
  10449. +           (match_operand:HI 2 "nonimmediate_operand" "dm"))))]
  10450. +   ""
  10451. +   "*
  10452. + {
  10453. + #if defined(MOTOROLA) && !defined(CRDS)
  10454. +   return \"muls%.w %2,%0\";
  10455. + #else
  10456. +   return \"muls %2,%0\";
  10457. + #endif
  10458. + }")
  10459. + (define_insn ""
  10460. +   [(set (match_operand:SI 0 "general_operand" "=d")
  10461. +     (mult:SI (sign_extend:SI
  10462. +           (match_operand:HI 1 "nonimmediate_operand" "%0"))
  10463. +          (match_operand:SI 2 "const_int_operand" "n")))]
  10464. +   "INTVAL (operands[2]) >= -0x8000 && INTVAL (operands[2]) <= 0x7fff"
  10465. +   "*
  10466. + {
  10467. + #if defined(MOTOROLA) && !defined(CRDS)
  10468. +   return \"muls%.w %2,%0\";
  10469. + #else
  10470. +   return \"muls %2,%0\";
  10471. + #endif
  10472. + }")
  10473. + (define_insn "mulsi3"
  10474. +   [(set (match_operand:SI 0 "general_operand" "=d")
  10475. +     (mult:SI (match_operand:SI 1 "general_operand" "%0")
  10476. +          (match_operand:SI 2 "general_operand" "dmsK")))]
  10477. +   "TARGET_68020"
  10478. +   "muls%.l %2,%0")
  10479. + (define_insn "umulhisi3"
  10480. +   [(set (match_operand:SI 0 "general_operand" "=d")
  10481. +     (mult:SI (zero_extend:SI
  10482. +           (match_operand:HI 1 "nonimmediate_operand" "%0"))
  10483. +          (zero_extend:SI
  10484. +           (match_operand:HI 2 "nonimmediate_operand" "dm"))))]
  10485. +   ""
  10486. +   "*
  10487. + {
  10488. + #if defined(MOTOROLA) && !defined(CRDS)
  10489. +   return \"mulu%.w %2,%0\";
  10490. + #else
  10491. +   return \"mulu %2,%0\";
  10492. + #endif
  10493. + }")
  10494. + (define_insn ""
  10495. +   [(set (match_operand:SI 0 "general_operand" "=d")
  10496. +     (mult:SI (zero_extend:SI
  10497. +           (match_operand:HI 1 "nonimmediate_operand" "%0"))
  10498. +          (match_operand:SI 2 "const_int_operand" "n")))]
  10499. +   "INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) <= 0xffff"
  10500. +   "*
  10501. + {
  10502. + #if defined(MOTOROLA) && !defined(CRDS)
  10503. +   return \"mulu%.w %2,%0\";
  10504. + #else
  10505. +   return \"mulu %2,%0\";
  10506. + #endif
  10507. + }")
  10508. + ;; We need a separate DEFINE_EXPAND for u?mulsidi3 to be able to use the
  10509. + ;; proper matching constraint.  This is because the matching is between
  10510. + ;; the high-numbered word of the DImode operand[0] and operand[1].
  10511. + (define_expand "umulsidi3"
  10512. +   [(parallel
  10513. +     [(set (subreg:SI (match_operand:DI 0 "register_operand" "") 1)
  10514. +       (mult:SI (match_operand:SI 1 "register_operand" "")
  10515. +            (match_operand:SI 2 "nonimmediate_operand" "")))
  10516. +      (set (subreg:SI (match_dup 0) 0)
  10517. +       (truncate:SI (lshiftrt:DI (mult:DI (zero_extend:DI (match_dup 1))
  10518. +                          (zero_extend:DI (match_dup 2)))
  10519. +                     (const_int 32))))])]
  10520. +   "TARGET_68020"
  10521. +   "")
  10522. + (define_insn ""
  10523. +   [(set (match_operand:SI 0 "register_operand" "=d")
  10524. +     (mult:SI (match_operand:SI 1 "register_operand" "%0")
  10525. +           (match_operand:SI 2 "nonimmediate_operand" "dm")))
  10526. +    (set (match_operand:SI 3 "register_operand" "=d")
  10527. +     (truncate:SI (lshiftrt:DI (mult:DI (zero_extend:DI (match_dup 1))
  10528. +                        (zero_extend:DI (match_dup 2)))
  10529. +                   (const_int 32))))]
  10530. +   "TARGET_68020"
  10531. +   "mulu%.l %2,%3:%0")
  10532. + ; Match immediate case.  For 2.4 only match things < 2^31.
  10533. + ; It's tricky with larger values in these patterns since we need to match
  10534. + ; values between the two parallel multiplies, between a CONST_DOUBLE and
  10535. + ; a CONST_INT.
  10536. + (define_insn ""
  10537. +   [(set (match_operand:SI 0 "register_operand" "=d")
  10538. +     (mult:SI (match_operand:SI 1 "register_operand" "%0")
  10539. +          (match_operand:SI 2 "const_int_operand" "n")))
  10540. +    (set (match_operand:SI 3 "register_operand" "=d")
  10541. +     (truncate:SI (lshiftrt:DI (mult:DI (zero_extend:DI (match_dup 1))
  10542. +                        (match_dup 2))
  10543. +                   (const_int 32))))]
  10544. +   "TARGET_68020
  10545. +    && (unsigned) INTVAL (operands[2]) <= 0x7fffffff"
  10546. +   "mulu%.l %2,%3:%0")
  10547. + (define_expand "mulsidi3"
  10548. +   [(parallel
  10549. +     [(set (subreg:SI (match_operand:DI 0 "register_operand" "") 1)
  10550. +       (mult:SI (match_operand:SI 1 "register_operand" "")
  10551. +            (match_operand:SI 2 "nonimmediate_operand" "")))
  10552. +      (set (subreg:SI (match_dup 0) 0)
  10553. +       (truncate:SI (lshiftrt:DI (mult:DI (sign_extend:DI (match_dup 1))
  10554. +                          (sign_extend:DI (match_dup 2)))
  10555. +                     (const_int 32))))])]
  10556. +   "TARGET_68020"
  10557. +   "")
  10558. + (define_insn ""
  10559. +   [(set (match_operand:SI 0 "register_operand" "=d")
  10560. +     (mult:SI (match_operand:SI 1 "register_operand" "%0")
  10561. +          (match_operand:SI 2 "nonimmediate_operand" "dm")))
  10562. +    (set (match_operand:SI 3 "register_operand" "=d")
  10563. +     (truncate:SI (lshiftrt:DI (mult:DI (sign_extend:DI (match_dup 1))
  10564. +                        (sign_extend:DI (match_dup 2)))
  10565. +                   (const_int 32))))]
  10566. +   "TARGET_68020"
  10567. +   "muls%.l %2,%3:%0")
  10568. + (define_insn ""
  10569. +   [(set (match_operand:SI 0 "register_operand" "=d")
  10570. +     (mult:SI (match_operand:SI 1 "register_operand" "%0")
  10571. +          (match_operand:SI 2 "const_int_operand" "n")))
  10572. +    (set (match_operand:SI 3 "register_operand" "=d")
  10573. +     (truncate:SI (lshiftrt:DI (mult:DI (sign_extend:DI (match_dup 1))
  10574. +                        (match_dup 2))
  10575. +                   (const_int 32))))]
  10576. +   "TARGET_68020
  10577. +    /* This test is a noop on 32 bit machines,
  10578. +       but important for a cross-compiler hosted on 64-bit machines.  */
  10579. +    && INTVAL (operands[2]) <= 0x7fffffff
  10580. +    && INTVAL (operands[2]) >= -0x80000000"
  10581. +   "muls%.l %2,%3:%0")
  10582. + (define_expand "muldf3"
  10583. +   [(set (match_operand:DF 0 "general_operand" "")
  10584. +     (mult:DF (match_operand:DF 1 "general_operand" "")
  10585. +          (match_operand:DF 2 "general_operand" "")))]
  10586. +   "TARGET_68881 || TARGET_FPA"
  10587. +   "")
  10588. + (define_insn ""
  10589. +   [(set (match_operand:DF 0 "general_operand" "=x,y")
  10590. +     (mult:DF (match_operand:DF 1 "general_operand" "%xH,y")
  10591. +          (match_operand:DF 2 "general_operand" "xH,rmF")))]
  10592. +   "TARGET_FPA"
  10593. +   "*
  10594. + {
  10595. +   if (rtx_equal_p (operands[1], operands[2]))
  10596. +     return \"fpsqr%.d %y1,%0\";
  10597. +   if (rtx_equal_p (operands[0], operands[1]))
  10598. +     return \"fpmul%.d %y2,%0\";
  10599. +   if (rtx_equal_p (operands[0], operands[2]))
  10600. +     return \"fpmul%.d %y1,%0\";
  10601. +   if (which_alternative == 0)
  10602. +     return \"fpmul3%.d %w2,%w1,%0\";
  10603. +   return \"fpmul3%.d %x2,%x1,%0\";
  10604. + }")
  10605. + (define_insn ""
  10606. +   [(set (match_operand:DF 0 "general_operand" "=f")
  10607. +     (mult:DF (match_operand:DF 1 "general_operand" "%0")
  10608. +          (match_operand:DF 2 "general_operand" "fmG")))]
  10609. +   "TARGET_68881"
  10610. +   "*
  10611. + {
  10612. +   if (GET_CODE (operands[2]) == CONST_DOUBLE
  10613. +       && floating_exact_log2 (operands[2]) && !TARGET_68040)
  10614. +     {
  10615. +       int i = floating_exact_log2 (operands[2]);
  10616. +       operands[2] = gen_rtx (CONST_INT, VOIDmode, i);
  10617. +       return \"fscale%.l %2,%0\";
  10618. +     }
  10619. +   if (REG_P (operands[2]))
  10620. +     return \"f%&mul%.x %2,%0\";
  10621. +   return \"f%&mul%.d %f2,%0\";
  10622. + }")
  10623. + (define_expand "mulsf3"
  10624. +   [(set (match_operand:SF 0 "general_operand" "")
  10625. +     (mult:SF (match_operand:SF 1 "general_operand" "")
  10626. +          (match_operand:SF 2 "general_operand" "")))]
  10627. +   "TARGET_68881 || TARGET_FPA"
  10628. +   "")
  10629. + (define_insn ""
  10630. +   [(set (match_operand:SF 0 "general_operand" "=x,y")
  10631. +     (mult:SF (match_operand:SF 1 "general_operand" "%xH,y")
  10632. +          (match_operand:SF 2 "general_operand" "xH,rmF")))]
  10633. +   "TARGET_FPA"
  10634. +   "*
  10635. + {
  10636. +   if (rtx_equal_p (operands[1], operands[2]))
  10637. +     return \"fpsqr%.s %w1,%0\";
  10638. +   if (rtx_equal_p (operands[0], operands[1]))
  10639. +     return \"fpmul%.s %w2,%0\";
  10640. +   if (rtx_equal_p (operands[0], operands[2]))
  10641. +     return \"fpmul%.s %w1,%0\";
  10642. +   if (which_alternative == 0)
  10643. +     return \"fpmul3%.s %w2,%w1,%0\";
  10644. +   return \"fpmul3%.s %2,%1,%0\";
  10645. + }")
  10646. + (define_insn ""
  10647. +   [(set (match_operand:SF 0 "general_operand" "=f")
  10648. +     (mult:SF (match_operand:SF 1 "general_operand" "%0")
  10649. +          (match_operand:SF 2 "general_operand" "fdmF")))]
  10650. +   "TARGET_68881"
  10651. +   "*
  10652. + {
  10653. + #ifdef FSGLMUL_USE_S
  10654. +   if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
  10655. +     return (TARGET_68040_ONLY
  10656. +         ? \"fsmul%.s %2,%0\"
  10657. +         : \"fsglmul%.s %2,%0\");
  10658. + #else
  10659. +   if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
  10660. +     return (TARGET_68040_ONLY
  10661. +         ? \"fsmul%.x %2,%0\"
  10662. +         : \"fsglmul%.x %2,%0\");
  10663. + #endif
  10664. +   return (TARGET_68040_ONLY
  10665. +       ? \"fsmul%.s %f2,%0\"
  10666. +       : \"fsglmul%.s %f2,%0\");
  10667. + }")
  10668. + ;; divide instructions
  10669. + (define_insn "divhi3"
  10670. +   [(set (match_operand:HI 0 "general_operand" "=d")
  10671. +     (div:HI (match_operand:HI 1 "general_operand" "0")
  10672. +         (match_operand:HI 2 "general_operand" "dmn")))]
  10673. +   ""
  10674. +   "*
  10675. + {
  10676. + #ifdef MOTOROLA
  10677. +   return \"ext%.l %0\;divs%.w %2,%0\";
  10678. + #else
  10679. +   return \"extl %0\;divs %2,%0\";
  10680. + #endif
  10681. + }")
  10682. + ;; These patterns don't work because the divs instruction is undefined if
  10683. + ;; the quotient is more than 16 bits.  This valid C would be miscompiled:
  10684. + ;; int n; short d; unsigned short q; ... q = (unsigned int) (n / d);
  10685. + ;; Imagine what happens when n = 100000 and d = 1.
  10686. + ;;(define_insn "divhisi3"
  10687. + ;;  [(set (match_operand:HI 0 "general_operand" "=d")
  10688. + ;;    (truncate:HI
  10689. + ;;     (div:SI
  10690. + ;;      (match_operand:SI 1 "general_operand" "0")
  10691. + ;;      (sign_extend:SI (match_operand:HI 2 "nonimmediate_operand" "dm")))))]
  10692. + ;;  ""
  10693. + ;;  "*
  10694. + ;;{
  10695. + ;;#ifdef MOTOROLA
  10696. + ;;  return \"divs%.w %2,%0\";
  10697. + ;;#else
  10698. + ;;  return \"divs %2,%0\";
  10699. + ;;#endif
  10700. + ;;}")
  10701. + ;;(define_insn ""
  10702. + ;;  [(set (match_operand:HI 0 "general_operand" "=d")
  10703. + ;;    (truncate:HI (div:SI (match_operand:SI 1 "general_operand" "0")
  10704. + ;;                 (match_operand:SI 2 "const_int_operand" "n"))))]
  10705. + ;;  ""
  10706. + ;;  "*
  10707. + ;;{
  10708. + ;;#ifdef MOTOROLA
  10709. + ;;  return \"divs%.w %2,%0\";
  10710. + ;;#else
  10711. + ;;  return \"divs %2,%0\";
  10712. + ;;#endif
  10713. + ;;}")
  10714. + (define_insn "udivhi3"
  10715. +   [(set (match_operand:HI 0 "general_operand" "=d")
  10716. +     (udiv:HI (match_operand:HI 1 "general_operand" "0")
  10717. +          (match_operand:HI 2 "general_operand" "dmn")))]
  10718. +   ""
  10719. +   "*
  10720. + {
  10721. + #ifdef MOTOROLA
  10722. +   return \"and%.l %#0xFFFF,%0\;divu%.w %2,%0\";
  10723. + #else
  10724. +   return \"andl %#0xFFFF,%0\;divu %2,%0\";
  10725. + #endif
  10726. + }")
  10727. + ;; See comment before divhisi3 why these are commented out.
  10728. + ;;(define_insn "udivhisi3"
  10729. + ;;  [(set (match_operand:HI 0 "general_operand" "=d")
  10730. + ;;    (truncate:HI
  10731. + ;;     (udiv:SI
  10732. + ;;      (match_operand:SI 1 "general_operand" "0")
  10733. + ;;      (zero_extend:SI (match_operand:HI 2 "nonimmediate_operand" "dm")))))]
  10734. + ;;  ""
  10735. + ;;  "*
  10736. + ;;{
  10737. + ;;#ifdef MOTOROLA
  10738. + ;;  return \"divu%.w %2,%0\";
  10739. + ;;#else
  10740. + ;;  return \"divu %2,%0\";
  10741. + ;;#endif
  10742. + ;;}")
  10743. + ;;(define_insn ""
  10744. + ;;  [(set (match_operand:HI 0 "general_operand" "=d")
  10745. + ;;    (truncate:HI (udiv:SI (match_operand:SI 1 "general_operand" "0")
  10746. + ;;                  (match_operand:SI 2 "const_int_operand" "n"))))]
  10747. + ;;  ""
  10748. + ;;  "*
  10749. + ;;{
  10750. + ;;#ifdef MOTOROLA
  10751. + ;;  return \"divu%.w %2,%0\";
  10752. + ;;#else
  10753. + ;;  return \"divu %2,%0\";
  10754. + ;;#endif
  10755. + ;;}")
  10756. + (define_expand "divdf3"
  10757. +   [(set (match_operand:DF 0 "general_operand" "")
  10758. +     (div:DF (match_operand:DF 1 "general_operand" "")
  10759. +         (match_operand:DF 2 "general_operand" "")))]
  10760. +   "TARGET_68881 || TARGET_FPA"
  10761. +   "")
  10762. + (define_insn ""
  10763. +   [(set (match_operand:DF 0 "general_operand" "=x,y,y")
  10764. +     (div:DF (match_operand:DF 1 "general_operand" "xH,y,rmF")
  10765. +         (match_operand:DF 2 "general_operand" "xH,rmF,0")))]
  10766. +   "TARGET_FPA"
  10767. +   "*
  10768. + {
  10769. +   if (rtx_equal_p (operands[0], operands[2]))
  10770. +     return \"fprdiv%.d %y1,%0\";
  10771. +   if (rtx_equal_p (operands[0], operands[1]))
  10772. +     return \"fpdiv%.d %y2,%0\";
  10773. +   if (which_alternative == 0)
  10774. +     return \"fpdiv3%.d %w2,%w1,%0\";
  10775. +   return \"fpdiv3%.d %x2,%x1,%x0\";
  10776. + }")
  10777. + (define_insn ""
  10778. +   [(set (match_operand:DF 0 "general_operand" "=f")
  10779. +     (div:DF (match_operand:DF 1 "general_operand" "0")
  10780. +         (match_operand:DF 2 "general_operand" "fmG")))]
  10781. +   "TARGET_68881"
  10782. +   "*
  10783. + {
  10784. +   if (REG_P (operands[2]))
  10785. +     return \"f%&div%.x %2,%0\";
  10786. +   return \"f%&div%.d %f2,%0\";
  10787. + }")
  10788. + (define_expand "divsf3"
  10789. +   [(set (match_operand:SF 0 "general_operand" "")
  10790. +     (div:SF (match_operand:SF 1 "general_operand" "")
  10791. +         (match_operand:SF 2 "general_operand" "")))]
  10792. +   "TARGET_68881 || TARGET_FPA"
  10793. +   "")
  10794. + (define_insn ""
  10795. +   [(set (match_operand:SF 0 "general_operand" "=x,y,y")
  10796. +     (div:SF (match_operand:SF 1 "general_operand" "xH,y,rmF")
  10797. +         (match_operand:SF 2 "general_operand" "xH,rmF,0")))]
  10798. +   "TARGET_FPA"
  10799. +   "*
  10800. + {
  10801. +   if (rtx_equal_p (operands[0], operands[1]))
  10802. +     return \"fpdiv%.s %w2,%0\";
  10803. +   if (rtx_equal_p (operands[0], operands[2]))
  10804. +     return \"fprdiv%.s %w1,%0\";
  10805. +   if (which_alternative == 0)
  10806. +     return \"fpdiv3%.s %w2,%w1,%0\";
  10807. +   return \"fpdiv3%.s %2,%1,%0\";
  10808. + }")
  10809. + (define_insn ""
  10810. +   [(set (match_operand:SF 0 "general_operand" "=f")
  10811. +     (div:SF (match_operand:SF 1 "general_operand" "0")
  10812. +         (match_operand:SF 2 "general_operand" "fdmF")))]
  10813. +   "TARGET_68881"
  10814. +   "*
  10815. + {
  10816. + #ifdef FSGLDIV_USE_S
  10817. +   if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
  10818. +     return (TARGET_68040_ONLY
  10819. +         ? \"fsdiv%.s %2,%0\"
  10820. +         : \"fsgldiv%.s %2,%0\");
  10821. + #else
  10822. +   if (REG_P (operands[2]) && ! DATA_REG_P (operands[2]))
  10823. +     return (TARGET_68040_ONLY
  10824. +         ? \"fsdiv%.x %2,%0\"
  10825. +         : \"fsgldiv%.x %2,%0\");
  10826. + #endif
  10827. +   return (TARGET_68040_ONLY
  10828. +       ? \"fsdiv%.s %f2,%0\"
  10829. +       : \"fsgldiv%.s %f2,%0\");
  10830. + }")
  10831. + ;; Remainder instructions.
  10832. + (define_insn "modhi3"
  10833. +   [(set (match_operand:HI 0 "general_operand" "=d")
  10834. +     (mod:HI (match_operand:HI 1 "general_operand" "0")
  10835. +         (match_operand:HI 2 "general_operand" "dmn")))]
  10836. +   ""
  10837. +   "*
  10838. + {
  10839. +   /* The swap insn produces cc's that don't correspond to the result.  */
  10840. +   CC_STATUS_INIT;
  10841. + #ifdef MOTOROLA
  10842. +   return \"ext%.l %0\;divs%.w %2,%0\;swap %0\";
  10843. + #else
  10844. +   return \"extl %0\;divs %2,%0\;swap %0\";
  10845. + #endif
  10846. + }")
  10847. + ;; See comment before divhisi3 why these are commented out.
  10848. + ;;(define_insn "modhisi3"
  10849. + ;;  [(set (match_operand:HI 0 "general_operand" "=d")
  10850. + ;;    (truncate:HI
  10851. + ;;     (mod:SI
  10852. + ;;      (match_operand:SI 1 "general_operand" "0")
  10853. + ;;      (sign_extend:SI (match_operand:HI 2 "nonimmediate_operand" "dm")))))]
  10854. + ;;  ""
  10855. + ;;  "*
  10856. + ;;{
  10857. + ;;  /* The swap insn produces cc's that don't correspond to the result.  */
  10858. + ;;  CC_STATUS_INIT;
  10859. + ;;#ifdef MOTOROLA
  10860. + ;;  return \"divs%.w %2,%0\;swap %0\";
  10861. + ;;#else
  10862. + ;;  return \"divs %2,%0\;swap %0\";
  10863. + ;;#endif
  10864. + ;;}")
  10865. + ;;(define_insn ""
  10866. + ;;  [(set (match_operand:HI 0 "general_operand" "=d")
  10867. + ;;    (truncate:HI (mod:SI (match_operand:SI 1 "general_operand" "0")
  10868. + ;;                 (match_operand:SI 2 "const_int_operand" "n"))))]
  10869. + ;;  ""
  10870. + ;;  "*
  10871. + ;;{
  10872. + ;;  /* The swap insn produces cc's that don't correspond to the result.  */
  10873. + ;;  CC_STATUS_INIT;
  10874. + ;;#ifdef MOTOROLA
  10875. + ;;  return \"divs%.w %2,%0\;swap %0\";
  10876. + ;;#else
  10877. + ;;  return \"divs %2,%0\;swap %0\";
  10878. + ;;#endif
  10879. + ;;}")
  10880. + (define_insn "umodhi3"
  10881. +   [(set (match_operand:HI 0 "general_operand" "=d")
  10882. +     (umod:HI (match_operand:HI 1 "general_operand" "0")
  10883. +          (match_operand:HI 2 "general_operand" "dmn")))]
  10884. +   ""
  10885. +   "*
  10886. + {
  10887. +   /* The swap insn produces cc's that don't correspond to the result.  */
  10888. +   CC_STATUS_INIT;
  10889. + #ifdef MOTOROLA
  10890. +   return \"and%.l %#0xFFFF,%0\;divu%.w %2,%0\;swap %0\";
  10891. + #else
  10892. +   return \"andl %#0xFFFF,%0\;divu %2,%0\;swap %0\";
  10893. + #endif
  10894. + }")
  10895. + ;; See comment before divhisi3 why these are commented out.
  10896. + ;;(define_insn "umodhisi3"
  10897. + ;;  [(set (match_operand:HI 0 "general_operand" "=d")
  10898. + ;;    (truncate:HI
  10899. + ;;     (umod:SI
  10900. + ;;      (match_operand:SI 1 "general_operand" "0")
  10901. + ;;      (zero_extend:SI (match_operand:HI 2 "nonimmediate_operand" "dm")))))]
  10902. + ;;  ""
  10903. + ;;  "*
  10904. + ;;{
  10905. + ;;  /* The swap insn produces cc's that don't correspond to the result.  */
  10906. + ;;  CC_STATUS_INIT;
  10907. + ;;#ifdef MOTOROLA
  10908. + ;;  return \"divu%.w %2,%0\;swap %0\";
  10909. + ;;#else
  10910. + ;;  return \"divu %2,%0\;swap %0\";
  10911. + ;;#endif
  10912. + ;;}")
  10913. + ;;(define_insn ""
  10914. + ;;  [(set (match_operand:HI 0 "general_operand" "=d")
  10915. + ;;    (truncate:HI (umod:SI (match_operand:SI 1 "general_operand" "0")
  10916. + ;;                  (match_operand:SI 2 "const_int_operand" "n"))))]
  10917. + ;;  ""
  10918. + ;;  "*
  10919. + ;;{
  10920. + ;;  /* The swap insn produces cc's that don't correspond to the result.  */
  10921. + ;;  CC_STATUS_INIT;
  10922. + ;;#ifdef MOTOROLA
  10923. + ;;  return \"divu%.w %2,%0\;swap %0\";
  10924. + ;;#else
  10925. + ;;  return \"divu %2,%0\;swap %0\";
  10926. + ;;#endif
  10927. + ;;}")
  10928. + (define_insn "divmodsi4"
  10929. +   [(set (match_operand:SI 0 "general_operand" "=d")
  10930. +     (div:SI (match_operand:SI 1 "general_operand" "0")
  10931. +         (match_operand:SI 2 "general_operand" "dmsK")))
  10932. +    (set (match_operand:SI 3 "general_operand" "=d")
  10933. +     (mod:SI (match_dup 1) (match_dup 2)))]
  10934. +   "TARGET_68020"
  10935. +   "*
  10936. + {
  10937. +   if (find_reg_note (insn, REG_UNUSED, operands[3]))
  10938. +     return \"divs%.l %2,%0\";
  10939. +   else
  10940. +     return \"divsl%.l %2,%3:%0\";
  10941. + }")
  10942. + (define_insn "udivmodsi4"
  10943. +   [(set (match_operand:SI 0 "general_operand" "=d")
  10944. +     (udiv:SI (match_operand:SI 1 "general_operand" "0")
  10945. +          (match_operand:SI 2 "general_operand" "dmsK")))
  10946. +    (set (match_operand:SI 3 "general_operand" "=d")
  10947. +     (umod:SI (match_dup 1) (match_dup 2)))]
  10948. +   "TARGET_68020"
  10949. +   "*
  10950. + {
  10951. +   if (find_reg_note (insn, REG_UNUSED, operands[3]))
  10952. +     return \"divu%.l %2,%0\";
  10953. +   else
  10954. +     return \"divul%.l %2,%3:%0\";
  10955. + }")
  10956. + ;; logical-and instructions
  10957. + ;; Prevent AND from being made with sp.  This doesn't exist in the machine
  10958. + ;; and reload will cause inefficient code.  Since sp is a FIXED_REG, we
  10959. + ;; can't allocate pseudos into it.
  10960. + (define_insn "andsi3"
  10961. +   [(set (match_operand:SI 0 "not_sp_operand" "=m,d")
  10962. +     (and:SI (match_operand:SI 1 "general_operand" "%0,0")
  10963. +         (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
  10964. +   ""
  10965. +   "*
  10966. + {
  10967. +   int logval;
  10968. +   if (GET_CODE (operands[2]) == CONST_INT
  10969. +       && (INTVAL (operands[2]) | 0xffff) == 0xffffffff
  10970. +       && (DATA_REG_P (operands[0])
  10971. +       || offsettable_memref_p (operands[0])))
  10972. +     { 
  10973. +       if (GET_CODE (operands[0]) != REG)
  10974. +         operands[0] = adj_offsettable_operand (operands[0], 2);
  10975. +       operands[2] = gen_rtx (CONST_INT, VOIDmode,
  10976. +                  INTVAL (operands[2]) & 0xffff);
  10977. +       /* Do not delete a following tstl %0 insn; that would be incorrect.  */
  10978. +       CC_STATUS_INIT;
  10979. +       if (operands[2] == const0_rtx)
  10980. +         return \"clr%.w %0\";
  10981. +       return \"and%.w %2,%0\";
  10982. +     }
  10983. +   if (GET_CODE (operands[2]) == CONST_INT
  10984. +       && (logval = exact_log2 (~ INTVAL (operands[2]))) >= 0
  10985. +       && (DATA_REG_P (operands[0])
  10986. +           || offsettable_memref_p (operands[0])))
  10987. +     { 
  10988. +       if (DATA_REG_P (operands[0]))
  10989. +         {
  10990. +           operands[1] = gen_rtx (CONST_INT, VOIDmode, logval);
  10991. +         }
  10992. +       else
  10993. +         {
  10994. +           operands[0] = adj_offsettable_operand (operands[0], 3 - (logval / 8));          operands[1] = gen_rtx (CONST_INT, VOIDmode, logval % 8);
  10995. +         }
  10996. +       /* This does not set condition codes in a standard way.  */
  10997. +       CC_STATUS_INIT;
  10998. +       return \"bclr %1,%0\";
  10999. +     }
  11000. +   return \"and%.l %2,%0\";
  11001. + }")
  11002. + (define_insn "andhi3"
  11003. +   [(set (match_operand:HI 0 "general_operand" "=m,d")
  11004. +     (and:HI (match_operand:HI 1 "general_operand" "%0,0")
  11005. +         (match_operand:HI 2 "general_operand" "dn,dmn")))]
  11006. +   ""
  11007. +   "and%.w %2,%0")
  11008. + (define_insn ""
  11009. +   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d"))
  11010. +     (and:HI (match_dup 0)
  11011. +         (match_operand:HI 1 "general_operand" "dn,dmn")))]
  11012. +   ""
  11013. +   "and%.w %1,%0")
  11014. + (define_insn ""
  11015. +   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d"))
  11016. +     (and:HI (match_operand:HI 1 "general_operand" "dn,dmn")
  11017. +         (match_dup 0)))]
  11018. +   ""
  11019. +   "and%.w %1,%0")
  11020. + (define_insn "andqi3"
  11021. +   [(set (match_operand:QI 0 "general_operand" "=m,d")
  11022. +     (and:QI (match_operand:QI 1 "general_operand" "%0,0")
  11023. +         (match_operand:QI 2 "general_operand" "dn,dmn")))]
  11024. +   ""
  11025. +   "and%.b %2,%0")
  11026. + (define_insn ""
  11027. +   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d"))
  11028. +     (and:QI (match_dup 0)
  11029. +         (match_operand:QI 1 "general_operand" "dn,dmn")))]
  11030. +   ""
  11031. +   "and%.b %1,%0")
  11032. + (define_insn ""
  11033. +   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d"))
  11034. +     (and:QI (match_operand:QI 1 "general_operand" "dn,dmn")
  11035. +         (match_dup 0)))]
  11036. +   ""
  11037. +   "and%.b %1,%0")
  11038. + ;; inclusive-or instructions
  11039. + (define_insn "iorsi3"
  11040. +   [(set (match_operand:SI 0 "general_operand" "=m,d")
  11041. +     (ior:SI (match_operand:SI 1 "general_operand" "%0,0")
  11042. +         (match_operand:SI 2 "general_operand" "dKs,dmKs")))]
  11043. +   ""
  11044. +   "*
  11045. + {
  11046. +   register int logval;
  11047. +   if (GET_CODE (operands[2]) == CONST_INT
  11048. +       && INTVAL (operands[2]) >> 16 == 0
  11049. +       && (DATA_REG_P (operands[0])
  11050. +       || offsettable_memref_p (operands[0])))
  11051. +     { 
  11052. +       if (GET_CODE (operands[0]) != REG)
  11053. +         operands[0] = adj_offsettable_operand (operands[0], 2);
  11054. +       /* Do not delete a following tstl %0 insn; that would be incorrect.  */
  11055. +       CC_STATUS_INIT;
  11056. +       return \"or%.w %2,%0\";
  11057. +     }
  11058. +   if (GET_CODE (operands[2]) == CONST_INT
  11059. +       && (logval = exact_log2 (INTVAL (operands[2]))) >= 0
  11060. +       && (DATA_REG_P (operands[0])
  11061. +       || offsettable_memref_p (operands[0])))
  11062. +     { 
  11063. +       if (DATA_REG_P (operands[0]))
  11064. +     {
  11065. +       operands[1] = gen_rtx (CONST_INT, VOIDmode, logval);
  11066. +     }
  11067. +       else
  11068. +         {
  11069. +       operands[0] = adj_offsettable_operand (operands[0], 3 - (logval / 8));
  11070. +       operands[1] = gen_rtx (CONST_INT, VOIDmode, logval % 8);
  11071. +     }
  11072. +       CC_STATUS_INIT;
  11073. +       return \"bset %1,%0\";
  11074. +     }
  11075. +   return \"or%.l %2,%0\";
  11076. + }")
  11077. + (define_insn "iorhi3"
  11078. +   [(set (match_operand:HI 0 "general_operand" "=m,d")
  11079. +     (ior:HI (match_operand:HI 1 "general_operand" "%0,0")
  11080. +         (match_operand:HI 2 "general_operand" "dn,dmn")))]
  11081. +   ""
  11082. +   "or%.w %2,%0")
  11083. + (define_insn ""
  11084. +   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d"))
  11085. +     (ior:HI (match_dup 0)
  11086. +         (match_operand:HI 1 "general_operand" "dn,dmn")))]
  11087. +   ""
  11088. +   "or%.w %1,%0")
  11089. + (define_insn ""
  11090. +   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+m,d"))
  11091. +     (ior:HI (match_operand:HI 1 "general_operand" "dn,dmn")
  11092. +         (match_dup 0)))]
  11093. +   ""
  11094. +   "or%.w %1,%0")
  11095. + (define_insn "iorqi3"
  11096. +   [(set (match_operand:QI 0 "general_operand" "=m,d")
  11097. +     (ior:QI (match_operand:QI 1 "general_operand" "%0,0")
  11098. +         (match_operand:QI 2 "general_operand" "dn,dmn")))]
  11099. +   ""
  11100. +   "or%.b %2,%0")
  11101. + (define_insn ""
  11102. +   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d"))
  11103. +     (ior:QI (match_dup 0)
  11104. +         (match_operand:QI 1 "general_operand" "dn,dmn")))]
  11105. +   ""
  11106. +   "or%.b %1,%0")
  11107. + (define_insn ""
  11108. +   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+m,d"))
  11109. +     (ior:QI (match_operand:QI 1 "general_operand" "dn,dmn")
  11110. +         (match_dup 0)))]
  11111. +   ""
  11112. +   "or%.b %1,%0")
  11113. + ;; xor instructions
  11114. + (define_insn "xorsi3"
  11115. +   [(set (match_operand:SI 0 "general_operand" "=do,m")
  11116. +     (xor:SI (match_operand:SI 1 "general_operand" "%0,0")
  11117. +         (match_operand:SI 2 "general_operand" "di,dKs")))]
  11118. +   ""
  11119. +   "*
  11120. + {
  11121. +   if (GET_CODE (operands[2]) == CONST_INT
  11122. +       && INTVAL (operands[2]) >> 16 == 0
  11123. +       && (offsettable_memref_p (operands[0]) || DATA_REG_P (operands[0])))
  11124. +     { 
  11125. +       if (! DATA_REG_P (operands[0]))
  11126. +     operands[0] = adj_offsettable_operand (operands[0], 2);
  11127. +       /* Do not delete a following tstl %0 insn; that would be incorrect.  */
  11128. +       CC_STATUS_INIT;
  11129. +       return \"eor%.w %2,%0\";
  11130. +     }
  11131. +   return \"eor%.l %2,%0\";
  11132. + }")
  11133. + (define_insn "xorhi3"
  11134. +   [(set (match_operand:HI 0 "general_operand" "=dm")
  11135. +     (xor:HI (match_operand:HI 1 "general_operand" "%0")
  11136. +         (match_operand:HI 2 "general_operand" "dn")))]
  11137. +   ""
  11138. +   "eor%.w %2,%0")
  11139. + (define_insn ""
  11140. +   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+dm"))
  11141. +     (xor:HI (match_dup 0)
  11142. +         (match_operand:HI 1 "general_operand" "dn")))]
  11143. +   ""
  11144. +   "eor%.w %1,%0")
  11145. + (define_insn ""
  11146. +   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+dm"))
  11147. +     (xor:HI (match_operand:HI 1 "general_operand" "dn")
  11148. +         (match_dup 0)))]
  11149. +   ""
  11150. +   "eor%.w %1,%0")
  11151. + (define_insn "xorqi3"
  11152. +   [(set (match_operand:QI 0 "general_operand" "=dm")
  11153. +     (xor:QI (match_operand:QI 1 "general_operand" "%0")
  11154. +         (match_operand:QI 2 "general_operand" "dn")))]
  11155. +   ""
  11156. +   "eor%.b %2,%0")
  11157. + (define_insn ""
  11158. +   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+dm"))
  11159. +     (xor:QI (match_dup 0)
  11160. +         (match_operand:QI 1 "general_operand" "dn")))]
  11161. +   ""
  11162. +   "eor%.b %1,%0")
  11163. + (define_insn ""
  11164. +   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+dm"))
  11165. +     (xor:QI (match_operand:QI 1 "general_operand" "dn")
  11166. +         (match_dup 0)))]
  11167. +   ""
  11168. +   "eor%.b %1,%0")
  11169. + ;; negation instructions
  11170. + (define_insn "negsi2"
  11171. +   [(set (match_operand:SI 0 "general_operand" "=dm")
  11172. +     (neg:SI (match_operand:SI 1 "general_operand" "0")))]
  11173. +   ""
  11174. +   "neg%.l %0")
  11175. + (define_insn "neghi2"
  11176. +   [(set (match_operand:HI 0 "general_operand" "=dm")
  11177. +     (neg:HI (match_operand:HI 1 "general_operand" "0")))]
  11178. +   ""
  11179. +   "neg%.w %0")
  11180. + (define_insn ""
  11181. +   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+dm"))
  11182. +     (neg:HI (match_dup 0)))]
  11183. +   ""
  11184. +   "neg%.w %0")
  11185. + (define_insn "negqi2"
  11186. +   [(set (match_operand:QI 0 "general_operand" "=dm")
  11187. +     (neg:QI (match_operand:QI 1 "general_operand" "0")))]
  11188. +   ""
  11189. +   "neg%.b %0")
  11190. + (define_insn ""
  11191. +   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+dm"))
  11192. +     (neg:QI (match_dup 0)))]
  11193. +   ""
  11194. +   "neg%.b %0")
  11195. + (define_expand "negsf2"
  11196. +   [(set (match_operand:SF 0 "general_operand" "")
  11197. +     (neg:SF (match_operand:SF 1 "general_operand" "")))]
  11198. +   "TARGET_68881 || TARGET_FPA"
  11199. +   "")
  11200. + (define_insn ""
  11201. +   [(set (match_operand:SF 0 "general_operand" "=x,y")
  11202. +     (neg:SF (match_operand:SF 1 "general_operand" "xH,rmF")))]
  11203. +   "TARGET_FPA"
  11204. +   "fpneg%.s %w1,%0")
  11205. + (define_insn ""
  11206. +   [(set (match_operand:SF 0 "general_operand" "=f,d")
  11207. +     (neg:SF (match_operand:SF 1 "general_operand" "fdmF,0")))]
  11208. +   "TARGET_68881"
  11209. +   "*
  11210. + {
  11211. +   if (DATA_REG_P (operands[0]))
  11212. +     {
  11213. +       operands[1] = gen_rtx (CONST_INT, VOIDmode, 31);
  11214. +       return \"bchg %1,%0\";
  11215. +     }
  11216. +   if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
  11217. +     return \"f%$neg%.x %1,%0\";
  11218. +   return \"f%$neg%.s %f1,%0\";
  11219. + }")
  11220. + (define_expand "negdf2"
  11221. +   [(set (match_operand:DF 0 "general_operand" "")
  11222. +     (neg:DF (match_operand:DF 1 "general_operand" "")))]
  11223. +   "TARGET_68881 || TARGET_FPA"
  11224. +   "")
  11225. + (define_insn ""
  11226. +   [(set (match_operand:DF 0 "general_operand" "=x,y")
  11227. +     (neg:DF (match_operand:DF 1 "general_operand" "xH,rmF")))]
  11228. +   "TARGET_FPA"
  11229. +   "fpneg%.d %y1, %0")
  11230. + (define_insn ""
  11231. +   [(set (match_operand:DF 0 "general_operand" "=f,d")
  11232. +     (neg:DF (match_operand:DF 1 "general_operand" "fmF,0")))]
  11233. +   "TARGET_68881"
  11234. +   "*
  11235. + {
  11236. +   if (DATA_REG_P (operands[0]))
  11237. +     {
  11238. +       operands[1] = gen_rtx (CONST_INT, VOIDmode, 31);
  11239. +       return \"bchg %1,%0\";
  11240. +     }
  11241. +   if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
  11242. +     return \"f%&neg%.x %1,%0\";
  11243. +   return \"f%&neg%.d %f1,%0\";
  11244. + }")
  11245. + ;; Sqrt instruction for the 68881
  11246. + (define_insn "sqrtdf2"
  11247. +   [(set (match_operand:DF 0 "general_operand" "=f")
  11248. +     (sqrt:DF (match_operand:DF 1 "general_operand" "fm")))]
  11249. +   "TARGET_68881"
  11250. +   "*
  11251. + {
  11252. +   if (FP_REG_P (operands[1]))
  11253. +     return \"fsqrt%.x %1,%0\";
  11254. +   else
  11255. +     return \"fsqrt%.d %1,%0\";
  11256. + }")
  11257. + ;; Absolute value instructions
  11258. + (define_expand "abssf2"
  11259. +   [(set (match_operand:SF 0 "general_operand" "")
  11260. +     (abs:SF (match_operand:SF 1 "general_operand" "")))]
  11261. +   "TARGET_68881 || TARGET_FPA"
  11262. +   "")
  11263. + (define_insn ""
  11264. +   [(set (match_operand:SF 0 "general_operand" "=x,y")
  11265. +     (abs:SF (match_operand:SF 1 "general_operand" "xH,rmF")))]
  11266. +   "TARGET_FPA"
  11267. +   "fpabs%.s %y1,%0")
  11268. + (define_insn ""
  11269. +   [(set (match_operand:SF 0 "general_operand" "=f")
  11270. +     (abs:SF (match_operand:SF 1 "general_operand" "fdmF")))]
  11271. +   "TARGET_68881"
  11272. +   "*
  11273. + {
  11274. +   if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
  11275. +     return \"f%$abs%.x %1,%0\";
  11276. +   return \"f%$abs%.s %f1,%0\";
  11277. + }")
  11278. + (define_expand "absdf2"
  11279. +   [(set (match_operand:DF 0 "general_operand" "")
  11280. +     (abs:DF (match_operand:DF 1 "general_operand" "")))]
  11281. +   "TARGET_68881 || TARGET_FPA"
  11282. +   "")
  11283. + (define_insn ""
  11284. +   [(set (match_operand:DF 0 "general_operand" "=x,y")
  11285. +     (abs:DF (match_operand:DF 1 "general_operand" "xH,rmF")))]
  11286. +   "TARGET_FPA"
  11287. +   "fpabs%.d %y1,%0")
  11288. + (define_insn ""
  11289. +   [(set (match_operand:DF 0 "general_operand" "=f")
  11290. +     (abs:DF (match_operand:DF 1 "general_operand" "fmF")))]
  11291. +   "TARGET_68881"
  11292. +   "*
  11293. + {
  11294. +   if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
  11295. +     return \"f%&abs%.x %1,%0\";
  11296. +   return \"f%&abs%.d %f1,%0\";
  11297. + }")
  11298. + ;; one complement instructions
  11299. + (define_insn "one_cmplsi2"
  11300. +   [(set (match_operand:SI 0 "general_operand" "=dm")
  11301. +     (not:SI (match_operand:SI 1 "general_operand" "0")))]
  11302. +   ""
  11303. +   "not%.l %0")
  11304. + (define_insn "one_cmplhi2"
  11305. +   [(set (match_operand:HI 0 "general_operand" "=dm")
  11306. +     (not:HI (match_operand:HI 1 "general_operand" "0")))]
  11307. +   ""
  11308. +   "not%.w %0")
  11309. + (define_insn ""
  11310. +   [(set (strict_low_part (match_operand:HI 0 "general_operand" "+dm"))
  11311. +     (not:HI (match_dup 0)))]
  11312. +   ""
  11313. +   "not%.w %0")
  11314. + (define_insn "one_cmplqi2"
  11315. +   [(set (match_operand:QI 0 "general_operand" "=dm")
  11316. +     (not:QI (match_operand:QI 1 "general_operand" "0")))]
  11317. +   ""
  11318. +   "not%.b %0")
  11319. + (define_insn ""
  11320. +   [(set (strict_low_part (match_operand:QI 0 "general_operand" "+dm"))
  11321. +     (not:QI (match_dup 0)))]
  11322. +   ""
  11323. +   "not%.b %0")
  11324. + ;; arithmetic shift instructions
  11325. + ;; We don't need the shift memory by 1 bit instruction
  11326. + ;; On all 68k models, this makes faster code in a special case.
  11327. + (define_insn ""
  11328. +   [(set (match_operand:SI 0 "register_operand" "=d")
  11329. +     (ashift:SI (match_operand:SI 1 "register_operand" "0")
  11330. +            (match_operand:SI 2 "immediate_operand" "i")))]
  11331. +   "(GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 16)"
  11332. +   "*
  11333. + {
  11334. +   CC_STATUS_INIT;
  11335. +   return \"swap %0\;clr%.w %0\";
  11336. + }")
  11337. + ;; On the 68000, this makes faster code in a special case.
  11338. + (define_insn ""
  11339. +   [(set (match_operand:SI 0 "register_operand" "=d")
  11340. +     (ashift:SI (match_operand:SI 1 "register_operand" "0")
  11341. +            (match_operand:SI 2 "immediate_operand" "i")))]
  11342. +   "(! TARGET_68020 && GET_CODE (operands[2]) == CONST_INT
  11343. +     && INTVAL (operands[2]) > 16 && INTVAL (operands[2]) <= 24)"
  11344. +   "*
  11345. + {
  11346. +   CC_STATUS_INIT;
  11347. +   operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 16);
  11348. +   return \"asl%.w %2,%0\;swap %0\;clr%.w %0\";
  11349. + }")
  11350. + (define_insn "ashlsi3"
  11351. +   [(set (match_operand:SI 0 "register_operand" "=d")
  11352. +     (ashift:SI (match_operand:SI 1 "register_operand" "0")
  11353. +            (match_operand:SI 2 "general_operand" "dI")))]
  11354. +   ""
  11355. +   "*
  11356. + {
  11357. +   if (operands[2] == const1_rtx)
  11358. +     return \"add%.l %0,%0\";
  11359. +   return \"asl%.l %2,%0\";
  11360. + }")
  11361. + (define_insn "ashlhi3"
  11362. +   [(set (match_operand:HI 0 "register_operand" "=d")
  11363. +     (ashift:HI (match_operand:HI 1 "register_operand" "0")
  11364. +            (match_operand:HI 2 "general_operand" "dI")))]
  11365. +   ""
  11366. +   "asl%.w %2,%0")
  11367. + (define_insn ""
  11368. +   [(set (strict_low_part (match_operand:HI 0 "register_operand" "+d"))
  11369. +     (ashift:HI (match_dup 0)
  11370. +            (match_operand:HI 1 "general_operand" "dI")))]
  11371. +   ""
  11372. +   "asl%.w %1,%0")
  11373. + (define_insn "ashlqi3"
  11374. +   [(set (match_operand:QI 0 "register_operand" "=d")
  11375. +     (ashift:QI (match_operand:QI 1 "register_operand" "0")
  11376. +            (match_operand:QI 2 "general_operand" "dI")))]
  11377. +   ""
  11378. +   "asl%.b %2,%0")
  11379. + (define_insn ""
  11380. +   [(set (strict_low_part (match_operand:QI 0 "register_operand" "+d"))
  11381. +     (ashift:QI (match_dup 0)
  11382. +            (match_operand:QI 1 "general_operand" "dI")))]
  11383. +   ""
  11384. +   "asl%.b %1,%0")
  11385. + ;; On all 68k models, this makes faster code in a special case.
  11386. + (define_insn ""
  11387. +   [(set (match_operand:SI 0 "register_operand" "=d")
  11388. +     (ashiftrt:SI (match_operand:SI 1 "register_operand" "0")
  11389. +              (match_operand:SI 2 "immediate_operand" "i")))]
  11390. +   "(GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 16)" 
  11391. +   "swap %0\;ext%.l %0")
  11392. + ;; On the 68000, this makes faster code in a special case.
  11393. + (define_insn ""
  11394. +   [(set (match_operand:SI 0 "register_operand" "=d")
  11395. +     (ashiftrt:SI (match_operand:SI 1 "register_operand" "0")
  11396. +              (match_operand:SI 2 "immediate_operand" "i")))]
  11397. +   "(! TARGET_68020 && GET_CODE (operands[2]) == CONST_INT
  11398. +     && INTVAL (operands[2]) > 16 && INTVAL (operands[2]) <= 24)"
  11399. +   "*
  11400. + {
  11401. +   operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 16);
  11402. +   return \"swap %0\;asr%.w %2,%0\;ext%.l %0\";
  11403. + }")
  11404. + (define_insn "ashrsi3"
  11405. +   [(set (match_operand:SI 0 "register_operand" "=d")
  11406. +     (ashiftrt:SI (match_operand:SI 1 "register_operand" "0")
  11407. +              (match_operand:SI 2 "general_operand" "dI")))]
  11408. +   ""
  11409. +   "*
  11410. + {
  11411. +   return \"asr%.l %2,%0\";
  11412. + }")
  11413. + (define_insn "ashrhi3"
  11414. +   [(set (match_operand:HI 0 "register_operand" "=d")
  11415. +     (ashiftrt:HI (match_operand:HI 1 "register_operand" "0")
  11416. +              (match_operand:HI 2 "general_operand" "dI")))]
  11417. +   ""
  11418. +   "asr%.w %2,%0")
  11419. + (define_insn ""
  11420. +   [(set (strict_low_part (match_operand:HI 0 "register_operand" "+d"))
  11421. +     (ashiftrt:HI (match_dup 0)
  11422. +              (match_operand:HI 1 "general_operand" "dI")))]
  11423. +   ""
  11424. +   "asr%.w %1,%0")
  11425. + (define_insn "ashrqi3"
  11426. +   [(set (match_operand:QI 0 "register_operand" "=d")
  11427. +     (ashiftrt:QI (match_operand:QI 1 "register_operand" "0")
  11428. +              (match_operand:QI 2 "general_operand" "dI")))]
  11429. +   ""
  11430. +   "asr%.b %2,%0")
  11431. + (define_insn ""
  11432. +   [(set (strict_low_part (match_operand:QI 0 "register_operand" "+d"))
  11433. +     (ashiftrt:QI (match_dup 0)
  11434. +              (match_operand:QI 1 "general_operand" "dI")))]
  11435. +   ""
  11436. +   "asr%.b %1,%0")
  11437. + ;; logical shift instructions
  11438. + ;; On all 68k models, this makes faster code in a special case.
  11439. + (define_insn ""
  11440. +   [(set (match_operand:SI 0 "register_operand" "=d")
  11441. +     (lshift:SI (match_operand:SI 1 "register_operand" "0")
  11442. +            (match_operand:SI 2 "immediate_operand" "i")))]
  11443. +   "(GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 16)"
  11444. +   "*
  11445. + {
  11446. +   CC_STATUS_INIT;
  11447. +   return \"swap %0\;clr%.w %0\";
  11448. + }")
  11449. + ;; On the 68000, this makes faster code in a special case.
  11450. + (define_insn ""
  11451. +   [(set (match_operand:SI 0 "register_operand" "=d")
  11452. +     (lshift:SI (match_operand:SI 1 "register_operand" "0")
  11453. +            (match_operand:SI 2 "immediate_operand" "i")))]
  11454. +   "(! TARGET_68020 && GET_CODE (operands[2]) == CONST_INT
  11455. +     && INTVAL (operands[2]) > 16 && INTVAL (operands[2]) <= 24)"
  11456. +   "*
  11457. + {
  11458. +   CC_STATUS_INIT;
  11459. +   operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 16);
  11460. +   return \"lsl%.w %2,%0\;swap %0\;clr%.w %0\";
  11461. + }")
  11462. + (define_insn "lshlsi3"
  11463. +   [(set (match_operand:SI 0 "register_operand" "=d")
  11464. +     (lshift:SI (match_operand:SI 1 "register_operand" "0")
  11465. +            (match_operand:SI 2 "general_operand" "dI")))]
  11466. +   ""
  11467. +   "*
  11468. + {
  11469. +   if (operands[2] == const1_rtx)
  11470. +     return \"add%.l %0,%0\";
  11471. +   return \"lsl%.l %2,%0\";
  11472. + }")
  11473. + (define_insn "lshlhi3"
  11474. +   [(set (match_operand:HI 0 "register_operand" "=d")
  11475. +     (lshift:HI (match_operand:HI 1 "register_operand" "0")
  11476. +            (match_operand:HI 2 "general_operand" "dI")))]
  11477. +   ""
  11478. +   "lsl%.w %2,%0")
  11479. + (define_insn ""
  11480. +   [(set (strict_low_part (match_operand:HI 0 "register_operand" "+d"))
  11481. +     (lshift:HI (match_dup 0)
  11482. +            (match_operand:HI 1 "general_operand" "dI")))]
  11483. +   ""
  11484. +   "lsl%.w %1,%0")
  11485. + (define_insn "lshlqi3"
  11486. +   [(set (match_operand:QI 0 "register_operand" "=d")
  11487. +     (lshift:QI (match_operand:QI 1 "register_operand" "0")
  11488. +            (match_operand:QI 2 "general_operand" "dI")))]
  11489. +   ""
  11490. +   "lsl%.b %2,%0")
  11491. + (define_insn ""
  11492. +   [(set (strict_low_part (match_operand:QI 0 "register_operand" "+d"))
  11493. +     (lshift:QI (match_dup 0)
  11494. +            (match_operand:QI 1 "general_operand" "dI")))]
  11495. +   ""
  11496. +   "lsl%.b %1,%0")
  11497. + ;; On all 68k models, this makes faster code in a special case.
  11498. + (define_insn ""
  11499. +   [(set (match_operand:SI 0 "register_operand" "=d")
  11500. +     (lshiftrt:SI (match_operand:SI 1 "register_operand" "0")
  11501. +              (match_operand:SI 2 "immediate_operand" "i")))]
  11502. +   "(GET_CODE (operands[2]) == CONST_INT && INTVAL (operands[2]) == 16)" 
  11503. +   "*
  11504. + {
  11505. +   CC_STATUS_INIT;
  11506. +   return \"clr%.w %0\;swap %0\";
  11507. + }")
  11508. + ;; On the 68000, this makes faster code in a special case.
  11509. + (define_insn ""
  11510. +   [(set (match_operand:SI 0 "register_operand" "=d")
  11511. +     (lshiftrt:SI (match_operand:SI 1 "register_operand" "0")
  11512. +              (match_operand:SI 2 "immediate_operand" "i")))]
  11513. +   "(! TARGET_68020 && GET_CODE (operands[2]) == CONST_INT
  11514. +     && INTVAL (operands[2]) > 16 && INTVAL (operands[2]) <= 24)"
  11515. +   "*
  11516. + {
  11517. +   /* I think lsr%.w sets the CC properly.  */
  11518. +   operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) - 16);
  11519. +   return \"clr%.w %0\;swap %0\;lsr%.w %2,%0\";
  11520. + }")
  11521. + (define_insn "lshrsi3"
  11522. +   [(set (match_operand:SI 0 "register_operand" "=d")
  11523. +     (lshiftrt:SI (match_operand:SI 1 "register_operand" "0")
  11524. +              (match_operand:SI 2 "general_operand" "dI")))]
  11525. +   ""
  11526. +   "*
  11527. + {
  11528. +   return \"lsr%.l %2,%0\";
  11529. + }")
  11530. + (define_insn "lshrhi3"
  11531. +   [(set (match_operand:HI 0 "register_operand" "=d")
  11532. +     (lshiftrt:HI (match_operand:HI 1 "register_operand" "0")
  11533. +              (match_operand:HI 2 "general_operand" "dI")))]
  11534. +   ""
  11535. +   "lsr%.w %2,%0")
  11536. + (define_insn ""
  11537. +   [(set (strict_low_part (match_operand:HI 0 "register_operand" "+d"))
  11538. +     (lshiftrt:HI (match_dup 0)
  11539. +              (match_operand:HI 1 "general_operand" "dI")))]
  11540. +   ""
  11541. +   "lsr%.w %1,%0")
  11542. + (define_insn "lshrqi3"
  11543. +   [(set (match_operand:QI 0 "register_operand" "=d")
  11544. +     (lshiftrt:QI (match_operand:QI 1 "register_operand" "0")
  11545. +              (match_operand:QI 2 "general_operand" "dI")))]
  11546. +   ""
  11547. +   "lsr%.b %2,%0")
  11548. + (define_insn ""
  11549. +   [(set (strict_low_part (match_operand:QI 0 "register_operand" "+d"))
  11550. +     (lshiftrt:QI (match_dup 0)
  11551. +              (match_operand:QI 1 "general_operand" "dI")))]
  11552. +   ""
  11553. +   "lsr%.b %1,%0")
  11554. + ;; rotate instructions
  11555. + (define_insn "rotlsi3"
  11556. +   [(set (match_operand:SI 0 "register_operand" "=d")
  11557. +     (rotate:SI (match_operand:SI 1 "register_operand" "0")
  11558. +            (match_operand:SI 2 "general_operand" "dI")))]
  11559. +   ""
  11560. +   "rol%.l %2,%0")
  11561. + (define_insn "rotlhi3"
  11562. +   [(set (match_operand:HI 0 "register_operand" "=d")
  11563. +     (rotate:HI (match_operand:HI 1 "register_operand" "0")
  11564. +            (match_operand:HI 2 "general_operand" "dI")))]
  11565. +   ""
  11566. +   "rol%.w %2,%0")
  11567. + (define_insn ""
  11568. +   [(set (strict_low_part (match_operand:HI 0 "register_operand" "+d"))
  11569. +     (rotate:HI (match_dup 0)
  11570. +            (match_operand:HI 1 "general_operand" "dI")))]
  11571. +   ""
  11572. +   "rol%.w %1,%0")
  11573. + (define_insn "rotlqi3"
  11574. +   [(set (match_operand:QI 0 "register_operand" "=d")
  11575. +     (rotate:QI (match_operand:QI 1 "register_operand" "0")
  11576. +            (match_operand:QI 2 "general_operand" "dI")))]
  11577. +   ""
  11578. +   "rol%.b %2,%0")
  11579. + (define_insn ""
  11580. +   [(set (strict_low_part (match_operand:QI 0 "register_operand" "+d"))
  11581. +     (rotate:QI (match_dup 0)
  11582. +            (match_operand:QI 1 "general_operand" "dI")))]
  11583. +   ""
  11584. +   "rol%.b %1,%0")
  11585. + (define_insn "rotrsi3"
  11586. +   [(set (match_operand:SI 0 "register_operand" "=d")
  11587. +     (rotatert:SI (match_operand:SI 1 "register_operand" "0")
  11588. +              (match_operand:SI 2 "general_operand" "dI")))]
  11589. +   ""
  11590. +   "ror%.l %2,%0")
  11591. + (define_insn "rotrhi3"
  11592. +   [(set (match_operand:HI 0 "register_operand" "=d")
  11593. +     (rotatert:HI (match_operand:HI 1 "register_operand" "0")
  11594. +              (match_operand:HI 2 "general_operand" "dI")))]
  11595. +   ""
  11596. +   "ror%.w %2,%0")
  11597. + (define_insn ""
  11598. +   [(set (strict_low_part (match_operand:HI 0 "register_operand" "+d"))
  11599. +     (rotatert:HI (match_dup 0)
  11600. +              (match_operand:HI 1 "general_operand" "dI")))]
  11601. +   ""
  11602. +   "ror%.w %1,%0")
  11603. + (define_insn "rotrqi3"
  11604. +   [(set (match_operand:QI 0 "register_operand" "=d")
  11605. +     (rotatert:QI (match_operand:QI 1 "register_operand" "0")
  11606. +              (match_operand:QI 2 "general_operand" "dI")))]
  11607. +   ""
  11608. +   "ror%.b %2,%0")
  11609. + (define_insn ""
  11610. +   [(set (strict_low_part (match_operand:QI 0 "register_operand" "+d"))
  11611. +     (rotatert:QI (match_dup 0)
  11612. +              (match_operand:QI 1 "general_operand" "dI")))]
  11613. +   ""
  11614. +   "ror%.b %1,%0")
  11615. + ;; Special cases of bit-field insns which we should
  11616. + ;; recognize in preference to the general case.
  11617. + ;; These handle aligned 8-bit and 16-bit fields,
  11618. + ;; which can usually be done with move instructions.
  11619. + ;
  11620. + ; Special case for 32-bit field in memory.  This only occurs when 32-bit
  11621. + ; alignment of structure members is specified.
  11622. + ;
  11623. + ; The move is allowed to be odd byte aligned, because that's still faster
  11624. + ; than an odd byte aligned bit field instruction.
  11625. + ;
  11626. + (define_insn ""
  11627. +   [(set (zero_extract:SI (match_operand:QI 0 "nonimmediate_operand" "+o")
  11628. +              (match_operand:SI 1 "immediate_operand" "i")
  11629. +              (match_operand:SI 2 "immediate_operand" "i"))
  11630. +     (match_operand:SI 3 "general_operand" "rmi"))]
  11631. +   "TARGET_68020 && TARGET_BITFIELD
  11632. +    && GET_CODE (operands[1]) == CONST_INT
  11633. +    && (INTVAL (operands[1]) == 32)
  11634. +    && GET_CODE (operands[2]) == CONST_INT
  11635. +    && (INTVAL (operands[2]) % 8) == 0
  11636. +    && ! mode_dependent_address_p (XEXP (operands[0], 0))"
  11637. +   "*
  11638. + {
  11639. +   operands[0]
  11640. +     = adj_offsettable_operand (operands[0], INTVAL (operands[2]) / 8);
  11641. +   return \"move%.l %3,%0\";
  11642. + }")
  11643. + (define_insn ""
  11644. +   [(set (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "+do")
  11645. +              (match_operand:SI 1 "immediate_operand" "i")
  11646. +              (match_operand:SI 2 "immediate_operand" "i"))
  11647. +     (match_operand:SI 3 "general_operand" "d"))]
  11648. +   "TARGET_68020 && TARGET_BITFIELD
  11649. +    && GET_CODE (operands[1]) == CONST_INT
  11650. +    && (INTVAL (operands[1]) == 8 || INTVAL (operands[1]) == 16)
  11651. +    && GET_CODE (operands[2]) == CONST_INT
  11652. +    && INTVAL (operands[2]) % INTVAL (operands[1]) == 0
  11653. +    && (GET_CODE (operands[0]) == REG
  11654. +        || ! mode_dependent_address_p (XEXP (operands[0], 0)))"
  11655. +   "*
  11656. + {
  11657. +   if (REG_P (operands[0]))
  11658. +     {
  11659. +       if (INTVAL (operands[1]) + INTVAL (operands[2]) != 32)
  11660. +         return \"bfins %3,%0{%b2:%b1}\";
  11661. +     }
  11662. +   else
  11663. +     operands[0]
  11664. +       = adj_offsettable_operand (operands[0], INTVAL (operands[2]) / 8);
  11665. +   if (GET_CODE (operands[3]) == MEM)
  11666. +     operands[3] = adj_offsettable_operand (operands[3],
  11667. +                        (32 - INTVAL (operands[1])) / 8);
  11668. +   if (INTVAL (operands[1]) == 8)
  11669. +     return \"move%.b %3,%0\";
  11670. +   return \"move%.w %3,%0\";
  11671. + }")
  11672. + ;
  11673. + ; Special case for 32-bit field in memory.  This only occurs when 32-bit
  11674. + ; alignment of structure members is specified.
  11675. + ;
  11676. + ; The move is allowed to be odd byte aligned, because that's still faster
  11677. + ; than an odd byte aligned bit field instruction.
  11678. + ;
  11679. + (define_insn ""
  11680. +   [(set (match_operand:SI 0 "general_operand" "=rm")
  11681. +     (zero_extract:SI (match_operand:QI 1 "nonimmediate_operand" "o")
  11682. +              (match_operand:SI 2 "immediate_operand" "i")
  11683. +              (match_operand:SI 3 "immediate_operand" "i")))]
  11684. +   "TARGET_68020 && TARGET_BITFIELD
  11685. +    && GET_CODE (operands[2]) == CONST_INT
  11686. +    && (INTVAL (operands[2]) == 32)
  11687. +    && GET_CODE (operands[3]) == CONST_INT
  11688. +    && (INTVAL (operands[3]) % 8) == 0
  11689. +    && ! mode_dependent_address_p (XEXP (operands[1], 0))"
  11690. +   "*
  11691. + {
  11692. +   operands[1]
  11693. +     = adj_offsettable_operand (operands[1], INTVAL (operands[3]) / 8);
  11694. +   return \"move%.l %1,%0\";
  11695. + }")
  11696. + (define_insn ""
  11697. +   [(set (match_operand:SI 0 "general_operand" "=&d")
  11698. +     (zero_extract:SI (match_operand:SI 1 "nonimmediate_operand" "do")
  11699. +              (match_operand:SI 2 "immediate_operand" "i")
  11700. +              (match_operand:SI 3 "immediate_operand" "i")))]
  11701. +   "TARGET_68020 && TARGET_BITFIELD
  11702. +    && GET_CODE (operands[2]) == CONST_INT
  11703. +    && (INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16)
  11704. +    && GET_CODE (operands[3]) == CONST_INT
  11705. +    && INTVAL (operands[3]) % INTVAL (operands[2]) == 0
  11706. +    && (GET_CODE (operands[1]) == REG
  11707. +        || ! mode_dependent_address_p (XEXP (operands[1], 0)))"
  11708. +   "*
  11709. + {
  11710. +   cc_status.flags |= CC_NOT_NEGATIVE;
  11711. +   if (REG_P (operands[1]))
  11712. +     {
  11713. +       if (INTVAL (operands[2]) + INTVAL (operands[3]) != 32)
  11714. +     return \"bfextu %1{%b3:%b2},%0\";
  11715. +     }
  11716. +   else
  11717. +     operands[1]
  11718. +       = adj_offsettable_operand (operands[1], INTVAL (operands[3]) / 8);
  11719. +   output_asm_insn (\"clr%.l %0\", operands);
  11720. +   if (GET_CODE (operands[0]) == MEM)
  11721. +     operands[0] = adj_offsettable_operand (operands[0],
  11722. +                        (32 - INTVAL (operands[1])) / 8);
  11723. +   if (INTVAL (operands[2]) == 8)
  11724. +     return \"move%.b %1,%0\";
  11725. +   return \"move%.w %1,%0\";
  11726. + }")
  11727. + ;
  11728. + ; Special case for 32-bit field in memory.  This only occurs when 32-bit
  11729. + ; alignment of structure members is specified.
  11730. + ;
  11731. + ; The move is allowed to be odd byte aligned, because that's still faster
  11732. + ; than an odd byte aligned bit field instruction.
  11733. + ;
  11734. + (define_insn ""
  11735. +   [(set (match_operand:SI 0 "general_operand" "=rm")
  11736. +     (sign_extract:SI (match_operand:QI 1 "nonimmediate_operand" "o")
  11737. +              (match_operand:SI 2 "immediate_operand" "i")
  11738. +              (match_operand:SI 3 "immediate_operand" "i")))]
  11739. +   "TARGET_68020 && TARGET_BITFIELD
  11740. +    && GET_CODE (operands[2]) == CONST_INT
  11741. +    && (INTVAL (operands[2]) == 32)
  11742. +    && GET_CODE (operands[3]) == CONST_INT
  11743. +    && (INTVAL (operands[3]) % 8) == 0
  11744. +    && ! mode_dependent_address_p (XEXP (operands[1], 0))"
  11745. +   "*
  11746. + {
  11747. +   operands[1]
  11748. +     = adj_offsettable_operand (operands[1], INTVAL (operands[3]) / 8);
  11749. +   return \"move%.l %1,%0\";
  11750. + }")
  11751. + (define_insn ""
  11752. +   [(set (match_operand:SI 0 "general_operand" "=d")
  11753. +     (sign_extract:SI (match_operand:SI 1 "nonimmediate_operand" "do")
  11754. +              (match_operand:SI 2 "immediate_operand" "i")
  11755. +              (match_operand:SI 3 "immediate_operand" "i")))]
  11756. +   "TARGET_68020 && TARGET_BITFIELD
  11757. +    && GET_CODE (operands[2]) == CONST_INT
  11758. +    && (INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16)
  11759. +    && GET_CODE (operands[3]) == CONST_INT
  11760. +    && INTVAL (operands[3]) % INTVAL (operands[2]) == 0
  11761. +    && (GET_CODE (operands[1]) == REG
  11762. +        || ! mode_dependent_address_p (XEXP (operands[1], 0)))"
  11763. +   "*
  11764. + {
  11765. +   if (REG_P (operands[1]))
  11766. +     {
  11767. +       if (INTVAL (operands[2]) + INTVAL (operands[3]) != 32)
  11768. +     return \"bfexts %1{%b3:%b2},%0\";
  11769. +     }
  11770. +   else
  11771. +     operands[1]
  11772. +       = adj_offsettable_operand (operands[1], INTVAL (operands[3]) / 8);
  11773. +   if (INTVAL (operands[2]) == 8)
  11774. +     return \"move%.b %1,%0\;extb%.l %0\";
  11775. +   return \"move%.w %1,%0\;ext%.l %0\";
  11776. + }")
  11777. + ;; Bit field instructions, general cases.
  11778. + ;; "o,d" constraint causes a nonoffsettable memref to match the "o"
  11779. + ;; so that its address is reloaded.
  11780. + (define_insn "extv"
  11781. +   [(set (match_operand:SI 0 "general_operand" "=d,d")
  11782. +     (sign_extract:SI (match_operand:QI 1 "nonimmediate_operand" "o,d")
  11783. +              (match_operand:SI 2 "general_operand" "di,di")
  11784. +              (match_operand:SI 3 "general_operand" "di,di")))]
  11785. +   "TARGET_68020 && TARGET_BITFIELD"
  11786. +   "bfexts %1{%b3:%b2},%0")
  11787. + (define_insn "extzv"
  11788. +   [(set (match_operand:SI 0 "general_operand" "=d,d")
  11789. +     (zero_extract:SI (match_operand:QI 1 "nonimmediate_operand" "o,d")
  11790. +              (match_operand:SI 2 "general_operand" "di,di")
  11791. +              (match_operand:SI 3 "general_operand" "di,di")))]
  11792. +   "TARGET_68020 && TARGET_BITFIELD"
  11793. +   "*
  11794. + {
  11795. +   if (GET_CODE (operands[2]) == CONST_INT)
  11796. +     {
  11797. +       if (INTVAL (operands[2]) != 32)
  11798. +     cc_status.flags |= CC_NOT_NEGATIVE;
  11799. +     }
  11800. +   else
  11801. +     {
  11802. +       CC_STATUS_INIT;
  11803. +     }
  11804. +   return \"bfextu %1{%b3:%b2},%0\";
  11805. + }")
  11806. + (define_insn ""
  11807. +   [(set (zero_extract:SI (match_operand:QI 0 "nonimmediate_operand" "+o,d")
  11808. +              (match_operand:SI 1 "general_operand" "di,di")
  11809. +              (match_operand:SI 2 "general_operand" "di,di"))
  11810. +         (xor:SI (zero_extract:SI (match_dup 0) (match_dup 1) (match_dup 2))
  11811. +         (match_operand 3 "immediate_operand" "i,i")))]
  11812. +   "TARGET_68020 && TARGET_BITFIELD
  11813. +    && GET_CODE (operands[3]) == CONST_INT
  11814. +    && (INTVAL (operands[3]) == -1
  11815. +        || (GET_CODE (operands[1]) == CONST_INT
  11816. +            && (~ INTVAL (operands[3]) & ((1 << INTVAL (operands[1]))- 1)) == 0))"
  11817. +   "*
  11818. + {
  11819. +   CC_STATUS_INIT;
  11820. +   return \"bfchg %0{%b2:%b1}\";
  11821. + }")
  11822. + (define_insn ""
  11823. +   [(set (zero_extract:SI (match_operand:QI 0 "nonimmediate_operand" "+o,d")
  11824. +              (match_operand:SI 1 "general_operand" "di,di")
  11825. +              (match_operand:SI 2 "general_operand" "di,di"))
  11826. +     (const_int 0))]
  11827. +   "TARGET_68020 && TARGET_BITFIELD"
  11828. +   "*
  11829. + {
  11830. +   CC_STATUS_INIT;
  11831. +   return \"bfclr %0{%b2:%b1}\";
  11832. + }")
  11833. + (define_insn ""
  11834. +   [(set (zero_extract:SI (match_operand:QI 0 "nonimmediate_operand" "+o,d")
  11835. +              (match_operand:SI 1 "general_operand" "di,di")
  11836. +              (match_operand:SI 2 "general_operand" "di,di"))
  11837. +     (const_int -1))]
  11838. +   "TARGET_68020 && TARGET_BITFIELD"
  11839. +   "*
  11840. + {
  11841. +   CC_STATUS_INIT;
  11842. +   return \"bfset %0{%b2:%b1}\";
  11843. + }")
  11844. + (define_insn "insv"
  11845. +   [(set (zero_extract:SI (match_operand:QI 0 "nonimmediate_operand" "+o,d")
  11846. +              (match_operand:SI 1 "general_operand" "di,di")
  11847. +              (match_operand:SI 2 "general_operand" "di,di"))
  11848. +     (match_operand:SI 3 "general_operand" "d,d"))]
  11849. +   "TARGET_68020 && TARGET_BITFIELD"
  11850. +   "bfins %3,%0{%b2:%b1}")
  11851. + ;; Now recognize bit field insns that operate on registers
  11852. + ;; (or at least were intended to do so).
  11853. + (define_insn ""
  11854. +   [(set (match_operand:SI 0 "general_operand" "=d")
  11855. +     (sign_extract:SI (match_operand:SI 1 "nonimmediate_operand" "d")
  11856. +              (match_operand:SI 2 "general_operand" "di")
  11857. +              (match_operand:SI 3 "general_operand" "di")))]
  11858. +   "TARGET_68020 && TARGET_BITFIELD"
  11859. +   "bfexts %1{%b3:%b2},%0")
  11860. + (define_insn ""
  11861. +   [(set (match_operand:SI 0 "general_operand" "=d")
  11862. +     (zero_extract:SI (match_operand:SI 1 "nonimmediate_operand" "d")
  11863. +              (match_operand:SI 2 "general_operand" "di")
  11864. +              (match_operand:SI 3 "general_operand" "di")))]
  11865. +   "TARGET_68020 && TARGET_BITFIELD"
  11866. +   "*
  11867. + {
  11868. +   if (GET_CODE (operands[2]) == CONST_INT)
  11869. +     {
  11870. +       if (INTVAL (operands[2]) != 32)
  11871. +     cc_status.flags |= CC_NOT_NEGATIVE;
  11872. +     }
  11873. +   else
  11874. +     {
  11875. +       CC_STATUS_INIT;
  11876. +     }
  11877. +   return \"bfextu %1{%b3:%b2},%0\";
  11878. + }")
  11879. + (define_insn ""
  11880. +   [(set (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "+d")
  11881. +              (match_operand:SI 1 "general_operand" "di")
  11882. +              (match_operand:SI 2 "general_operand" "di"))
  11883. +     (const_int 0))]
  11884. +   "TARGET_68020 && TARGET_BITFIELD"
  11885. +   "*
  11886. + {
  11887. +   CC_STATUS_INIT;
  11888. +   return \"bfclr %0{%b2:%b1}\";
  11889. + }")
  11890. + (define_insn ""
  11891. +   [(set (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "+d")
  11892. +              (match_operand:SI 1 "general_operand" "di")
  11893. +              (match_operand:SI 2 "general_operand" "di"))
  11894. +     (const_int -1))]
  11895. +   "TARGET_68020 && TARGET_BITFIELD"
  11896. +   "*
  11897. + {
  11898. +   CC_STATUS_INIT;
  11899. +   return \"bfset %0{%b2:%b1}\";
  11900. + }")
  11901. + (define_insn ""
  11902. +   [(set (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "+d")
  11903. +              (match_operand:SI 1 "general_operand" "di")
  11904. +              (match_operand:SI 2 "general_operand" "di"))
  11905. +     (match_operand:SI 3 "general_operand" "d"))]
  11906. +   "TARGET_68020 && TARGET_BITFIELD"
  11907. +   "*
  11908. + {
  11909. + #if 0
  11910. +   /* These special cases are now recognized by a specific pattern.  */
  11911. +   if (GET_CODE (operands[1]) == CONST_INT && GET_CODE (operands[2]) == CONST_INT
  11912. +       && INTVAL (operands[1]) == 16 && INTVAL (operands[2]) == 16)
  11913. +     return \"move%.w %3,%0\";
  11914. +   if (GET_CODE (operands[1]) == CONST_INT && GET_CODE (operands[2]) == CONST_INT
  11915. +       && INTVAL (operands[1]) == 24 && INTVAL (operands[2]) == 8)
  11916. +     return \"move%.b %3,%0\";
  11917. + #endif
  11918. +   return \"bfins %3,%0{%b2:%b1}\";
  11919. + }")
  11920. + ;; Special patterns for optimizing bit-field instructions.
  11921. + (define_insn ""
  11922. +   [(set (cc0)
  11923. +     (zero_extract:SI (match_operand:QI 0 "memory_operand" "o")
  11924. +              (match_operand:SI 1 "general_operand" "di")
  11925. +              (match_operand:SI 2 "general_operand" "di")))]
  11926. +   "TARGET_68020 && TARGET_BITFIELD
  11927. +    && GET_CODE (operands[1]) == CONST_INT"
  11928. +   "*
  11929. + {
  11930. +   if (operands[1] == const1_rtx
  11931. +       && GET_CODE (operands[2]) == CONST_INT)
  11932. +     {    
  11933. +       int width = GET_CODE (operands[0]) == REG ? 31 : 7;
  11934. +       return output_btst (operands,
  11935. +               gen_rtx (CONST_INT, VOIDmode,
  11936. +                    width - INTVAL (operands[2])),
  11937. +               operands[0],
  11938. +               insn, 1000);
  11939. +       /* Pass 1000 as SIGNPOS argument so that btst will
  11940. +          not think we are testing the sign bit for an `and'
  11941. +      and assume that nonzero implies a negative result.  */
  11942. +     }
  11943. +   if (INTVAL (operands[1]) != 32)
  11944. +     cc_status.flags = CC_NOT_NEGATIVE;
  11945. +   return \"bftst %0{%b2:%b1}\";
  11946. + }")
  11947. +   
  11948. + ;;; now handle the register cases
  11949. + (define_insn ""
  11950. +   [(set (cc0)
  11951. +     (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "d")
  11952. +              (match_operand:SI 1 "general_operand" "di")
  11953. +              (match_operand:SI 2 "general_operand" "di")))]
  11954. +   "TARGET_68020 && TARGET_BITFIELD
  11955. +    && GET_CODE (operands[1]) == CONST_INT"
  11956. +   "*
  11957. + {
  11958. +   if (operands[1] == const1_rtx
  11959. +       && GET_CODE (operands[2]) == CONST_INT)
  11960. +     {    
  11961. +       int width = GET_CODE (operands[0]) == REG ? 31 : 7;
  11962. +       return output_btst (operands,
  11963. +               gen_rtx (CONST_INT, VOIDmode,
  11964. +                    width - INTVAL (operands[2])),
  11965. +               operands[0],
  11966. +               insn, 1000);
  11967. +       /* Pass 1000 as SIGNPOS argument so that btst will
  11968. +          not think we are testing the sign bit for an `and'
  11969. +      and assume that nonzero implies a negative result.  */
  11970. +     }
  11971. +   if (INTVAL (operands[1]) != 32)
  11972. +     cc_status.flags = CC_NOT_NEGATIVE;
  11973. +   return \"bftst %0{%b2:%b1}\";
  11974. + }")
  11975. + (define_insn "seq"
  11976. +   [(set (match_operand:QI 0 "general_operand" "=d")
  11977. +     (eq:QI (cc0) (const_int 0)))]
  11978. +   ""
  11979. +   "*
  11980. +   cc_status = cc_prev_status;
  11981. +   OUTPUT_JUMP (\"seq %0\", \"fseq %0\", \"seq %0\");
  11982. + ")
  11983. + (define_insn "sne"
  11984. +   [(set (match_operand:QI 0 "general_operand" "=d")
  11985. +     (ne:QI (cc0) (const_int 0)))]
  11986. +   ""
  11987. +   "*
  11988. +   cc_status = cc_prev_status;
  11989. +   OUTPUT_JUMP (\"sne %0\", \"fsne %0\", \"sne %0\");
  11990. + ")
  11991. + (define_insn "sgt"
  11992. +   [(set (match_operand:QI 0 "general_operand" "=d")
  11993. +     (gt:QI (cc0) (const_int 0)))]
  11994. +   ""
  11995. +   "*
  11996. +   cc_status = cc_prev_status;
  11997. +   OUTPUT_JUMP (\"sgt %0\", \"fsgt %0\", 0);
  11998. + ")
  11999. + (define_insn "sgtu"
  12000. +   [(set (match_operand:QI 0 "general_operand" "=d")
  12001. +     (gtu:QI (cc0) (const_int 0)))]
  12002. +   ""
  12003. +   "* cc_status = cc_prev_status;
  12004. +      return \"shi %0\"; ")
  12005. + (define_insn "slt"
  12006. +   [(set (match_operand:QI 0 "general_operand" "=d")
  12007. +     (lt:QI (cc0) (const_int 0)))]
  12008. +   ""
  12009. +   "* cc_status = cc_prev_status;
  12010. +      OUTPUT_JUMP (\"slt %0\", \"fslt %0\", \"smi %0\"); ")
  12011. + (define_insn "sltu"
  12012. +   [(set (match_operand:QI 0 "general_operand" "=d")
  12013. +     (ltu:QI (cc0) (const_int 0)))]
  12014. +   ""
  12015. +   "* cc_status = cc_prev_status;
  12016. +      return \"scs %0\"; ")
  12017. + (define_insn "sge"
  12018. +   [(set (match_operand:QI 0 "general_operand" "=d")
  12019. +     (ge:QI (cc0) (const_int 0)))]
  12020. +   ""
  12021. +   "* cc_status = cc_prev_status;
  12022. +      OUTPUT_JUMP (\"sge %0\", \"fsge %0\", \"spl %0\"); ")
  12023. + (define_insn "sgeu"
  12024. +   [(set (match_operand:QI 0 "general_operand" "=d")
  12025. +     (geu:QI (cc0) (const_int 0)))]
  12026. +   ""
  12027. +   "* cc_status = cc_prev_status;
  12028. +      return \"scc %0\"; ")
  12029. + (define_insn "sle"
  12030. +   [(set (match_operand:QI 0 "general_operand" "=d")
  12031. +     (le:QI (cc0) (const_int 0)))]
  12032. +   ""
  12033. +   "*
  12034. +   cc_status = cc_prev_status;
  12035. +   OUTPUT_JUMP (\"sle %0\", \"fsle %0\", 0);
  12036. + ")
  12037. + (define_insn "sleu"
  12038. +   [(set (match_operand:QI 0 "general_operand" "=d")
  12039. +     (leu:QI (cc0) (const_int 0)))]
  12040. +   ""
  12041. +   "* cc_status = cc_prev_status;
  12042. +      return \"sls %0\"; ")
  12043. + ;; Basic conditional jump instructions.
  12044. + (define_insn "beq"
  12045. +   [(set (pc)
  12046. +     (if_then_else (eq (cc0)
  12047. +               (const_int 0))
  12048. +               (label_ref (match_operand 0 "" ""))
  12049. +               (pc)))]
  12050. +   ""
  12051. +   "*
  12052. + {
  12053. + #ifdef MOTOROLA
  12054. +   OUTPUT_JUMP (\"jbeq %l0\", \"fbeq %l0\", \"jbeq %l0\");
  12055. + #else
  12056. +   OUTPUT_JUMP (\"jeq %l0\", \"fjeq %l0\", \"jeq %l0\");
  12057. + #endif
  12058. + }")
  12059. + (define_insn "bne"
  12060. +   [(set (pc)
  12061. +     (if_then_else (ne (cc0)
  12062. +               (const_int 0))
  12063. +               (label_ref (match_operand 0 "" ""))
  12064. +               (pc)))]
  12065. +   ""
  12066. +   "*
  12067. + {
  12068. + #ifdef MOTOROLA
  12069. +   OUTPUT_JUMP (\"jbne %l0\", \"fbne %l0\", \"jbne %l0\");
  12070. + #else
  12071. +   OUTPUT_JUMP (\"jne %l0\", \"fjne %l0\", \"jne %l0\");
  12072. + #endif
  12073. + }")
  12074. + (define_insn "bgt"
  12075. +   [(set (pc)
  12076. +     (if_then_else (gt (cc0)
  12077. +               (const_int 0))
  12078. +               (label_ref (match_operand 0 "" ""))
  12079. +               (pc)))]
  12080. +   ""
  12081. +   "*
  12082. + #ifdef MOTOROLA
  12083. +   OUTPUT_JUMP (\"jbgt %l0\", \"fbgt %l0\", 0);
  12084. + #else
  12085. +   OUTPUT_JUMP (\"jgt %l0\", \"fjgt %l0\", 0);
  12086. + #endif
  12087. + ")
  12088. + (define_insn "bgtu"
  12089. +   [(set (pc)
  12090. +     (if_then_else (gtu (cc0)
  12091. +                (const_int 0))
  12092. +               (label_ref (match_operand 0 "" ""))
  12093. +               (pc)))]
  12094. +   ""
  12095. +   "*
  12096. + #ifdef MOTOROLA
  12097. +   return \"jbhi %l0\";
  12098. + #else
  12099. +   return \"jhi %l0\";
  12100. + #endif
  12101. + ")
  12102. + (define_insn "blt"
  12103. +   [(set (pc)
  12104. +     (if_then_else (lt (cc0)
  12105. +               (const_int 0))
  12106. +               (label_ref (match_operand 0 "" ""))
  12107. +               (pc)))]
  12108. +   ""
  12109. +   "*
  12110. + #ifdef MOTOROLA
  12111. +   OUTPUT_JUMP (\"jblt %l0\", \"fblt %l0\", \"jbmi %l0\");
  12112. + #else
  12113. +   OUTPUT_JUMP (\"jlt %l0\", \"fjlt %l0\", \"jmi %l0\");
  12114. + #endif
  12115. + ")
  12116. + (define_insn "bltu"
  12117. +   [(set (pc)
  12118. +     (if_then_else (ltu (cc0)
  12119. +                (const_int 0))
  12120. +               (label_ref (match_operand 0 "" ""))
  12121. +               (pc)))]
  12122. +   ""
  12123. +   "*
  12124. + #ifdef MOTOROLA
  12125. +   return \"jbcs %l0\";
  12126. + #else
  12127. +   return \"jcs %l0\";
  12128. + #endif
  12129. + ")
  12130. + (define_insn "bge"
  12131. +   [(set (pc)
  12132. +     (if_then_else (ge (cc0)
  12133. +               (const_int 0))
  12134. +               (label_ref (match_operand 0 "" ""))
  12135. +               (pc)))]
  12136. +   ""
  12137. +   "*
  12138. + #ifdef MOTOROLA
  12139. +   OUTPUT_JUMP (\"jbge %l0\", \"fbge %l0\", \"jbpl %l0\");
  12140. + #else
  12141. +   OUTPUT_JUMP (\"jge %l0\", \"fjge %l0\", \"jpl %l0\");
  12142. + #endif
  12143. + ")
  12144. + (define_insn "bgeu"
  12145. +   [(set (pc)
  12146. +     (if_then_else (geu (cc0)
  12147. +                (const_int 0))
  12148. +               (label_ref (match_operand 0 "" ""))
  12149. +               (pc)))]
  12150. +   ""
  12151. +   "*
  12152. + #ifdef MOTOROLA
  12153. +   return \"jbcc %l0\";
  12154. + #else
  12155. +   return \"jcc %l0\";
  12156. + #endif
  12157. + ")
  12158. + (define_insn "ble"
  12159. +   [(set (pc)
  12160. +     (if_then_else (le (cc0)
  12161. +               (const_int 0))
  12162. +               (label_ref (match_operand 0 "" ""))
  12163. +               (pc)))]
  12164. +   ""
  12165. +   "*
  12166. + #ifdef MOTOROLA
  12167. +   OUTPUT_JUMP (\"jble %l0\", \"fble %l0\", 0);
  12168. + #else
  12169. +   OUTPUT_JUMP (\"jle %l0\", \"fjle %l0\", 0);
  12170. + #endif
  12171. + ")
  12172. + (define_insn "bleu"
  12173. +   [(set (pc)
  12174. +     (if_then_else (leu (cc0)
  12175. +                (const_int 0))
  12176. +               (label_ref (match_operand 0 "" ""))
  12177. +               (pc)))]
  12178. +   ""
  12179. +   "*
  12180. + #ifdef MOTOROLA
  12181. +   return \"jbls %l0\";
  12182. + #else
  12183. +   return \"jls %l0\";
  12184. + #endif
  12185. + ")
  12186. + ;; Negated conditional jump instructions.
  12187. + (define_insn ""
  12188. +   [(set (pc)
  12189. +     (if_then_else (eq (cc0)
  12190. +               (const_int 0))
  12191. +               (pc)
  12192. +               (label_ref (match_operand 0 "" ""))))]
  12193. +   ""
  12194. +   "*
  12195. + {
  12196. + #ifdef MOTOROLA
  12197. +   OUTPUT_JUMP (\"jbne %l0\", \"fbne %l0\", \"jbne %l0\");
  12198. + #else
  12199. +   OUTPUT_JUMP (\"jne %l0\", \"fjne %l0\", \"jne %l0\");
  12200. + #endif
  12201. + }")
  12202. + (define_insn ""
  12203. +   [(set (pc)
  12204. +     (if_then_else (ne (cc0)
  12205. +               (const_int 0))
  12206. +               (pc)
  12207. +               (label_ref (match_operand 0 "" ""))))]
  12208. +   ""
  12209. +   "*
  12210. + {
  12211. + #ifdef MOTOROLA
  12212. +   OUTPUT_JUMP (\"jbeq %l0\", \"fbeq %l0\", \"jbeq %l0\");
  12213. + #else
  12214. +   OUTPUT_JUMP (\"jeq %l0\", \"fjeq %l0\", \"jeq %l0\");
  12215. + #endif
  12216. + }")
  12217. + (define_insn ""
  12218. +   [(set (pc)
  12219. +     (if_then_else (gt (cc0)
  12220. +               (const_int 0))
  12221. +               (pc)
  12222. +               (label_ref (match_operand 0 "" ""))))]
  12223. +   ""
  12224. +   "*
  12225. + #ifdef MOTOROLA
  12226. +   OUTPUT_JUMP (\"jble %l0\", \"fbngt %l0\", 0);
  12227. + #else
  12228. +   OUTPUT_JUMP (\"jle %l0\", \"fjngt %l0\", 0);
  12229. + #endif
  12230. + ")
  12231. + (define_insn ""
  12232. +   [(set (pc)
  12233. +     (if_then_else (gtu (cc0)
  12234. +                (const_int 0))
  12235. +               (pc)
  12236. +               (label_ref (match_operand 0 "" ""))))]
  12237. +   ""
  12238. +   "*
  12239. + #ifdef MOTOROLA
  12240. +   return \"jbls %l0\";
  12241. + #else
  12242. +   return \"jls %l0\";
  12243. + #endif
  12244. + ")
  12245. + (define_insn ""
  12246. +   [(set (pc)
  12247. +     (if_then_else (lt (cc0)
  12248. +               (const_int 0))
  12249. +               (pc)
  12250. +               (label_ref (match_operand 0 "" ""))))]
  12251. +   ""
  12252. +   "*
  12253. + #ifdef MOTOROLA
  12254. +   OUTPUT_JUMP (\"jbge %l0\", \"fbnlt %l0\", \"jbpl %l0\");
  12255. + #else
  12256. +   OUTPUT_JUMP (\"jge %l0\", \"fjnlt %l0\", \"jpl %l0\");
  12257. + #endif
  12258. + ")
  12259. + (define_insn ""
  12260. +   [(set (pc)
  12261. +     (if_then_else (ltu (cc0)
  12262. +                (const_int 0))
  12263. +               (pc)
  12264. +               (label_ref (match_operand 0 "" ""))))]
  12265. +   ""
  12266. +   "*
  12267. + #ifdef MOTOROLA
  12268. +   return \"jbcc %l0\";
  12269. + #else
  12270. +   return \"jcc %l0\";
  12271. + #endif
  12272. + ")
  12273. + (define_insn ""
  12274. +   [(set (pc)
  12275. +     (if_then_else (ge (cc0)
  12276. +               (const_int 0))
  12277. +               (pc)
  12278. +               (label_ref (match_operand 0 "" ""))))]
  12279. +   ""
  12280. +   "*
  12281. + #ifdef MOTOROLA
  12282. +   OUTPUT_JUMP (\"jblt %l0\", \"fbnge %l0\", \"jbmi %l0\");
  12283. + #else
  12284. +   OUTPUT_JUMP (\"jlt %l0\", \"fjnge %l0\", \"jmi %l0\");
  12285. + #endif
  12286. + ")
  12287. + (define_insn ""
  12288. +   [(set (pc)
  12289. +     (if_then_else (geu (cc0)
  12290. +                (const_int 0))
  12291. +               (pc)
  12292. +               (label_ref (match_operand 0 "" ""))))]
  12293. +   ""
  12294. +   "*
  12295. + #ifdef MOTOROLA
  12296. +   return \"jbcs %l0\";
  12297. + #else
  12298. +   return \"jcs %l0\";
  12299. + #endif
  12300. + ")
  12301. + (define_insn ""
  12302. +   [(set (pc)
  12303. +     (if_then_else (le (cc0)
  12304. +               (const_int 0))
  12305. +               (pc)
  12306. +               (label_ref (match_operand 0 "" ""))))]
  12307. +   ""
  12308. +   "*
  12309. + #ifdef MOTOROLA
  12310. +   OUTPUT_JUMP (\"jbgt %l0\", \"fbnle %l0\", 0);
  12311. + #else
  12312. +   OUTPUT_JUMP (\"jgt %l0\", \"fjnle %l0\", 0);
  12313. + #endif
  12314. + ")
  12315. + (define_insn ""
  12316. +   [(set (pc)
  12317. +     (if_then_else (leu (cc0)
  12318. +                (const_int 0))
  12319. +               (pc)
  12320. +               (label_ref (match_operand 0 "" ""))))]
  12321. +   ""
  12322. +   "*
  12323. + #ifdef MOTOROLA
  12324. +   return \"jbhi %l0\";
  12325. + #else
  12326. +   return \"jhi %l0\";
  12327. + #endif
  12328. + ")
  12329. + ;; Unconditional and other jump instructions
  12330. + (define_insn "jump"
  12331. +   [(set (pc)
  12332. +     (label_ref (match_operand 0 "" "")))]
  12333. +   ""
  12334. +   "*
  12335. + #ifdef MOTOROLA
  12336. +   return \"jbra %l0\";
  12337. + #else
  12338. +   return \"jra %l0\";
  12339. + #endif
  12340. + ")
  12341. + ;; We support two different ways of handling dispatch tables.
  12342. + ;; The NeXT uses absolute tables, and other machines use relative.
  12343. + ;; This define_expand can generate either kind.
  12344. + (define_expand "tablejump"
  12345. +   [(parallel [(set (pc) (match_operand 0 "" ""))
  12346. +           (use (label_ref (match_operand 1 "" "")))])]
  12347. +   ""
  12348. +   "
  12349. + {
  12350. + #ifdef CASE_VECTOR_PC_RELATIVE
  12351. +     operands[0] = gen_rtx (PLUS, SImode, pc_rtx, operands[0]);
  12352. + #endif
  12353. + }")
  12354. + ;; Jump to variable address from dispatch table of absolute addresses.
  12355. + (define_insn ""
  12356. +   [(set (pc) (match_operand:SI 0 "register_operand" "a"))
  12357. +    (use (label_ref (match_operand 1 "" "")))]
  12358. +   ""
  12359. +   "*
  12360. + #ifdef MOTOROLA
  12361. +   return \"jmp (%0)\";
  12362. + #else
  12363. +   return \"jmp %0@\";
  12364. + #endif
  12365. + ")
  12366. + ;; Jump to variable address from dispatch table of relative addresses.
  12367. + (define_insn ""
  12368. +   [(set (pc)
  12369. +     (plus:SI (pc) (match_operand:HI 0 "register_operand" "r")))
  12370. +    (use (label_ref (match_operand 1 "" "")))]
  12371. +   ""
  12372. +   "*
  12373. + #ifdef ASM_RETURN_CASE_JUMP
  12374. +  ASM_RETURN_CASE_JUMP;
  12375. + #else
  12376. + #ifdef SGS
  12377. + #ifdef ASM_OUTPUT_CASE_LABEL
  12378. +   return \"jmp 6(%%pc,%0.w)\";
  12379. + #else
  12380. + #ifdef CRDS
  12381. +   return \"jmp 2(pc,%0.w)\";
  12382. + #else
  12383. +   return \"jmp 2(%%pc,%0.w)\";
  12384. + #endif  /* end !CRDS */
  12385. + #endif
  12386. + #else /* not SGS */
  12387. + #ifdef MOTOROLA
  12388. +   return \"jmp (2,pc,%0.w)\";
  12389. + #else
  12390. +   return \"jmp pc@(2,%0:w)\";
  12391. + #endif
  12392. + #endif
  12393. + #endif
  12394. + ")
  12395. + ;; Decrement-and-branch insns.
  12396. + (define_insn ""
  12397. +   [(set (pc)
  12398. +     (if_then_else
  12399. +      (ne (match_operand:HI 0 "general_operand" "+g")
  12400. +          (const_int 0))
  12401. +      (label_ref (match_operand 1 "" ""))
  12402. +      (pc)))
  12403. +    (set (match_dup 0)
  12404. +     (plus:HI (match_dup 0)
  12405. +          (const_int -1)))]
  12406. +   ""
  12407. +   "*
  12408. + {
  12409. +   CC_STATUS_INIT;
  12410. +   if (DATA_REG_P (operands[0]))
  12411. +     return \"dbra %0,%l1\";
  12412. +   if (GET_CODE (operands[0]) == MEM)
  12413. +     {
  12414. + #ifdef MOTOROLA
  12415. + #ifdef NO_ADDSUB_Q
  12416. +       return \"sub%.w %#1,%0\;jbcc %l1\";
  12417. + #else
  12418. +       return \"subq%.w %#1,%0\;jbcc %l1\";
  12419. + #endif
  12420. + #else /* not MOTOROLA */
  12421. +       return \"subqw %#1,%0\;jcc %l1\";
  12422. + #endif
  12423. +     }
  12424. + #ifdef MOTOROLA
  12425. + #ifdef SGS_CMP_ORDER
  12426. + #ifdef NO_ADDSUB_Q
  12427. +   return \"sub%.w %#1,%0\;cmp%.w %0,%#-1\;jbne %l1\";
  12428. + #else
  12429. +   return \"subq%.w %#1,%0\;cmp%.w %0,%#-1\;jbne %l1\";
  12430. + #endif
  12431. + #else /* not SGS_CMP_ORDER */
  12432. +   return \"subq%.w %#1,%0\;cmp%.w %#-1,%0\;jbne %l1\";
  12433. + #endif
  12434. + #else /* not MOTOROLA */
  12435. +   return \"subqw %#1,%0\;cmpw %#-1,%0\;jne %l1\";
  12436. + #endif
  12437. + }")
  12438. + (define_insn ""
  12439. +   [(set (pc)
  12440. +     (if_then_else
  12441. +      (ne (match_operand:SI 0 "general_operand" "+g")
  12442. +          (const_int 0))
  12443. +      (label_ref (match_operand 1 "" ""))
  12444. +      (pc)))
  12445. +    (set (match_dup 0)
  12446. +     (plus:SI (match_dup 0)
  12447. +          (const_int -1)))]
  12448. +   ""
  12449. +   "*
  12450. + {
  12451. +   CC_STATUS_INIT;
  12452. + #ifdef MOTOROLA
  12453. + #ifdef NO_ADDSUB_Q
  12454. +   if (DATA_REG_P (operands[0]))
  12455. +     return \"dbra %0,%l1\;clr%.w %0\;sub%.l %#1,%0\;jbcc %l1\";
  12456. +   if (GET_CODE (operands[0]) == MEM)
  12457. +     return \"sub%.l %#1,%0\;jbcc %l1\";
  12458. + #else
  12459. +   if (DATA_REG_P (operands[0]))
  12460. +     return \"dbra %0,%l1\;clr%.w %0\;subq%.l %#1,%0\;jbcc %l1\";
  12461. +   if (GET_CODE (operands[0]) == MEM)
  12462. +     return \"subq%.l %#1,%0\;jbcc %l1\";
  12463. + #endif /* NO_ADDSUB_Q */
  12464. + #ifdef SGS_CMP_ORDER
  12465. + #ifdef NO_ADDSUB_Q
  12466. +   return \"sub.l %#1,%0\;cmp.l %0,%#-1\;jbne %l1\";
  12467. + #else
  12468. +   return \"subq.l %#1,%0\;cmp.l %0,%#-1\;jbne %l1\";
  12469. + #endif
  12470. + #else /* not SGS_CMP_ORDER */
  12471. +   return \"subq.l %#1,%0\;cmp.l %#-1,%0\;jbne %l1\";
  12472. + #endif /* not SGS_CMP_ORDER */
  12473. + #else /* not MOTOROLA */
  12474. +   if (DATA_REG_P (operands[0]))
  12475. +     return \"dbra %0,%l1\;clr%.w %0\;subql %#1,%0\;jcc %l1\";
  12476. +   if (GET_CODE (operands[0]) == MEM)
  12477. +     return \"subql %#1,%0\;jcc %l1\";
  12478. +   return \"subql %#1,%0\;cmpl %#-1,%0\;jne %l1\";
  12479. + #endif /* not MOTOROLA */
  12480. + }")
  12481. + ;; Two dbra patterns that use REG_NOTES info generated by strength_reduce.
  12482. + (define_insn ""
  12483. +   [(set (pc)
  12484. +     (if_then_else
  12485. +       (ge (plus:HI (match_operand:HI 0 "general_operand" "+g")
  12486. +                (const_int -1))
  12487. +           (const_int 0))
  12488. +       (label_ref (match_operand 1 "" ""))
  12489. +       (pc)))
  12490. +    (set (match_dup 0)
  12491. +     (plus:HI (match_dup 0)
  12492. +          (const_int -1)))]
  12493. +   "find_reg_note (insn, REG_NONNEG, 0)"
  12494. +   "*
  12495. + {
  12496. +   CC_STATUS_INIT;
  12497. + #ifdef MOTOROLA
  12498. + #ifdef NO_ADDSUB_Q
  12499. +   if (DATA_REG_P (operands[0]))
  12500. +     return \"dbra %0,%l1\";
  12501. +   if (GET_CODE (operands[0]) == MEM)
  12502. +     return \"sub%.w %#1,%0\;jbcc %l1\";
  12503. + #else
  12504. +   if (DATA_REG_P (operands[0]))
  12505. +     return \"dbra %0,%l1\";
  12506. +   if (GET_CODE (operands[0]) == MEM)
  12507. +     return \"subq%.w %#1,%0\;jbcc %l1\";
  12508. + #endif
  12509. + #ifdef SGS_CMP_ORDER
  12510. + #ifdef NO_ADDSUB_Q
  12511. +   return \"sub.w %#1,%0\;cmp.w %0,%#-1\;jbne %l1\";
  12512. + #else
  12513. +   return \"subq.w %#1,%0\;cmp.w %0,%#-1\;jbne %l1\";
  12514. + #endif
  12515. + #else /* not SGS_CMP_ORDER */
  12516. +   return \"subq.w %#1,%0\;cmp.w %#-1,%0\;jbne %l1\";
  12517. + #endif /* not SGS_CMP_ORDER */
  12518. + #else /* not MOTOROLA */
  12519. +   if (DATA_REG_P (operands[0]))
  12520. +     return \"dbra %0,%l1\";
  12521. +   if (GET_CODE (operands[0]) == MEM)
  12522. +     return \"subqw %#1,%0\;jcc %l1\";
  12523. +   return \"subqw %#1,%0\;cmpw %#-1,%0\;jne %l1\";
  12524. + #endif /* not MOTOROLA */
  12525. + }")
  12526. + (define_insn "decrement_and_branch_until_zero"
  12527. +   [(set (pc)
  12528. +     (if_then_else
  12529. +       (ge (plus:SI (match_operand:SI 0 "general_operand" "+g")
  12530. +                (const_int -1))
  12531. +           (const_int 0))
  12532. +       (label_ref (match_operand 1 "" ""))
  12533. +       (pc)))
  12534. +    (set (match_dup 0)
  12535. +     (plus:SI (match_dup 0)
  12536. +          (const_int -1)))]
  12537. +   "find_reg_note (insn, REG_NONNEG, 0)"
  12538. +   "*
  12539. + {
  12540. +   CC_STATUS_INIT;
  12541. + #ifdef MOTOROLA
  12542. + #ifdef NO_ADDSUB_Q
  12543. +   if (DATA_REG_P (operands[0]))
  12544. +     return \"dbra %0,%l1\;clr%.w %0\;sub%.l %#1,%0\;jbcc %l1\";
  12545. +   if (GET_CODE (operands[0]) == MEM)
  12546. +     return \"sub%.l %#1,%0\;jbcc %l1\";
  12547. + #else
  12548. +   if (DATA_REG_P (operands[0]))
  12549. +     return \"dbra %0,%l1\;clr%.w %0\;subq%.l %#1,%0\;jbcc %l1\";
  12550. +   if (GET_CODE (operands[0]) == MEM)
  12551. +     return \"subq%.l %#1,%0\;jbcc %l1\";
  12552. + #endif
  12553. + #ifdef SGS_CMP_ORDER
  12554. + #ifdef NO_ADDSUB_Q
  12555. +   return \"sub.l %#1,%0\;cmp.l %0,%#-1\;jbne %l1\";
  12556. + #else
  12557. +   return \"subq.l %#1,%0\;cmp.l %0,%#-1\;jbne %l1\";
  12558. + #endif
  12559. + #else /* not SGS_CMP_ORDER */
  12560. +   return \"subq.l %#1,%0\;cmp.l %#-1,%0\;jbne %l1\";
  12561. + #endif /* not SGS_CMP_ORDER */
  12562. + #else /* not MOTOROLA */
  12563. +   if (DATA_REG_P (operands[0]))
  12564. +     return \"dbra %0,%l1\;clr%.w %0\;subql %#1,%0\;jcc %l1\";
  12565. +   if (GET_CODE (operands[0]) == MEM)
  12566. +     return \"subql %#1,%0\;jcc %l1\";
  12567. +   return \"subql %#1,%0\;cmpl %#-1,%0\;jne %l1\";
  12568. + #endif /* not MOTOROLA */
  12569. + }")
  12570. + ;; PIC calls are handled by loading the address of the function into a 
  12571. + ;; register (via movsi), then emitting a register indirect call using
  12572. + ;; the "jsr" function call syntax.
  12573. + ;;
  12574. + ;; It is important to note that the "jsr" syntax is always used for 
  12575. + ;; PIC calls, even on machines in which GCC normally uses the "jbsr"
  12576. + ;; syntax for non-PIC calls.  This keeps at least 1 assembler (Sun)
  12577. + ;; from emitting incorrect code for a PIC call.
  12578. + ;;
  12579. + ;; We have different patterns for PIC calls and non-PIC calls.  The
  12580. + ;; different patterns are only used to choose the right syntax
  12581. + ;; ("jsr" vs "jbsr").
  12582. + ;;
  12583. + ;; On svr4 m68k, PIC stuff is done differently. To be able to support
  12584. + ;; dynamic linker LAZY BINDING, all the procedure calls need to go 
  12585. + ;; through the PLT (Procedure Linkage Table) section in PIC mode. The 
  12586. + ;; svr4 m68k assembler recognizes this syntax: `bsr FUNC@PLTPC' and it 
  12587. + ;; will create the correct relocation entry (R_68K_PLT32) for `FUNC', 
  12588. + ;; that tells the linker editor to create an entry for `FUNC' in PLT
  12589. + ;; section at link time. However, all global objects reference are still
  12590. + ;; done by using `OBJ@GOT'. So, the goal here is to output the function 
  12591. + ;; call operand as `FUNC@PLTPC', but output object operand as `OBJ@GOT'. 
  12592. + ;; We need to have a way to differentiate these two different operands.
  12593. + ;;
  12594. + ;; The strategy I use here is to use SYMBOL_REF_FLAG to differentiate 
  12595. + ;; these two different operands. The macro LEGITIMATE_PIC_OPERAND_P needs
  12596. + ;; to be changed to recognize function calls symbol_ref operand as a legal 
  12597. + ;; PIC operand (by checking whether SYMBOL_REF_FLAG is set). This will 
  12598. + ;; avoid the compiler to load this symbol_ref operand into a register. 
  12599. + ;; Remember, the operand "foo@PLTPC" cannot be called via jsr directly 
  12600. + ;; since the value is a PC relative offset, not a real address.
  12601. + ;;
  12602. + ;; All global objects are treated in the similar way as in SUN3. The only 
  12603. + ;; difference is: on m68k svr4, the reference of such global object needs 
  12604. + ;; to end with a suffix "@GOT" so the assembler and linker know to create
  12605. + ;; an entry for it in GOT (Global Offset Table) section. This is done in 
  12606. + ;; m68k.c.
  12607. + ;; Call subroutine with no return value.
  12608. + (define_expand "call"
  12609. +   [(call (match_operand:QI 0 "memory_operand" "")
  12610. +      (match_operand:SI 1 "general_operand" ""))]
  12611. +   ;; Operand 1 not really used on the m68000.
  12612. +   ""
  12613. +   "
  12614. + {
  12615. +   if (flag_pic && flag_pic < 3 && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)
  12616. + #ifdef MOTOROLA
  12617. +     SYMBOL_REF_FLAG (XEXP (operands[0], 0)) = 1;
  12618. + #else
  12619. +     operands[0] = gen_rtx (MEM, GET_MODE (operands[0]),
  12620. +                force_reg (Pmode, XEXP (operands[0], 0)));
  12621. + #endif
  12622. + }")
  12623. + ;; This is a normal call sequence.
  12624. + (define_insn ""
  12625. +   [(call (match_operand:QI 0 "memory_operand" "o")
  12626. +      (match_operand:SI 1 "general_operand" "g"))]
  12627. +   ;; Operand 1 not really used on the m68000.
  12628. +   "(! flag_pic || flag_pic >= 3)"
  12629. +   "*
  12630. + #ifdef MOTOROLA
  12631. +   return \"jsr %0\";
  12632. + #else
  12633. +   return \"jbsr %0\";
  12634. + #endif
  12635. + ")
  12636. + ;; This is a PIC call sequence.
  12637. + (define_insn ""
  12638. +   [(call (match_operand:QI 0 "memory_operand" "o")
  12639. +      (match_operand:SI 1 "general_operand" "g"))]
  12640. +   ;; Operand 1 not really used on the m68000.
  12641. +   "(flag_pic && flag_pic < 3)"
  12642. +   "*
  12643. + #ifdef HPUX_ASM
  12644. +   return \"bsr %0\";
  12645. + #else
  12646. + #ifdef MOTOROLA
  12647. +   if (GET_CODE (operands[0]) == MEM 
  12648. +       && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)
  12649. +     return \"bsr %0@PLTPC\";
  12650. + #endif
  12651. +   return \"jsr %0\";
  12652. + #endif
  12653. + ")
  12654. + ;; Call subroutine, returning value in operand 0
  12655. + ;; (which must be a hard register).
  12656. + ;; See comments before "call" regarding PIC calls.
  12657. + (define_expand "call_value"
  12658. +   [(set (match_operand 0 "" "")
  12659. +     (call (match_operand:QI 1 "memory_operand" "")
  12660. +      (match_operand:SI 2 "general_operand" "")))]
  12661. +   ;; Operand 2 not really used on the m68000.
  12662. +   ""
  12663. +   "
  12664. + {
  12665. +   if (flag_pic && flag_pic < 3 && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
  12666. + #ifdef MOTOROLA
  12667. +     SYMBOL_REF_FLAG (XEXP (operands[1], 0)) = 1;
  12668. + #else
  12669. +     operands[1] = gen_rtx (MEM, GET_MODE (operands[1]),
  12670. +                force_reg (Pmode, XEXP (operands[1], 0)));
  12671. + #endif
  12672. + }")
  12673. + ;; This is a normal call_value
  12674. + (define_insn ""
  12675. +   [(set (match_operand 0 "" "=rf")
  12676. +     (call (match_operand:QI 1 "memory_operand" "o")
  12677. +           (match_operand:SI 2 "general_operand" "g")))]
  12678. +   ;; Operand 2 not really used on the m68000.
  12679. +   "(! flag_pic || flag_pic >= 3)"
  12680. +   "*
  12681. + #ifdef MOTOROLA
  12682. +   return \"jsr %1\";
  12683. + #else
  12684. +   return \"jbsr %1\";
  12685. + #endif
  12686. + ")
  12687. + ;; This is a PIC call_value
  12688. + (define_insn ""
  12689. +   [(set (match_operand 0 "" "=rf")
  12690. +     (call (match_operand:QI 1 "memory_operand" "o")
  12691. +           (match_operand:SI 2 "general_operand" "g")))]
  12692. +   ;; Operand 2 not really used on the m68000.
  12693. +   "(flag_pic && flag_pic < 3)"
  12694. +   "*
  12695. + #ifdef HPUX_ASM
  12696. +   return \"bsr %1\";
  12697. + #else
  12698. + #ifdef MOTOROLA
  12699. +   if (GET_CODE (operands[1]) == MEM 
  12700. +       && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
  12701. +     return \"bsr %1@PLTPC\";
  12702. + #endif
  12703. +   return \"jsr %1\";
  12704. + #endif
  12705. + ")
  12706. + ;; Call subroutine returning any type.
  12707. + (define_expand "untyped_call"
  12708. +   [(parallel [(call (match_operand 0 "" "")
  12709. +             (const_int 0))
  12710. +           (match_operand 1 "" "")
  12711. +           (match_operand 2 "" "")])]
  12712. +   "NEEDS_UNTYPED_CALL"
  12713. +   "
  12714. + {
  12715. +   int i;
  12716. +   emit_call_insn (gen_call (operands[0], const0_rtx, NULL, const0_rtx));
  12717. +   for (i = 0; i < XVECLEN (operands[2], 0); i++)
  12718. +     {
  12719. +       rtx set = XVECEXP (operands[2], 0, i);
  12720. +       emit_move_insn (SET_DEST (set), SET_SRC (set));
  12721. +     }
  12722. +   /* The optimizer does not know that the call sets the function value
  12723. +      registers we stored in the result block.  We avoid problems by
  12724. +      claiming that all hard registers are used and clobbered at this
  12725. +      point.  */
  12726. +   emit_insn (gen_blockage ());
  12727. +   DONE;
  12728. + }")
  12729. + ;; UNSPEC_VOLATILE is considered to use and clobber all hard registers and
  12730. + ;; all of memory.  This blocks insns from being moved across this point.
  12731. + (define_insn "blockage"
  12732. +   [(unspec_volatile [(const_int 0)] 0)]
  12733. +   ""
  12734. +   "")
  12735. + (define_insn "nop"
  12736. +   [(const_int 0)]
  12737. +   ""
  12738. +   "nop")
  12739. + (define_insn "probe"
  12740. +  [(reg:SI 15)]
  12741. +  "NEED_PROBE"
  12742. +  "*
  12743. + {
  12744. +   operands[0] = gen_rtx (PLUS, SImode, stack_pointer_rtx,
  12745. +              gen_rtx (CONST_INT, VOIDmode, NEED_PROBE));
  12746. +   return \"tstl %a0\";
  12747. + }")
  12748. + ;; Used for frameless functions which save no regs and allocate no locals.
  12749. + (define_insn "return"
  12750. +   [(return)]
  12751. +   "USE_RETURN_INSN"
  12752. +   "*
  12753. + {
  12754. +   if (current_function_pops_args == 0)
  12755. +     return \"rts\";
  12756. +   operands[0] = gen_rtx (CONST_INT, VOIDmode, current_function_pops_args);
  12757. +   return \"rtd %0\";
  12758. + }")
  12759. + (define_insn "indirect_jump"
  12760. +   [(set (pc) (match_operand:SI 0 "address_operand" "p"))]
  12761. +   ""
  12762. +   "jmp %a0")
  12763. + ;; This should not be used unless the add/sub insns can't be.
  12764. + (define_insn ""
  12765. +   [(set (match_operand:SI 0 "general_operand" "=a")
  12766. +     (match_operand:QI 1 "address_operand" "p"))]
  12767. +   ""
  12768. +   "lea %a1,%0")
  12769. + ;; This is the first machine-dependent peephole optimization.
  12770. + ;; It is useful when a floating value is returned from a function call
  12771. + ;; and then is moved into an FP register.
  12772. + ;; But it is mainly intended to test the support for these optimizations.
  12773. + (define_peephole
  12774. +   [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4)))
  12775. +    (set (match_operand:DF 0 "register_operand" "=f")
  12776. +     (match_operand:DF 1 "register_operand" "ad"))]
  12777. +   "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])"
  12778. +   "*
  12779. + {
  12780. +   rtx xoperands[2];
  12781. +   xoperands[1] = gen_rtx (REG, SImode, REGNO (operands[1]) + 1);
  12782. +   output_asm_insn (\"move%.l %1,%@\", xoperands);
  12783. +   output_asm_insn (\"move%.l %1,%-\", operands);
  12784. +   return \"fmove%.d %+,%0\";
  12785. + }
  12786. + ")
  12787. + ;; Optimize a stack-adjust followed by a push of an argument.
  12788. + ;; This is said to happen frequently with -msoft-float
  12789. + ;; when there are consecutive library calls.
  12790. + (define_peephole
  12791. +   [(set (reg:SI 15) (plus:SI (reg:SI 15)
  12792. +                  (match_operand:SI 0 "immediate_operand" "n")))
  12793. +    (set (match_operand:SF 1 "push_operand" "=m")
  12794. +     (match_operand:SF 2 "general_operand" "rmfF"))]
  12795. +   "GET_CODE (operands[0]) == CONST_INT && INTVAL (operands[0]) >= 4
  12796. +    && ! reg_mentioned_p (stack_pointer_rtx, operands[2])"
  12797. +   "*
  12798. + {
  12799. +   if (INTVAL (operands[0]) > 4)
  12800. +     {
  12801. +       rtx xoperands[2];
  12802. +       xoperands[0] = stack_pointer_rtx;
  12803. +       xoperands[1] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[0]) - 4);
  12804. + #ifndef NO_ADDSUB_Q
  12805. +       if (INTVAL (xoperands[1]) <= 8)
  12806. +         output_asm_insn (\"addq%.w %1,%0\", xoperands);
  12807. +       else if (INTVAL (xoperands[1]) <= 16 && TARGET_68020)
  12808. +     {
  12809. +       xoperands[1] = gen_rtx (CONST_INT, VOIDmode, 
  12810. +                   INTVAL (xoperands[1]) - 8);
  12811. +       output_asm_insn (\"addq%.w %#8,%0\;addq%.w %1,%0\", xoperands);
  12812. +     }
  12813. +       else
  12814. + #endif
  12815. +         if (INTVAL (xoperands[1]) <= 0x7FFF)
  12816. +           output_asm_insn (\"add%.w %1,%0\", xoperands);
  12817. +       else
  12818. +         output_asm_insn (\"add%.l %1,%0\", xoperands);
  12819. +     }
  12820. +   if (FP_REG_P (operands[2]))
  12821. +     return \"fmove%.s %2,%@\";
  12822. +   return \"move%.l %2,%@\";
  12823. + }")
  12824. + ;; Speed up stack adjust followed by a fullword fixedpoint push.
  12825. + (define_peephole
  12826. +   [(set (reg:SI 15) (plus:SI (reg:SI 15)
  12827. +                  (match_operand:SI 0 "immediate_operand" "n")))
  12828. +    (set (match_operand:SI 1 "push_operand" "=m")
  12829. +     (match_operand:SI 2 "general_operand" "g"))]
  12830. +   "GET_CODE (operands[0]) == CONST_INT && INTVAL (operands[0]) >= 4
  12831. +    && ! reg_mentioned_p (stack_pointer_rtx, operands[2])"
  12832. +   "*
  12833. + {
  12834. +   if (INTVAL (operands[0]) > 4)
  12835. +     {
  12836. +       rtx xoperands[2];
  12837. +       xoperands[0] = stack_pointer_rtx;
  12838. +       xoperands[1] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[0]) - 4);
  12839. + #ifndef NO_ADDSUB_Q
  12840. +       if (INTVAL (xoperands[1]) <= 8)
  12841. +         output_asm_insn (\"addq%.w %1,%0\", xoperands);
  12842. +       else if (INTVAL (xoperands[1]) <= 16 && TARGET_68020)
  12843. +     {
  12844. +       xoperands[1] = gen_rtx (CONST_INT, VOIDmode, 
  12845. +                   INTVAL (xoperands[1]) - 8);
  12846. +       output_asm_insn (\"addq%.w %#8,%0\;addq%.w %1,%0\", xoperands);
  12847. +     }
  12848. +       else
  12849. + #endif
  12850. +         if (INTVAL (xoperands[1]) <= 0x7FFF)
  12851. +           output_asm_insn (\"add%.w %1,%0\", xoperands);
  12852. +       else
  12853. +         output_asm_insn (\"add%.l %1,%0\", xoperands);
  12854. +     }
  12855. +   if (operands[2] == const0_rtx)
  12856. +     return \"clr%.l %@\";
  12857. +   return \"move%.l %2,%@\";
  12858. + }")
  12859. + ;; Speed up pushing a single byte but leaving four bytes of space.
  12860. + (define_peephole
  12861. +   [(set (mem:QI (pre_dec:SI (reg:SI 15)))
  12862. +     (match_operand:QI 1 "general_operand" "dami"))
  12863. +    (set (reg:SI 15) (minus:SI (reg:SI 15) (const_int 2)))]
  12864. +   "! reg_mentioned_p (stack_pointer_rtx, operands[1])"
  12865. +   "*
  12866. + {
  12867. +   rtx xoperands[4];
  12868. +   if (GET_CODE (operands[1]) == REG)
  12869. +     return \"move%.l %1,%-\";
  12870. +   xoperands[1] = operands[1];
  12871. +   xoperands[2]
  12872. +     = gen_rtx (MEM, QImode,
  12873. +            gen_rtx (PLUS, VOIDmode, stack_pointer_rtx,
  12874. +             gen_rtx (CONST_INT, VOIDmode, 3)));
  12875. +   xoperands[3] = stack_pointer_rtx;
  12876. +   output_asm_insn (\"subq%.w %#4,%3\;move%.b %1,%2\", xoperands);
  12877. +   return \"\";
  12878. + }")
  12879. + (define_peephole
  12880. +   [(set (match_operand:SI 0 "register_operand" "=d")
  12881. +     (const_int 0))
  12882. +    (set (strict_low_part (subreg:HI (match_dup 0) 0))
  12883. +     (match_operand:HI 1 "general_operand" "rmn"))]
  12884. +   "strict_low_part_peephole_ok (HImode, prev_nonnote_insn (insn), operands[0])"
  12885. +   "*
  12886. + {
  12887. +   if (GET_CODE (operands[1]) == CONST_INT)
  12888. +     {
  12889. +       if (operands[1] == const0_rtx
  12890. +       && (DATA_REG_P (operands[0])
  12891. +           || GET_CODE (operands[0]) == MEM)
  12892. +       /* clr insns on 68000 read before writing.
  12893. +          This isn't so on the 68010, but we have no alternative for it.  */
  12894. +       && (TARGET_68020
  12895. +           || !(GET_CODE (operands[0]) == MEM
  12896. +            && MEM_VOLATILE_P (operands[0]))))
  12897. +     return \"clr%.w %0\";
  12898. +     }
  12899. +   return \"move%.w %1,%0\";
  12900. + }")
  12901. + ;; dbCC peepholes
  12902. + ;;
  12903. + ;; Turns
  12904. + ;;   loop:
  12905. + ;;           [ ... ]
  12906. + ;;           jCC label        ; abnormal loop termination
  12907. + ;;           dbra dN, loop    ; normal loop termination
  12908. + ;;
  12909. + ;; Into
  12910. + ;;   loop:
  12911. + ;;           [ ... ]
  12912. + ;;           dbCC dN, loop
  12913. + ;;           jCC label
  12914. + ;;
  12915. + ;; Which moves the jCC condition outside the inner loop for free.
  12916. + ;;
  12917. + (define_peephole
  12918. +   [(set (pc) (if_then_else (match_operator 3 "valid_dbcc_comparison_p"
  12919. +                              [(cc0) (const_int 0)])
  12920. +                            (label_ref (match_operand 2 "" ""))
  12921. +                            (pc)))
  12922. +    (parallel
  12923. +     [(set (pc)
  12924. +       (if_then_else
  12925. +         (ge (plus:HI (match_operand:HI 0 "register_operand" "+d")
  12926. +                  (const_int -1))
  12927. +             (const_int 0))
  12928. +         (label_ref (match_operand 1 "" ""))
  12929. +         (pc)))
  12930. +      (set (match_dup 0)
  12931. +       (plus:HI (match_dup 0)
  12932. +            (const_int -1)))])]
  12933. +   "DATA_REG_P (operands[0])"
  12934. +   "*
  12935. + {
  12936. +   CC_STATUS_INIT;
  12937. +   output_dbcc_and_branch (operands);
  12938. +   return \"\";
  12939. + }")
  12940. + (define_peephole
  12941. +   [(set (pc) (if_then_else (match_operator 3 "valid_dbcc_comparison_p"
  12942. +                              [(cc0) (const_int 0)])
  12943. +                            (label_ref (match_operand 2 "" ""))
  12944. +                            (pc)))
  12945. +    (parallel
  12946. +     [(set (pc)
  12947. +       (if_then_else
  12948. +         (ge (plus:SI (match_operand:SI 0 "register_operand" "+d")
  12949. +                  (const_int -1))
  12950. +             (const_int 0))
  12951. +         (label_ref (match_operand 1 "" ""))
  12952. +         (pc)))
  12953. +      (set (match_dup 0)
  12954. +       (plus:SI (match_dup 0)
  12955. +            (const_int -1)))])]
  12956. +   "DATA_REG_P (operands[0])"
  12957. +   "*
  12958. + {
  12959. +   CC_STATUS_INIT;
  12960. +   output_dbcc_and_branch (operands);
  12961. +   return \"\";
  12962. + }")
  12963. + ;; FPA multiply and add.
  12964. + (define_insn ""
  12965. +   [(set (match_operand:DF 0 "register_operand" "=x,y,y")
  12966. +     (plus:DF (mult:DF (match_operand:DF 1 "general_operand" "%x,dmF,y")
  12967. +               (match_operand:DF 2 "general_operand" "xH,y,y"))
  12968. +          (match_operand:DF 3 "general_operand" "xH,y,dmF")))]
  12969. +    "TARGET_FPA"
  12970. +    "@
  12971. +     fpma%.d %1,%w2,%w3,%0
  12972. +     fpma%.d %x1,%x2,%x3,%0
  12973. +     fpma%.d %x1,%x2,%x3,%0")
  12974. + (define_insn ""
  12975. +   [(set (match_operand:SF 0 "register_operand" "=x,y,y")
  12976. +     (plus:SF (mult:SF (match_operand:SF 1 "general_operand" "%x,ydmF,y")
  12977. +               (match_operand:SF 2 "general_operand" "xH,y,ydmF"))
  12978. +          (match_operand:SF 3 "general_operand" "xH,ydmF,ydmF")))]
  12979. +    "TARGET_FPA"
  12980. +    "@
  12981. +     fpma%.s %1,%w2,%w3,%0
  12982. +     fpma%.s %1,%2,%3,%0
  12983. +     fpma%.s %1,%2,%3,%0")
  12984. + ;; FPA Multiply and subtract
  12985. + (define_insn ""
  12986. +   [(set (match_operand:DF 0 "register_operand" "=x,y,y")
  12987. +     (minus:DF (match_operand:DF 1 "general_operand" "xH,rmF,y")
  12988. +           (mult:DF (match_operand:DF 2 "general_operand" "%xH,y,y")
  12989. +                (match_operand:DF 3 "general_operand" "x,y,rmF"))))]
  12990. +   "TARGET_FPA"
  12991. +   "@
  12992. +    fpms%.d %3,%w2,%w1,%0
  12993. +    fpms%.d %x3,%2,%x1,%0
  12994. +    fpms%.d %x3,%2,%x1,%0")
  12995. + (define_insn ""
  12996. +   [(set (match_operand:SF 0 "register_operand" "=x,y,y")
  12997. +     (minus:SF (match_operand:SF 1 "general_operand" "xH,rmF,yrmF")
  12998. +           (mult:SF (match_operand:SF 2 "general_operand" "%xH,rmF,y")
  12999. +                (match_operand:SF 3 "general_operand" "x,y,yrmF"))))]
  13000. +   "TARGET_FPA"
  13001. +   "@
  13002. +    fpms%.s %3,%w2,%w1,%0
  13003. +    fpms%.s %3,%2,%1,%0
  13004. +    fpms%.s %3,%2,%1,%0")
  13005. + (define_insn ""
  13006. +   [(set (match_operand:DF 0 "register_operand" "=x,y,y")
  13007. +     (minus:DF (mult:DF (match_operand:DF 1 "general_operand" "%xH,y,y")
  13008. +                (match_operand:DF 2 "general_operand" "x,y,rmF"))
  13009. +           (match_operand:DF 3 "general_operand" "xH,rmF,y")))]
  13010. +   "TARGET_FPA"
  13011. +   "@
  13012. +    fpmr%.d %2,%w1,%w3,%0
  13013. +    fpmr%.d %x2,%1,%x3,%0
  13014. +    fpmr%.d %x2,%1,%x3,%0")
  13015. + (define_insn ""
  13016. +   [(set (match_operand:SF 0 "register_operand" "=x,y,y")
  13017. +     (minus:SF (mult:SF (match_operand:SF 1 "general_operand" "%xH,rmF,y")
  13018. +                (match_operand:SF 2 "general_operand" "x,y,yrmF"))
  13019. +           (match_operand:SF 3 "general_operand" "xH,rmF,yrmF")))]
  13020. +   "TARGET_FPA"
  13021. +   "@
  13022. +    fpmr%.s %2,%w1,%w3,%0
  13023. +    fpmr%.s %x2,%1,%x3,%0
  13024. +    fpmr%.s %x2,%1,%x3,%0")
  13025. + ;; FPA Add and multiply
  13026. + (define_insn ""
  13027. +   [(set (match_operand:DF 0 "register_operand" "=x,y,y")
  13028. +     (mult:DF (plus:DF (match_operand:DF 1 "general_operand" "%xH,y,y")
  13029. +               (match_operand:DF 2 "general_operand" "x,y,rmF"))
  13030. +          (match_operand:DF 3 "general_operand" "xH,rmF,y")))]
  13031. +   "TARGET_FPA"
  13032. +   "@
  13033. +    fpam%.d %2,%w1,%w3,%0
  13034. +    fpam%.d %x2,%1,%x3,%0
  13035. +    fpam%.d %x2,%1,%x3,%0")
  13036. + (define_insn ""
  13037. +   [(set (match_operand:SF 0 "register_operand" "=x,y,y")
  13038. +     (mult:SF (plus:SF (match_operand:SF 1 "general_operand" "%xH,rmF,y")
  13039. +               (match_operand:SF 2 "general_operand" "x,y,yrmF"))
  13040. +          (match_operand:SF 3 "general_operand" "xH,rmF,yrmF")))]
  13041. +   "TARGET_FPA"
  13042. +   "@
  13043. +    fpam%.s %2,%w1,%w3,%0
  13044. +    fpam%.s %x2,%1,%x3,%0
  13045. +    fpam%.s %x2,%1,%x3,%0")
  13046. + ;;FPA Subtract and multiply
  13047. + (define_insn ""
  13048. +   [(set (match_operand:DF 0 "register_operand" "=x,y,y")
  13049. +     (mult:DF (minus:DF (match_operand:DF 1 "general_operand" "xH,y,y")
  13050. +                (match_operand:DF 2 "general_operand" "x,y,rmF"))
  13051. +          (match_operand:DF 3 "general_operand" "xH,rmF,y")))]
  13052. +   "TARGET_FPA"
  13053. +   "@
  13054. +    fpsm%.d %2,%w1,%w3,%0
  13055. +    fpsm%.d %x2,%1,%x3,%0
  13056. +    fpsm%.d %x2,%1,%x3,%0")
  13057. + (define_insn ""
  13058. +   [(set (match_operand:DF 0 "register_operand" "=x,y,y")
  13059. +     (mult:DF (match_operand:DF 1 "general_operand" "xH,rmF,y")
  13060. +          (minus:DF (match_operand:DF 2 "general_operand" "xH,y,y")
  13061. +                (match_operand:DF 3 "general_operand" "x,y,rmF"))))]
  13062. +   "TARGET_FPA"
  13063. +   "@
  13064. +    fpsm%.d %3,%w2,%w1,%0
  13065. +    fpsm%.d %x3,%2,%x1,%0
  13066. +    fpsm%.d %x3,%2,%x1,%0")
  13067. + (define_insn ""
  13068. +   [(set (match_operand:SF 0 "register_operand" "=x,y,y")
  13069. +     (mult:SF (minus:SF (match_operand:SF 1 "general_operand" "xH,rmF,y")
  13070. +                (match_operand:SF 2 "general_operand" "x,y,yrmF"))
  13071. +          (match_operand:SF 3 "general_operand" "xH,rmF,yrmF")))]
  13072. +   "TARGET_FPA"
  13073. +   "@
  13074. +    fpsm%.s %2,%w1,%w3,%0
  13075. +    fpsm%.s %x2,%1,%x3,%0
  13076. +    fpsm%.s %x2,%1,%x3,%0")
  13077. + (define_insn ""
  13078. +   [(set (match_operand:SF 0 "register_operand" "=x,y,y")
  13079. +     (mult:SF (match_operand:SF 1 "general_operand" "xH,rmF,yrmF")
  13080. +          (minus:SF (match_operand:SF 2 "general_operand" "xH,rmF,y")
  13081. +                (match_operand:SF 3 "general_operand" "x,y,yrmF"))))]
  13082. +   "TARGET_FPA"
  13083. +   "@
  13084. +    fpsm%.s %3,%w2,%w1,%0
  13085. +    fpsm%.s %x3,%2,%x1,%0
  13086. +    fpsm%.s %x3,%2,%x1,%0")
  13087. + (define_insn "tstxf"
  13088. +   [(set (cc0)
  13089. +     (match_operand:XF 0 "nonimmediate_operand" "fm"))]
  13090. +   "TARGET_68881"
  13091. +   "*
  13092. + {
  13093. +   cc_status.flags = CC_IN_68881;
  13094. +   return \"ftst%.x %0\";
  13095. + }")
  13096. + (define_expand "cmpxf"
  13097. +   [(set (cc0)
  13098. +     (compare (match_operand:XF 0 "general_operand" "f,mG")
  13099. +          (match_operand:XF 1 "general_operand" "fmG,f")))]
  13100. +   "TARGET_68881"
  13101. +   "
  13102. + {
  13103. +   if (CONSTANT_P (operands[0]))
  13104. +       operands[0] = force_const_mem (XFmode, operands[0]);
  13105. +   if (CONSTANT_P (operands[1]))
  13106. +       operands[1] = force_const_mem (XFmode, operands[1]);
  13107. + }")
  13108. + (define_insn ""
  13109. +   [(set (cc0)
  13110. +     (compare (match_operand:XF 0 "nonimmediate_operand" "f,mG")
  13111. +          (match_operand:XF 1 "nonimmediate_operand" "fmG,f")))]
  13112. +   "TARGET_68881"
  13113. +   "*
  13114. + {
  13115. +   cc_status.flags = CC_IN_68881;
  13116. + #ifdef SGS_CMP_ORDER
  13117. +   if (REG_P (operands[0]))
  13118. +     {
  13119. +       if (REG_P (operands[1]))
  13120. +     return \"fcmp%.x %0,%1\";
  13121. +       else
  13122. +         return \"fcmp%.x %0,%f1\";
  13123. +     }
  13124. +   cc_status.flags |= CC_REVERSED;
  13125. +   return \"fcmp%.x %1,%f0\";
  13126. + #else
  13127. +   if (REG_P (operands[0]))
  13128. +     {
  13129. +       if (REG_P (operands[1]))
  13130. +     return \"fcmp%.x %1,%0\";
  13131. +       else
  13132. +         return \"fcmp%.x %f1,%0\";
  13133. +     }
  13134. +   cc_status.flags |= CC_REVERSED;
  13135. +   return \"fcmp%.x %f0,%1\";
  13136. + #endif
  13137. + }")
  13138. + (define_insn "extendsfxf2"
  13139. +   [(set (match_operand:XF 0 "general_operand" "=fm,f")
  13140. +     (float_extend:XF (match_operand:SF 1 "general_operand" "f,m")))]
  13141. +   "TARGET_68881"
  13142. +   "*
  13143. + {
  13144. +   if (FP_REG_P (operands[0]) && FP_REG_P (operands[1]))
  13145. +     {
  13146. +       if (REGNO (operands[0]) == REGNO (operands[1]))
  13147. +     {
  13148. +       /* Extending float to double in an fp-reg is a no-op.
  13149. +          NOTICE_UPDATE_CC has already assumed that the
  13150. +          cc will be set.  So cancel what it did.  */
  13151. +       cc_status = cc_prev_status;
  13152. +       return \"\";
  13153. +     }
  13154. +       return \"f%$move%.x %1,%0\";
  13155. +     }
  13156. +   if (FP_REG_P (operands[0]))
  13157. +     return \"f%$move%.s %f1,%0\";
  13158. +   return \"fmove%.x %f1,%0\";
  13159. + }")
  13160. + (define_insn "extenddfxf2"
  13161. +   [(set (match_operand:XF 0 "general_operand" "=fm,f")
  13162. +     (float_extend:XF
  13163. +           (match_operand:DF 1 "general_operand" "f,m")))]
  13164. +   "TARGET_68881"
  13165. +   "*
  13166. + {
  13167. +   if (FP_REG_P (operands[0]) && FP_REG_P (operands[1]))
  13168. +     {
  13169. +       if (REGNO (operands[0]) == REGNO (operands[1]))
  13170. +     {
  13171. +       /* Extending float to double in an fp-reg is a no-op.
  13172. +          NOTICE_UPDATE_CC has already assumed that the
  13173. +          cc will be set.  So cancel what it did.  */
  13174. +       cc_status = cc_prev_status;
  13175. +       return \"\";
  13176. +     }
  13177. +       return \"fmove%.x %1,%0\";
  13178. +     }
  13179. +   if (FP_REG_P (operands[0]))
  13180. +     return \"f%&move%.d %f1,%0\";
  13181. +   return \"fmove%.x %f1,%0\";
  13182. + }")
  13183. + (define_insn "truncxfdf2"
  13184. +   [(set (match_operand:DF 0 "general_operand" "=m,!r")
  13185. +     (float_truncate:DF
  13186. +           (match_operand:XF 1 "general_operand" "f,f")))]
  13187. +   "TARGET_68881"
  13188. +   "*
  13189. + {
  13190. +   if (REG_P (operands[0]))
  13191. +     {
  13192. +       output_asm_insn (\"fmove%.d %f1,%-\;move%.l %+,%0\", operands);
  13193. +       operands[0] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1);
  13194. +       return \"move%.l %+,%0\";
  13195. +     }
  13196. +   return \"fmove%.d %f1,%0\";
  13197. + }")
  13198. +  
  13199. + (define_insn "truncxfsf2"
  13200. +   [(set (match_operand:SF 0 "general_operand" "=dm")
  13201. +     (float_truncate:SF
  13202. +       (match_operand:XF 1 "general_operand" "f")))]
  13203. +   "TARGET_68881"
  13204. +   "fmove%.s %f1,%0")
  13205. + (define_insn "floatsixf2"
  13206. +   [(set (match_operand:XF 0 "general_operand" "=f")
  13207. +     (float:XF (match_operand:SI 1 "general_operand" "dmi")))]
  13208. +   "TARGET_68881"
  13209. +   "fmove%.l %1,%0")
  13210. + (define_insn "floathixf2"
  13211. +   [(set (match_operand:XF 0 "general_operand" "=f")
  13212. +     (float:XF (match_operand:HI 1 "general_operand" "dmn")))]
  13213. +   "TARGET_68881"
  13214. +   "fmove%.w %1,%0")
  13215. + (define_insn "floatqixf2"
  13216. +   [(set (match_operand:XF 0 "general_operand" "=f")
  13217. +     (float:XF (match_operand:QI 1 "general_operand" "dmn")))]
  13218. +   "TARGET_68881"
  13219. +   "fmove%.b %1,%0")
  13220. + (define_insn "ftruncxf2"
  13221. +   [(set (match_operand:XF 0 "general_operand" "=f")
  13222. +     (fix:XF (match_operand:XF 1 "general_operand" "fFm")))]
  13223. +   "TARGET_68881"
  13224. +   "*
  13225. + {
  13226. +   if (FP_REG_P (operands[1]))
  13227. +     return \"fintrz%.x %f1,%0\";
  13228. +   return \"fintrz%.x %f1,%0\";
  13229. + }")
  13230. + (define_insn "fixxfqi2"
  13231. +   [(set (match_operand:QI 0 "general_operand" "=dm")
  13232. +     (fix:QI (match_operand:XF 1 "general_operand" "f")))]
  13233. +   "TARGET_68881"
  13234. +   "fmove%.b %1,%0")
  13235. + (define_insn "fixxfhi2"
  13236. +   [(set (match_operand:HI 0 "general_operand" "=dm")
  13237. +     (fix:HI (match_operand:XF 1 "general_operand" "f")))]
  13238. +   "TARGET_68881"
  13239. +   "fmove%.w %1,%0")
  13240. + (define_insn "fixxfsi2"
  13241. +   [(set (match_operand:SI 0 "general_operand" "=dm")
  13242. +     (fix:SI (match_operand:XF 1 "general_operand" "f")))]
  13243. +   "TARGET_68881"
  13244. +   "fmove%.l %1,%0")
  13245. + (define_expand "addxf3"
  13246. +   [(set (match_operand:XF 0 "general_operand" "")
  13247. +     (plus:XF (match_operand:XF 1 "general_operand" "")
  13248. +          (match_operand:XF 2 "general_operand" "")))]
  13249. +   "TARGET_68881"
  13250. +   "
  13251. + {
  13252. +   if (CONSTANT_P (operands[1]))
  13253. +     operands[1] = force_const_mem (XFmode, operands[1]);
  13254. +   if (CONSTANT_P (operands[2]))
  13255. +     operands[2] = force_const_mem (XFmode, operands[2]);
  13256. + }")
  13257. + (define_insn ""
  13258. +   [(set (match_operand:XF 0 "general_operand" "=f")
  13259. +     (plus:XF (match_operand:XF 1 "nonimmediate_operand" "%0")
  13260. +          (match_operand:XF 2 "nonimmediate_operand" "fmG")))]
  13261. +   "TARGET_68881"
  13262. +   "*
  13263. + {
  13264. +   if (REG_P (operands[2]))
  13265. +     return \"fadd%.x %2,%0\";
  13266. +   return \"fadd%.x %f2,%0\";
  13267. + }")
  13268. + (define_expand "subxf3"
  13269. +   [(set (match_operand:XF 0 "general_operand" "")
  13270. +     (minus:XF (match_operand:XF 1 "general_operand" "")
  13271. +          (match_operand:XF 2 "general_operand" "")))]
  13272. +   "TARGET_68881"
  13273. +   "
  13274. + {
  13275. +   if (CONSTANT_P (operands[1]))
  13276. +     operands[1] = force_const_mem (XFmode, operands[1]);
  13277. +   if (CONSTANT_P (operands[2]))
  13278. +     operands[2] = force_const_mem (XFmode, operands[2]);
  13279. + }")
  13280. + (define_insn ""
  13281. +   [(set (match_operand:XF 0 "general_operand" "=f")
  13282. +     (minus:XF (match_operand:XF 1 "nonimmediate_operand" "0")
  13283. +          (match_operand:XF 2 "nonimmediate_operand" "fmG")))]
  13284. +   "TARGET_68881"
  13285. +   "*
  13286. + {
  13287. +   if (REG_P (operands[2]))
  13288. +     return \"fsub%.x %2,%0\";
  13289. +   return \"fsub%.x %f2,%0\";
  13290. + }")
  13291. + (define_expand "mulxf3"
  13292. +   [(set (match_operand:XF 0 "general_operand" "")
  13293. +     (mult:XF (match_operand:XF 1 "general_operand" "")
  13294. +         (match_operand:XF 2 "general_operand" "")))]
  13295. +   "TARGET_68881"
  13296. +   "
  13297. + {
  13298. +   if (CONSTANT_P (operands[1]))
  13299. +     operands[1] = force_const_mem (XFmode, operands[1]);
  13300. +   if (CONSTANT_P (operands[2]))
  13301. +     operands[2] = force_const_mem (XFmode, operands[2]);
  13302. + }")
  13303. + (define_insn ""
  13304. +   [(set (match_operand:XF 0 "general_operand" "=f")
  13305. +     (mult:XF (match_operand:XF 1 "nonimmediate_operand" "%0")
  13306. +         (match_operand:XF 2 "nonimmediate_operand" "fmG")))]
  13307. +   "TARGET_68881"
  13308. +   "*
  13309. + {
  13310. +   if (REG_P (operands[2]))
  13311. +     return \"fmul%.x %2,%0\";
  13312. +   return \"fmul%.x %f2,%0\";
  13313. + }")
  13314. + (define_expand "divxf3"
  13315. +   [(set (match_operand:XF 0 "general_operand" "")
  13316. +     (div:XF (match_operand:XF 1 "general_operand" "")
  13317. +         (match_operand:XF 2 "general_operand" "")))]
  13318. +   "TARGET_68881"
  13319. +   "
  13320. + {
  13321. +   if (CONSTANT_P (operands[1]))
  13322. +     operands[1] = force_const_mem (XFmode, operands[1]);
  13323. +   if (CONSTANT_P (operands[2]))
  13324. +     operands[2] = force_const_mem (XFmode, operands[2]);
  13325. + }")
  13326. + (define_insn ""
  13327. +   [(set (match_operand:XF 0 "general_operand" "=f")
  13328. +     (div:XF (match_operand:XF 1 "nonimmediate_operand" "0")
  13329. +         (match_operand:XF 2 "nonimmediate_operand" "fmG")))]
  13330. +   "TARGET_68881"
  13331. +   "*
  13332. + {
  13333. +   if (REG_P (operands[2]))
  13334. +     return \"fdiv%.x %2,%0\";
  13335. +   return \"fdiv%.x %f2,%0\";
  13336. + }")
  13337. + (define_insn "negxf2"
  13338. +   [(set (match_operand:XF 0 "general_operand" "=f")
  13339. +     (neg:XF (match_operand:XF 1 "nonimmediate_operand" "fmF")))]
  13340. +   "TARGET_68881"
  13341. +   "*
  13342. + {
  13343. +   if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
  13344. +     return \"fneg%.x %1,%0\";
  13345. +   return \"fneg%.x %f1,%0\";
  13346. + }")
  13347. + (define_insn "absxf2"
  13348. +   [(set (match_operand:XF 0 "general_operand" "=f")
  13349. +     (abs:XF (match_operand:XF 1 "nonimmediate_operand" "fmF")))]
  13350. +   "TARGET_68881"
  13351. +   "*
  13352. + {
  13353. +   if (REG_P (operands[1]) && ! DATA_REG_P (operands[1]))
  13354. +     return \"fabs%.x %1,%0\";
  13355. +   return \"fabs%.x %f1,%0\";
  13356. + }")
  13357. + (define_insn "sqrtxf2"
  13358. +   [(set (match_operand:XF 0 "general_operand" "=f")
  13359. +     (sqrt:XF (match_operand:DF 1 "nonimmediate_operand" "fm")))]
  13360. +   "TARGET_68881"
  13361. +   "*
  13362. + {
  13363. +     return \"fsqrt%.x %1,%0\";
  13364. + }")
  13365. diff -rc --new-file /src/baseline/gnat-1.80/amiga/corrections/par.s.diff gnat-1.80/amiga/corrections/par.s.diff
  13366. *** /src/baseline/gnat-1.80/amiga/corrections/par.s.diff    Thu Jan  1 00:00:00 1970
  13367. --- gnat-1.80/amiga/corrections/par.s.diff    Thu Jun 23 13:13:16 1994
  13368. ***************
  13369. *** 0 ****
  13370. --- 1,16 ----
  13371. + *** par.s    Sun Jun 19 00:42:42 1994
  13372. + --- par.s!    Sun Jun 19 00:30:21 1994
  13373. + ***************
  13374. + *** 11807,11812 ****
  13375. +       jbsr _system__task_specific_data__set_jmpbuf_address
  13376. +       addqw #4,sp
  13377. + !     bfextu a5@(10){#7:#1},d0
  13378. + !     tstb d0
  13379. +       jne L835
  13380. +       jra L834
  13381. + --- 11807,11811 ----
  13382. +       jbsr _system__task_specific_data__set_jmpbuf_address
  13383. +       addqw #4,sp
  13384. + !     tstb a5@(10)
  13385. +       jne L835
  13386. +       jra L834
  13387. diff -rc --new-file /src/baseline/gnat-1.80/amiga/corrections/uintp.adb.diff gnat-1.80/amiga/corrections/uintp.adb.diff
  13388. *** /src/baseline/gnat-1.80/amiga/corrections/uintp.adb.diff    Thu Jan  1 00:00:00 1970
  13389. --- gnat-1.80/amiga/corrections/uintp.adb.diff    Thu Jun 23 13:13:17 1994
  13390. ***************
  13391. *** 0 ****
  13392. --- 1,47 ----
  13393. + *** uintp.adb.orig    Sun Jun 19 05:23:18 1994
  13394. + --- uintp.adb    Sun Jun 19 09:56:09 1994
  13395. + ***************
  13396. + *** 232,235 ****
  13397. + --- 232,236 ----
  13398. +      procedure Init_Operand (UI : Uint; Vec : out UI_Vector) is
  13399. +         Loc : Int;
  13400. + +       tempa : Int;
  13401. +   
  13402. +      begin
  13403. + ***************
  13404. + *** 240,244 ****
  13405. +   
  13406. +            for J in 1 .. Uints.Table (UI).Length loop
  13407. + !             Vec (J) := Udigits.Table (Loc + J - 1);
  13408. +            end loop;
  13409. +         end if;
  13410. + --- 241,246 ----
  13411. +   
  13412. +            for J in 1 .. Uints.Table (UI).Length loop
  13413. + !             Tempa := Loc + J - 1;
  13414. + !             Vec (J) := Udigits.Table (tempa);
  13415. +            end loop;
  13416. +         end if;
  13417. + ***************
  13418. + *** 694,697 ****
  13419. + --- 696,700 ----
  13420. +               Length : Int := Uints.Table (Right).Length;
  13421. +               Loc    : Int := Uints.Table (Right).Loc;
  13422. + +             tempa, tempb : Int;
  13423. +   
  13424. +            begin
  13425. + ***************
  13426. + *** 705,709 ****
  13427. +               for Idx in 2 .. Length loop
  13428. +                  Udigits.Increment_Last;
  13429. + !                Udigits.Table (Udigits.Last) := Udigits.Table (Loc + Idx - 1);
  13430. +               end loop;
  13431. +   
  13432. + --- 708,714 ----
  13433. +               for Idx in 2 .. Length loop
  13434. +                  Udigits.Increment_Last;
  13435. + !                tempa := Udigits.Last;
  13436. + !                tempb := Loc + Idx - 1;
  13437. + !                Udigits.Table (tempa) := Udigits.Table (tempb);
  13438. +               end loop;
  13439. +   
  13440. diff -rc --new-file /src/baseline/gnat-1.80/amiga/gcc-2.5.8.diffs gnat-1.80/amiga/gcc-2.5.8.diffs
  13441. *** /src/baseline/gnat-1.80/amiga/gcc-2.5.8.diffs    Thu Jan  1 00:00:00 1970
  13442. --- gnat-1.80/amiga/gcc-2.5.8.diffs    Sat Jul  9 08:50:19 1994
  13443. ***************
  13444. *** 0 ****
  13445. --- 1,8981 ----
  13446. + diff -rc --new-file gcc-2.5.8-fsf/INSTALL gcc-2.5.8/INSTALL
  13447. + *** gcc-2.5.8-fsf/INSTALL    Sat Nov 27 19:47:57 1993
  13448. + --- gcc-2.5.8/INSTALL    Tue Feb 22 11:26:44 1994
  13449. + ***************
  13450. + *** 518,536 ****
  13451. +             files do not exist, it means nothing needs to be added for a
  13452. +             given target or host.
  13453. +   
  13454. + !   4. The standard directory for installing GNU CC is `/usr/local/lib'.
  13455. +        If you want to install its files somewhere else, specify
  13456. +        `--prefix=DIR' when you run `configure'.  Here DIR is a directory
  13457. + !      name to use instead of `/usr/local' for all purposes with one
  13458. + !      exception: the directory `/usr/local/include' is searched for
  13459. +        header files no matter where you install the compiler.
  13460. +   
  13461. +     5. Specify `--local-prefix=DIR' if you want the compiler to search
  13462. +        directory `DIR/include' for header files *instead* of
  13463. + !      `/usr/local/include'.  (This is for systems that have different
  13464. +        conventions for where to put site-specific things.)
  13465. +   
  13466. + !      Unless you have a convention other than `/usr/local' for
  13467. +        site-specific files, it is a bad idea to specify `--local-prefix'.
  13468. +   
  13469. +     6. Make sure the Bison parser generator is installed.  (This is
  13470. + --- 518,536 ----
  13471. +             files do not exist, it means nothing needs to be added for a
  13472. +             given target or host.
  13473. +   
  13474. + !   4. The standard directory for installing GNU CC is `/gnu/lib'.
  13475. +        If you want to install its files somewhere else, specify
  13476. +        `--prefix=DIR' when you run `configure'.  Here DIR is a directory
  13477. + !      name to use instead of `/gnu' for all purposes with one
  13478. + !      exception: the directory `/gnu/include' is searched for
  13479. +        header files no matter where you install the compiler.
  13480. +   
  13481. +     5. Specify `--local-prefix=DIR' if you want the compiler to search
  13482. +        directory `DIR/include' for header files *instead* of
  13483. + !      `/gnu/include'.  (This is for systems that have different
  13484. +        conventions for where to put site-specific things.)
  13485. +   
  13486. + !      Unless you have a convention other than `/gnu' for
  13487. +        site-specific files, it is a bad idea to specify `--local-prefix'.
  13488. +   
  13489. +     6. Make sure the Bison parser generator is installed.  (This is
  13490. + ***************
  13491. + *** 582,588 ****
  13492. +        If you are building with a previous GNU C compiler, do not use
  13493. +        `CC=gcc' on the make command or by editing the Makefile.  Instead,
  13494. +        use a full pathname to specify the compiler, such as
  13495. + !      `CC=/usr/local/bin/gcc'.  This is because make might execute the
  13496. +        `gcc' in the current directory before all of the compiler
  13497. +        components have been built.
  13498. +   
  13499. + --- 582,588 ----
  13500. +        If you are building with a previous GNU C compiler, do not use
  13501. +        `CC=gcc' on the make command or by editing the Makefile.  Instead,
  13502. +        use a full pathname to specify the compiler, such as
  13503. + !      `CC=/gnu/bin/gcc'.  This is because make might execute the
  13504. +        `gcc' in the current directory before all of the compiler
  13505. +        components have been built.
  13506. +   
  13507. + ***************
  13508. + *** 707,720 ****
  13509. +   
  13510. +        This copies the files `cc1', `cpp' and `libgcc.a' to files `cc1',
  13511. +        `cpp' and `libgcc.a' in the directory
  13512. + !      `/usr/local/lib/gcc-lib/TARGET/VERSION', which is where the
  13513. +        compiler driver program looks for them.  Here TARGET is the target
  13514. +        machine type specified when you ran `configure', and VERSION is
  13515. +        the version number of GNU CC.  This naming scheme permits various
  13516. +        versions and/or cross-compilers to coexist.
  13517. +   
  13518. +        This also copies the driver program `xgcc' into
  13519. + !      `/usr/local/bin/gcc', so that it appears in typical execution
  13520. +        search paths.
  13521. +   
  13522. +        On some systems, this command causes recompilation of some files.
  13523. + --- 707,720 ----
  13524. +   
  13525. +        This copies the files `cc1', `cpp' and `libgcc.a' to files `cc1',
  13526. +        `cpp' and `libgcc.a' in the directory
  13527. + !      `/gnu/lib/gcc-lib/TARGET/VERSION', which is where the
  13528. +        compiler driver program looks for them.  Here TARGET is the target
  13529. +        machine type specified when you ran `configure', and VERSION is
  13530. +        the version number of GNU CC.  This naming scheme permits various
  13531. +        versions and/or cross-compilers to coexist.
  13532. +   
  13533. +        This also copies the driver program `xgcc' into
  13534. + !      `/gnu/bin/gcc', so that it appears in typical execution
  13535. +        search paths.
  13536. +   
  13537. +        On some systems, this command causes recompilation of some files.
  13538. + ***************
  13539. + *** 854,860 ****
  13540. +   ----------------------------------------
  13541. +   
  13542. +      If you have a cross-assembler and cross-linker available, you should
  13543. + ! install them now.  Put them in the directory `/usr/local/TARGET/bin'.
  13544. +   Here is a table of the tools you should put in this directory:
  13545. +   
  13546. +   `as'
  13547. + --- 854,860 ----
  13548. +   ----------------------------------------
  13549. +   
  13550. +      If you have a cross-assembler and cross-linker available, you should
  13551. + ! install them now.  Put them in the directory `/gnu/TARGET/bin'.
  13552. +   Here is a table of the tools you should put in this directory:
  13553. +   
  13554. +   `as'
  13555. + ***************
  13556. + *** 884,896 ****
  13557. +   
  13558. +      If you want to install libraries to use with the cross-compiler,
  13559. +   such as a standard C library, put them in the directory
  13560. + ! `/usr/local/TARGET/lib'; installation of GNU CC copies all all the
  13561. +   files in that subdirectory into the proper place for GNU CC to find
  13562. +   them and link with them.  Here's an example of copying some libraries
  13563. +   from a target machine:
  13564. +   
  13565. +        ftp TARGET-MACHINE
  13566. + !      lcd /usr/local/TARGET/lib
  13567. +        cd /lib
  13568. +        get libc.a
  13569. +        cd /usr/lib
  13570. + --- 884,896 ----
  13571. +   
  13572. +      If you want to install libraries to use with the cross-compiler,
  13573. +   such as a standard C library, put them in the directory
  13574. + ! `/gnu/TARGET/lib'; installation of GNU CC copies all all the
  13575. +   files in that subdirectory into the proper place for GNU CC to find
  13576. +   them and link with them.  Here's an example of copying some libraries
  13577. +   from a target machine:
  13578. +   
  13579. +        ftp TARGET-MACHINE
  13580. + !      lcd /gnu/TARGET/lib
  13581. +        cd /lib
  13582. +        get libc.a
  13583. +        cd /usr/lib
  13584. + ***************
  13585. + *** 903,916 ****
  13586. +   
  13587. +      Many targets require "start files" such as `crt0.o' and `crtn.o'
  13588. +   which are linked into each executable; these too should be placed in
  13589. + ! `/usr/local/TARGET/lib'.  There may be several alternatives for
  13590. +   `crt0.o', for use with profiling or other compilation options.  Check
  13591. +   your target's definition of `STARTFILE_SPEC' to find out what start
  13592. +   files it uses.  Here's an example of copying these files from a target
  13593. +   machine:
  13594. +   
  13595. +        ftp TARGET-MACHINE
  13596. + !      lcd /usr/local/TARGET/lib
  13597. +        prompt
  13598. +        cd /lib
  13599. +        mget *crt*.o
  13600. + --- 903,916 ----
  13601. +   
  13602. +      Many targets require "start files" such as `crt0.o' and `crtn.o'
  13603. +   which are linked into each executable; these too should be placed in
  13604. + ! `/gnu/TARGET/lib'.  There may be several alternatives for
  13605. +   `crt0.o', for use with profiling or other compilation options.  Check
  13606. +   your target's definition of `STARTFILE_SPEC' to find out what start
  13607. +   files it uses.  Here's an example of copying these files from a target
  13608. +   machine:
  13609. +   
  13610. +        ftp TARGET-MACHINE
  13611. + !      lcd /gnu/TARGET/lib
  13612. +        prompt
  13613. +        cd /lib
  13614. +        mget *crt*.o
  13615. + ***************
  13616. + *** 1023,1029 ****
  13617. +   cross-compiling.
  13618. +   
  13619. +      When you have found suitable header files, put them in
  13620. + ! `/usr/local/TARGET/include', before building the cross compiler.  Then
  13621. +   installation will run fixincludes properly and install the corrected
  13622. +   versions of the header files where the compiler will use them.
  13623. +   
  13624. + --- 1023,1029 ----
  13625. +   cross-compiling.
  13626. +   
  13627. +      When you have found suitable header files, put them in
  13628. + ! `/gnu/TARGET/include', before building the cross compiler.  Then
  13629. +   installation will run fixincludes properly and install the corrected
  13630. +   versions of the header files where the compiler will use them.
  13631. +   
  13632. + ***************
  13633. + *** 1040,1046 ****
  13634. +      Then, on the host machine, do this:
  13635. +   
  13636. +        ftp TARGET-MACHINE
  13637. + !      lcd /usr/local/TARGET/include
  13638. +        get tarfile
  13639. +        quit
  13640. +        tar xf tarfile
  13641. + --- 1040,1046 ----
  13642. +      Then, on the host machine, do this:
  13643. +   
  13644. +        ftp TARGET-MACHINE
  13645. + !      lcd /gnu/TARGET/include
  13646. +        get tarfile
  13647. +        quit
  13648. +        tar xf tarfile
  13649. + ***************
  13650. + *** 1098,1104 ****
  13651. +   `jaguar.cs.utah.edu' `dist' subdirectory.  You would need to install
  13652. +   GAS in the file
  13653. +   
  13654. + !      /usr/local/lib/gcc-lib/CONFIGURATION/GCCVERSION/as
  13655. +   
  13656. +   where CONFIGURATION is the configuration name (perhaps `hpNNN-hpux')
  13657. +   and GCCVERSION is the GNU CC version number.  Do this *before* starting
  13658. + --- 1098,1104 ----
  13659. +   `jaguar.cs.utah.edu' `dist' subdirectory.  You would need to install
  13660. +   GAS in the file
  13661. +   
  13662. + !      /gnu/lib/gcc-lib/CONFIGURATION/GCCVERSION/as
  13663. +   
  13664. +   where CONFIGURATION is the configuration name (perhaps `hpNNN-hpux')
  13665. +   and GCCVERSION is the GNU CC version number.  Do this *before* starting
  13666. + ***************
  13667. + *** 1618,1625 ****
  13668. +   target independent header files in that directory.
  13669. +   
  13670. +      `LOCAL_INCLUDE_DIR' is used only for a native compiler.  It is
  13671. + ! normally `/usr/local/include'.  GNU CC searches this directory so that
  13672. + ! users can install header files in `/usr/local/include'.
  13673. +   
  13674. +      `CROSS_INCLUDE_DIR' is used only for a cross compiler.  GNU CC
  13675. +   doesn't install anything there.
  13676. + --- 1618,1625 ----
  13677. +   target independent header files in that directory.
  13678. +   
  13679. +      `LOCAL_INCLUDE_DIR' is used only for a native compiler.  It is
  13680. + ! normally `/gnu/include'.  GNU CC searches this directory so that
  13681. + ! users can install header files in `/gnu/include'.
  13682. +   
  13683. +      `CROSS_INCLUDE_DIR' is used only for a cross compiler.  GNU CC
  13684. +   doesn't install anything there.
  13685. + diff -rc --new-file gcc-2.5.8-fsf/Makefile.in gcc-2.5.8/Makefile.in
  13686. + *** gcc-2.5.8-fsf/Makefile.in    Thu Dec 23 23:13:50 1993
  13687. + --- gcc-2.5.8/Makefile.in    Tue Feb 22 11:26:49 1994
  13688. + ***************
  13689. + *** 58,68 ****
  13690. +   AR_FLAGS = rc
  13691. +   SHELL = /bin/sh
  13692. +   # on sysV, define this as cp.
  13693. + ! INSTALL = install -c
  13694. +   # These permit overriding just for certain files.
  13695. +   INSTALL_PROGRAM = $(INSTALL)
  13696. +   INSTALL_DATA = $(INSTALL)
  13697. +   SYMLINK = ln -s
  13698. +   MAKEINFO = makeinfo
  13699. +   TEXI2DVI = texi2dvi
  13700. +   
  13701. + --- 58,71 ----
  13702. +   AR_FLAGS = rc
  13703. +   SHELL = /bin/sh
  13704. +   # on sysV, define this as cp.
  13705. + ! INSTALL = cp
  13706. +   # These permit overriding just for certain files.
  13707. +   INSTALL_PROGRAM = $(INSTALL)
  13708. +   INSTALL_DATA = $(INSTALL)
  13709. +   SYMLINK = ln -s
  13710. + + # Some systems don't support hardlinks.  For this case, a simple copy
  13711. + + # will achieve the same results for our purposes.
  13712. + + HARDLINK = ln
  13713. +   MAKEINFO = makeinfo
  13714. +   TEXI2DVI = texi2dvi
  13715. +   
  13716. + ***************
  13717. + *** 90,102 ****
  13718. +   OLDAR = ar
  13719. +   
  13720. +   # Target to use when installing include directory.  Either
  13721. + ! # install-headers-tar or install-headers-cpio.
  13722. +   INSTALL_HEADERS_DIR = install-headers-tar
  13723. +   
  13724. +   # The GCC to use for compiling libgcc2.a, enquire, and cross-test.
  13725. +   # Usually the one we just built.
  13726. +   # Don't use this as a dependency--use $(GCC_PASSES) or $(GCC_PARTS).
  13727. + ! GCC_FOR_TARGET = ./xgcc -B./
  13728. +   
  13729. +   # This is used instead of ALL_CFLAGS when compiling with GCC_FOR_TARGET.
  13730. +   # It omits XCFLAGS, and specifies -B./.
  13731. + --- 93,106 ----
  13732. +   OLDAR = ar
  13733. +   
  13734. +   # Target to use when installing include directory.  Either
  13735. + ! # install-headers-tar install-headers-cpio, or install-headers-cp.
  13736. +   INSTALL_HEADERS_DIR = install-headers-tar
  13737. +   
  13738. +   # The GCC to use for compiling libgcc2.a, enquire, and cross-test.
  13739. +   # Usually the one we just built.
  13740. +   # Don't use this as a dependency--use $(GCC_PASSES) or $(GCC_PARTS).
  13741. + ! XGCC = xgcc
  13742. + ! GCC_FOR_TARGET = ./$(XGCC) -B./
  13743. +   
  13744. +   # This is used instead of ALL_CFLAGS when compiling with GCC_FOR_TARGET.
  13745. +   # It omits XCFLAGS, and specifies -B./.
  13746. + ***************
  13747. + *** 141,152 ****
  13748. +   srcdir = .
  13749. +   # Common prefix for installation directories.
  13750. +   # NOTE: This directory must exist when you start installation.
  13751. + ! prefix = /usr/local
  13752. +   # Directory in which to put localized header files. On the systems with
  13753. +   # gcc as the native cc, `local_prefix' may not be `prefix' which is
  13754. +   # `/usr'.
  13755. +   # NOTE: local_prefix *should not* default from prefix.
  13756. + ! local_prefix = /usr/local
  13757. +   # Directory in which to put host dependent programs and libraries
  13758. +   exec_prefix = $(prefix)
  13759. +   # Directory in which to put the executable for the command `gcc'
  13760. + --- 145,159 ----
  13761. +   srcdir = .
  13762. +   # Common prefix for installation directories.
  13763. +   # NOTE: This directory must exist when you start installation.
  13764. + ! prefix = /gnu
  13765. +   # Directory in which to put localized header files. On the systems with
  13766. +   # gcc as the native cc, `local_prefix' may not be `prefix' which is
  13767. +   # `/usr'.
  13768. + + # Similar considerations apply for toolkits located on non-writable storage,
  13769. + + # such as CD-ROM, where we need a completely separate place to put local
  13770. + + # include files.
  13771. +   # NOTE: local_prefix *should not* default from prefix.
  13772. + ! local_prefix = /gnu
  13773. +   # Directory in which to put host dependent programs and libraries
  13774. +   exec_prefix = $(prefix)
  13775. +   # Directory in which to put the executable for the command `gcc'
  13776. + ***************
  13777. + *** 161,171 ****
  13778. +   # (But this currently agrees with what is in cross-make.)
  13779. +   assertdir = $(tooldir)/include
  13780. +   # where the info files go
  13781. + ! infodir = $(prefix)/info
  13782. +   # Extension (if any) to put in installed man-page filename.
  13783. +   manext = .1
  13784. +   # Directory in which to put man pages.
  13785. + ! mandir = $(prefix)/man/man1
  13786. +   # Directory in which to find other cross-compilation tools and headers.
  13787. +   # Used in install-cross.
  13788. +   tooldir = $(exec_prefix)/$(target)
  13789. + --- 168,178 ----
  13790. +   # (But this currently agrees with what is in cross-make.)
  13791. +   assertdir = $(tooldir)/include
  13792. +   # where the info files go
  13793. + ! infodir = /info
  13794. +   # Extension (if any) to put in installed man-page filename.
  13795. +   manext = .1
  13796. +   # Directory in which to put man pages.
  13797. + ! mandir = /man/man1
  13798. +   # Directory in which to find other cross-compilation tools and headers.
  13799. +   # Used in install-cross.
  13800. +   tooldir = $(exec_prefix)/$(target)
  13801. + ***************
  13802. + *** 549,555 ****
  13803. +       $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o xgcc gcc.o version.o $(LIBS)
  13804. +   
  13805. +   # Dump a specs file to make -B./ read these specs over installed ones.
  13806. + ! specs: xgcc
  13807. +       $(GCC_FOR_TARGET) -dumpspecs > specs
  13808. +   
  13809. +   # Create the compiler driver for g++.
  13810. + --- 556,562 ----
  13811. +       $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o xgcc gcc.o version.o $(LIBS)
  13812. +   
  13813. +   # Dump a specs file to make -B./ read these specs over installed ones.
  13814. + ! specs: xgcc xgccv
  13815. +       $(GCC_FOR_TARGET) -dumpspecs > specs
  13816. +   
  13817. +   # Create the compiler driver for g++.
  13818. + ***************
  13819. + *** 752,759 ****
  13820. +   # the second ar command tries to overwrite this file.  To avoid the error
  13821. +   # message from ar, we make sure all files are writable.
  13822. +       -(cd tmpcopy; chmod +w * > /dev/null 2>&1)
  13823. + !     (cd tmpcopy; $(AR) x ../$(LIBGCC2))
  13824. + !     (cd tmpcopy; $(AR) $(AR_FLAGS) ../tmplibgcc.a *.o)
  13825. +       rm -rf tmpcopy
  13826. +       -if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc.a; else true; fi
  13827. +   # Actually build it in tmplibgcc.a, then rename at end,
  13828. + --- 759,767 ----
  13829. +   # the second ar command tries to overwrite this file.  To avoid the error
  13830. +   # message from ar, we make sure all files are writable.
  13831. +       -(cd tmpcopy; chmod +w * > /dev/null 2>&1)
  13832. + ! # The "cd..; wait" makes sure that the lock on tmpcopy has time to disappear.
  13833. + !     (cd tmpcopy; $(AR) x ../$(LIBGCC2); cd ..; /c/wait 2)
  13834. + !     (cd tmpcopy; $(AR) $(AR_FLAGS) ../tmplibgcc.a *.o; cd ..; /c/wait 2)
  13835. +       rm -rf tmpcopy
  13836. +       -if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc.a; else true; fi
  13837. +   # Actually build it in tmplibgcc.a, then rename at end,
  13838. + ***************
  13839. + *** 770,779 ****
  13840. +       cd objc; \
  13841. +       $(MAKE) -f $${srcdir1}/objc/Makefile libobjc.a \
  13842. +         srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
  13843. + !       GCC_FOR_TARGET="$${thisdir1}/xgcc -B$${thisdir1}/" \
  13844. +         GCC_CFLAGS="$(GCC_CFLAGS)"
  13845. +       -rm -f libobjc.a
  13846. + !     ln objc/libobjc.a . >/dev/null 2>&1 || cp objc/libobjc.a .
  13847. +       -if $(RANLIB_TEST) ; then $(RANLIB) libobjc.a; else true; fi
  13848. +   
  13849. +   # This is used by objc/Makefile if the user runs that directly.
  13850. + --- 778,787 ----
  13851. +       cd objc; \
  13852. +       $(MAKE) -f $${srcdir1}/objc/Makefile libobjc.a \
  13853. +         srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
  13854. + !       GCC_FOR_TARGET="$${thisdir1}/$(XGCC) -B$${thisdir1}/" \
  13855. +         GCC_CFLAGS="$(GCC_CFLAGS)"
  13856. +       -rm -f libobjc.a
  13857. + !     cp objc/libobjc.a . >/dev/null 2>&1 || cp objc/libobjc.a .
  13858. +       -if $(RANLIB_TEST) ; then $(RANLIB) libobjc.a; else true; fi
  13859. +   
  13860. +   # This is used by objc/Makefile if the user runs that directly.
  13861. + ***************
  13862. + *** 783,789 ****
  13863. +       cd objc; \
  13864. +       $(MAKE) -f $$srcdir1/objc/Makefile libobjc.a \
  13865. +         srcdir=$$srcdir1 tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
  13866. + !       GCC_FOR_TARGET="$$thisdir1/xgcc -B$$thisdir1/" \
  13867. +         GCC_CFLAGS="$(GCC_CFLAGS)"
  13868. +   
  13869. +   # Compile two additional files that are linked with every program
  13870. + --- 791,797 ----
  13871. +       cd objc; \
  13872. +       $(MAKE) -f $$srcdir1/objc/Makefile libobjc.a \
  13873. +         srcdir=$$srcdir1 tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
  13874. + !       GCC_FOR_TARGET="$$thisdir1/$(XGCC) -B$$thisdir1/" \
  13875. +         GCC_CFLAGS="$(GCC_CFLAGS)"
  13876. +   
  13877. +   # Compile two additional files that are linked with every program
  13878. + ***************
  13879. + *** 872,878 ****
  13880. +   # To make a configuration always use collect2, set USE_COLLECT2 to ld.
  13881. +   ld: collect2
  13882. +       rm -f ld
  13883. + !     ln collect2 ld
  13884. +   
  13885. +   collect2 : collect2.o version.o $(LIBDEPS)
  13886. +   # Don't try modifying collect2 (aka ld) in place--it might be linking this.
  13887. + --- 880,886 ----
  13888. +   # To make a configuration always use collect2, set USE_COLLECT2 to ld.
  13889. +   ld: collect2
  13890. +       rm -f ld
  13891. + !     cp collect2 ld
  13892. +   
  13893. +   collect2 : collect2.o version.o $(LIBDEPS)
  13894. +   # Don't try modifying collect2 (aka ld) in place--it might be linking this.
  13895. + ***************
  13896. + *** 1383,1389 ****
  13897. +   # Making the preprocessor
  13898. +   cpp: cccp
  13899. +       -rm -f cpp
  13900. + !     ln cccp cpp
  13901. +   cccp: cccp.o cexp.o version.o $(LIBDEPS)
  13902. +       $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cccp cccp.o cexp.o version.o $(LIBS)
  13903. +   cexp.o: $(srcdir)/cexp.c $(CONFIG_H)
  13904. + --- 1391,1397 ----
  13905. +   # Making the preprocessor
  13906. +   cpp: cccp
  13907. +       -rm -f cpp
  13908. + !     cp cccp cpp
  13909. +   cccp: cccp.o cexp.o version.o $(LIBDEPS)
  13910. +       $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cccp cccp.o cexp.o version.o $(LIBS)
  13911. +   cexp.o: $(srcdir)/cexp.c $(CONFIG_H)
  13912. + ***************
  13913. + *** 1541,1547 ****
  13914. +         for dir in $(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS); do \
  13915. +           if [ -d $$dir ]; \
  13916. +           then \
  13917. + !           $(srcdir)/$(FIXINCLUDES) include $$dir $(srcdir) "`pwd`/xgcc -B`pwd`/"; \
  13918. +           else true; fi; \
  13919. +         done; \
  13920. +       else true; \
  13921. + --- 1549,1555 ----
  13922. +         for dir in $(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS); do \
  13923. +           if [ -d $$dir ]; \
  13924. +           then \
  13925. + !           $(srcdir)/$(FIXINCLUDES) include $$dir $(srcdir) "`pwd`/$(XGCC) -B`pwd`/"; \
  13926. +           else true; fi; \
  13927. +         done; \
  13928. +       else true; \
  13929. + ***************
  13930. + *** 1563,1569 ****
  13931. +       cd objc; \
  13932. +       $(MAKE) -f $${srcdir1}/objc/Makefile copy-headers \
  13933. +       srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
  13934. + !     GCC_FOR_TARGET="$${thisdir1}/xgcc -B$${thisdir1}/" \
  13935. +       GCC_CFLAGS="$(GCC_CFLAGS)" incinstalldir=$${thisdir1}/include
  13936. +       touch objc-headers
  13937. +   
  13938. + --- 1571,1577 ----
  13939. +       cd objc; \
  13940. +       $(MAKE) -f $${srcdir1}/objc/Makefile copy-headers \
  13941. +       srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
  13942. + !     GCC_FOR_TARGET="$${thisdir1}/$(XGCC) -B$${thisdir1}/" \
  13943. +       GCC_CFLAGS="$(GCC_CFLAGS)" incinstalldir=$${thisdir1}/include
  13944. +       touch objc-headers
  13945. +   
  13946. + ***************
  13947. + *** 1845,1864 ****
  13948. +           $(INSTALL_PROGRAM) g++-cross $(bindir)/$(target)-g++; \
  13949. +           chmod a+x $(bindir)/$(target)-g++; \
  13950. +           rm -f $(bindir)/$(target)-c++; \
  13951. + !         ln $(bindir)/$(target)-g++ $(bindir)/$(target)-c++; \
  13952. +         fi ; \
  13953. +       else \
  13954. +         rm -f $(bindir)/gcc; \
  13955. +         $(INSTALL_PROGRAM) xgcc $(bindir)/gcc; \
  13956. +         rm -f $(bindir)/$(target)-gcc-1; \
  13957. + !       ln $(bindir)/gcc $(bindir)/$(target)-gcc-1; \
  13958. +         mv $(bindir)/$(target)-gcc-1 $(bindir)/$(target)-gcc; \
  13959. +         if [ -f cc1plus ] ; then \
  13960. +           rm -f $(bindir)/g++; \
  13961. +           $(INSTALL_PROGRAM) g++ $(bindir)/g++; \
  13962. +           chmod a+x $(bindir)/g++; \
  13963. +           rm -f $(bindir)/c++; \
  13964. + !         ln $(bindir)/g++ $(bindir)/c++; \
  13965. +         fi ; \
  13966. +       fi
  13967. +   # Install protoize if it was compiled.
  13968. + --- 1853,1872 ----
  13969. +           $(INSTALL_PROGRAM) g++-cross $(bindir)/$(target)-g++; \
  13970. +           chmod a+x $(bindir)/$(target)-g++; \
  13971. +           rm -f $(bindir)/$(target)-c++; \
  13972. + !         $(HARDLINK) $(bindir)/$(target)-g++ $(bindir)/$(target)-c++; \
  13973. +         fi ; \
  13974. +       else \
  13975. +         rm -f $(bindir)/gcc; \
  13976. +         $(INSTALL_PROGRAM) xgcc $(bindir)/gcc; \
  13977. +         rm -f $(bindir)/$(target)-gcc-1; \
  13978. + !       $(HARDLINK) $(bindir)/gcc $(bindir)/$(target)-gcc-1; \
  13979. +         mv $(bindir)/$(target)-gcc-1 $(bindir)/$(target)-gcc; \
  13980. +         if [ -f cc1plus ] ; then \
  13981. +           rm -f $(bindir)/g++; \
  13982. +           $(INSTALL_PROGRAM) g++ $(bindir)/g++; \
  13983. +           chmod a+x $(bindir)/g++; \
  13984. +           rm -f $(bindir)/c++; \
  13985. + !         $(HARDLINK) $(bindir)/g++ $(bindir)/c++; \
  13986. +         fi ; \
  13987. +       fi
  13988. +   # Install protoize if it was compiled.
  13989. + ***************
  13990. + *** 1924,1930 ****
  13991. +           dest=`ls -ld $(libsubdir)/include/$$i | sed -n 's/.*-> //p'`; \
  13992. +           if expr "$$dest" : "$$dir.*" > /dev/null; then \
  13993. +             rm -f $(libsubdir)/include/$$i; \
  13994. + !           ln -s `echo $$i | sed "s|/[^/]*|/..|g" | sed 's|/..$$||'``echo "$$dest" | sed "s|$$dir||"` $(libsubdir)/include/$$i; \
  13995. +           fi; \
  13996. +         done; \
  13997. +       fi
  13998. + --- 1932,1938 ----
  13999. +           dest=`ls -ld $(libsubdir)/include/$$i | sed -n 's/.*-> //p'`; \
  14000. +           if expr "$$dest" : "$$dir.*" > /dev/null; then \
  14001. +             rm -f $(libsubdir)/include/$$i; \
  14002. + !           $(HARDLINK) -s `echo $$i | sed "s|/[^/]*|/..|g" | sed 's|/..$$||'``echo "$$dest" | sed "s|$$dir||"` $(libsubdir)/include/$$i; \
  14003. +           fi; \
  14004. +         done; \
  14005. +       fi
  14006. + ***************
  14007. + *** 1947,1952 ****
  14008. + --- 1955,1964 ----
  14009. +   install-headers-cpio: stmp-headers $(STMP_FIXPROTO) install-include-dir
  14010. +       cd include; find . -print | cpio -pdum $(libsubdir)/include
  14011. +   
  14012. + + # Install the include directory using simple recursive copy.
  14013. + + install-headers-cp: stmp-headers install-include-dir
  14014. + +     cd include; cp -r . $(libsubdir)/include
  14015. + + 
  14016. +   # Put assert.h where it won't override GNU libc's assert.h.
  14017. +   # It goes in a dir that is searched after GNU libc's headers;
  14018. +   # thus, the following conditionals are no longer needed.
  14019. + ***************
  14020. + *** 2034,2040 ****
  14021. +       mkdir tmp/config
  14022. +       mkdir tmp/objc
  14023. +       for file in *[0-9a-zA-Z+]; do \
  14024. + !       ln $$file tmp > /dev/null 2>&1 || cp $$file tmp; \
  14025. +       done
  14026. +       cd config; \
  14027. +       for file in *[0-9a-zA-Z+]; do \
  14028. + --- 2046,2052 ----
  14029. +       mkdir tmp/config
  14030. +       mkdir tmp/objc
  14031. +       for file in *[0-9a-zA-Z+]; do \
  14032. + !       $(HARDLINK) $$file tmp > /dev/null 2>&1 || cp $$file tmp; \
  14033. +       done
  14034. +       cd config; \
  14035. +       for file in *[0-9a-zA-Z+]; do \
  14036. + ***************
  14037. + *** 2042,2061 ****
  14038. +           mkdir ../tmp/config/$$file; \
  14039. +           cd $$file; \
  14040. +           for subfile in *[0-9a-zA-Z+]; do \
  14041. + !           ln $$subfile ../../tmp/config/$$file >/dev/null 2>&1 \
  14042. +             || cp $$subfile ../../tmp/config/$$file; \
  14043. +           done; \
  14044. +           cd ..; \
  14045. +         else \
  14046. + !         ln $$file ../tmp/config >/dev/null 2>&1 \
  14047. +           || cp $$file ../tmp/config; \
  14048. +         fi; \
  14049. +       done
  14050. +       cd objc; \
  14051. +       for file in *[0-9a-zA-Z+]; do \
  14052. + !       ln $$file ../tmp/objc >/dev/null 2>&1 || cp $$file ../tmp/objc; \
  14053. +       done
  14054. + !     ln .gdbinit tmp
  14055. +       mv tmp gcc-$(version)
  14056. +   # Get rid of everything we don't want in the distribution.
  14057. +       cd gcc-$(version); make -f Makefile.in extraclean
  14058. + --- 2054,2073 ----
  14059. +           mkdir ../tmp/config/$$file; \
  14060. +           cd $$file; \
  14061. +           for subfile in *[0-9a-zA-Z+]; do \
  14062. + !           $(HARDLINK) $$subfile ../../tmp/config/$$file >/dev/null 2>&1 \
  14063. +             || cp $$subfile ../../tmp/config/$$file; \
  14064. +           done; \
  14065. +           cd ..; \
  14066. +         else \
  14067. + !         $(HARDLINK) $$file ../tmp/config >/dev/null 2>&1 \
  14068. +           || cp $$file ../tmp/config; \
  14069. +         fi; \
  14070. +       done
  14071. +       cd objc; \
  14072. +       for file in *[0-9a-zA-Z+]; do \
  14073. + !       $(HARDLINK) $$file ../tmp/objc >/dev/null 2>&1 || cp $$file ../tmp/objc; \
  14074. +       done
  14075. + !     $(HARDLINK) .gdbinit tmp
  14076. +       mv tmp gcc-$(version)
  14077. +   # Get rid of everything we don't want in the distribution.
  14078. +       cd gcc-$(version); make -f Makefile.in extraclean
  14079. + ***************
  14080. + *** 2074,2090 ****
  14081. +   # in the intended test directory to make it a suitable test directory.
  14082. +   # THIS IS OBSOLETE; use the -srcdir operand in configure instead. 
  14083. +   maketest:
  14084. + !     ln -s $(DIR)/*.[chy] .
  14085. + !     ln -s $(DIR)/configure .
  14086. + !     ln -s $(DIR)/*.def .
  14087. +       -rm -f =*
  14088. + !     ln -s $(DIR)/.gdbinit .
  14089. + !     ln -s $(DIR)/$(FIXINCLUDES) .
  14090. + !     -ln -s $(DIR)/bison.simple .
  14091. + !     ln -s $(DIR)/config .
  14092. + !     ln -s $(DIR)/move-if-change .
  14093. +   # The then and else were swapped to avoid a problem on Ultrix.
  14094. + !     if [ ! -f Makefile ] ; then ln -s $(DIR)/Makefile .; else false; fi
  14095. +       -rm tm.h aux-output.c config.h md
  14096. +       make clean
  14097. +   # You must then run config to set up for compilation.
  14098. + --- 2086,2102 ----
  14099. +   # in the intended test directory to make it a suitable test directory.
  14100. +   # THIS IS OBSOLETE; use the -srcdir operand in configure instead. 
  14101. +   maketest:
  14102. + !     cp $(DIR)/*.[chy] .
  14103. + !     cp $(DIR)/configure .
  14104. + !     cp $(DIR)/*.def .
  14105. +       -rm -f =*
  14106. + !     cp $(DIR)/.gdbinit .
  14107. + !     cp $(DIR)/$(FIXINCLUDES) .
  14108. + !     -cp $(DIR)/bison.simple .
  14109. + !     cp $(DIR)/config .
  14110. + !     cp $(DIR)/move-if-change .
  14111. +   # The then and else were swapped to avoid a problem on Ultrix.
  14112. + !     if [ ! -f Makefile ] ; then cp $(DIR)/Makefile .; else false; fi
  14113. +       -rm tm.h aux-output.c config.h md
  14114. +       make clean
  14115. +   # You must then run config to set up for compilation.
  14116. + ***************
  14117. + *** 2100,2116 ****
  14118. +   # To prevent `make install' from compiling alloca.o and then relinking cc1
  14119. +   # because alloca.o is newer, we permit these recursive makes to compile
  14120. +   # alloca.o.  Then cc1 is newer, so it won't have to be relinked.
  14121. + !     $(MAKE) CC="stage1/xgcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  14122. +       $(MAKE) stage2
  14123. + !     $(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  14124. +   
  14125. +   bootstrap2: force
  14126. + !     $(MAKE) CC="stage1/xgcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  14127. +       $(MAKE) stage2
  14128. + !     $(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  14129. +   
  14130. +   bootstrap3: force
  14131. + !     $(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  14132. +   
  14133. +   # Compare the object files in the current directory with those in the
  14134. +   # stage2 directory.
  14135. + --- 2112,2128 ----
  14136. +   # To prevent `make install' from compiling alloca.o and then relinking cc1
  14137. +   # because alloca.o is newer, we permit these recursive makes to compile
  14138. +   # alloca.o.  Then cc1 is newer, so it won't have to be relinked.
  14139. + !     $(MAKE) CC="stage1/$(XGCC) -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  14140. +       $(MAKE) stage2
  14141. + !     $(MAKE) CC="stage2/$(XGCC) -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  14142. +   
  14143. +   bootstrap2: force
  14144. + !     $(MAKE) CC="stage1/$(XGCC) -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  14145. +       $(MAKE) stage2
  14146. + !     $(MAKE) CC="stage2/$(XGCC) -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  14147. +   
  14148. +   bootstrap3: force
  14149. + !     $(MAKE) CC="stage2/$(XGCC) -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  14150. +   
  14151. +   # Compare the object files in the current directory with those in the
  14152. +   # stage2 directory.
  14153. + ***************
  14154. + *** 2134,2161 ****
  14155. +       -rm -f tmp-foo*
  14156. +   
  14157. +   # Copy the object files from a particular stage into a subdirectory.
  14158. + ! stage1: force
  14159. +       -if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi
  14160. +       -mv $(STAGESTUFF) stage1
  14161. +       -rm -f stage1/libgcc.a
  14162. +       -cp libgcc.a stage1
  14163. +       -if $(RANLIB_TEST) ; then $(RANLIB) stage1/libgcc.a; else true; fi
  14164. +   
  14165. + ! stage2: force
  14166. +       -if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi
  14167. +       -mv $(STAGESTUFF) stage2
  14168. +       -rm -f stage2/libgcc.a
  14169. +       -cp libgcc.a stage2
  14170. +       -if $(RANLIB_TEST) ; then $(RANLIB) stage2/libgcc.a; else true; fi
  14171. +   
  14172. + ! stage3: force
  14173. +       -if [ -d stage3 ] ; then true ; else mkdir stage3 ; fi
  14174. +       -mv $(STAGESTUFF) stage3
  14175. +       -rm -f stage3/libgcc.a
  14176. +       -cp libgcc.a stage3
  14177. +       -if $(RANLIB_TEST) ; then $(RANLIB) stage3/libgcc.a; else true; fi
  14178. +   
  14179. + ! stage4: force
  14180. +       -if [ -d stage4 ] ; then true ; else mkdir stage4 ; fi
  14181. +       -mv $(STAGESTUFF) stage4
  14182. +       -rm -f stage4/libgcc.a
  14183. + --- 2146,2173 ----
  14184. +       -rm -f tmp-foo*
  14185. +   
  14186. +   # Copy the object files from a particular stage into a subdirectory.
  14187. + ! stage1: force $(EXTRA_STAGE1_TARGETS)
  14188. +       -if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi
  14189. +       -mv $(STAGESTUFF) stage1
  14190. +       -rm -f stage1/libgcc.a
  14191. +       -cp libgcc.a stage1
  14192. +       -if $(RANLIB_TEST) ; then $(RANLIB) stage1/libgcc.a; else true; fi
  14193. +   
  14194. + ! stage2: force $(EXTRA_STAGE2_TARGETS)
  14195. +       -if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi
  14196. +       -mv $(STAGESTUFF) stage2
  14197. +       -rm -f stage2/libgcc.a
  14198. +       -cp libgcc.a stage2
  14199. +       -if $(RANLIB_TEST) ; then $(RANLIB) stage2/libgcc.a; else true; fi
  14200. +   
  14201. + ! stage3: force $(EXTRA_STAGE3_TARGETS)
  14202. +       -if [ -d stage3 ] ; then true ; else mkdir stage3 ; fi
  14203. +       -mv $(STAGESTUFF) stage3
  14204. +       -rm -f stage3/libgcc.a
  14205. +       -cp libgcc.a stage3
  14206. +       -if $(RANLIB_TEST) ; then $(RANLIB) stage3/libgcc.a; else true; fi
  14207. +   
  14208. + ! stage4: force $(EXTRA_STAGE4_TARGETS)
  14209. +       -if [ -d stage4 ] ; then true ; else mkdir stage4 ; fi
  14210. +       -mv $(STAGESTUFF) stage4
  14211. +       -rm -f stage4/libgcc.a
  14212. + diff -rc --new-file gcc-2.5.8-fsf/README gcc-2.5.8/README
  14213. + *** gcc-2.5.8-fsf/README    Sun Dec 12 11:50:02 1993
  14214. + --- gcc-2.5.8/README    Tue Feb 22 11:26:53 1994
  14215. + ***************
  14216. + *** 10,17 ****
  14217. +   copy of the installation information, as plain ASCII.
  14218. +   
  14219. +   Installing this package will create various files in subdirectories of
  14220. + ! /usr/local/lib, which are passes used by the compiler and a library
  14221. + ! named libgcc.a.  It will also create /usr/local/bin/gcc, which is
  14222. +   the user-level command to do a compilation.
  14223. +   
  14224. +   See the Bugs chapter of the GCC Manual for how to report bugs
  14225. + --- 10,17 ----
  14226. +   copy of the installation information, as plain ASCII.
  14227. +   
  14228. +   Installing this package will create various files in subdirectories of
  14229. + ! /gnu/lib, which are passes used by the compiler and a library
  14230. + ! named libgcc.a.  It will also create /gnu/bin/gcc, which is
  14231. +   the user-level command to do a compilation.
  14232. +   
  14233. +   See the Bugs chapter of the GCC Manual for how to report bugs
  14234. + diff -rc --new-file gcc-2.5.8-fsf/bi-parser.c gcc-2.5.8/bi-parser.c
  14235. + *** gcc-2.5.8-fsf/bi-parser.c    Mon Nov 15 03:57:34 1993
  14236. + --- gcc-2.5.8/bi-parser.c    Tue Feb 22 11:22:13 1994
  14237. + ***************
  14238. + *** 1,5 ****
  14239. +   
  14240. + ! /*  A Bison parser, made from bi-parser.y  */
  14241. +   
  14242. +   #define YYBISON 1  /* Identify Bison output.  */
  14243. +   
  14244. + --- 1,6 ----
  14245. +   
  14246. + ! /*  A Bison parser, made from bi-parser.y with Bison version GNU Bison version 1.22
  14247. + !   */
  14248. +   
  14249. +   #define YYBISON 1  /* Identify Bison output.  */
  14250. +   
  14251. + ***************
  14252. + *** 55,63 ****
  14253. + --- 56,66 ----
  14254. +   
  14255. +   #include <stdio.h>
  14256. +   
  14257. + + #ifndef __cplusplus
  14258. +   #ifndef __STDC__
  14259. +   #define const
  14260. +   #endif
  14261. + + #endif
  14262. +   
  14263. +   
  14264. +   
  14265. + ***************
  14266. + *** 96,101 ****
  14267. + --- 99,105 ----
  14268. +        2,     2,     2,     2,     2,     1,     2,     3,     4
  14269. +   };
  14270. +   
  14271. + + #if YYDEBUG != 0
  14272. +   static const short yyprhs[] = {     0,
  14273. +        0,     2,     4,     7,    18,    20,    24,    28,    34,    42,
  14274. +       52,    53,    55,    59,    60,    62,    66
  14275. + ***************
  14276. + *** 111,116 ****
  14277. + --- 115,122 ----
  14278. +        0,    16,     6,    15,     0,     4,     0
  14279. +   };
  14280. +   
  14281. + + #endif
  14282. + + 
  14283. +   #if YYDEBUG != 0
  14284. +   static const short yyrline[] = { 0,
  14285. +       59,    64,    66,    70,    75,    77,    81,    84,    86,    88,
  14286. + ***************
  14287. + *** 173,179 ****
  14288. +       -1,    12,    -1,    -1,    16
  14289. +   };
  14290. +   /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
  14291. + ! #line 3 "bison.simple"
  14292. +   
  14293. +   /* Skeleton output parser for bison,
  14294. +      Copyright (C) 1984, 1989, 1990 Bob Corbett and Richard Stallman
  14295. + --- 179,185 ----
  14296. +       -1,    12,    -1,    -1,    16
  14297. +   };
  14298. +   /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
  14299. + ! #line 3 "/usr/lib/bison.simple"
  14300. +   
  14301. +   /* Skeleton output parser for bison,
  14302. +      Copyright (C) 1984, 1989, 1990 Bob Corbett and Richard Stallman
  14303. + ***************
  14304. + *** 354,377 ****
  14305. +   #endif
  14306. +   #endif
  14307. +   
  14308. + ! #line 184 "bison.simple"
  14309. + ! 
  14310. + ! /* The user can define YYPARSE_PARAM as the name of an argument to be passed
  14311. + !    into yyparse.  The argument should have type void *.
  14312. + !    It should actually point to an object.
  14313. + !    Grammar actions can access the variable by casting it
  14314. + !    to the proper pointer type.  */
  14315. + ! 
  14316. + ! #ifdef YYPARSE_PARAM
  14317. + ! #define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
  14318. + ! #else
  14319. + ! #define YYPARSE_PARAM
  14320. + ! #define YYPARSE_PARAM_DECL
  14321. + ! #endif
  14322. + ! 
  14323. +   int
  14324. + ! yyparse(YYPARSE_PARAM)
  14325. + !      YYPARSE_PARAM_DECL
  14326. +   {
  14327. +     register int yystate;
  14328. +     register int yyn;
  14329. + --- 360,368 ----
  14330. +   #endif
  14331. +   #endif
  14332. +   
  14333. + ! #line 184 "/usr/lib/bison.simple"
  14334. +   int
  14335. + ! yyparse()
  14336. +   {
  14337. +     register int yystate;
  14338. +     register int yyn;
  14339. + ***************
  14340. + *** 710,716 ****
  14341. +       break;}
  14342. +   }
  14343. +      /* the action file gets copied in in place of this dollarsign */
  14344. + ! #line 480 "bison.simple"
  14345. +   
  14346. +     yyvsp -= yylen;
  14347. +     yyssp -= yylen;
  14348. + --- 701,707 ----
  14349. +       break;}
  14350. +   }
  14351. +      /* the action file gets copied in in place of this dollarsign */
  14352. + ! #line 465 "/usr/lib/bison.simple"
  14353. +   
  14354. +     yyvsp -= yylen;
  14355. +     yyssp -= yylen;
  14356. + diff -rc --new-file gcc-2.5.8-fsf/c-parse.c gcc-2.5.8/c-parse.c
  14357. + *** gcc-2.5.8-fsf/c-parse.c    Tue Nov 23 23:43:40 1993
  14358. + --- gcc-2.5.8/c-parse.c    Mon Apr 25 22:38:25 1994
  14359. + ***************
  14360. + *** 1,5 ****
  14361. +   
  14362. + ! /*  A Bison parser, made from c-parse.y  */
  14363. +   
  14364. +   #define    IDENTIFIER    258
  14365. +   #define    TYPENAME    259
  14366. + --- 1,8 ----
  14367. +   
  14368. + ! /*  A Bison parser, made from c-parse.y with Bison version GNU Bison version 1.22
  14369. + !   */
  14370. + ! 
  14371. + ! #define YYBISON 1  /* Identify Bison output.  */
  14372. +   
  14373. +   #define    IDENTIFIER    258
  14374. +   #define    TYPENAME    259
  14375. + ***************
  14376. + *** 143,151 ****
  14377. + --- 146,156 ----
  14378. +   
  14379. +   #include <stdio.h>
  14380. +   
  14381. + + #ifndef __cplusplus
  14382. +   #ifndef __STDC__
  14383. +   #define const
  14384. +   #endif
  14385. + + #endif
  14386. +   
  14387. +   
  14388. +   
  14389. + ***************
  14390. + *** 190,196 ****
  14391. +       70,    71,    72,    73,    74,    75,    76
  14392. +   };
  14393. +   
  14394. + ! static const short yyrline[] = {     0,
  14395. +      218,   222,   235,   237,   237,   238,   240,   242,   243,   253,
  14396. +      259,   261,   263,   265,   267,   268,   269,   274,   280,   282,
  14397. +      283,   285,   290,   292,   293,   295,   300,   302,   303,   307,
  14398. + --- 195,363 ----
  14399. +       70,    71,    72,    73,    74,    75,    76
  14400. +   };
  14401. +   
  14402. + ! #if YYDEBUG != 0
  14403. + ! static const short yyprhs[] = {     0,
  14404. + !      0,     1,     3,     4,     7,     8,    12,    14,    16,    22,
  14405. + !     26,    31,    36,    39,    42,    45,    48,    50,    51,    52,
  14406. + !     60,    65,    66,    67,    75,    80,    81,    82,    89,    93,
  14407. + !     95,    97,    99,   101,   103,   105,   107,   109,   111,   113,
  14408. + !    114,   116,   118,   122,   124,   127,   128,   132,   135,   138,
  14409. + !    141,   146,   149,   154,   157,   160,   162,   167,   168,   176,
  14410. + !    178,   182,   186,   190,   194,   198,   202,   206,   210,   214,
  14411. + !    218,   222,   226,   230,   234,   240,   244,   248,   250,   252,
  14412. + !    254,   258,   262,   263,   268,   273,   278,   282,   286,   289,
  14413. + !    292,   294,   297,   298,   300,   303,   307,   309,   311,   314,
  14414. + !    317,   322,   327,   330,   333,   337,   339,   341,   344,   347,
  14415. + !    348,   353,   358,   362,   366,   369,   372,   375,   379,   380,
  14416. + !    383,   386,   388,   390,   393,   396,   399,   403,   404,   407,
  14417. + !    409,   411,   413,   418,   423,   425,   427,   429,   431,   435,
  14418. + !    437,   441,   442,   447,   448,   455,   459,   460,   467,   471,
  14419. + !    472,   479,   481,   485,   487,   489,   494,   499,   508,   510,
  14420. + !    511,   516,   518,   519,   522,   524,   528,   530,   531,   536,
  14421. + !    538,   539,   548,   549,   556,   557,   562,   563,   569,   570,
  14422. + !    574,   575,   579,   581,   583,   587,   591,   596,   600,   604,
  14423. + !    606,   610,   615,   619,   623,   625,   629,   633,   637,   642,
  14424. + !    646,   648,   649,   656,   661,   664,   665,   672,   677,   680,
  14425. + !    681,   689,   690,   697,   700,   701,   703,   704,   706,   708,
  14426. + !    711,   712,   716,   719,   723,   725,   729,   731,   733,   735,
  14427. + !    739,   744,   751,   757,   759,   763,   765,   769,   772,   775,
  14428. + !    776,   778,   780,   783,   784,   787,   791,   795,   798,   802,
  14429. + !    807,   811,   814,   818,   821,   823,   826,   829,   830,   832,
  14430. + !    835,   836,   837,   839,   841,   844,   848,   850,   853,   856,
  14431. + !    863,   869,   875,   878,   881,   886,   887,   892,   893,   894,
  14432. + !    898,   903,   907,   909,   911,   913,   915,   918,   919,   924,
  14433. + !    926,   930,   931,   932,   940,   946,   949,   950,   951,   952,
  14434. + !    965,   966,   973,   976,   979,   982,   986,   993,  1002,  1013,
  14435. + !   1026,  1030,  1035,  1037,  1039,  1040,  1047,  1051,  1057,  1060,
  14436. + !   1063,  1064,  1066,  1067,  1069,  1070,  1072,  1074,  1078,  1083,
  14437. + !   1085,  1089,  1090,  1093,  1096,  1097,  1102,  1105,  1106,  1108,
  14438. + !   1110,  1114,  1116,  1120,  1123,  1126,  1129,  1132,  1135,  1136,
  14439. + !   1139,  1141,  1144,  1146,  1150,  1152
  14440. + ! };
  14441. + ! 
  14442. + ! static const short yyrhs[] = {    -1,
  14443. + !     86,     0,     0,    87,    89,     0,     0,    86,    88,    89,
  14444. + !      0,    91,     0,    90,     0,    27,    60,   100,    77,    78,
  14445. + !      0,   117,   127,    78,     0,   121,   117,   127,    78,     0,
  14446. + !    119,   117,   126,    78,     0,   121,    78,     0,   119,    78,
  14447. + !      0,     1,    78,     0,     1,    79,     0,    78,     0,     0,
  14448. + !      0,   119,   117,   150,    92,   111,    93,   180,     0,   119,
  14449. + !    117,   150,     1,     0,     0,     0,   121,   117,   153,    94,
  14450. + !    111,    95,   180,     0,   121,   117,   153,     1,     0,     0,
  14451. + !      0,   117,   153,    96,   111,    97,   180,     0,   117,   153,
  14452. + !      1,     0,     3,     0,     4,     0,    44,     0,    50,     0,
  14453. + !     49,     0,    55,     0,    56,     0,    80,     0,    81,     0,
  14454. + !    102,     0,     0,   102,     0,   107,     0,   102,    82,   107,
  14455. + !      0,   108,     0,    51,   105,     0,     0,    32,   104,   105,
  14456. + !      0,    99,   105,     0,    41,    98,     0,    11,   103,     0,
  14457. + !     11,    60,   168,    77,     0,    29,   103,     0,    29,    60,
  14458. + !    168,    77,     0,    34,   105,     0,    35,   105,     0,   103,
  14459. + !      0,    60,   168,    77,   105,     0,     0,    60,   168,    77,
  14460. + !     83,   106,   138,    79,     0,   105,     0,   107,    49,   107,
  14461. + !      0,   107,    50,   107,     0,   107,    51,   107,     0,   107,
  14462. + !     52,   107,     0,   107,    53,   107,     0,   107,    47,   107,
  14463. + !      0,   107,    48,   107,     0,   107,    46,   107,     0,   107,
  14464. + !     45,   107,     0,   107,    44,   107,     0,   107,    42,   107,
  14465. + !      0,   107,    43,   107,     0,   107,    41,   107,     0,   107,
  14466. + !     40,   107,     0,   107,    38,   204,    39,   107,     0,   107,
  14467. + !     37,   107,     0,   107,    36,   107,     0,     3,     0,     8,
  14468. + !      0,   110,     0,    60,   100,    77,     0,    60,     1,    77,
  14469. + !      0,     0,    60,   109,   181,    77,     0,   108,    60,   101,
  14470. + !     77,     0,   108,    61,   100,    84,     0,   108,    59,    98,
  14471. + !      0,   108,    58,    98,     0,   108,    55,     0,   108,    56,
  14472. + !      0,     9,     0,   110,     9,     0,     0,   113,     0,   113,
  14473. + !     10,     0,   186,   187,   114,     0,   112,     0,   175,     0,
  14474. + !    113,   112,     0,   112,   175,     0,   119,   117,   126,    78,
  14475. + !      0,   121,   117,   127,    78,     0,   119,    78,     0,   121,
  14476. + !     78,     0,   186,   187,   118,     0,   115,     0,   175,     0,
  14477. + !    116,   115,     0,   115,   175,     0,     0,   119,   117,   126,
  14478. + !     78,     0,   121,   117,   127,    78,     0,   119,   117,   146,
  14479. + !      0,   121,   117,   148,     0,   119,    78,     0,   121,    78,
  14480. + !      0,   124,   120,     0,   121,   124,   120,     0,     0,   120,
  14481. + !    125,     0,   120,     5,     0,     7,     0,     5,     0,   121,
  14482. + !      7,     0,   121,     5,     0,   124,   123,     0,   170,   124,
  14483. + !    123,     0,     0,   123,   125,     0,     6,     0,   154,     0,
  14484. + !      4,     0,    28,    60,   100,    77,     0,    28,    60,   168,
  14485. + !     77,     0,     6,     0,     7,     0,   154,     0,   129,     0,
  14486. + !    126,    82,   129,     0,   131,     0,   127,    82,   129,     0,
  14487. + !      0,    27,    60,   110,    77,     0,     0,   150,   128,   133,
  14488. + !     37,   130,   136,     0,   150,   128,   133,     0,     0,   153,
  14489. + !    128,   133,    37,   132,   136,     0,   153,   128,   133,     0,
  14490. + !      0,    31,    60,    60,   134,    77,    77,     0,   135,     0,
  14491. + !    134,    82,   135,     0,     3,     0,     7,     0,     3,    60,
  14492. + !      3,    77,     0,     3,    60,     8,    77,     0,     3,    60,
  14493. + !      3,    82,     8,    82,     8,    77,     0,   107,     0,     0,
  14494. + !     83,   137,   138,    79,     0,     1,     0,     0,   139,   159,
  14495. + !      0,   140,     0,   139,    82,   140,     0,   107,     0,     0,
  14496. + !     83,   141,   138,    79,     0,     1,     0,     0,    61,   107,
  14497. + !     10,   107,    84,    37,   142,   140,     0,     0,    61,   107,
  14498. + !     84,    37,   143,   140,     0,     0,    98,    39,   144,   140,
  14499. + !      0,     0,    59,    98,    37,   145,   140,     0,     0,   150,
  14500. + !    147,   181,     0,     0,   153,   149,   181,     0,   151,     0,
  14501. + !    153,     0,    60,   151,    77,     0,   151,    60,   216,     0,
  14502. + !    151,    61,   100,    84,     0,   151,    61,    84,     0,    51,
  14503. + !    171,   151,     0,     4,     0,   152,    60,   216,     0,   152,
  14504. + !     61,   100,    84,     0,   152,    61,    84,     0,    51,   171,
  14505. + !    152,     0,     4,     0,   153,    60,   216,     0,    60,   153,
  14506. + !     77,     0,    51,   171,   153,     0,   153,    61,   100,    84,
  14507. + !      0,   153,    61,    84,     0,     3,     0,     0,    13,    98,
  14508. + !     83,   155,   161,    79,     0,    13,    83,   161,    79,     0,
  14509. + !     13,    98,     0,     0,    14,    98,    83,   156,   161,    79,
  14510. + !      0,    14,    83,   161,    79,     0,    14,    98,     0,     0,
  14511. + !     12,    98,    83,   157,   166,   160,    79,     0,     0,    12,
  14512. + !     83,   158,   166,   160,    79,     0,    12,    98,     0,     0,
  14513. + !     82,     0,     0,    82,     0,   162,     0,   162,   163,     0,
  14514. + !      0,   162,   163,    78,     0,   162,    78,     0,   122,   117,
  14515. + !    164,     0,   122,     0,   170,   117,   164,     0,   170,     0,
  14516. + !      1,     0,   165,     0,   164,    82,   165,     0,   186,   187,
  14517. + !    150,   133,     0,   186,   187,   150,    39,   107,   133,     0,
  14518. + !    186,   187,    39,   107,   133,     0,   167,     0,   166,    82,
  14519. + !    167,     0,    98,     0,    98,    37,   107,     0,   122,   169,
  14520. + !      0,   170,   169,     0,     0,   172,     0,     7,     0,   170,
  14521. + !      7,     0,     0,   171,     7,     0,    60,   172,    77,     0,
  14522. + !     51,   171,   172,     0,    51,   171,     0,   172,    60,   209,
  14523. + !      0,   172,    61,   100,    84,     0,   172,    61,    84,     0,
  14524. + !     60,   209,     0,    61,   100,    84,     0,    61,    84,     0,
  14525. + !    189,     0,   173,   189,     0,   173,   175,     0,     0,   173,
  14526. + !      0,     1,    78,     0,     0,     0,   178,     0,   179,     0,
  14527. + !    178,   179,     0,    33,   220,    78,     0,   181,     0,     1,
  14528. + !    181,     0,    83,    79,     0,    83,   176,   177,   116,   174,
  14529. + !     79,     0,    83,   176,   177,     1,    79,     0,    83,   176,
  14530. + !    177,   173,    79,     0,   183,   188,     0,   183,     1,     0,
  14531. + !     15,    60,   100,    77,     0,     0,    18,   185,   188,    17,
  14532. + !      0,     0,     0,   186,   187,   191,     0,   186,   187,   202,
  14533. + !    188,     0,   186,   187,   190,     0,   191,     0,   202,     0,
  14534. + !    181,     0,   199,     0,   100,    78,     0,     0,   182,    16,
  14535. + !    192,   188,     0,   182,     0,   182,    16,     1,     0,     0,
  14536. + !      0,    17,   193,    60,   100,    77,   194,   188,     0,   184,
  14537. + !     60,   100,    77,    78,     0,   184,     1,     0,     0,     0,
  14538. + !      0,    19,    60,   204,    78,   195,   204,    78,   196,   204,
  14539. + !     77,   197,   188,     0,     0,    20,    60,   100,    77,   198,
  14540. + !    188,     0,    23,    78,     0,    24,    78,     0,    25,    78,
  14541. + !      0,    25,   100,    78,     0,    27,   203,    60,   100,    77,
  14542. + !     78,     0,    27,   203,    60,   100,    39,   205,    77,    78,
  14543. + !      0,    27,   203,    60,   100,    39,   205,    39,   205,    77,
  14544. + !     78,     0,    27,   203,    60,   100,    39,   205,    39,   205,
  14545. + !     39,   208,    77,    78,     0,    26,    98,    78,     0,    26,
  14546. + !     51,   100,    78,     0,    78,     0,   200,     0,     0,    19,
  14547. + !     60,   108,    77,   201,   188,     0,    21,   107,    39,     0,
  14548. + !     21,   107,    10,   107,    39,     0,    22,    39,     0,    98,
  14549. + !     39,     0,     0,     7,     0,     0,   100,     0,     0,   206,
  14550. + !      0,   207,     0,   206,    82,   207,     0,     9,    60,   100,
  14551. + !     77,     0,   110,     0,   208,    82,   110,     0,     0,   210,
  14552. + !    211,     0,   213,    77,     0,     0,   214,    78,   212,   211,
  14553. + !      0,     1,    77,     0,     0,    10,     0,   214,     0,   214,
  14554. + !     82,    10,     0,   215,     0,   214,    82,   215,     0,   119,
  14555. + !    152,     0,   119,   153,     0,   119,   169,     0,   121,   153,
  14556. + !      0,   121,   169,     0,     0,   217,   218,     0,   211,     0,
  14557. + !    219,    77,     0,     3,     0,   219,    82,     3,     0,    98,
  14558. + !      0,   220,    82,    98,     0
  14559. + ! };
  14560. + ! 
  14561. + ! #endif
  14562. + ! 
  14563. + ! #if YYDEBUG != 0
  14564. + ! static const short yyrline[] = { 0,
  14565. +      218,   222,   235,   237,   237,   238,   240,   242,   243,   253,
  14566. +      259,   261,   263,   265,   267,   268,   269,   274,   280,   282,
  14567. +      283,   285,   290,   292,   293,   295,   300,   302,   303,   307,
  14568. + ***************
  14569. + *** 206,245 ****
  14570. +      764,   775,   779,   781,   784,   797,   800,   804,   806,   814,
  14571. +      815,   816,   820,   822,   828,   829,   830,   833,   835,   838,
  14572. +      840,   843,   846,   852,   859,   862,   868,   875,   878,   885,
  14573. + !    888,   893,   895,   900,   906,   907,   917,   928,   948,   950,
  14574. + !    955,   962,   967,   971,   974,   976,   981,   984,   986,   988,
  14575. + !    992,   995,   995,   998,   998,  1001,  1001,  1004,  1006,  1023,
  14576. + !   1027,  1044,  1051,  1053,  1058,  1061,  1066,  1068,  1070,  1072,
  14577. + !   1080,  1086,  1088,  1090,  1092,  1098,  1104,  1106,  1108,  1110,
  14578. + !   1112,  1115,  1120,  1124,  1127,  1129,  1131,  1133,  1136,  1138,
  14579. + !   1141,  1144,  1147,  1150,  1154,  1156,  1159,  1161,  1165,  1168,
  14580. + !   1173,  1175,  1177,  1191,  1197,  1202,  1207,  1212,  1216,  1218,
  14581. + !   1222,  1226,  1230,  1240,  1242,  1247,  1250,  1254,  1257,  1261,
  14582. + !   1264,  1267,  1270,  1274,  1277,  1281,  1285,  1287,  1289,  1291,
  14583. + !   1293,  1295,  1297,  1299,  1307,  1309,  1310,  1313,  1315,  1318,
  14584. + !   1321,  1332,  1334,  1339,  1341,  1344,  1358,  1361,  1364,  1366,
  14585. + !   1371,  1376,  1384,  1389,  1392,  1405,  1413,  1417,  1421,  1425,
  14586. + !   1431,  1435,  1440,  1442,  1453,  1456,  1457,  1474,  1479,  1482,
  14587. + !   1493,  1495,  1505,  1515,  1516,  1524,  1527,  1539,  1543,  1560,
  14588. + !   1567,  1576,  1578,  1583,  1588,  1592,  1596,  1607,  1614,  1621,
  14589. + !   1628,  1639,  1643,  1646,  1651,  1674,  1705,  1730,  1759,  1774,
  14590. + !   1785,  1789,  1793,  1796,  1801,  1803,  1806,  1808,  1812,  1817,
  14591. + !   1820,  1826,  1831,  1836,  1838,  1847,  1848,  1854,  1856,  1861,
  14592. + !   1863,  1867,  1870,  1876,  1879,  1881,  1883,  1885,  1892,  1897,
  14593. + !   1902,  1904,  1913,  1916,  1921,  1924
  14594. +   };
  14595. +   
  14596. + ! static const char * const yytname[] = {     0,
  14597. + ! "error","$illegal.","IDENTIFIER","TYPENAME","SCSPEC","TYPESPEC","TYPE_QUAL","CONSTANT","STRING","ELLIPSIS",
  14598. + ! "SIZEOF","ENUM","STRUCT","UNION","IF","ELSE","WHILE","DO","FOR","SWITCH",
  14599. + ! "CASE","DEFAULT","BREAK","CONTINUE","RETURN","GOTO","ASM_KEYWORD","TYPEOF","ALIGNOF","ALIGN",
  14600. + ! "ATTRIBUTE","EXTENSION","LABEL","REALPART","IMAGPART","ASSIGN","'='","'?'","':'","OROR",
  14601. + ! "ANDAND","'|'","'^'","'&'","EQCOMPARE","ARITHCOMPARE","LSHIFT","RSHIFT","'+'","'-'",
  14602. + ! "'*'","'/'","'%'","UNARY","PLUSPLUS","MINUSMINUS","HYPERUNARY","POINTSAT","'.'","'('",
  14603. + ! "'['","INTERFACE","IMPLEMENTATION","END","SELECTOR","DEFS","ENCODE","CLASSNAME","PUBLIC","PRIVATE",
  14604. + ! "PROTECTED","PROTOCOL","OBJECTNAME","CLASS","ALIAS","OBJC_STRING","')'","';'","'}'","'~'",
  14605. + ! "'!'","','","'{'","']'","program"
  14606. +   };
  14607. +   
  14608. +   static const short yyr1[] = {     0,
  14609. +       85,    85,    87,    86,    88,    86,    89,    89,    89,    90,
  14610. + --- 373,433 ----
  14611. +      764,   775,   779,   781,   784,   797,   800,   804,   806,   814,
  14612. +      815,   816,   820,   822,   828,   829,   830,   833,   835,   838,
  14613. +      840,   843,   846,   852,   859,   862,   868,   875,   878,   885,
  14614. + !    888,   893,   895,   900,   914,   915,   925,   936,   956,   958,
  14615. + !    963,   970,   975,   979,   982,   984,   989,   992,   994,   996,
  14616. + !   1000,  1003,  1003,  1006,  1006,  1009,  1009,  1012,  1014,  1031,
  14617. + !   1035,  1052,  1059,  1061,  1066,  1069,  1074,  1076,  1078,  1080,
  14618. + !   1088,  1094,  1096,  1098,  1100,  1106,  1112,  1114,  1116,  1118,
  14619. + !   1120,  1123,  1128,  1132,  1135,  1137,  1139,  1141,  1144,  1146,
  14620. + !   1149,  1152,  1155,  1158,  1162,  1164,  1167,  1169,  1173,  1176,
  14621. + !   1181,  1183,  1185,  1199,  1205,  1210,  1215,  1220,  1224,  1226,
  14622. + !   1230,  1234,  1238,  1248,  1250,  1255,  1258,  1262,  1265,  1269,
  14623. + !   1272,  1275,  1278,  1282,  1285,  1289,  1293,  1295,  1297,  1299,
  14624. + !   1301,  1303,  1305,  1307,  1315,  1317,  1318,  1321,  1323,  1326,
  14625. + !   1329,  1340,  1342,  1347,  1349,  1352,  1366,  1369,  1372,  1374,
  14626. + !   1379,  1384,  1392,  1397,  1400,  1413,  1421,  1425,  1429,  1433,
  14627. + !   1439,  1443,  1448,  1450,  1461,  1464,  1465,  1482,  1487,  1490,
  14628. + !   1501,  1503,  1513,  1523,  1524,  1532,  1535,  1547,  1551,  1568,
  14629. + !   1575,  1584,  1586,  1591,  1596,  1600,  1604,  1615,  1622,  1629,
  14630. + !   1636,  1647,  1651,  1654,  1659,  1682,  1713,  1738,  1767,  1782,
  14631. + !   1793,  1797,  1801,  1804,  1809,  1811,  1814,  1816,  1820,  1825,
  14632. + !   1828,  1834,  1839,  1844,  1846,  1855,  1856,  1862,  1864,  1869,
  14633. + !   1871,  1875,  1878,  1884,  1887,  1889,  1891,  1893,  1900,  1905,
  14634. + !   1910,  1912,  1921,  1924,  1929,  1932
  14635. +   };
  14636. +   
  14637. + ! static const char * const yytname[] = {   "$","error","$illegal.","IDENTIFIER",
  14638. + ! "TYPENAME","SCSPEC","TYPESPEC","TYPE_QUAL","CONSTANT","STRING","ELLIPSIS","SIZEOF",
  14639. + ! "ENUM","STRUCT","UNION","IF","ELSE","WHILE","DO","FOR","SWITCH","CASE","DEFAULT",
  14640. + ! "BREAK","CONTINUE","RETURN","GOTO","ASM_KEYWORD","TYPEOF","ALIGNOF","ALIGN",
  14641. + ! "ATTRIBUTE","EXTENSION","LABEL","REALPART","IMAGPART","ASSIGN","'='","'?'","':'",
  14642. + ! "OROR","ANDAND","'|'","'^'","'&'","EQCOMPARE","ARITHCOMPARE","LSHIFT","RSHIFT",
  14643. + ! "'+'","'-'","'*'","'/'","'%'","UNARY","PLUSPLUS","MINUSMINUS","HYPERUNARY","POINTSAT",
  14644. + ! "'.'","'('","'['","INTERFACE","IMPLEMENTATION","END","SELECTOR","DEFS","ENCODE",
  14645. + ! "CLASSNAME","PUBLIC","PRIVATE","PROTECTED","PROTOCOL","OBJECTNAME","CLASS","ALIAS",
  14646. + ! "OBJC_STRING","')'","';'","'}'","'~'","'!'","','","'{'","']'","program","extdefs",
  14647. + ! "@1","@2","extdef","datadef","fndef","@3","@4","@5","@6","@7","@8","identifier",
  14648. + ! "unop","expr","exprlist","nonnull_exprlist","unary_expr","@9","cast_expr","@10",
  14649. + ! "expr_no_commas","primary","@11","string","xdecls","lineno_datadecl","datadecls",
  14650. + ! "datadecl","lineno_decl","decls","setspecs","decl","typed_declspecs","reserved_declspecs",
  14651. + ! "declmods","typed_typespecs","reserved_typespecquals","typespec","typespecqual_reserved",
  14652. + ! "initdecls","notype_initdecls","maybeasm","initdcl","@12","notype_initdcl","@13",
  14653. + ! "maybe_attribute","attribute_list","attrib","init","@14","initlist_maybe_comma",
  14654. + ! "initlist1","initelt","@15","@16","@17","@18","@19","nested_function","@20",
  14655. + ! "notype_nested_function","@21","declarator","after_type_declarator","parm_declarator",
  14656. + ! "notype_declarator","structsp","@22","@23","@24","@25","maybecomma","maybecomma_warn",
  14657. + ! "component_decl_list","component_decl_list2","component_decl","components","component_declarator",
  14658. + ! "enumlist","enumerator","typename","absdcl","nonempty_type_quals","type_quals",
  14659. + ! "absdcl1","stmts","xstmts","errstmt","pushlevel","maybe_label_decls","label_decls",
  14660. + ! "label_decl","compstmt_or_error","compstmt","simple_if","if_prefix","do_stmt_start",
  14661. + ! "@26","save_filename","save_lineno","lineno_labeled_stmt","lineno_stmt_or_label",
  14662. + ! "stmt_or_label","stmt","@27","@28","@29","@30","@31","@32","@33","all_iter_stmt",
  14663. + ! "all_iter_stmt_simple","@34","label","maybe_type_qual","xexpr","asm_operands",
  14664. + ! "nonnull_asm_operands","asm_operand","asm_clobbers","parmlist","@35","parmlist_1",
  14665. + ! "@36","parmlist_2","parms","parm","parmlist_or_identifiers","@37","parmlist_or_identifiers_1",
  14666. + ! "identifiers","identifiers_or_typenames",""
  14667. +   };
  14668. + + #endif
  14669. +   
  14670. +   static const short yyr1[] = {     0,
  14671. +       85,    85,    87,    86,    88,    86,    89,    89,    89,    90,
  14672. + ***************
  14673. + *** 896,908 ****
  14674. +       48,    49,    50,    51,    52,    53,    43,    44,    45,    46,
  14675. +       47,    48,    49,    50,    51,    52,    53
  14676. +   };
  14677. + - #define YYPURE 1
  14678. + - 
  14679. +   /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
  14680. + ! #line 3 "bison.simple"
  14681. +   
  14682. +   /* Skeleton output parser for bison,
  14683. + !    Copyright (C) 1984 Bob Corbett and Richard Stallman
  14684. +   
  14685. +      This program is free software; you can redistribute it and/or modify
  14686. +      it under the terms of the GNU General Public License as published by
  14687. + --- 1084,1094 ----
  14688. +       48,    49,    50,    51,    52,    53,    43,    44,    45,    46,
  14689. +       47,    48,    49,    50,    51,    52,    53
  14690. +   };
  14691. +   /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
  14692. + ! #line 3 "/gnu/lib/bison.simple"
  14693. +   
  14694. +   /* Skeleton output parser for bison,
  14695. + !    Copyright (C) 1984, 1989, 1990 Bob Corbett and Richard Stallman
  14696. +   
  14697. +      This program is free software; you can redistribute it and/or modify
  14698. +      it under the terms of the GNU General Public License as published by
  14699. + ***************
  14700. + *** 919,927 ****
  14701. +      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  14702. +   
  14703. +   
  14704. + ! #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__)
  14705. +   #include <alloca.h>
  14706. + ! #endif
  14707. +   
  14708. +   /* This is the parser code that is written into each bison parser
  14709. +     when the %semantic_parser declaration is not specified in the grammar.
  14710. + --- 1105,1138 ----
  14711. +      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  14712. +   
  14713. +   
  14714. + ! #ifndef alloca
  14715. + ! #ifdef __GNUC__
  14716. + ! #define alloca __builtin_alloca
  14717. + ! #else /* not GNU C.  */
  14718. + ! #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
  14719. +   #include <alloca.h>
  14720. + ! #else /* not sparc */
  14721. + ! #if defined (MSDOS) && !defined (__TURBOC__)
  14722. + ! #include <malloc.h>
  14723. + ! #else /* not MSDOS, or __TURBOC__ */
  14724. + ! #if defined(_AIX)
  14725. + ! #include <malloc.h>
  14726. + !  #pragma alloca
  14727. + ! #else /* not MSDOS, __TURBOC__, or _AIX */
  14728. + ! #ifdef __hpux
  14729. + ! #ifdef __cplusplus
  14730. + ! extern "C" {
  14731. + ! void *alloca (unsigned int);
  14732. + ! };
  14733. + ! #else /* not __cplusplus */
  14734. + ! void *alloca ();
  14735. + ! #endif /* not __cplusplus */
  14736. + ! #endif /* __hpux */
  14737. + ! #endif /* not _AIX */
  14738. + ! #endif /* not MSDOS, or __TURBOC__ */
  14739. + ! #endif /* not sparc.  */
  14740. + ! #endif /* not GNU C.  */
  14741. + ! #endif /* alloca not defined.  */
  14742. +   
  14743. +   /* This is the parser code that is written into each bison parser
  14744. +     when the %semantic_parser declaration is not specified in the grammar.
  14745. + ***************
  14746. + *** 936,970 ****
  14747. +   #define yyclearin    (yychar = YYEMPTY)
  14748. +   #define YYEMPTY        -2
  14749. +   #define YYEOF        0
  14750. + - #define YYFAIL        goto yyerrlab;
  14751. +   #define YYACCEPT    return(0)
  14752. +   #define YYABORT     return(1)
  14753. + ! #define YYERROR        goto yyerrlab
  14754. +   
  14755. +   #define YYTERROR    1
  14756. +   #define YYERRCODE    256
  14757. +   
  14758. + ! #ifndef YYIMPURE
  14759. +   #define YYLEX        yylex()
  14760. +   #endif
  14761. +   
  14762. + ! #ifndef YYPURE
  14763. +   #define YYLEX        yylex(&yylval, &yylloc)
  14764. +   #endif
  14765. +   
  14766. +   /* If nonreentrant, generate the variables here */
  14767. +   
  14768. + ! #ifndef YYIMPURE
  14769. +   
  14770. +   int    yychar;            /*  the lookahead symbol        */
  14771. +   YYSTYPE    yylval;            /*  the semantic value of the        */
  14772. +                   /*  lookahead symbol            */
  14773. +   
  14774. +   YYLTYPE yylloc;            /*  location data for the lookahead    */
  14775. +                   /*  symbol                */
  14776. +   
  14777. +   int yynerrs;            /*  number of parse errors so far       */
  14778. + ! #endif  /* YYIMPURE */
  14779. +   
  14780. +   #if YYDEBUG != 0
  14781. +   int yydebug;            /*  nonzero means print parse trace    */
  14782. + --- 1147,1203 ----
  14783. +   #define yyclearin    (yychar = YYEMPTY)
  14784. +   #define YYEMPTY        -2
  14785. +   #define YYEOF        0
  14786. +   #define YYACCEPT    return(0)
  14787. +   #define YYABORT     return(1)
  14788. + ! #define YYERROR        goto yyerrlab1
  14789. + ! /* Like YYERROR except do call yyerror.
  14790. + !    This remains here temporarily to ease the
  14791. + !    transition to the new meaning of YYERROR, for GCC.
  14792. + !    Once GCC version 2 has supplanted version 1, this can go.  */
  14793. + ! #define YYFAIL        goto yyerrlab
  14794. + ! #define YYRECOVERING()  (!!yyerrstatus)
  14795. + ! #define YYBACKUP(token, value) \
  14796. + ! do                                \
  14797. + !   if (yychar == YYEMPTY && yylen == 1)                \
  14798. + !     { yychar = (token), yylval = (value);            \
  14799. + !       yychar1 = YYTRANSLATE (yychar);                \
  14800. + !       YYPOPSTACK;                        \
  14801. + !       goto yybackup;                        \
  14802. + !     }                                \
  14803. + !   else                                \
  14804. + !     { yyerror ("syntax error: cannot back up"); YYERROR; }    \
  14805. + ! while (0)
  14806. +   
  14807. +   #define YYTERROR    1
  14808. +   #define YYERRCODE    256
  14809. +   
  14810. + ! #ifndef YYPURE
  14811. +   #define YYLEX        yylex()
  14812. +   #endif
  14813. +   
  14814. + ! #ifdef YYPURE
  14815. + ! #ifdef YYLSP_NEEDED
  14816. +   #define YYLEX        yylex(&yylval, &yylloc)
  14817. + + #else
  14818. + + #define YYLEX        yylex(&yylval)
  14819. + + #endif
  14820. +   #endif
  14821. +   
  14822. +   /* If nonreentrant, generate the variables here */
  14823. +   
  14824. + ! #ifndef YYPURE
  14825. +   
  14826. +   int    yychar;            /*  the lookahead symbol        */
  14827. +   YYSTYPE    yylval;            /*  the semantic value of the        */
  14828. +                   /*  lookahead symbol            */
  14829. +   
  14830. + + #ifdef YYLSP_NEEDED
  14831. +   YYLTYPE yylloc;            /*  location data for the lookahead    */
  14832. +                   /*  symbol                */
  14833. + + #endif
  14834. +   
  14835. +   int yynerrs;            /*  number of parse errors so far       */
  14836. + ! #endif  /* not YYPURE */
  14837. +   
  14838. +   #if YYDEBUG != 0
  14839. +   int yydebug;            /*  nonzero means print parse trace    */
  14840. + ***************
  14841. + *** 972,992 ****
  14842. +      from coexisting.  */
  14843. +   #endif
  14844. +   
  14845. + ! /*  YYMAXDEPTH indicates the initial size of the parser's stacks    */
  14846. +   
  14847. + ! #ifndef    YYMAXDEPTH
  14848. + ! #define YYMAXDEPTH 200
  14849. +   #endif
  14850. +   
  14851. + ! /*  YYMAXLIMIT is the maximum size the stacks can grow to
  14852. +       (effective only if the built-in stack extension method is used).  */
  14853. +   
  14854. + ! #ifndef YYMAXLIMIT
  14855. + ! #define YYMAXLIMIT 10000
  14856. +   #endif
  14857. +   
  14858. +   
  14859. + ! #line 90 "bison.simple"
  14860. +   int
  14861. +   yyparse()
  14862. +   {
  14863. + --- 1205,1272 ----
  14864. +      from coexisting.  */
  14865. +   #endif
  14866. +   
  14867. + ! /*  YYINITDEPTH indicates the initial size of the parser's stacks    */
  14868. +   
  14869. + ! #ifndef    YYINITDEPTH
  14870. + ! #define YYINITDEPTH 200
  14871. +   #endif
  14872. +   
  14873. + ! /*  YYMAXDEPTH is the maximum size the stacks can grow to
  14874. +       (effective only if the built-in stack extension method is used).  */
  14875. +   
  14876. + ! #if YYMAXDEPTH == 0
  14877. + ! #undef YYMAXDEPTH
  14878. +   #endif
  14879. +   
  14880. + + #ifndef YYMAXDEPTH
  14881. + + #define YYMAXDEPTH 10000
  14882. + + #endif
  14883. + + 
  14884. + + /* Prevent warning if -Wstrict-prototypes.  */
  14885. + + #ifdef __GNUC__
  14886. + + int yyparse (void);
  14887. + + #endif
  14888. + + 
  14889. + + #if __GNUC__ > 1        /* GNU C and GNU C++ define this.  */
  14890. + + #define __yy_bcopy(FROM,TO,COUNT)    __builtin_memcpy(TO,FROM,COUNT)
  14891. + + #else                /* not GNU C or C++ */
  14892. + + #ifndef __cplusplus
  14893. + + 
  14894. + + /* This is the most reliable way to avoid incompatibilities
  14895. + +    in available built-in functions on various systems.  */
  14896. + + static void
  14897. + + __yy_bcopy (from, to, count)
  14898. + +      char *from;
  14899. + +      char *to;
  14900. + +      int count;
  14901. + + {
  14902. + +   register char *f = from;
  14903. + +   register char *t = to;
  14904. + +   register int i = count;
  14905. +   
  14906. + !   while (i-- > 0)
  14907. + !     *t++ = *f++;
  14908. + ! }
  14909. + ! 
  14910. + ! #else /* __cplusplus */
  14911. + ! 
  14912. + ! /* This is the most reliable way to avoid incompatibilities
  14913. + !    in available built-in functions on various systems.  */
  14914. + ! static void
  14915. + ! __yy_bcopy (char *from, char *to, int count)
  14916. + ! {
  14917. + !   register char *f = from;
  14918. + !   register char *t = to;
  14919. + !   register int i = count;
  14920. + ! 
  14921. + !   while (i-- > 0)
  14922. + !     *t++ = *f++;
  14923. + ! }
  14924. + ! 
  14925. + ! #endif
  14926. + ! #endif
  14927. + ! 
  14928. + ! #line 184 "/gnu/lib/bison.simple"
  14929. +   int
  14930. +   yyparse()
  14931. +   {
  14932. + ***************
  14933. + *** 994,1018 ****
  14934. +     register int yyn;
  14935. +     register short *yyssp;
  14936. +     register YYSTYPE *yyvsp;
  14937. + -   YYLTYPE *yylsp;
  14938. +     int yyerrstatus;    /*  number of tokens to shift before error messages enabled */
  14939. + !   int yychar1;        /*  lookahead token as an internal (translated) token number */
  14940. +   
  14941. + !   short    yyssa[YYMAXDEPTH];    /*  the state stack            */
  14942. + !   YYSTYPE yyvsa[YYMAXDEPTH];    /*  the semantic value stack        */
  14943. + !   YYLTYPE yylsa[YYMAXDEPTH];    /*  the location stack            */
  14944. +   
  14945. +     short *yyss = yyssa;        /*  refer to the stacks thru separate pointers */
  14946. +     YYSTYPE *yyvs = yyvsa;    /*  to allow yyoverflow to reallocate them elsewhere */
  14947. +     YYLTYPE *yyls = yylsa;
  14948. +   
  14949. + !   int yymaxdepth = YYMAXDEPTH;
  14950. +   
  14951. + ! #ifndef YYPURE
  14952. +     int yychar;
  14953. +     YYSTYPE yylval;
  14954. + -   YYLTYPE yylloc;
  14955. +     int yynerrs;
  14956. +   #endif
  14957. +   
  14958. +     YYSTYPE yyval;        /*  the variable used to return        */
  14959. + --- 1274,1307 ----
  14960. +     register int yyn;
  14961. +     register short *yyssp;
  14962. +     register YYSTYPE *yyvsp;
  14963. +     int yyerrstatus;    /*  number of tokens to shift before error messages enabled */
  14964. + !   int yychar1 = 0;        /*  lookahead token as an internal (translated) token number */
  14965. +   
  14966. + !   short    yyssa[YYINITDEPTH];    /*  the state stack            */
  14967. + !   YYSTYPE yyvsa[YYINITDEPTH];    /*  the semantic value stack        */
  14968. +   
  14969. +     short *yyss = yyssa;        /*  refer to the stacks thru separate pointers */
  14970. +     YYSTYPE *yyvs = yyvsa;    /*  to allow yyoverflow to reallocate them elsewhere */
  14971. + + 
  14972. + + #ifdef YYLSP_NEEDED
  14973. + +   YYLTYPE yylsa[YYINITDEPTH];    /*  the location stack            */
  14974. +     YYLTYPE *yyls = yylsa;
  14975. + +   YYLTYPE *yylsp;
  14976. + + 
  14977. + + #define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
  14978. + + #else
  14979. + + #define YYPOPSTACK   (yyvsp--, yyssp--)
  14980. + + #endif
  14981. +   
  14982. + !   int yystacksize = YYINITDEPTH;
  14983. +   
  14984. + ! #ifdef YYPURE
  14985. +     int yychar;
  14986. +     YYSTYPE yylval;
  14987. +     int yynerrs;
  14988. + + #ifdef YYLSP_NEEDED
  14989. + +   YYLTYPE yylloc;
  14990. + + #endif
  14991. +   #endif
  14992. +   
  14993. +     YYSTYPE yyval;        /*  the variable used to return        */
  14994. + ***************
  14995. + *** 1033,1043 ****
  14996. +   
  14997. +     /* Initialize stack pointers.
  14998. +        Waste one element of value and location stack
  14999. + !      so that they stay on the same level as the state stack.  */
  15000. +   
  15001. +     yyssp = yyss - 1;
  15002. +     yyvsp = yyvs;
  15003. +     yylsp = yyls;
  15004. +   
  15005. +   /* Push a new state, which is found in  yystate  .  */
  15006. +   /* In all cases, when you get here, the value and location stacks
  15007. + --- 1322,1335 ----
  15008. +   
  15009. +     /* Initialize stack pointers.
  15010. +        Waste one element of value and location stack
  15011. + !      so that they stay on the same level as the state stack.
  15012. + !      The wasted elements are never initialized.  */
  15013. +   
  15014. +     yyssp = yyss - 1;
  15015. +     yyvsp = yyvs;
  15016. + + #ifdef YYLSP_NEEDED
  15017. +     yylsp = yyls;
  15018. + + #endif
  15019. +   
  15020. +   /* Push a new state, which is found in  yystate  .  */
  15021. +   /* In all cases, when you get here, the value and location stacks
  15022. + ***************
  15023. + *** 1046,1058 ****
  15024. +   
  15025. +     *++yyssp = yystate;
  15026. +   
  15027. + !   if (yyssp >= yyss + yymaxdepth - 1)
  15028. +       {
  15029. +         /* Give user a chance to reallocate the stack */
  15030. +         /* Use copies of these so that the &'s don't force the real ones into memory. */
  15031. +         YYSTYPE *yyvs1 = yyvs;
  15032. + -       YYLTYPE *yyls1 = yyls;
  15033. +         short *yyss1 = yyss;
  15034. +   
  15035. +         /* Get the current used size of the three stacks, in elements.  */
  15036. +         int size = yyssp - yyss + 1;
  15037. + --- 1338,1352 ----
  15038. +   
  15039. +     *++yyssp = yystate;
  15040. +   
  15041. + !   if (yyssp >= yyss + yystacksize - 1)
  15042. +       {
  15043. +         /* Give user a chance to reallocate the stack */
  15044. +         /* Use copies of these so that the &'s don't force the real ones into memory. */
  15045. +         YYSTYPE *yyvs1 = yyvs;
  15046. +         short *yyss1 = yyss;
  15047. + + #ifdef YYLSP_NEEDED
  15048. + +       YYLTYPE *yyls1 = yyls;
  15049. + + #endif
  15050. +   
  15051. +         /* Get the current used size of the three stacks, in elements.  */
  15052. +         int size = yyssp - yyss + 1;
  15053. + ***************
  15054. + *** 1060,1086 ****
  15055. +   #ifdef yyoverflow
  15056. +         /* Each stack pointer address is followed by the size of
  15057. +        the data in use in that stack, in bytes.  */
  15058. +         yyoverflow("parser stack overflow",
  15059. +            &yyss1, size * sizeof (*yyssp),
  15060. +            &yyvs1, size * sizeof (*yyvsp),
  15061. +            &yyls1, size * sizeof (*yylsp),
  15062. + !          &yymaxdepth);
  15063. +   
  15064. + !       yyss = yyss1; yyvs = yyvs1; yyls = yyls1;
  15065. +   #else /* no yyoverflow */
  15066. +         /* Extend the stack our own way.  */
  15067. + !       if (yymaxdepth >= YYMAXLIMIT)
  15068. + !     yyerror("parser stack overflow");
  15069. + !       yymaxdepth *= 2;
  15070. + !       if (yymaxdepth > YYMAXLIMIT)
  15071. + !     yymaxdepth = YYMAXLIMIT;
  15072. + !       yyss = (short *) alloca (yymaxdepth * sizeof (*yyssp));
  15073. + !       bcopy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
  15074. + !       yyvs = (YYSTYPE *) alloca (yymaxdepth * sizeof (*yyvsp));
  15075. + !       bcopy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
  15076. +   #ifdef YYLSP_NEEDED
  15077. + !       yyls = (YYLTYPE *) alloca (yymaxdepth * sizeof (*yylsp));
  15078. + !       bcopy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
  15079. +   #endif
  15080. +   #endif /* no yyoverflow */
  15081. +   
  15082. + --- 1354,1395 ----
  15083. +   #ifdef yyoverflow
  15084. +         /* Each stack pointer address is followed by the size of
  15085. +        the data in use in that stack, in bytes.  */
  15086. + + #ifdef YYLSP_NEEDED
  15087. + +       /* This used to be a conditional around just the two extra args,
  15088. + +      but that might be undefined if yyoverflow is a macro.  */
  15089. +         yyoverflow("parser stack overflow",
  15090. +            &yyss1, size * sizeof (*yyssp),
  15091. +            &yyvs1, size * sizeof (*yyvsp),
  15092. +            &yyls1, size * sizeof (*yylsp),
  15093. + !          &yystacksize);
  15094. + ! #else
  15095. + !       yyoverflow("parser stack overflow",
  15096. + !          &yyss1, size * sizeof (*yyssp),
  15097. + !          &yyvs1, size * sizeof (*yyvsp),
  15098. + !          &yystacksize);
  15099. + ! #endif
  15100. +   
  15101. + !       yyss = yyss1; yyvs = yyvs1;
  15102. + ! #ifdef YYLSP_NEEDED
  15103. + !       yyls = yyls1;
  15104. + ! #endif
  15105. +   #else /* no yyoverflow */
  15106. +         /* Extend the stack our own way.  */
  15107. + !       if (yystacksize >= YYMAXDEPTH)
  15108. + !     {
  15109. + !       yyerror("parser stack overflow");
  15110. + !       return 2;
  15111. + !     }
  15112. + !       yystacksize *= 2;
  15113. + !       if (yystacksize > YYMAXDEPTH)
  15114. + !     yystacksize = YYMAXDEPTH;
  15115. + !       yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
  15116. + !       __yy_bcopy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
  15117. + !       yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
  15118. + !       __yy_bcopy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
  15119. +   #ifdef YYLSP_NEEDED
  15120. + !       yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
  15121. + !       __yy_bcopy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
  15122. +   #endif
  15123. +   #endif /* no yyoverflow */
  15124. +   
  15125. + ***************
  15126. + *** 1092,1101 ****
  15127. +   
  15128. +   #if YYDEBUG != 0
  15129. +         if (yydebug)
  15130. + !     fprintf(stderr, "Stack size increased to %d\n", yymaxdepth);
  15131. +   #endif
  15132. +   
  15133. + !       if (yyssp >= yyss + yymaxdepth - 1)
  15134. +       YYABORT;
  15135. +       }
  15136. +   
  15137. + --- 1401,1410 ----
  15138. +   
  15139. +   #if YYDEBUG != 0
  15140. +         if (yydebug)
  15141. + !     fprintf(stderr, "Stack size increased to %d\n", yystacksize);
  15142. +   #endif
  15143. +   
  15144. + !       if (yyssp >= yyss + yystacksize - 1)
  15145. +       YYABORT;
  15146. +       }
  15147. +   
  15148. + ***************
  15149. + *** 1104,1112 ****
  15150. +       fprintf(stderr, "Entering state %d\n", yystate);
  15151. +   #endif
  15152. +   
  15153. +   /* Do appropriate processing given the current state.  */
  15154. +   /* Read a lookahead token if we need one and don't already have one.  */
  15155. + ! yyresume:
  15156. +   
  15157. +     /* First try to decide what to do without reference to lookahead token.  */
  15158. +   
  15159. + --- 1413,1424 ----
  15160. +       fprintf(stderr, "Entering state %d\n", yystate);
  15161. +   #endif
  15162. +   
  15163. + +   goto yybackup;
  15164. + +  yybackup:
  15165. + + 
  15166. +   /* Do appropriate processing given the current state.  */
  15167. +   /* Read a lookahead token if we need one and don't already have one.  */
  15168. + ! /* yyresume: */
  15169. +   
  15170. +     /* First try to decide what to do without reference to lookahead token.  */
  15171. +   
  15172. + ***************
  15173. + *** 1146,1152 ****
  15174. +   
  15175. +   #if YYDEBUG != 0
  15176. +         if (yydebug)
  15177. + !     fprintf(stderr, "Next token is %d (%s)\n", yychar, yytname[yychar1]);
  15178. +   #endif
  15179. +       }
  15180. +   
  15181. + --- 1458,1472 ----
  15182. +   
  15183. +   #if YYDEBUG != 0
  15184. +         if (yydebug)
  15185. + !     {
  15186. + !       fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
  15187. + !       /* Give the individual parser a way to print the precise meaning
  15188. + !          of a token, for further debugging info.  */
  15189. + ! #ifdef YYPRINT
  15190. + !       YYPRINT (stderr, yychar, yylval);
  15191. + ! #endif
  15192. + !       fprintf (stderr, ")\n");
  15193. + !     }
  15194. +   #endif
  15195. +       }
  15196. +   
  15197. + ***************
  15198. + *** 1208,1224 ****
  15199. +   /* Do a reduction.  yyn is the number of a rule to reduce with.  */
  15200. +   yyreduce:
  15201. +     yylen = yyr2[yyn];
  15202. + !   yyval = yyvsp[1-yylen]; /* implement default value of the action */
  15203. +   
  15204. +   #if YYDEBUG != 0
  15205. +     if (yydebug)
  15206. +       {
  15207. + !       if (yylen == 1)
  15208. + !     fprintf (stderr, "Reducing 1 value via line %d, ",
  15209. + !          yyrline[yyn]);
  15210. + !       else
  15211. + !     fprintf (stderr, "Reducing %d values via line %d, ",
  15212. + !          yylen, yyrline[yyn]);
  15213. +       }
  15214. +   #endif
  15215. +   
  15216. + --- 1528,1548 ----
  15217. +   /* Do a reduction.  yyn is the number of a rule to reduce with.  */
  15218. +   yyreduce:
  15219. +     yylen = yyr2[yyn];
  15220. + !   if (yylen > 0)
  15221. + !     yyval = yyvsp[1-yylen]; /* implement default value of the action */
  15222. +   
  15223. +   #if YYDEBUG != 0
  15224. +     if (yydebug)
  15225. +       {
  15226. + !       int i;
  15227. + ! 
  15228. + !       fprintf (stderr, "Reducing via rule %d (line %d), ",
  15229. + !            yyn, yyrline[yyn]);
  15230. + ! 
  15231. + !       /* Print the symbols being reduced, and their result.  */
  15232. + !       for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
  15233. + !     fprintf (stderr, "%s ", yytname[yyrhs[i]]);
  15234. + !       fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
  15235. +       }
  15236. +   #endif
  15237. +   
  15238. + ***************
  15239. + *** 1959,1972 ****
  15240. +       break;}
  15241. +   case 154:
  15242. +   #line 901 "c-parse.y"
  15243. + ! { if (strcmp (IDENTIFIER_POINTER (yyvsp[0].ttype), "packed")
  15244. +             && strcmp (IDENTIFIER_POINTER (yyvsp[0].ttype), "noreturn"))
  15245. +           warning ("`%s' attribute directive ignored",
  15246. +                IDENTIFIER_POINTER (yyvsp[0].ttype));
  15247. +         yyval.ttype = yyvsp[0].ttype; ;
  15248. +       break;}
  15249. +   case 156:
  15250. + ! #line 908 "c-parse.y"
  15251. +   { /* If not "mode (m)", then issue warning.  */
  15252. +         if (strcmp (IDENTIFIER_POINTER (yyvsp[-3].ttype), "mode") != 0)
  15253. +           {
  15254. + --- 2283,2304 ----
  15255. +       break;}
  15256. +   case 154:
  15257. +   #line 901 "c-parse.y"
  15258. + ! {
  15259. + ! #ifdef HANDLE_ATTRIBUTE0
  15260. + !       /* give the function a chance to validate further attributes */
  15261. + !       if (HANDLE_ATTRIBUTE0 (IDENTIFIER_POINTER (yyvsp[0].ttype)) ||
  15262. + !           (strcmp (IDENTIFIER_POINTER (yyvsp[0].ttype), "packed")
  15263. + !           && strcmp (IDENTIFIER_POINTER (yyvsp[0].ttype), "noreturn")))
  15264. + ! #else
  15265. + !       if (strcmp (IDENTIFIER_POINTER (yyvsp[0].ttype), "packed")
  15266. +             && strcmp (IDENTIFIER_POINTER (yyvsp[0].ttype), "noreturn"))
  15267. + + #endif
  15268. +           warning ("`%s' attribute directive ignored",
  15269. +                IDENTIFIER_POINTER (yyvsp[0].ttype));
  15270. +         yyval.ttype = yyvsp[0].ttype; ;
  15271. +       break;}
  15272. +   case 156:
  15273. + ! #line 916 "c-parse.y"
  15274. +   { /* If not "mode (m)", then issue warning.  */
  15275. +         if (strcmp (IDENTIFIER_POINTER (yyvsp[-3].ttype), "mode") != 0)
  15276. +           {
  15277. + ***************
  15278. + *** 1978,1984 ****
  15279. +           yyval.ttype = tree_cons (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE); ;
  15280. +       break;}
  15281. +   case 157:
  15282. + ! #line 918 "c-parse.y"
  15283. +   { /* if not "aligned(n)", then issue warning */
  15284. +         if (strcmp (IDENTIFIER_POINTER (yyvsp[-3].ttype), "aligned") != 0
  15285. +             || TREE_CODE (yyvsp[-1].ttype) != INTEGER_CST)
  15286. + --- 2310,2316 ----
  15287. +           yyval.ttype = tree_cons (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE); ;
  15288. +       break;}
  15289. +   case 157:
  15290. + ! #line 926 "c-parse.y"
  15291. +   { /* if not "aligned(n)", then issue warning */
  15292. +         if (strcmp (IDENTIFIER_POINTER (yyvsp[-3].ttype), "aligned") != 0
  15293. +             || TREE_CODE (yyvsp[-1].ttype) != INTEGER_CST)
  15294. + ***************
  15295. + *** 1991,1997 ****
  15296. +           yyval.ttype = tree_cons (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE); ;
  15297. +       break;}
  15298. +   case 158:
  15299. + ! #line 929 "c-parse.y"
  15300. +   { /* if not "format(...)", then issue warning */
  15301. +         if (strcmp (IDENTIFIER_POINTER (yyvsp[-7].ttype), "format") != 0
  15302. +             || TREE_CODE (yyvsp[-3].ttype) != INTEGER_CST
  15303. + --- 2323,2329 ----
  15304. +           yyval.ttype = tree_cons (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE); ;
  15305. +       break;}
  15306. +   case 158:
  15307. + ! #line 937 "c-parse.y"
  15308. +   { /* if not "format(...)", then issue warning */
  15309. +         if (strcmp (IDENTIFIER_POINTER (yyvsp[-7].ttype), "format") != 0
  15310. +             || TREE_CODE (yyvsp[-3].ttype) != INTEGER_CST
  15311. + ***************
  15312. + *** 2009,2022 ****
  15313. +                   NULL_TREE); ;
  15314. +       break;}
  15315. +   case 160:
  15316. + ! #line 951 "c-parse.y"
  15317. +   { really_start_incremental_init (NULL_TREE);
  15318. +             /* Note that the call to clear_momentary
  15319. +                is in process_init_element.  */
  15320. +             push_momentary (); ;
  15321. +       break;}
  15322. +   case 161:
  15323. + ! #line 956 "c-parse.y"
  15324. +   { yyval.ttype = pop_init_level (0);
  15325. +             if (yyval.ttype == error_mark_node)
  15326. +               pop_momentary ();
  15327. + --- 2341,2354 ----
  15328. +                   NULL_TREE); ;
  15329. +       break;}
  15330. +   case 160:
  15331. + ! #line 959 "c-parse.y"
  15332. +   { really_start_incremental_init (NULL_TREE);
  15333. +             /* Note that the call to clear_momentary
  15334. +                is in process_init_element.  */
  15335. +             push_momentary (); ;
  15336. +       break;}
  15337. +   case 161:
  15338. + ! #line 964 "c-parse.y"
  15339. +   { yyval.ttype = pop_init_level (0);
  15340. +             if (yyval.ttype == error_mark_node)
  15341. +               pop_momentary ();
  15342. + ***************
  15343. + *** 2024,2067 ****
  15344. +               pop_momentary_nofree (); ;
  15345. +       break;}
  15346. +   case 162:
  15347. + ! #line 963 "c-parse.y"
  15348. +   { yyval.ttype = error_mark_node; ;
  15349. +       break;}
  15350. +   case 163:
  15351. + ! #line 969 "c-parse.y"
  15352. +   { if (pedantic)
  15353. +               pedwarn ("ANSI C forbids empty initializer braces"); ;
  15354. +       break;}
  15355. +   case 167:
  15356. + ! #line 983 "c-parse.y"
  15357. +   { process_init_element (yyvsp[0].ttype); ;
  15358. +       break;}
  15359. +   case 168:
  15360. + ! #line 985 "c-parse.y"
  15361. +   { push_init_level (0); ;
  15362. +       break;}
  15363. +   case 169:
  15364. + ! #line 987 "c-parse.y"
  15365. +   { process_init_element (pop_init_level (0)); ;
  15366. +       break;}
  15367. +   case 171:
  15368. + ! #line 993 "c-parse.y"
  15369. +   { set_init_index (yyvsp[-4].ttype, yyvsp[-2].ttype); ;
  15370. +       break;}
  15371. +   case 173:
  15372. + ! #line 996 "c-parse.y"
  15373. +   { set_init_index (yyvsp[-2].ttype, NULL_TREE); ;
  15374. +       break;}
  15375. +   case 175:
  15376. + ! #line 999 "c-parse.y"
  15377. +   { set_init_label (yyvsp[-1].ttype); ;
  15378. +       break;}
  15379. +   case 177:
  15380. + ! #line 1002 "c-parse.y"
  15381. +   { set_init_label (yyvsp[-1].ttype); ;
  15382. +       break;}
  15383. +   case 179:
  15384. + ! #line 1008 "c-parse.y"
  15385. +   { push_c_function_context ();
  15386. +             if (! start_function (current_declspecs, yyvsp[0].ttype, 1))
  15387. +               {
  15388. + --- 2356,2399 ----
  15389. +               pop_momentary_nofree (); ;
  15390. +       break;}
  15391. +   case 162:
  15392. + ! #line 971 "c-parse.y"
  15393. +   { yyval.ttype = error_mark_node; ;
  15394. +       break;}
  15395. +   case 163:
  15396. + ! #line 977 "c-parse.y"
  15397. +   { if (pedantic)
  15398. +               pedwarn ("ANSI C forbids empty initializer braces"); ;
  15399. +       break;}
  15400. +   case 167:
  15401. + ! #line 991 "c-parse.y"
  15402. +   { process_init_element (yyvsp[0].ttype); ;
  15403. +       break;}
  15404. +   case 168:
  15405. + ! #line 993 "c-parse.y"
  15406. +   { push_init_level (0); ;
  15407. +       break;}
  15408. +   case 169:
  15409. + ! #line 995 "c-parse.y"
  15410. +   { process_init_element (pop_init_level (0)); ;
  15411. +       break;}
  15412. +   case 171:
  15413. + ! #line 1001 "c-parse.y"
  15414. +   { set_init_index (yyvsp[-4].ttype, yyvsp[-2].ttype); ;
  15415. +       break;}
  15416. +   case 173:
  15417. + ! #line 1004 "c-parse.y"
  15418. +   { set_init_index (yyvsp[-2].ttype, NULL_TREE); ;
  15419. +       break;}
  15420. +   case 175:
  15421. + ! #line 1007 "c-parse.y"
  15422. +   { set_init_label (yyvsp[-1].ttype); ;
  15423. +       break;}
  15424. +   case 177:
  15425. + ! #line 1010 "c-parse.y"
  15426. +   { set_init_label (yyvsp[-1].ttype); ;
  15427. +       break;}
  15428. +   case 179:
  15429. + ! #line 1016 "c-parse.y"
  15430. +   { push_c_function_context ();
  15431. +             if (! start_function (current_declspecs, yyvsp[0].ttype, 1))
  15432. +               {
  15433. + ***************
  15434. + *** 2072,2083 ****
  15435. +             store_parm_decls (); ;
  15436. +       break;}
  15437. +   case 180:
  15438. + ! #line 1023 "c-parse.y"
  15439. +   { finish_function (1);
  15440. +             pop_c_function_context (); ;
  15441. +       break;}
  15442. +   case 181:
  15443. + ! #line 1029 "c-parse.y"
  15444. +   { push_c_function_context ();
  15445. +             if (! start_function (current_declspecs, yyvsp[0].ttype, 1))
  15446. +               {
  15447. + --- 2404,2415 ----
  15448. +             store_parm_decls (); ;
  15449. +       break;}
  15450. +   case 180:
  15451. + ! #line 1031 "c-parse.y"
  15452. +   { finish_function (1);
  15453. +             pop_c_function_context (); ;
  15454. +       break;}
  15455. +   case 181:
  15456. + ! #line 1037 "c-parse.y"
  15457. +   { push_c_function_context ();
  15458. +             if (! start_function (current_declspecs, yyvsp[0].ttype, 1))
  15459. +               {
  15460. + ***************
  15461. + *** 2088,2370 ****
  15462. +             store_parm_decls (); ;
  15463. +       break;}
  15464. +   case 182:
  15465. + ! #line 1044 "c-parse.y"
  15466. +   { finish_function (1);
  15467. +             pop_c_function_context (); ;
  15468. +       break;}
  15469. +   case 185:
  15470. + ! #line 1060 "c-parse.y"
  15471. +   { yyval.ttype = yyvsp[-1].ttype; ;
  15472. +       break;}
  15473. +   case 186:
  15474. + ! #line 1062 "c-parse.y"
  15475. +   { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  15476. +       break;}
  15477. +   case 187:
  15478. + ! #line 1067 "c-parse.y"
  15479. +   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  15480. +       break;}
  15481. +   case 188:
  15482. + ! #line 1069 "c-parse.y"
  15483. +   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  15484. +       break;}
  15485. +   case 189:
  15486. + ! #line 1071 "c-parse.y"
  15487. +   { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  15488. +       break;}
  15489. +   case 191:
  15490. + ! #line 1082 "c-parse.y"
  15491. +   { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  15492. +       break;}
  15493. +   case 192:
  15494. + ! #line 1087 "c-parse.y"
  15495. +   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  15496. +       break;}
  15497. +   case 193:
  15498. + ! #line 1089 "c-parse.y"
  15499. +   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  15500. +       break;}
  15501. +   case 194:
  15502. + ! #line 1091 "c-parse.y"
  15503. +   { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  15504. +       break;}
  15505. +   case 196:
  15506. + ! #line 1100 "c-parse.y"
  15507. +   { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  15508. +       break;}
  15509. +   case 197:
  15510. + ! #line 1105 "c-parse.y"
  15511. +   { yyval.ttype = yyvsp[-1].ttype; ;
  15512. +       break;}
  15513. +   case 198:
  15514. + ! #line 1107 "c-parse.y"
  15515. +   { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  15516. +       break;}
  15517. +   case 199:
  15518. + ! #line 1109 "c-parse.y"
  15519. +   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  15520. +       break;}
  15521. +   case 200:
  15522. + ! #line 1111 "c-parse.y"
  15523. +   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  15524. +       break;}
  15525. +   case 202:
  15526. + ! #line 1117 "c-parse.y"
  15527. +   { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
  15528. +             /* Start scope of tag before parsing components.  */
  15529. +           ;
  15530. +       break;}
  15531. +   case 203:
  15532. + ! #line 1121 "c-parse.y"
  15533. +   { yyval.ttype = finish_struct (yyvsp[-2].ttype, yyvsp[-1].ttype);
  15534. +             /* Really define the structure.  */
  15535. +           ;
  15536. +       break;}
  15537. +   case 204:
  15538. + ! #line 1125 "c-parse.y"
  15539. +   { yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
  15540. +                         yyvsp[-1].ttype); ;
  15541. +       break;}
  15542. +   case 205:
  15543. + ! #line 1128 "c-parse.y"
  15544. +   { yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;
  15545. +       break;}
  15546. +   case 206:
  15547. + ! #line 1130 "c-parse.y"
  15548. +   { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;
  15549. +       break;}
  15550. +   case 207:
  15551. + ! #line 1132 "c-parse.y"
  15552. +   { yyval.ttype = finish_struct (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
  15553. +       break;}
  15554. +   case 208:
  15555. + ! #line 1134 "c-parse.y"
  15556. +   { yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
  15557. +                         yyvsp[-1].ttype); ;
  15558. +       break;}
  15559. +   case 209:
  15560. + ! #line 1137 "c-parse.y"
  15561. +   { yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ;
  15562. +       break;}
  15563. +   case 210:
  15564. + ! #line 1139 "c-parse.y"
  15565. +   { yyvsp[0].itype = suspend_momentary ();
  15566. +             yyval.ttype = start_enum (yyvsp[-1].ttype); ;
  15567. +       break;}
  15568. +   case 211:
  15569. + ! #line 1142 "c-parse.y"
  15570. +   { yyval.ttype = finish_enum (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype));
  15571. +             resume_momentary (yyvsp[-4].itype); ;
  15572. +       break;}
  15573. +   case 212:
  15574. + ! #line 1145 "c-parse.y"
  15575. +   { yyvsp[0].itype = suspend_momentary ();
  15576. +             yyval.ttype = start_enum (NULL_TREE); ;
  15577. +       break;}
  15578. +   case 213:
  15579. + ! #line 1148 "c-parse.y"
  15580. +   { yyval.ttype = finish_enum (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype));
  15581. +             resume_momentary (yyvsp[-4].itype); ;
  15582. +       break;}
  15583. +   case 214:
  15584. + ! #line 1151 "c-parse.y"
  15585. +   { yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype); ;
  15586. +       break;}
  15587. +   case 218:
  15588. + ! #line 1162 "c-parse.y"
  15589. +   { if (pedantic) pedwarn ("comma at end of enumerator list"); ;
  15590. +       break;}
  15591. +   case 219:
  15592. + ! #line 1167 "c-parse.y"
  15593. +   { yyval.ttype = yyvsp[0].ttype; ;
  15594. +       break;}
  15595. +   case 220:
  15596. + ! #line 1169 "c-parse.y"
  15597. +   { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
  15598. +             pedwarn ("no semicolon at end of struct or union"); ;
  15599. +       break;}
  15600. +   case 221:
  15601. + ! #line 1174 "c-parse.y"
  15602. +   { yyval.ttype = NULL_TREE; ;
  15603. +       break;}
  15604. +   case 222:
  15605. + ! #line 1176 "c-parse.y"
  15606. +   { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
  15607. +       break;}
  15608. +   case 223:
  15609. + ! #line 1178 "c-parse.y"
  15610. +   { if (pedantic)
  15611. +               pedwarn ("extra semicolon in struct or union specified"); ;
  15612. +       break;}
  15613. +   case 224:
  15614. + ! #line 1193 "c-parse.y"
  15615. +   { yyval.ttype = yyvsp[0].ttype;
  15616. +             current_declspecs = TREE_VALUE (declspec_stack);
  15617. +             declspec_stack = TREE_CHAIN (declspec_stack);
  15618. +             resume_momentary (yyvsp[-1].itype); ;
  15619. +       break;}
  15620. +   case 225:
  15621. + ! #line 1198 "c-parse.y"
  15622. +   { if (pedantic)
  15623. +               pedwarn ("ANSI C forbids member declarations with no members");
  15624. +             shadow_tag(yyvsp[0].ttype);
  15625. +             yyval.ttype = NULL_TREE; ;
  15626. +       break;}
  15627. +   case 226:
  15628. + ! #line 1203 "c-parse.y"
  15629. +   { yyval.ttype = yyvsp[0].ttype;
  15630. +             current_declspecs = TREE_VALUE (declspec_stack);
  15631. +             declspec_stack = TREE_CHAIN (declspec_stack);
  15632. +             resume_momentary (yyvsp[-1].itype); ;
  15633. +       break;}
  15634. +   case 227:
  15635. + ! #line 1208 "c-parse.y"
  15636. +   { if (pedantic)
  15637. +               pedwarn ("ANSI C forbids member declarations with no members");
  15638. +             shadow_tag(yyvsp[0].ttype);
  15639. +             yyval.ttype = NULL_TREE; ;
  15640. +       break;}
  15641. +   case 228:
  15642. + ! #line 1213 "c-parse.y"
  15643. +   { yyval.ttype = NULL_TREE; ;
  15644. +       break;}
  15645. +   case 230:
  15646. + ! #line 1219 "c-parse.y"
  15647. +   { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  15648. +       break;}
  15649. +   case 231:
  15650. + ! #line 1224 "c-parse.y"
  15651. +   { yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE);
  15652. +             decl_attributes (yyval.ttype, yyvsp[0].ttype); ;
  15653. +       break;}
  15654. +   case 232:
  15655. + ! #line 1228 "c-parse.y"
  15656. +   { yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype);
  15657. +             decl_attributes (yyval.ttype, yyvsp[0].ttype); ;
  15658. +       break;}
  15659. +   case 233:
  15660. + ! #line 1231 "c-parse.y"
  15661. +   { yyval.ttype = grokfield (yyvsp[-4].filename, yyvsp[-3].lineno, NULL_TREE, current_declspecs, yyvsp[-1].ttype);
  15662. +             decl_attributes (yyval.ttype, yyvsp[0].ttype); ;
  15663. +       break;}
  15664. +   case 235:
  15665. + ! #line 1243 "c-parse.y"
  15666. +   { yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ;
  15667. +       break;}
  15668. +   case 236:
  15669. + ! #line 1249 "c-parse.y"
  15670. +   { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ;
  15671. +       break;}
  15672. +   case 237:
  15673. + ! #line 1251 "c-parse.y"
  15674. +   { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  15675. +       break;}
  15676. +   case 238:
  15677. + ! #line 1256 "c-parse.y"
  15678. +   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  15679. +       break;}
  15680. +   case 239:
  15681. + ! #line 1258 "c-parse.y"
  15682. +   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  15683. +       break;}
  15684. +   case 240:
  15685. + ! #line 1263 "c-parse.y"
  15686. +   { yyval.ttype = NULL_TREE; ;
  15687. +       break;}
  15688. +   case 242:
  15689. + ! #line 1269 "c-parse.y"
  15690. +   { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
  15691. +       break;}
  15692. +   case 243:
  15693. + ! #line 1271 "c-parse.y"
  15694. +   { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
  15695. +       break;}
  15696. +   case 244:
  15697. + ! #line 1276 "c-parse.y"
  15698. +   { yyval.ttype = NULL_TREE; ;
  15699. +       break;}
  15700. +   case 245:
  15701. + ! #line 1278 "c-parse.y"
  15702. +   { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
  15703. +       break;}
  15704. +   case 246:
  15705. + ! #line 1283 "c-parse.y"
  15706. +   { yyval.ttype = yyvsp[-1].ttype; ;
  15707. +       break;}
  15708. +   case 247:
  15709. + ! #line 1286 "c-parse.y"
  15710. +   { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  15711. +       break;}
  15712. +   case 248:
  15713. + ! #line 1288 "c-parse.y"
  15714. +   { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
  15715. +       break;}
  15716. +   case 249:
  15717. + ! #line 1290 "c-parse.y"
  15718. +   { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  15719. +       break;}
  15720. +   case 250:
  15721. + ! #line 1292 "c-parse.y"
  15722. +   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  15723. +       break;}
  15724. +   case 251:
  15725. + ! #line 1294 "c-parse.y"
  15726. +   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  15727. +       break;}
  15728. +   case 252:
  15729. + ! #line 1296 "c-parse.y"
  15730. +   { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
  15731. +       break;}
  15732. +   case 253:
  15733. + ! #line 1298 "c-parse.y"
  15734. +   { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
  15735. +       break;}
  15736. +   case 254:
  15737. + ! #line 1300 "c-parse.y"
  15738. +   { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); ;
  15739. +       break;}
  15740. +   case 261:
  15741. + ! #line 1322 "c-parse.y"
  15742. +   { emit_line_note (input_filename, lineno);
  15743. +             pushlevel (0);
  15744. +             clear_last_expr ();
  15745. + --- 2420,2702 ----
  15746. +             store_parm_decls (); ;
  15747. +       break;}
  15748. +   case 182:
  15749. + ! #line 1052 "c-parse.y"
  15750. +   { finish_function (1);
  15751. +             pop_c_function_context (); ;
  15752. +       break;}
  15753. +   case 185:
  15754. + ! #line 1068 "c-parse.y"
  15755. +   { yyval.ttype = yyvsp[-1].ttype; ;
  15756. +       break;}
  15757. +   case 186:
  15758. + ! #line 1070 "c-parse.y"
  15759. +   { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  15760. +       break;}
  15761. +   case 187:
  15762. + ! #line 1075 "c-parse.y"
  15763. +   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  15764. +       break;}
  15765. +   case 188:
  15766. + ! #line 1077 "c-parse.y"
  15767. +   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  15768. +       break;}
  15769. +   case 189:
  15770. + ! #line 1079 "c-parse.y"
  15771. +   { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  15772. +       break;}
  15773. +   case 191:
  15774. + ! #line 1090 "c-parse.y"
  15775. +   { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  15776. +       break;}
  15777. +   case 192:
  15778. + ! #line 1095 "c-parse.y"
  15779. +   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  15780. +       break;}
  15781. +   case 193:
  15782. + ! #line 1097 "c-parse.y"
  15783. +   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  15784. +       break;}
  15785. +   case 194:
  15786. + ! #line 1099 "c-parse.y"
  15787. +   { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  15788. +       break;}
  15789. +   case 196:
  15790. + ! #line 1108 "c-parse.y"
  15791. +   { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  15792. +       break;}
  15793. +   case 197:
  15794. + ! #line 1113 "c-parse.y"
  15795. +   { yyval.ttype = yyvsp[-1].ttype; ;
  15796. +       break;}
  15797. +   case 198:
  15798. + ! #line 1115 "c-parse.y"
  15799. +   { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  15800. +       break;}
  15801. +   case 199:
  15802. + ! #line 1117 "c-parse.y"
  15803. +   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  15804. +       break;}
  15805. +   case 200:
  15806. + ! #line 1119 "c-parse.y"
  15807. +   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  15808. +       break;}
  15809. +   case 202:
  15810. + ! #line 1125 "c-parse.y"
  15811. +   { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
  15812. +             /* Start scope of tag before parsing components.  */
  15813. +           ;
  15814. +       break;}
  15815. +   case 203:
  15816. + ! #line 1129 "c-parse.y"
  15817. +   { yyval.ttype = finish_struct (yyvsp[-2].ttype, yyvsp[-1].ttype);
  15818. +             /* Really define the structure.  */
  15819. +           ;
  15820. +       break;}
  15821. +   case 204:
  15822. + ! #line 1133 "c-parse.y"
  15823. +   { yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
  15824. +                         yyvsp[-1].ttype); ;
  15825. +       break;}
  15826. +   case 205:
  15827. + ! #line 1136 "c-parse.y"
  15828. +   { yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;
  15829. +       break;}
  15830. +   case 206:
  15831. + ! #line 1138 "c-parse.y"
  15832. +   { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;
  15833. +       break;}
  15834. +   case 207:
  15835. + ! #line 1140 "c-parse.y"
  15836. +   { yyval.ttype = finish_struct (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
  15837. +       break;}
  15838. +   case 208:
  15839. + ! #line 1142 "c-parse.y"
  15840. +   { yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
  15841. +                         yyvsp[-1].ttype); ;
  15842. +       break;}
  15843. +   case 209:
  15844. + ! #line 1145 "c-parse.y"
  15845. +   { yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ;
  15846. +       break;}
  15847. +   case 210:
  15848. + ! #line 1147 "c-parse.y"
  15849. +   { yyvsp[0].itype = suspend_momentary ();
  15850. +             yyval.ttype = start_enum (yyvsp[-1].ttype); ;
  15851. +       break;}
  15852. +   case 211:
  15853. + ! #line 1150 "c-parse.y"
  15854. +   { yyval.ttype = finish_enum (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype));
  15855. +             resume_momentary (yyvsp[-4].itype); ;
  15856. +       break;}
  15857. +   case 212:
  15858. + ! #line 1153 "c-parse.y"
  15859. +   { yyvsp[0].itype = suspend_momentary ();
  15860. +             yyval.ttype = start_enum (NULL_TREE); ;
  15861. +       break;}
  15862. +   case 213:
  15863. + ! #line 1156 "c-parse.y"
  15864. +   { yyval.ttype = finish_enum (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype));
  15865. +             resume_momentary (yyvsp[-4].itype); ;
  15866. +       break;}
  15867. +   case 214:
  15868. + ! #line 1159 "c-parse.y"
  15869. +   { yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype); ;
  15870. +       break;}
  15871. +   case 218:
  15872. + ! #line 1170 "c-parse.y"
  15873. +   { if (pedantic) pedwarn ("comma at end of enumerator list"); ;
  15874. +       break;}
  15875. +   case 219:
  15876. + ! #line 1175 "c-parse.y"
  15877. +   { yyval.ttype = yyvsp[0].ttype; ;
  15878. +       break;}
  15879. +   case 220:
  15880. + ! #line 1177 "c-parse.y"
  15881. +   { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
  15882. +             pedwarn ("no semicolon at end of struct or union"); ;
  15883. +       break;}
  15884. +   case 221:
  15885. + ! #line 1182 "c-parse.y"
  15886. +   { yyval.ttype = NULL_TREE; ;
  15887. +       break;}
  15888. +   case 222:
  15889. + ! #line 1184 "c-parse.y"
  15890. +   { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
  15891. +       break;}
  15892. +   case 223:
  15893. + ! #line 1186 "c-parse.y"
  15894. +   { if (pedantic)
  15895. +               pedwarn ("extra semicolon in struct or union specified"); ;
  15896. +       break;}
  15897. +   case 224:
  15898. + ! #line 1201 "c-parse.y"
  15899. +   { yyval.ttype = yyvsp[0].ttype;
  15900. +             current_declspecs = TREE_VALUE (declspec_stack);
  15901. +             declspec_stack = TREE_CHAIN (declspec_stack);
  15902. +             resume_momentary (yyvsp[-1].itype); ;
  15903. +       break;}
  15904. +   case 225:
  15905. + ! #line 1206 "c-parse.y"
  15906. +   { if (pedantic)
  15907. +               pedwarn ("ANSI C forbids member declarations with no members");
  15908. +             shadow_tag(yyvsp[0].ttype);
  15909. +             yyval.ttype = NULL_TREE; ;
  15910. +       break;}
  15911. +   case 226:
  15912. + ! #line 1211 "c-parse.y"
  15913. +   { yyval.ttype = yyvsp[0].ttype;
  15914. +             current_declspecs = TREE_VALUE (declspec_stack);
  15915. +             declspec_stack = TREE_CHAIN (declspec_stack);
  15916. +             resume_momentary (yyvsp[-1].itype); ;
  15917. +       break;}
  15918. +   case 227:
  15919. + ! #line 1216 "c-parse.y"
  15920. +   { if (pedantic)
  15921. +               pedwarn ("ANSI C forbids member declarations with no members");
  15922. +             shadow_tag(yyvsp[0].ttype);
  15923. +             yyval.ttype = NULL_TREE; ;
  15924. +       break;}
  15925. +   case 228:
  15926. + ! #line 1221 "c-parse.y"
  15927. +   { yyval.ttype = NULL_TREE; ;
  15928. +       break;}
  15929. +   case 230:
  15930. + ! #line 1227 "c-parse.y"
  15931. +   { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  15932. +       break;}
  15933. +   case 231:
  15934. + ! #line 1232 "c-parse.y"
  15935. +   { yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE);
  15936. +             decl_attributes (yyval.ttype, yyvsp[0].ttype); ;
  15937. +       break;}
  15938. +   case 232:
  15939. + ! #line 1236 "c-parse.y"
  15940. +   { yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype);
  15941. +             decl_attributes (yyval.ttype, yyvsp[0].ttype); ;
  15942. +       break;}
  15943. +   case 233:
  15944. + ! #line 1239 "c-parse.y"
  15945. +   { yyval.ttype = grokfield (yyvsp[-4].filename, yyvsp[-3].lineno, NULL_TREE, current_declspecs, yyvsp[-1].ttype);
  15946. +             decl_attributes (yyval.ttype, yyvsp[0].ttype); ;
  15947. +       break;}
  15948. +   case 235:
  15949. + ! #line 1251 "c-parse.y"
  15950. +   { yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ;
  15951. +       break;}
  15952. +   case 236:
  15953. + ! #line 1257 "c-parse.y"
  15954. +   { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ;
  15955. +       break;}
  15956. +   case 237:
  15957. + ! #line 1259 "c-parse.y"
  15958. +   { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  15959. +       break;}
  15960. +   case 238:
  15961. + ! #line 1264 "c-parse.y"
  15962. +   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  15963. +       break;}
  15964. +   case 239:
  15965. + ! #line 1266 "c-parse.y"
  15966. +   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  15967. +       break;}
  15968. +   case 240:
  15969. + ! #line 1271 "c-parse.y"
  15970. +   { yyval.ttype = NULL_TREE; ;
  15971. +       break;}
  15972. +   case 242:
  15973. + ! #line 1277 "c-parse.y"
  15974. +   { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
  15975. +       break;}
  15976. +   case 243:
  15977. + ! #line 1279 "c-parse.y"
  15978. +   { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
  15979. +       break;}
  15980. +   case 244:
  15981. + ! #line 1284 "c-parse.y"
  15982. +   { yyval.ttype = NULL_TREE; ;
  15983. +       break;}
  15984. +   case 245:
  15985. + ! #line 1286 "c-parse.y"
  15986. +   { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
  15987. +       break;}
  15988. +   case 246:
  15989. + ! #line 1291 "c-parse.y"
  15990. +   { yyval.ttype = yyvsp[-1].ttype; ;
  15991. +       break;}
  15992. +   case 247:
  15993. + ! #line 1294 "c-parse.y"
  15994. +   { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  15995. +       break;}
  15996. +   case 248:
  15997. + ! #line 1296 "c-parse.y"
  15998. +   { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
  15999. +       break;}
  16000. +   case 249:
  16001. + ! #line 1298 "c-parse.y"
  16002. +   { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  16003. +       break;}
  16004. +   case 250:
  16005. + ! #line 1300 "c-parse.y"
  16006. +   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  16007. +       break;}
  16008. +   case 251:
  16009. + ! #line 1302 "c-parse.y"
  16010. +   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  16011. +       break;}
  16012. +   case 252:
  16013. + ! #line 1304 "c-parse.y"
  16014. +   { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
  16015. +       break;}
  16016. +   case 253:
  16017. + ! #line 1306 "c-parse.y"
  16018. +   { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
  16019. +       break;}
  16020. +   case 254:
  16021. + ! #line 1308 "c-parse.y"
  16022. +   { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); ;
  16023. +       break;}
  16024. +   case 261:
  16025. + ! #line 1330 "c-parse.y"
  16026. +   { emit_line_note (input_filename, lineno);
  16027. +             pushlevel (0);
  16028. +             clear_last_expr ();
  16029. + ***************
  16030. + *** 2373,2384 ****
  16031. +           ;
  16032. +       break;}
  16033. +   case 263:
  16034. + ! #line 1335 "c-parse.y"
  16035. +   { if (pedantic)
  16036. +               pedwarn ("ANSI C forbids label declarations"); ;
  16037. +       break;}
  16038. +   case 266:
  16039. + ! #line 1346 "c-parse.y"
  16040. +   { tree link;
  16041. +             for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
  16042. +               {
  16043. + --- 2705,2716 ----
  16044. +           ;
  16045. +       break;}
  16046. +   case 263:
  16047. + ! #line 1343 "c-parse.y"
  16048. +   { if (pedantic)
  16049. +               pedwarn ("ANSI C forbids label declarations"); ;
  16050. +       break;}
  16051. +   case 266:
  16052. + ! #line 1354 "c-parse.y"
  16053. +   { tree link;
  16054. +             for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
  16055. +               {
  16056. + ***************
  16057. + *** 2389,2424 ****
  16058. +           ;
  16059. +       break;}
  16060. +   case 267:
  16061. + ! #line 1360 "c-parse.y"
  16062. +   {;
  16063. +       break;}
  16064. +   case 269:
  16065. + ! #line 1365 "c-parse.y"
  16066. +   { yyval.ttype = convert (void_type_node, integer_zero_node); ;
  16067. +       break;}
  16068. +   case 270:
  16069. + ! #line 1367 "c-parse.y"
  16070. +   { emit_line_note (input_filename, lineno);
  16071. +             expand_end_bindings (getdecls (), 1, 0);
  16072. +             yyval.ttype = poplevel (1, 1, 0);
  16073. +             pop_momentary (); ;
  16074. +       break;}
  16075. +   case 271:
  16076. + ! #line 1372 "c-parse.y"
  16077. +   { emit_line_note (input_filename, lineno);
  16078. +             expand_end_bindings (getdecls (), kept_level_p (), 0);
  16079. +             yyval.ttype = poplevel (kept_level_p (), 0, 0);
  16080. +             pop_momentary (); ;
  16081. +       break;}
  16082. +   case 272:
  16083. + ! #line 1377 "c-parse.y"
  16084. +   { emit_line_note (input_filename, lineno);
  16085. +             expand_end_bindings (getdecls (), kept_level_p (), 0);
  16086. +             yyval.ttype = poplevel (kept_level_p (), 0, 0);
  16087. +             pop_momentary (); ;
  16088. +       break;}
  16089. +   case 275:
  16090. + ! #line 1394 "c-parse.y"
  16091. +   { emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
  16092. +             expand_start_cond (truthvalue_conversion (yyvsp[-1].ttype), 0);
  16093. +             yyval.itype = stmt_count;
  16094. + --- 2721,2756 ----
  16095. +           ;
  16096. +       break;}
  16097. +   case 267:
  16098. + ! #line 1368 "c-parse.y"
  16099. +   {;
  16100. +       break;}
  16101. +   case 269:
  16102. + ! #line 1373 "c-parse.y"
  16103. +   { yyval.ttype = convert (void_type_node, integer_zero_node); ;
  16104. +       break;}
  16105. +   case 270:
  16106. + ! #line 1375 "c-parse.y"
  16107. +   { emit_line_note (input_filename, lineno);
  16108. +             expand_end_bindings (getdecls (), 1, 0);
  16109. +             yyval.ttype = poplevel (1, 1, 0);
  16110. +             pop_momentary (); ;
  16111. +       break;}
  16112. +   case 271:
  16113. + ! #line 1380 "c-parse.y"
  16114. +   { emit_line_note (input_filename, lineno);
  16115. +             expand_end_bindings (getdecls (), kept_level_p (), 0);
  16116. +             yyval.ttype = poplevel (kept_level_p (), 0, 0);
  16117. +             pop_momentary (); ;
  16118. +       break;}
  16119. +   case 272:
  16120. + ! #line 1385 "c-parse.y"
  16121. +   { emit_line_note (input_filename, lineno);
  16122. +             expand_end_bindings (getdecls (), kept_level_p (), 0);
  16123. +             yyval.ttype = poplevel (kept_level_p (), 0, 0);
  16124. +             pop_momentary (); ;
  16125. +       break;}
  16126. +   case 275:
  16127. + ! #line 1402 "c-parse.y"
  16128. +   { emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
  16129. +             expand_start_cond (truthvalue_conversion (yyvsp[-1].ttype), 0);
  16130. +             yyval.itype = stmt_count;
  16131. + ***************
  16132. + *** 2427,2433 ****
  16133. +             position_after_white_space (); ;
  16134. +       break;}
  16135. +   case 276:
  16136. + ! #line 1407 "c-parse.y"
  16137. +   { stmt_count++;
  16138. +             emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
  16139. +             /* See comment in `while' alternative, above.  */
  16140. + --- 2759,2765 ----
  16141. +             position_after_white_space (); ;
  16142. +       break;}
  16143. +   case 276:
  16144. + ! #line 1415 "c-parse.y"
  16145. +   { stmt_count++;
  16146. +             emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
  16147. +             /* See comment in `while' alternative, above.  */
  16148. + ***************
  16149. + *** 2436,2466 ****
  16150. +             position_after_white_space (); ;
  16151. +       break;}
  16152. +   case 277:
  16153. + ! #line 1414 "c-parse.y"
  16154. +   { expand_loop_continue_here (); ;
  16155. +       break;}
  16156. +   case 278:
  16157. + ! #line 1418 "c-parse.y"
  16158. +   { yyval.filename = input_filename; ;
  16159. +       break;}
  16160. +   case 279:
  16161. + ! #line 1422 "c-parse.y"
  16162. +   { yyval.lineno = lineno; ;
  16163. +       break;}
  16164. +   case 280:
  16165. + ! #line 1427 "c-parse.y"
  16166. +   { ;
  16167. +       break;}
  16168. +   case 281:
  16169. + ! #line 1432 "c-parse.y"
  16170. +   { ;
  16171. +       break;}
  16172. +   case 282:
  16173. + ! #line 1437 "c-parse.y"
  16174. +   { ;
  16175. +       break;}
  16176. +   case 284:
  16177. + ! #line 1443 "c-parse.y"
  16178. +   { int next;
  16179. +             position_after_white_space ();
  16180. +             next = getc (finput);
  16181. + --- 2768,2798 ----
  16182. +             position_after_white_space (); ;
  16183. +       break;}
  16184. +   case 277:
  16185. + ! #line 1422 "c-parse.y"
  16186. +   { expand_loop_continue_here (); ;
  16187. +       break;}
  16188. +   case 278:
  16189. + ! #line 1426 "c-parse.y"
  16190. +   { yyval.filename = input_filename; ;
  16191. +       break;}
  16192. +   case 279:
  16193. + ! #line 1430 "c-parse.y"
  16194. +   { yyval.lineno = lineno; ;
  16195. +       break;}
  16196. +   case 280:
  16197. + ! #line 1435 "c-parse.y"
  16198. +   { ;
  16199. +       break;}
  16200. +   case 281:
  16201. + ! #line 1440 "c-parse.y"
  16202. +   { ;
  16203. +       break;}
  16204. +   case 282:
  16205. + ! #line 1445 "c-parse.y"
  16206. +   { ;
  16207. +       break;}
  16208. +   case 284:
  16209. + ! #line 1451 "c-parse.y"
  16210. +   { int next;
  16211. +             position_after_white_space ();
  16212. +             next = getc (finput);
  16213. + ***************
  16214. + *** 2470,2480 ****
  16215. +           ;
  16216. +       break;}
  16217. +   case 285:
  16218. + ! #line 1455 "c-parse.y"
  16219. +   { stmt_count++; ;
  16220. +       break;}
  16221. +   case 287:
  16222. + ! #line 1458 "c-parse.y"
  16223. +   { stmt_count++;
  16224. +             emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
  16225. +   /* It appears that this should not be done--that a non-lvalue array
  16226. + --- 2802,2812 ----
  16227. +           ;
  16228. +       break;}
  16229. +   case 285:
  16230. + ! #line 1463 "c-parse.y"
  16231. +   { stmt_count++; ;
  16232. +       break;}
  16233. +   case 287:
  16234. + ! #line 1466 "c-parse.y"
  16235. +   { stmt_count++;
  16236. +             emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
  16237. +   /* It appears that this should not be done--that a non-lvalue array
  16238. + ***************
  16239. + *** 2493,2511 ****
  16240. +             clear_momentary (); ;
  16241. +       break;}
  16242. +   case 288:
  16243. + ! #line 1475 "c-parse.y"
  16244. +   { expand_start_else ();
  16245. +             yyvsp[-1].itype = stmt_count;
  16246. +             position_after_white_space (); ;
  16247. +       break;}
  16248. +   case 289:
  16249. + ! #line 1479 "c-parse.y"
  16250. +   { expand_end_cond ();
  16251. +             if (extra_warnings && stmt_count == yyvsp[-3].itype)
  16252. +               warning ("empty body in an else-statement"); ;
  16253. +       break;}
  16254. +   case 290:
  16255. + ! #line 1483 "c-parse.y"
  16256. +   { expand_end_cond ();
  16257. +             /* This warning is here instead of in simple_if, because we
  16258. +                do not want a warning if an empty if is followed by an
  16259. + --- 2825,2843 ----
  16260. +             clear_momentary (); ;
  16261. +       break;}
  16262. +   case 288:
  16263. + ! #line 1483 "c-parse.y"
  16264. +   { expand_start_else ();
  16265. +             yyvsp[-1].itype = stmt_count;
  16266. +             position_after_white_space (); ;
  16267. +       break;}
  16268. +   case 289:
  16269. + ! #line 1487 "c-parse.y"
  16270. +   { expand_end_cond ();
  16271. +             if (extra_warnings && stmt_count == yyvsp[-3].itype)
  16272. +               warning ("empty body in an else-statement"); ;
  16273. +       break;}
  16274. +   case 290:
  16275. + ! #line 1491 "c-parse.y"
  16276. +   { expand_end_cond ();
  16277. +             /* This warning is here instead of in simple_if, because we
  16278. +                do not want a warning if an empty if is followed by an
  16279. + ***************
  16280. + *** 2515,2525 ****
  16281. +                           "empty body in an if-statement"); ;
  16282. +       break;}
  16283. +   case 291:
  16284. + ! #line 1494 "c-parse.y"
  16285. +   { expand_end_cond (); ;
  16286. +       break;}
  16287. +   case 292:
  16288. + ! #line 1496 "c-parse.y"
  16289. +   { stmt_count++;
  16290. +             emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
  16291. +             /* The emit_nop used to come before emit_line_note,
  16292. + --- 2847,2857 ----
  16293. +                           "empty body in an if-statement"); ;
  16294. +       break;}
  16295. +   case 291:
  16296. + ! #line 1502 "c-parse.y"
  16297. +   { expand_end_cond (); ;
  16298. +       break;}
  16299. +   case 292:
  16300. + ! #line 1504 "c-parse.y"
  16301. +   { stmt_count++;
  16302. +             emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
  16303. +             /* The emit_nop used to come before emit_line_note,
  16304. + ***************
  16305. + *** 2531,2537 ****
  16306. +             emit_nop (); ;
  16307. +       break;}
  16308. +   case 293:
  16309. + ! #line 1506 "c-parse.y"
  16310. +   { /* Don't start the loop till we have succeeded
  16311. +                in parsing the end test.  This is to make sure
  16312. +                that we end every loop we start.  */
  16313. + --- 2863,2869 ----
  16314. +             emit_nop (); ;
  16315. +       break;}
  16316. +   case 293:
  16317. + ! #line 1514 "c-parse.y"
  16318. +   { /* Don't start the loop till we have succeeded
  16319. +                in parsing the end test.  This is to make sure
  16320. +                that we end every loop we start.  */
  16321. + ***************
  16322. + *** 2542,2552 ****
  16323. +             position_after_white_space (); ;
  16324. +       break;}
  16325. +   case 294:
  16326. + ! #line 1515 "c-parse.y"
  16327. +   { expand_end_loop (); ;
  16328. +       break;}
  16329. +   case 295:
  16330. + ! #line 1518 "c-parse.y"
  16331. +   { emit_line_note (input_filename, lineno);
  16332. +             expand_exit_loop_if_false (NULL_PTR,
  16333. +                            truthvalue_conversion (yyvsp[-2].ttype));
  16334. + --- 2874,2884 ----
  16335. +             position_after_white_space (); ;
  16336. +       break;}
  16337. +   case 294:
  16338. + ! #line 1523 "c-parse.y"
  16339. +   { expand_end_loop (); ;
  16340. +       break;}
  16341. +   case 295:
  16342. + ! #line 1526 "c-parse.y"
  16343. +   { emit_line_note (input_filename, lineno);
  16344. +             expand_exit_loop_if_false (NULL_PTR,
  16345. +                            truthvalue_conversion (yyvsp[-2].ttype));
  16346. + ***************
  16347. + *** 2554,2565 ****
  16348. +             clear_momentary (); ;
  16349. +       break;}
  16350. +   case 296:
  16351. + ! #line 1525 "c-parse.y"
  16352. +   { expand_end_loop ();
  16353. +             clear_momentary (); ;
  16354. +       break;}
  16355. +   case 297:
  16356. + ! #line 1529 "c-parse.y"
  16357. +   { stmt_count++;
  16358. +             emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
  16359. +             /* See comment in `while' alternative, above.  */
  16360. + --- 2886,2897 ----
  16361. +             clear_momentary (); ;
  16362. +       break;}
  16363. +   case 296:
  16364. + ! #line 1533 "c-parse.y"
  16365. +   { expand_end_loop ();
  16366. +             clear_momentary (); ;
  16367. +       break;}
  16368. +   case 297:
  16369. + ! #line 1537 "c-parse.y"
  16370. +   { stmt_count++;
  16371. +             emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
  16372. +             /* See comment in `while' alternative, above.  */
  16373. + ***************
  16374. + *** 2572,2583 ****
  16375. +           ;
  16376. +       break;}
  16377. +   case 298:
  16378. + ! #line 1541 "c-parse.y"
  16379. +   { yyvsp[0].lineno = lineno;
  16380. +             yyval.filename = input_filename; ;
  16381. +       break;}
  16382. +   case 299:
  16383. + ! #line 1544 "c-parse.y"
  16384. +   { 
  16385. +             /* Start the loop.  Doing this after parsing
  16386. +                all the expressions ensures we will end the loop.  */
  16387. + --- 2904,2915 ----
  16388. +           ;
  16389. +       break;}
  16390. +   case 298:
  16391. + ! #line 1549 "c-parse.y"
  16392. +   { yyvsp[0].lineno = lineno;
  16393. +             yyval.filename = input_filename; ;
  16394. +       break;}
  16395. +   case 299:
  16396. + ! #line 1552 "c-parse.y"
  16397. +   { 
  16398. +             /* Start the loop.  Doing this after parsing
  16399. +                all the expressions ensures we will end the loop.  */
  16400. + ***************
  16401. + *** 2595,2601 ****
  16402. +             position_after_white_space (); ;
  16403. +       break;}
  16404. +   case 300:
  16405. + ! #line 1560 "c-parse.y"
  16406. +   { /* Emit the increment expression, with a line number.  */
  16407. +             emit_line_note (yyvsp[-4].filename, yyvsp[-5].lineno);
  16408. +             expand_loop_continue_here ();
  16409. + --- 2927,2933 ----
  16410. +             position_after_white_space (); ;
  16411. +       break;}
  16412. +   case 300:
  16413. + ! #line 1568 "c-parse.y"
  16414. +   { /* Emit the increment expression, with a line number.  */
  16415. +             emit_line_note (yyvsp[-4].filename, yyvsp[-5].lineno);
  16416. +             expand_loop_continue_here ();
  16417. + ***************
  16418. + *** 2605,2611 ****
  16419. +             expand_end_loop (); ;
  16420. +       break;}
  16421. +   case 301:
  16422. + ! #line 1568 "c-parse.y"
  16423. +   { stmt_count++;
  16424. +             emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
  16425. +             c_expand_start_case (yyvsp[-1].ttype);
  16426. + --- 2937,2943 ----
  16427. +             expand_end_loop (); ;
  16428. +       break;}
  16429. +   case 301:
  16430. + ! #line 1576 "c-parse.y"
  16431. +   { stmt_count++;
  16432. +             emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
  16433. +             c_expand_start_case (yyvsp[-1].ttype);
  16434. + ***************
  16435. + *** 2615,2652 ****
  16436. +             position_after_white_space (); ;
  16437. +       break;}
  16438. +   case 302:
  16439. + ! #line 1576 "c-parse.y"
  16440. +   { expand_end_case (yyvsp[-3].ttype);
  16441. +             pop_momentary (); ;
  16442. +       break;}
  16443. +   case 303:
  16444. + ! #line 1579 "c-parse.y"
  16445. +   { stmt_count++;
  16446. +             emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
  16447. +             if ( ! expand_exit_something ())
  16448. +               error ("break statement not within loop or switch"); ;
  16449. +       break;}
  16450. +   case 304:
  16451. + ! #line 1584 "c-parse.y"
  16452. +   { stmt_count++;
  16453. +             emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
  16454. +             if (! expand_continue_loop (NULL_PTR))
  16455. +               error ("continue statement not within a loop"); ;
  16456. +       break;}
  16457. +   case 305:
  16458. + ! #line 1589 "c-parse.y"
  16459. +   { stmt_count++;
  16460. +             emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
  16461. +             c_expand_return (NULL_TREE); ;
  16462. +       break;}
  16463. +   case 306:
  16464. + ! #line 1593 "c-parse.y"
  16465. +   { stmt_count++;
  16466. +             emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
  16467. +             c_expand_return (yyvsp[-1].ttype); ;
  16468. +       break;}
  16469. +   case 307:
  16470. + ! #line 1597 "c-parse.y"
  16471. +   { stmt_count++;
  16472. +             emit_line_note (yyvsp[-7].filename, yyvsp[-6].lineno);
  16473. +             STRIP_NOPS (yyvsp[-2].ttype);
  16474. + --- 2947,2984 ----
  16475. +             position_after_white_space (); ;
  16476. +       break;}
  16477. +   case 302:
  16478. + ! #line 1584 "c-parse.y"
  16479. +   { expand_end_case (yyvsp[-3].ttype);
  16480. +             pop_momentary (); ;
  16481. +       break;}
  16482. +   case 303:
  16483. + ! #line 1587 "c-parse.y"
  16484. +   { stmt_count++;
  16485. +             emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
  16486. +             if ( ! expand_exit_something ())
  16487. +               error ("break statement not within loop or switch"); ;
  16488. +       break;}
  16489. +   case 304:
  16490. + ! #line 1592 "c-parse.y"
  16491. +   { stmt_count++;
  16492. +             emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
  16493. +             if (! expand_continue_loop (NULL_PTR))
  16494. +               error ("continue statement not within a loop"); ;
  16495. +       break;}
  16496. +   case 305:
  16497. + ! #line 1597 "c-parse.y"
  16498. +   { stmt_count++;
  16499. +             emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
  16500. +             c_expand_return (NULL_TREE); ;
  16501. +       break;}
  16502. +   case 306:
  16503. + ! #line 1601 "c-parse.y"
  16504. +   { stmt_count++;
  16505. +             emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
  16506. +             c_expand_return (yyvsp[-1].ttype); ;
  16507. +       break;}
  16508. +   case 307:
  16509. + ! #line 1605 "c-parse.y"
  16510. +   { stmt_count++;
  16511. +             emit_line_note (yyvsp[-7].filename, yyvsp[-6].lineno);
  16512. +             STRIP_NOPS (yyvsp[-2].ttype);
  16513. + ***************
  16514. + *** 2658,2664 ****
  16515. +               error ("argument of `asm' is not a constant string"); ;
  16516. +       break;}
  16517. +   case 308:
  16518. + ! #line 1608 "c-parse.y"
  16519. +   { stmt_count++;
  16520. +             emit_line_note (yyvsp[-9].filename, yyvsp[-8].lineno);
  16521. +             c_expand_asm_operands (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE,
  16522. + --- 2990,2996 ----
  16523. +               error ("argument of `asm' is not a constant string"); ;
  16524. +       break;}
  16525. +   case 308:
  16526. + ! #line 1616 "c-parse.y"
  16527. +   { stmt_count++;
  16528. +             emit_line_note (yyvsp[-9].filename, yyvsp[-8].lineno);
  16529. +             c_expand_asm_operands (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE,
  16530. + ***************
  16531. + *** 2666,2672 ****
  16532. +                        input_filename, lineno); ;
  16533. +       break;}
  16534. +   case 309:
  16535. + ! #line 1615 "c-parse.y"
  16536. +   { stmt_count++;
  16537. +             emit_line_note (yyvsp[-11].filename, yyvsp[-10].lineno);
  16538. +             c_expand_asm_operands (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
  16539. + --- 2998,3004 ----
  16540. +                        input_filename, lineno); ;
  16541. +       break;}
  16542. +   case 309:
  16543. + ! #line 1623 "c-parse.y"
  16544. +   { stmt_count++;
  16545. +             emit_line_note (yyvsp[-11].filename, yyvsp[-10].lineno);
  16546. +             c_expand_asm_operands (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
  16547. + ***************
  16548. + *** 2674,2680 ****
  16549. +                        input_filename, lineno); ;
  16550. +       break;}
  16551. +   case 310:
  16552. + ! #line 1623 "c-parse.y"
  16553. +   { stmt_count++;
  16554. +             emit_line_note (yyvsp[-13].filename, yyvsp[-12].lineno);
  16555. +             c_expand_asm_operands (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype,
  16556. + --- 3006,3012 ----
  16557. +                        input_filename, lineno); ;
  16558. +       break;}
  16559. +   case 310:
  16560. + ! #line 1631 "c-parse.y"
  16561. +   { stmt_count++;
  16562. +             emit_line_note (yyvsp[-13].filename, yyvsp[-12].lineno);
  16563. +             c_expand_asm_operands (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype,
  16564. + ***************
  16565. + *** 2682,2688 ****
  16566. +                        input_filename, lineno); ;
  16567. +       break;}
  16568. +   case 311:
  16569. + ! #line 1629 "c-parse.y"
  16570. +   { tree decl;
  16571. +             stmt_count++;
  16572. +             emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
  16573. + --- 3014,3020 ----
  16574. +                        input_filename, lineno); ;
  16575. +       break;}
  16576. +   case 311:
  16577. + ! #line 1637 "c-parse.y"
  16578. +   { tree decl;
  16579. +             stmt_count++;
  16580. +             emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
  16581. + ***************
  16582. + *** 2695,2707 ****
  16583. +           ;
  16584. +       break;}
  16585. +   case 312:
  16586. + ! #line 1640 "c-parse.y"
  16587. +   { stmt_count++;
  16588. +             emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
  16589. +             expand_computed_goto (convert (ptr_type_node, yyvsp[-1].ttype)); ;
  16590. +       break;}
  16591. +   case 315:
  16592. + ! #line 1653 "c-parse.y"
  16593. +   {
  16594. +           /* The value returned by this action is  */
  16595. +           /*      1 if everything is OK */ 
  16596. + --- 3027,3039 ----
  16597. +           ;
  16598. +       break;}
  16599. +   case 312:
  16600. + ! #line 1648 "c-parse.y"
  16601. +   { stmt_count++;
  16602. +             emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
  16603. +             expand_computed_goto (convert (ptr_type_node, yyvsp[-1].ttype)); ;
  16604. +       break;}
  16605. +   case 315:
  16606. + ! #line 1661 "c-parse.y"
  16607. +   {
  16608. +           /* The value returned by this action is  */
  16609. +           /*      1 if everything is OK */ 
  16610. + ***************
  16611. + *** 2724,2737 ****
  16612. +         ;
  16613. +       break;}
  16614. +   case 316:
  16615. + ! #line 1674 "c-parse.y"
  16616. +   {
  16617. +           if (yyvsp[-1].itype)
  16618. +             iterator_for_loop_end (yyvsp[-3].ttype);
  16619. +         ;
  16620. +       break;}
  16621. +   case 317:
  16622. + ! #line 1706 "c-parse.y"
  16623. +   { register tree value = check_case_value (yyvsp[-1].ttype);
  16624. +             register tree label
  16625. +               = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
  16626. + --- 3056,3069 ----
  16627. +         ;
  16628. +       break;}
  16629. +   case 316:
  16630. + ! #line 1682 "c-parse.y"
  16631. +   {
  16632. +           if (yyvsp[-1].itype)
  16633. +             iterator_for_loop_end (yyvsp[-3].ttype);
  16634. +         ;
  16635. +       break;}
  16636. +   case 317:
  16637. + ! #line 1714 "c-parse.y"
  16638. +   { register tree value = check_case_value (yyvsp[-1].ttype);
  16639. +             register tree label
  16640. +               = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
  16641. + ***************
  16642. + *** 2758,2764 ****
  16643. +             position_after_white_space (); ;
  16644. +       break;}
  16645. +   case 318:
  16646. + ! #line 1731 "c-parse.y"
  16647. +   { register tree value1 = check_case_value (yyvsp[-3].ttype);
  16648. +             register tree value2 = check_case_value (yyvsp[-1].ttype);
  16649. +             register tree label
  16650. + --- 3090,3096 ----
  16651. +             position_after_white_space (); ;
  16652. +       break;}
  16653. +   case 318:
  16654. + ! #line 1739 "c-parse.y"
  16655. +   { register tree value1 = check_case_value (yyvsp[-3].ttype);
  16656. +             register tree value2 = check_case_value (yyvsp[-1].ttype);
  16657. +             register tree label
  16658. + ***************
  16659. + *** 2789,2795 ****
  16660. +             position_after_white_space (); ;
  16661. +       break;}
  16662. +   case 319:
  16663. + ! #line 1760 "c-parse.y"
  16664. +   {
  16665. +             tree duplicate;
  16666. +             register tree label
  16667. + --- 3121,3127 ----
  16668. +             position_after_white_space (); ;
  16669. +       break;}
  16670. +   case 319:
  16671. + ! #line 1768 "c-parse.y"
  16672. +   {
  16673. +             tree duplicate;
  16674. +             register tree label
  16675. + ***************
  16676. + *** 2806,2812 ****
  16677. +             position_after_white_space (); ;
  16678. +       break;}
  16679. +   case 320:
  16680. + ! #line 1775 "c-parse.y"
  16681. +   { tree label = define_label (input_filename, lineno, yyvsp[-1].ttype);
  16682. +             stmt_count++;
  16683. +             emit_nop ();
  16684. + --- 3138,3144 ----
  16685. +             position_after_white_space (); ;
  16686. +       break;}
  16687. +   case 320:
  16688. + ! #line 1783 "c-parse.y"
  16689. +   { tree label = define_label (input_filename, lineno, yyvsp[-1].ttype);
  16690. +             stmt_count++;
  16691. +             emit_nop ();
  16692. + ***************
  16693. + *** 2815,2866 ****
  16694. +             position_after_white_space (); ;
  16695. +       break;}
  16696. +   case 321:
  16697. + ! #line 1787 "c-parse.y"
  16698. +   { emit_line_note (input_filename, lineno);
  16699. +             yyval.ttype = NULL_TREE; ;
  16700. +       break;}
  16701. +   case 322:
  16702. + ! #line 1790 "c-parse.y"
  16703. +   { emit_line_note (input_filename, lineno); ;
  16704. +       break;}
  16705. +   case 323:
  16706. + ! #line 1795 "c-parse.y"
  16707. +   { yyval.ttype = NULL_TREE; ;
  16708. +       break;}
  16709. +   case 325:
  16710. + ! #line 1802 "c-parse.y"
  16711. +   { yyval.ttype = NULL_TREE; ;
  16712. +       break;}
  16713. +   case 328:
  16714. + ! #line 1809 "c-parse.y"
  16715. +   { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  16716. +       break;}
  16717. +   case 329:
  16718. + ! #line 1814 "c-parse.y"
  16719. +   { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  16720. +       break;}
  16721. +   case 330:
  16722. + ! #line 1819 "c-parse.y"
  16723. +   { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), NULL_TREE); ;
  16724. +       break;}
  16725. +   case 331:
  16726. + ! #line 1821 "c-parse.y"
  16727. +   { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), yyvsp[-2].ttype); ;
  16728. +       break;}
  16729. +   case 332:
  16730. + ! #line 1827 "c-parse.y"
  16731. +   { pushlevel (0);
  16732. +             clear_parm_order ();
  16733. +             declare_parm_level (0); ;
  16734. +       break;}
  16735. +   case 333:
  16736. + ! #line 1831 "c-parse.y"
  16737. +   { yyval.ttype = yyvsp[0].ttype;
  16738. +             parmlist_tags_warning ();
  16739. +             poplevel (0, 0, 0); ;
  16740. +       break;}
  16741. +   case 335:
  16742. + ! #line 1839 "c-parse.y"
  16743. +   { tree parm;
  16744. +             if (pedantic)
  16745. +               pedwarn ("ANSI C forbids forward parameter declarations");
  16746. + --- 3147,3198 ----
  16747. +             position_after_white_space (); ;
  16748. +       break;}
  16749. +   case 321:
  16750. + ! #line 1795 "c-parse.y"
  16751. +   { emit_line_note (input_filename, lineno);
  16752. +             yyval.ttype = NULL_TREE; ;
  16753. +       break;}
  16754. +   case 322:
  16755. + ! #line 1798 "c-parse.y"
  16756. +   { emit_line_note (input_filename, lineno); ;
  16757. +       break;}
  16758. +   case 323:
  16759. + ! #line 1803 "c-parse.y"
  16760. +   { yyval.ttype = NULL_TREE; ;
  16761. +       break;}
  16762. +   case 325:
  16763. + ! #line 1810 "c-parse.y"
  16764. +   { yyval.ttype = NULL_TREE; ;
  16765. +       break;}
  16766. +   case 328:
  16767. + ! #line 1817 "c-parse.y"
  16768. +   { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  16769. +       break;}
  16770. +   case 329:
  16771. + ! #line 1822 "c-parse.y"
  16772. +   { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  16773. +       break;}
  16774. +   case 330:
  16775. + ! #line 1827 "c-parse.y"
  16776. +   { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), NULL_TREE); ;
  16777. +       break;}
  16778. +   case 331:
  16779. + ! #line 1829 "c-parse.y"
  16780. +   { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), yyvsp[-2].ttype); ;
  16781. +       break;}
  16782. +   case 332:
  16783. + ! #line 1835 "c-parse.y"
  16784. +   { pushlevel (0);
  16785. +             clear_parm_order ();
  16786. +             declare_parm_level (0); ;
  16787. +       break;}
  16788. +   case 333:
  16789. + ! #line 1839 "c-parse.y"
  16790. +   { yyval.ttype = yyvsp[0].ttype;
  16791. +             parmlist_tags_warning ();
  16792. +             poplevel (0, 0, 0); ;
  16793. +       break;}
  16794. +   case 335:
  16795. + ! #line 1847 "c-parse.y"
  16796. +   { tree parm;
  16797. +             if (pedantic)
  16798. +               pedwarn ("ANSI C forbids forward parameter declarations");
  16799. + ***************
  16800. + *** 2870,2943 ****
  16801. +             clear_parm_order (); ;
  16802. +       break;}
  16803. +   case 336:
  16804. + ! #line 1847 "c-parse.y"
  16805. +   { yyval.ttype = yyvsp[0].ttype; ;
  16806. +       break;}
  16807. +   case 337:
  16808. + ! #line 1849 "c-parse.y"
  16809. +   { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ;
  16810. +       break;}
  16811. +   case 338:
  16812. + ! #line 1855 "c-parse.y"
  16813. +   { yyval.ttype = get_parm_info (0); ;
  16814. +       break;}
  16815. +   case 339:
  16816. + ! #line 1857 "c-parse.y"
  16817. +   { yyval.ttype = get_parm_info (0);
  16818. +             if (pedantic)
  16819. +               pedwarn ("ANSI C requires a named argument before `...'");
  16820. +           ;
  16821. +       break;}
  16822. +   case 340:
  16823. + ! #line 1862 "c-parse.y"
  16824. +   { yyval.ttype = get_parm_info (1); ;
  16825. +       break;}
  16826. +   case 341:
  16827. + ! #line 1864 "c-parse.y"
  16828. +   { yyval.ttype = get_parm_info (0); ;
  16829. +       break;}
  16830. +   case 342:
  16831. + ! #line 1869 "c-parse.y"
  16832. +   { push_parm_decl (yyvsp[0].ttype); ;
  16833. +       break;}
  16834. +   case 343:
  16835. + ! #line 1871 "c-parse.y"
  16836. +   { push_parm_decl (yyvsp[0].ttype); ;
  16837. +       break;}
  16838. +   case 344:
  16839. + ! #line 1878 "c-parse.y"
  16840. +   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype)    ; ;
  16841. +       break;}
  16842. +   case 345:
  16843. + ! #line 1880 "c-parse.y"
  16844. +   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype)    ; ;
  16845. +       break;}
  16846. +   case 346:
  16847. + ! #line 1882 "c-parse.y"
  16848. +   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  16849. +       break;}
  16850. +   case 347:
  16851. + ! #line 1884 "c-parse.y"
  16852. +   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype)    ; ;
  16853. +       break;}
  16854. +   case 348:
  16855. + ! #line 1886 "c-parse.y"
  16856. +   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  16857. +       break;}
  16858. +   case 349:
  16859. + ! #line 1893 "c-parse.y"
  16860. +   { pushlevel (0);
  16861. +             clear_parm_order ();
  16862. +             declare_parm_level (1); ;
  16863. +       break;}
  16864. +   case 350:
  16865. + ! #line 1897 "c-parse.y"
  16866. +   { yyval.ttype = yyvsp[0].ttype;
  16867. +             parmlist_tags_warning ();
  16868. +             poplevel (0, 0, 0); ;
  16869. +       break;}
  16870. +   case 352:
  16871. + ! #line 1905 "c-parse.y"
  16872. +   { tree t;
  16873. +             for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t))
  16874. +               if (TREE_VALUE (t) == NULL_TREE)
  16875. + --- 3202,3275 ----
  16876. +             clear_parm_order (); ;
  16877. +       break;}
  16878. +   case 336:
  16879. + ! #line 1855 "c-parse.y"
  16880. +   { yyval.ttype = yyvsp[0].ttype; ;
  16881. +       break;}
  16882. +   case 337:
  16883. + ! #line 1857 "c-parse.y"
  16884. +   { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ;
  16885. +       break;}
  16886. +   case 338:
  16887. + ! #line 1863 "c-parse.y"
  16888. +   { yyval.ttype = get_parm_info (0); ;
  16889. +       break;}
  16890. +   case 339:
  16891. + ! #line 1865 "c-parse.y"
  16892. +   { yyval.ttype = get_parm_info (0);
  16893. +             if (pedantic)
  16894. +               pedwarn ("ANSI C requires a named argument before `...'");
  16895. +           ;
  16896. +       break;}
  16897. +   case 340:
  16898. + ! #line 1870 "c-parse.y"
  16899. +   { yyval.ttype = get_parm_info (1); ;
  16900. +       break;}
  16901. +   case 341:
  16902. + ! #line 1872 "c-parse.y"
  16903. +   { yyval.ttype = get_parm_info (0); ;
  16904. +       break;}
  16905. +   case 342:
  16906. + ! #line 1877 "c-parse.y"
  16907. +   { push_parm_decl (yyvsp[0].ttype); ;
  16908. +       break;}
  16909. +   case 343:
  16910. + ! #line 1879 "c-parse.y"
  16911. +   { push_parm_decl (yyvsp[0].ttype); ;
  16912. +       break;}
  16913. +   case 344:
  16914. + ! #line 1886 "c-parse.y"
  16915. +   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype)    ; ;
  16916. +       break;}
  16917. +   case 345:
  16918. + ! #line 1888 "c-parse.y"
  16919. +   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype)    ; ;
  16920. +       break;}
  16921. +   case 346:
  16922. + ! #line 1890 "c-parse.y"
  16923. +   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  16924. +       break;}
  16925. +   case 347:
  16926. + ! #line 1892 "c-parse.y"
  16927. +   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype)    ; ;
  16928. +       break;}
  16929. +   case 348:
  16930. + ! #line 1894 "c-parse.y"
  16931. +   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  16932. +       break;}
  16933. +   case 349:
  16934. + ! #line 1901 "c-parse.y"
  16935. +   { pushlevel (0);
  16936. +             clear_parm_order ();
  16937. +             declare_parm_level (1); ;
  16938. +       break;}
  16939. +   case 350:
  16940. + ! #line 1905 "c-parse.y"
  16941. +   { yyval.ttype = yyvsp[0].ttype;
  16942. +             parmlist_tags_warning ();
  16943. +             poplevel (0, 0, 0); ;
  16944. +       break;}
  16945. +   case 352:
  16946. + ! #line 1913 "c-parse.y"
  16947. +   { tree t;
  16948. +             for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t))
  16949. +               if (TREE_VALUE (t) == NULL_TREE)
  16950. + ***************
  16951. + *** 2945,2968 ****
  16952. +             yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, yyvsp[-1].ttype); ;
  16953. +       break;}
  16954. +   case 353:
  16955. + ! #line 1915 "c-parse.y"
  16956. +   { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
  16957. +       break;}
  16958. +   case 354:
  16959. + ! #line 1917 "c-parse.y"
  16960. +   { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
  16961. +       break;}
  16962. +   case 355:
  16963. + ! #line 1923 "c-parse.y"
  16964. +   { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
  16965. +       break;}
  16966. +   case 356:
  16967. + ! #line 1925 "c-parse.y"
  16968. +   { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
  16969. +       break;}
  16970. +   }
  16971. +      /* the action file gets copied in in place of this dollarsign */
  16972. + ! #line 327 "bison.simple"
  16973. +   
  16974. +     yyvsp -= yylen;
  16975. +     yyssp -= yylen;
  16976. + --- 3277,3300 ----
  16977. +             yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, yyvsp[-1].ttype); ;
  16978. +       break;}
  16979. +   case 353:
  16980. + ! #line 1923 "c-parse.y"
  16981. +   { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
  16982. +       break;}
  16983. +   case 354:
  16984. + ! #line 1925 "c-parse.y"
  16985. +   { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
  16986. +       break;}
  16987. +   case 355:
  16988. + ! #line 1931 "c-parse.y"
  16989. +   { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
  16990. +       break;}
  16991. +   case 356:
  16992. + ! #line 1933 "c-parse.y"
  16993. +   { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
  16994. +       break;}
  16995. +   }
  16996. +      /* the action file gets copied in in place of this dollarsign */
  16997. + ! #line 465 "/gnu/lib/bison.simple"
  16998. +   
  16999. +     yyvsp -= yylen;
  17000. +     yyssp -= yylen;
  17001. + ***************
  17002. + *** 3021,3029 ****
  17003. +       /* If not already recovering from an error, report this error.  */
  17004. +       {
  17005. +         ++yynerrs;
  17006. + !       yyerror("parse error");
  17007. +       }
  17008. +   
  17009. +     if (yyerrstatus == 3)
  17010. +       {
  17011. +         /* if just tried and failed to reuse lookahead token after an error, discard it.  */
  17012. + --- 3353,3406 ----
  17013. +       /* If not already recovering from an error, report this error.  */
  17014. +       {
  17015. +         ++yynerrs;
  17016. + ! 
  17017. + ! #ifdef YYERROR_VERBOSE
  17018. + !       yyn = yypact[yystate];
  17019. + ! 
  17020. + !       if (yyn > YYFLAG && yyn < YYLAST)
  17021. + !     {
  17022. + !       int size = 0;
  17023. + !       char *msg;
  17024. + !       int x, count;
  17025. + ! 
  17026. + !       count = 0;
  17027. + !       /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
  17028. + !       for (x = (yyn < 0 ? -yyn : 0);
  17029. + !            x < (sizeof(yytname) / sizeof(char *)); x++)
  17030. + !         if (yycheck[x + yyn] == x)
  17031. + !           size += strlen(yytname[x]) + 15, count++;
  17032. + !       msg = (char *) malloc(size + 15);
  17033. + !       if (msg != 0)
  17034. + !         {
  17035. + !           strcpy(msg, "parse error");
  17036. + ! 
  17037. + !           if (count < 5)
  17038. + !         {
  17039. + !           count = 0;
  17040. + !           for (x = (yyn < 0 ? -yyn : 0);
  17041. + !                x < (sizeof(yytname) / sizeof(char *)); x++)
  17042. + !             if (yycheck[x + yyn] == x)
  17043. + !               {
  17044. + !             strcat(msg, count == 0 ? ", expecting `" : " or `");
  17045. + !             strcat(msg, yytname[x]);
  17046. + !             strcat(msg, "'");
  17047. + !             count++;
  17048. + !               }
  17049. + !         }
  17050. + !           yyerror(msg);
  17051. + !           free(msg);
  17052. + !         }
  17053. + !       else
  17054. + !         yyerror ("parse error; also virtual memory exceeded");
  17055. + !     }
  17056. + !       else
  17057. + ! #endif /* YYERROR_VERBOSE */
  17058. + !     yyerror("parse error");
  17059. +       }
  17060. +   
  17061. + +   goto yyerrlab1;
  17062. + + yyerrlab1:   /* here on error raised explicitly by an action */
  17063. + + 
  17064. +     if (yyerrstatus == 3)
  17065. +       {
  17066. +         /* if just tried and failed to reuse lookahead token after an error, discard it.  */
  17067. + ***************
  17068. + *** 3113,3117 ****
  17069. +     yystate = yyn;
  17070. +     goto yynewstate;
  17071. +   }
  17072. + ! #line 1928 "c-parse.y"
  17073. +   
  17074. + --- 3490,3494 ----
  17075. +     yystate = yyn;
  17076. +     goto yynewstate;
  17077. +   }
  17078. + ! #line 1936 "c-parse.y"
  17079. +   
  17080. + diff -rc --new-file gcc-2.5.8-fsf/c-parse.y gcc-2.5.8/c-parse.y
  17081. + *** gcc-2.5.8-fsf/c-parse.y    Tue Nov 23 23:43:28 1993
  17082. + --- gcc-2.5.8/c-parse.y    Tue Feb 22 11:22:26 1994
  17083. + ***************
  17084. + *** 898,905 ****
  17085. +   
  17086. +   attrib
  17087. +       : IDENTIFIER
  17088. + !     { if (strcmp (IDENTIFIER_POINTER ($1), "packed")
  17089. +             && strcmp (IDENTIFIER_POINTER ($1), "noreturn"))
  17090. +           warning ("`%s' attribute directive ignored",
  17091. +                IDENTIFIER_POINTER ($1));
  17092. +         $$ = $1; }
  17093. + --- 898,913 ----
  17094. +   
  17095. +   attrib
  17096. +       : IDENTIFIER
  17097. + !     {
  17098. + ! #ifdef HANDLE_ATTRIBUTE0
  17099. + !       /* give the function a chance to validate further attributes */
  17100. + !       if (HANDLE_ATTRIBUTE0 (IDENTIFIER_POINTER ($1)) ||
  17101. + !           (strcmp (IDENTIFIER_POINTER ($1), "packed")
  17102. + !           && strcmp (IDENTIFIER_POINTER ($1), "noreturn")))
  17103. + ! #else
  17104. + !       if (strcmp (IDENTIFIER_POINTER ($1), "packed")
  17105. +             && strcmp (IDENTIFIER_POINTER ($1), "noreturn"))
  17106. + + #endif
  17107. +           warning ("`%s' attribute directive ignored",
  17108. +                IDENTIFIER_POINTER ($1));
  17109. +         $$ = $1; }
  17110. + diff -rc --new-file gcc-2.5.8-fsf/calls.c gcc-2.5.8/calls.c
  17111. + *** gcc-2.5.8-fsf/calls.c    Thu Dec  2 12:21:43 1993
  17112. + --- gcc-2.5.8/calls.c    Tue Feb 22 11:22:32 1994
  17113. + ***************
  17114. + *** 2107,2112 ****
  17115. + --- 2107,2120 ----
  17116. +   
  17117. +     argvec = (struct arg *) alloca (nargs * sizeof (struct arg));
  17118. +   
  17119. + + #if defined (__amigados__)
  17120. + + /* how would you do this RIGHT ?? fake a DECL node? dunno... */
  17121. + + #ifdef ENCODE_SECTION_INFO
  17122. + +   /* mark it as a function (to be in the text section that is) */
  17123. + +   SYMBOL_REF_FLAG (fun) = 1;
  17124. + + #endif
  17125. + + #endif
  17126. + + 
  17127. +     INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE, fun);
  17128. +   
  17129. +     args_size.constant = 0;
  17130. + diff -rc --new-file gcc-2.5.8-fsf/cccp.c gcc-2.5.8/cccp.c
  17131. + *** gcc-2.5.8-fsf/cccp.c    Sat Dec 11 13:49:38 1993
  17132. + --- gcc-2.5.8/cccp.c    Tue Feb 22 11:27:02 1994
  17133. + ***************
  17134. + *** 39,50 ****
  17135. +   #include "config.h"
  17136. +   #endif /* not EMACS */
  17137. +   
  17138. +   #ifndef STANDARD_INCLUDE_DIR
  17139. + ! #define STANDARD_INCLUDE_DIR "/usr/include"
  17140. +   #endif
  17141. +   
  17142. +   #ifndef LOCAL_INCLUDE_DIR
  17143. + ! #define LOCAL_INCLUDE_DIR "/usr/local/include"
  17144. +   #endif
  17145. +   
  17146. +   #if 0 /* We can't get ptrdiff_t, so I arranged not to need PTR_INT_TYPE.  */
  17147. + --- 39,66 ----
  17148. +   #include "config.h"
  17149. +   #endif /* not EMACS */
  17150. +   
  17151. + + #ifdef amigados
  17152. + + /* Since cpp uses alloca to store all its read files, this is quite deadly
  17153. + +    on a system with non-automatic stackgrowth like amigados, so we better
  17154. + +    turn it off now.  Normally alloca is #defined to __builtin_alloca, so
  17155. + +    undefining it causes an external alloca to be used.
  17156. + + 
  17157. + +    Note that it's not wise to generally inhibit __builtin_alloca, since
  17158. + +    using the generic emulator entitels a serious (!) speed penalty, and
  17159. + +    it's bad enough that we have to live with it in cccp, don't make cc1
  17160. + +    unbearably slow as well... */
  17161. + + 
  17162. + + #undef alloca
  17163. + + 
  17164. + + static int amigados_abs_filename ();
  17165. + + #endif
  17166. + + 
  17167. +   #ifndef STANDARD_INCLUDE_DIR
  17168. + ! #define STANDARD_INCLUDE_DIR "/gnu/include"
  17169. +   #endif
  17170. +   
  17171. +   #ifndef LOCAL_INCLUDE_DIR
  17172. + ! #define LOCAL_INCLUDE_DIR "/local/include"
  17173. +   #endif
  17174. +   
  17175. +   #if 0 /* We can't get ptrdiff_t, so I arranged not to need PTR_INT_TYPE.  */
  17176. + ***************
  17177. + *** 1874,1884 ****
  17178. + --- 1890,1904 ----
  17179. +         char *p = in_fname;
  17180. +         char *p1 = p;
  17181. +         /* Discard all directory prefixes from P.  */
  17182. + + #ifdef FILE_NAME_NONDIRECTORY
  17183. + +       p = FILE_NAME_NONDIRECTORY (p);
  17184. + + #else
  17185. +         while (*p1) {
  17186. +       if (*p1 == '/')
  17187. +         p = p1 + 1;
  17188. +       p1++;
  17189. +         }
  17190. + + #endif
  17191. +         /* Output P, but remove known suffixes.  */
  17192. +         len = strlen (p);
  17193. +         if (p[len - 2] == '.' && p[len - 1] == 'c')
  17194. + ***************
  17195. + *** 3636,3642 ****
  17196. +   
  17197. +         if (!no_output && already_output == 0
  17198. +         && (kt->pass_thru
  17199. + !           || (kt->type == T_DEFINE
  17200. +             && (dump_macros == dump_names
  17201. +                 || dump_macros == dump_definitions)))) {
  17202. +           int len;
  17203. + --- 3656,3662 ----
  17204. +   
  17205. +         if (!no_output && already_output == 0
  17206. +         && (kt->pass_thru
  17207. + !           || ((kt->type == T_DEFINE || kt->type == T_UNDEF)
  17208. +             && (dump_macros == dump_names
  17209. +                 || dump_macros == dump_definitions)))) {
  17210. +           int len;
  17211. + ***************
  17212. + *** 3982,3987 ****
  17213. + --- 4002,4019 ----
  17214. +           search_start = dsp;
  17215. +   #ifndef VMS
  17216. +           ep = rindex (nam, '/');
  17217. + + 
  17218. + + #ifdef amigados
  17219. + +         /* amigados uses unix-style directory-filename separation, but
  17220. + +            has VMS-style logicals as well */
  17221. + + 
  17222. + +         if (ep == NULL) 
  17223. + +           {
  17224. + +         ep = rindex (nam, ':');
  17225. + +         /* a ':' is part of the directory name, a '/' isn't ! */
  17226. + +             if (ep != NULL) ep++;
  17227. + +           }
  17228. + + #endif /* amigados */
  17229. +   #else                /* VMS */
  17230. +           ep = rindex (nam, ']');
  17231. +           if (ep == NULL) ep = rindex (nam, '>');
  17232. + ***************
  17233. + *** 4061,4067 ****
  17234. + --- 4093,4103 ----
  17235. +   
  17236. +     /* If specified file name is absolute, just open it.  */
  17237. +   
  17238. + + #ifndef amigados
  17239. +     if (*fbeg == '/') {
  17240. + + #else
  17241. + +   if (amigados_abs_filename (fbeg, flen)) {
  17242. + + #endif
  17243. +       strncpy (fname, fbeg, flen);
  17244. +       fname[flen] = 0;
  17245. +       if (redundant_include_p (fname))
  17246. + ***************
  17247. + *** 4084,4089 ****
  17248. + --- 4120,4129 ----
  17249. +       if (searchptr->fname[0] == 0)
  17250. +         continue;
  17251. +       strcpy (fname, searchptr->fname);
  17252. + + 
  17253. + + #ifdef amigados
  17254. + +     if (fname[strlen (fname) - 1] != ':')
  17255. + + #endif
  17256. +       strcat (fname, "/");
  17257. +       fname[strlen (fname) + flen] = 0;
  17258. +         } else {
  17259. + ***************
  17260. + *** 9017,9025 ****
  17261. +   perror_with_name (name)
  17262. +        char *name;
  17263. +   {
  17264. +     fprintf (stderr, "%s: ", progname);
  17265. + !   if (errno < sys_nerr)
  17266. + !     fprintf (stderr, "%s: %s\n", name, sys_errlist[errno]);
  17267. +     else
  17268. +       fprintf (stderr, "%s: undocumented I/O error\n", name);
  17269. +     errors++;
  17270. + --- 9057,9067 ----
  17271. +   perror_with_name (name)
  17272. +        char *name;
  17273. +   {
  17274. + +   int error = errno;
  17275. + + 
  17276. +     fprintf (stderr, "%s: ", progname);
  17277. + !   if (error < sys_nerr)
  17278. + !     fprintf (stderr, "%s: %s\n", name, sys_errlist[error]);
  17279. +     else
  17280. +       fprintf (stderr, "%s: undocumented I/O error\n", name);
  17281. +     errors++;
  17282. + ***************
  17283. + *** 9416,9418 ****
  17284. + --- 9458,9484 ----
  17285. +     return dst;
  17286. +   }
  17287. +   #endif /* VMS */
  17288. + + 
  17289. + + 
  17290. + + #ifdef amigados
  17291. + + 
  17292. + + /* This function returns whether the LEN characters long filename FNAME 
  17293. + +    is an absolute path specification. */
  17294. + + 
  17295. + + static int
  17296. + + amigados_abs_filename (fname, len)
  17297. + +      char *fname;
  17298. + +      int len;
  17299. + + {
  17300. + +   /* we're using ixemul.library, which treats `/foo' as `foo:', so 
  17301. + +      fname[0] is to be considered absolute as well */
  17302. + +   if (fname[0] == '/')
  17303. + +     return 1;
  17304. + + 
  17305. + +   /* else do an index() on fname, but one which is limited to len characters */
  17306. + +   while (*fname && *fname != ':' && len) 
  17307. + +     fname++, len--;
  17308. + + 
  17309. + +   return *fname == ':';
  17310. + + }
  17311. + + #endif /* amigados */
  17312. + diff -rc --new-file gcc-2.5.8-fsf/config/m68k/amigados.c gcc-2.5.8/config/m68k/amigados.c
  17313. + *** gcc-2.5.8-fsf/config/m68k/amigados.c    Thu Jan  1 00:00:00 1970
  17314. + --- gcc-2.5.8/config/m68k/amigados.c    Tue Feb 22 11:22:43 1994
  17315. + ***************
  17316. + *** 0 ****
  17317. + --- 1,158 ----
  17318. + + /* Definitions of target machine for GNU compiler.  amiga 68000/68020 version.
  17319. + +    Copyright (C) 1992 Free Software Foundation, Inc.
  17320. + +    Contributed by Markus M. Wild (wild@amiga.physik.unizh.ch).
  17321. + + 
  17322. + + This file is part of GNU CC.
  17323. + + 
  17324. + + GNU CC is free software; you can redistribute it and/or modify
  17325. + + it under the terms of the GNU General Public License as published by
  17326. + + the Free Software Foundation; either version 2, or (at your option)
  17327. + + any later version.
  17328. + + 
  17329. + + GNU CC is distributed in the hope that it will be useful,
  17330. + + but WITHOUT ANY WARRANTY; without even the implied warranty of
  17331. + + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17332. + + GNU General Public License for more details.
  17333. + + 
  17334. + + You should have received a copy of the GNU General Public License
  17335. + + along with GNU CC; see the file COPYING.  If not, write to
  17336. + + the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  17337. + + 
  17338. + + #include "m68k/m68k.c"
  17339. + + 
  17340. + + /* Does operand (which is a symbolic_operand) live in text space? If
  17341. + +    so SYMBOL_REF_FLAG, which is set by ENCODE_SECTION_INFO, will be true.
  17342. + + 
  17343. + +    This function is used in base relative code generation. */
  17344. + + 
  17345. + + int
  17346. + + read_only_operand (operand)
  17347. + +      rtx operand;
  17348. + + {
  17349. + +   if (GET_CODE (operand) == CONST)
  17350. + +     operand = XEXP (XEXP (operand, 0), 0);
  17351. + +   if (GET_CODE (operand) == SYMBOL_REF)
  17352. + +     return SYMBOL_REF_FLAG (operand) || CONSTANT_POOL_ADDRESS_P (operand);
  17353. + +   return 1;
  17354. + + }
  17355. + + 
  17356. + + 
  17357. + + /* the rest of the file is to implement AmigaDOS specific keywords some day.
  17358. + +    The approach used so far used __attribute__ for this, but this required
  17359. + +    changes to c-parse.y as well as if we'd use the common keywords used
  17360. + +    on commercial AmigaDOS C-compilers as well. So in the future I'll probably
  17361. + +    switch to __saveds and __interrupt keywords as well.
  17362. + + 
  17363. + +    The rest of this file is currently ignored, because it's no longer
  17364. + +    working with the current gcc version. */
  17365. + + 
  17366. + + #if not_yet_working
  17367. + + 
  17368. + + #include "tree.h"
  17369. + + 
  17370. + + struct attribute {
  17371. + +   tree ident;
  17372. + +   int  saveds : 1,
  17373. + +        interrupt : 1;
  17374. + + };
  17375. + + 
  17376. + + 
  17377. + + static struct attribute *a_tab = 0;
  17378. + + static int a_index, a_size;
  17379. + + 
  17380. + + void
  17381. + + add_attr_entry (attr)
  17382. + +     struct attribute *attr;
  17383. + + {
  17384. + +   if (! a_tab)
  17385. + +     {
  17386. + +       a_size = 10;
  17387. + +       a_index = 0;
  17388. + +       a_tab  = (struct attribute *) xmalloc (a_size * sizeof (struct attribute));
  17389. + +     }
  17390. + + 
  17391. + +   if (a_index == a_size)
  17392. + +     {
  17393. + +       a_size <<= 1;
  17394. + +       a_tab = (struct attribute *) xrealloc (a_tab, a_size * sizeof (struct attribute));
  17395. + +     }
  17396. + + 
  17397. + +   a_tab[a_index++] = *attr;
  17398. + + }
  17399. + + 
  17400. + + 
  17401. + + void
  17402. + + attr_do_saveds (function_ident)
  17403. + +       tree function_ident;
  17404. + + {
  17405. + +   struct attribute attr, *a;
  17406. + +   int i;
  17407. + + 
  17408. + +   for (i = 0, a = a_tab; i < a_index; i++, a++)
  17409. + +     if (a->ident == function_ident)
  17410. + +       {
  17411. + +     a->saveds = 1;
  17412. + +     return;
  17413. + +       }
  17414. + + 
  17415. + +   /* create a new entry for this function */
  17416. + +   attr.ident     = function_ident;
  17417. + +   attr.saveds    = 1;
  17418. + +   attr.interrupt = 0;
  17419. + +   add_attr_entry (&attr);
  17420. + + }
  17421. + + 
  17422. + + void
  17423. + + attr_do_interrupt (function_ident)
  17424. + +     tree function_ident;
  17425. + + {
  17426. + +   struct attribute attr, *a;
  17427. + +   int i;
  17428. + + 
  17429. + +   for (i = 0, a = a_tab; i < a_index; i++, a++)
  17430. + +     if (a->ident == function_ident)
  17431. + +       {
  17432. + +     /* __interrupt implies __saveds */
  17433. + +     a->saveds    = 1;
  17434. + +     a->interrupt = 1;
  17435. + +     return;
  17436. + +       }
  17437. + + 
  17438. + +   /* create a new entry for this function */
  17439. + +   attr.ident     = function_ident;
  17440. + +   attr.saveds     = 1;
  17441. + +   attr.interrupt = 1;
  17442. + +   add_attr_entry (&attr);
  17443. + + }
  17444. + + 
  17445. + + int
  17446. + + attr_does_saveds (function_name)
  17447. + +     char *function_name;
  17448. + + {
  17449. + +   tree ident = get_identifier (function_name);
  17450. + +   struct attribute *attr;
  17451. + +   int i;
  17452. + +   
  17453. + +   for (i = 0, attr = a_tab; i < a_index; i++, attr++)
  17454. + +     if (attr->ident == ident)
  17455. + +       return attr->saveds;
  17456. + + 
  17457. + +   return 0;
  17458. + + }
  17459. + + 
  17460. + + int
  17461. + + attr_does_interrupt (function_name)
  17462. + +     char *function_name;
  17463. + + {
  17464. + +   tree ident = get_identifier (function_name);
  17465. + +   struct attribute *attr;
  17466. + +   int i;
  17467. + +   
  17468. + +   for (i = 0, attr = a_tab; i < a_index; i++, attr++)
  17469. + +     if (attr->ident == ident)
  17470. + +       return attr->interrupt;
  17471. + + 
  17472. + +   return 0;
  17473. + + }
  17474. + + 
  17475. + + #endif
  17476. + diff -rc --new-file gcc-2.5.8-fsf/config/m68k/amigados.h gcc-2.5.8/config/m68k/amigados.h
  17477. + *** gcc-2.5.8-fsf/config/m68k/amigados.h    Thu Jan  1 00:00:00 1970
  17478. + --- gcc-2.5.8/config/m68k/amigados.h    Tue Feb 22 11:22:44 1994
  17479. + ***************
  17480. + *** 0 ****
  17481. + --- 1,408 ----
  17482. + + /* Definitions of target machine for GNU compiler.  amiga 68000/68020 version.
  17483. + +    Copyright (C) 1992 Free Software Foundation, Inc.
  17484. + +    Contributed by Markus M. Wild (wild@amiga.physik.unizh.ch).
  17485. + + 
  17486. + + This file is part of GNU CC.
  17487. + + 
  17488. + + GNU CC is free software; you can redistribute it and/or modify
  17489. + + it under the terms of the GNU General Public License as published by
  17490. + + the Free Software Foundation; either version 2, or (at your option)
  17491. + + any later version.
  17492. + + 
  17493. + + GNU CC is distributed in the hope that it will be useful,
  17494. + + but WITHOUT ANY WARRANTY; without even the implied warranty of
  17495. + + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17496. + + GNU General Public License for more details.
  17497. + + 
  17498. + + You should have received a copy of the GNU General Public License
  17499. + + along with GNU CC; see the file COPYING.  If not, write to
  17500. + + the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  17501. + + 
  17502. + + #include "m68k/m68k.h"
  17503. + + 
  17504. + + /* See m68k.h for bits in TARGET_DEFAULT.
  17505. + +    0 means 68000, no hardware fpu (68881/68882/68040).
  17506. + +    7 means 68020 (or higher) with hardware fpu.  */
  17507. + + 
  17508. + + #ifndef TARGET_DEFAULT
  17509. + + #define TARGET_DEFAULT 0
  17510. + + #endif
  17511. + + 
  17512. + + /* Define __HAVE_68881__ in preprocessor according to the -m flags.
  17513. + +    This will control the use of inline 68881 insns in certain macros.
  17514. + +    Also inform the program which CPU this is for.  */
  17515. + + 
  17516. + + #if TARGET_DEFAULT & 02
  17517. + + 
  17518. + + /* -m68881 is the default */
  17519. + + #define CPP_SPEC \
  17520. + + "%{!msoft-float:-D__HAVE_68881__ }\
  17521. + + %{!ansi:%{m68000:-Dmc68010}%{mc68000:-Dmc68010}%{!mc68000:%{!m68000:-Dmc68020}}}"
  17522. + + 
  17523. + + #else
  17524. + + 
  17525. + + /* -msoft-float is the default, assume -mc68000 as well */
  17526. + + #define CPP_SPEC \
  17527. + + "%{m68881:-D__HAVE_68881__ }\
  17528. + + %{!ansi:%{m68020:-Dmc68020}%{mc68020:-Dmc68020}%{!mc68020:%{!m68020:-Dmc68010}}}"
  17529. + + 
  17530. + + /* Don't try using XFmode since we don't have appropriate runtime software
  17531. + +    support.  */
  17532. + + #undef LONG_DOUBLE_TYPE_SIZE
  17533. + + #define LONG_DOUBLE_TYPE_SIZE 64
  17534. + + 
  17535. + + #endif
  17536. + + 
  17537. + + /* -m68000 requires special flags to the assembler.  */
  17538. + + 
  17539. + + #if TARGET_DEFAULT & 01
  17540. + + 
  17541. + + #define ASM_SPEC \
  17542. + +  "%{m68000:-mc68010}%{mc68000:-mc68010}%{!mc68000:%{!m68000:-mc68020}} %{msmall-code:-l} "
  17543. + + 
  17544. + + #else
  17545. + + 
  17546. + + #define ASM_SPEC \
  17547. + +  "%{m68020:-mc68020}%{mc68020:-mc68020}%{!mc68020:%{!m68020:-mc68010}} %{msmall-code:-l} "
  17548. + + 
  17549. + + #endif
  17550. + + 
  17551. + + /* amiga/amigados are the new "standard" defines for the Amiga, MCH_AMIGA
  17552. + +  * was used before and is included for compatibility reasons */
  17553. + + 
  17554. + + #define CPP_PREDEFINES "-Dmc68000 -Damiga -Damigados -DMCH_AMIGA -DAMIGA"
  17555. + + 
  17556. + + /* Choose the right startup file, depending on whether we use base relative
  17557. + +    code, base relative code with automatic relocation (-resident), or plain
  17558. + +    crt0.o. 
  17559. + +   
  17560. + +    Profiling is currently only available for plain startup.
  17561. + +    mcrt0.o does not (yet) exist. */
  17562. + + 
  17563. + + #define STARTFILE_SPEC \
  17564. + +   "%{resident:rcrt0.o%s}%{!resident:%{!fbaserel:%{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}}%{fbaserel:%{pg:bgcrt0.o%s}%{!pg:%{p:bmcrt0.o%s}%{!p:bcrt0.o%s}}}}"
  17565. + + 
  17566. + + 
  17567. + + /* Automatically search libamiga.a for AmigaDOS specific functions.  Note
  17568. + +    that we first search the standard C library to resolve as much as
  17569. + +    possible from there, since it has names that are duplicated in libamiga.a
  17570. + +    which we *don't* want from there.  Then search the standard C library
  17571. + +    again to resolve any references that libamiga.a might have generated.
  17572. + +    This may only be a temporary solution since it might be better to simply
  17573. + +    remove the things from libamiga.a that should be pulled in from libc.a
  17574. + +    instead, which would eliminate the first reference to libc.a. */
  17575. + + 
  17576. + + #define LIB_SPEC "%{!p:%{!pg:-lc -lamiga -lc}}%{p:-lc_p -lamiga -lc_p}%{pg:-lc_p -lamiga -lc_p}"
  17577. + + 
  17578. + + /* if debugging, tell the linker to output amiga-hunk symbols *and* a BSD
  17579. + +    compatible debug hunk (which will probably change in the future, it's not
  17580. + +    tremendously useful in its current state). */
  17581. + + 
  17582. + + #define LINK_SPEC "%{g:-amiga-debug-hunk} %{fbaserel:-databss-together} %{resident:-databss-together -datadata-reloc -flavor libb} "
  17583. + + 
  17584. + + #define CC1_SPEC "%{resident:-fbaserel} "
  17585. + + 
  17586. + + #define CC1PLUS_SPEC "%{resident:-fbaserel} "
  17587. + + 
  17588. + + /* Omit frame pointer at high optimization levels. (This doesn't hurt, since
  17589. + +    GDB doesn't work under AmigaDOS at the moment anyway..) */
  17590. + +   
  17591. + + #define OPTIMIZATION_OPTIONS(OPTIMIZE) \
  17592. + + {                                  \
  17593. + +   if (OPTIMIZE >= 2)                         \
  17594. + +     flag_omit_frame_pointer = 1;                \
  17595. + + }
  17596. + + 
  17597. + + /* provide a dummy entry for the small-code switch. This is currently only
  17598. + +    needed by the assembler (explanations: m68k.h), but will be used by cc1
  17599. + +    to output 16bit pc-relative code later. */
  17600. + + 
  17601. + + #undef TARGET_SWITCHES
  17602. + + #define TARGET_SWITCHES  \
  17603. + +   { { "68020", 5},                \
  17604. + +     { "c68020", 5},                \
  17605. + +     { "68881", 2},                \
  17606. + +     { "bitfield", 4},                \
  17607. + +     { "68000", -5},                \
  17608. + +     { "c68000", -5},                \
  17609. + +     { "soft-float", -0102},            \
  17610. + +     { "nobitfield", -4},            \
  17611. + +     { "rtd", 8},                \
  17612. + +     { "nortd", -8},                \
  17613. + +     { "short", 040},                \
  17614. + +     { "noshort", -040},                \
  17615. + +     { "fpa", 0100},                \
  17616. + +     { "nofpa", -0100},                \
  17617. + +     { "sky", 0200},                \
  17618. + +     { "nosky", -0200},                \
  17619. + +     { "68040", 0407},                \
  17620. + +     { "68030", -01400},                \
  17621. + +     { "68030", 7},                \
  17622. + +     { "68040-only", 01000},            \
  17623. + +     { "small-code", 0 },            \
  17624. + +     { "", TARGET_DEFAULT}}
  17625. + + 
  17626. + + /* Every structure or union's size must be a multiple of 2 bytes.  */
  17627. + + 
  17628. + + #define STRUCTURE_SIZE_BOUNDARY 16
  17629. + + 
  17630. + + /* This is (almost;-)) BSD, so it wants DBX format.  */
  17631. + + 
  17632. + + #define DBX_DEBUGGING_INFO
  17633. + + 
  17634. + + /* Allow folding division by zero.  */
  17635. + + #define REAL_INFINITY
  17636. + + 
  17637. + + #if 0    /* This apparently is no longer necessary? */
  17638. + + 
  17639. + + /* This is how to output an assembler line defining a `double' constant.  */
  17640. + + 
  17641. + + #undef ASM_OUTPUT_DOUBLE
  17642. + + #define ASM_OUTPUT_DOUBLE(FILE,VALUE)                    \
  17643. + +   {                                    \
  17644. + +     if (REAL_VALUE_ISINF (VALUE))                    \
  17645. + +       fprintf (FILE, "\t.double 0r%s99e999\n", (VALUE) > 0 ? "" : "-");    \
  17646. + +     else if (isnan (VALUE))                        \
  17647. + +       {                                    \
  17648. + +     union { double d; long l[2];} t;                \
  17649. + +     t.d = (VALUE);                            \
  17650. + +     fprintf (FILE, "\t.long 0x%lx\n\t.long 0x%lx\n", t.l[0], t.l[1]); \
  17651. + +       }                                    \
  17652. + +     else                                \
  17653. + +       fprintf (FILE, "\t.double 0r%.17g\n", VALUE);            \
  17654. + +   }
  17655. + + 
  17656. + + /* This is how to output an assembler line defining a `float' constant.  */
  17657. + + 
  17658. + + #undef ASM_OUTPUT_FLOAT
  17659. + + #define ASM_OUTPUT_FLOAT(FILE,VALUE)                    \
  17660. + +   {                                    \
  17661. + +     if (REAL_VALUE_ISINF (VALUE))                    \
  17662. + +       fprintf (FILE, "\t.single 0r%s99e999\n", (VALUE) > 0 ? "" : "-");    \
  17663. + +     else if (isnan (VALUE))                        \
  17664. + +       {                                    \
  17665. + +     union { float f; long l;} t;                    \
  17666. + +     t.f = (VALUE);                            \
  17667. + +     fprintf (FILE, "\t.long 0x%lx\n", t.l);                \
  17668. + +       }                                    \
  17669. + +     else                                \
  17670. + +       fprintf (FILE, "\t.single 0r%.9g\n", VALUE);            \
  17671. + +   }
  17672. + + 
  17673. + + /* This is how to output an assembler lines defining floating operands.
  17674. + +    There's no way to output a NaN's fraction, so we lose it.  */
  17675. + +   
  17676. + + #undef ASM_OUTPUT_FLOAT_OPERAND
  17677. + + #define ASM_OUTPUT_FLOAT_OPERAND(CODE,FILE,VALUE)                \
  17678. + +  do {                                \
  17679. + +       if (CODE == 'f')                        \
  17680. + +         {                            \
  17681. + +           (REAL_VALUE_ISINF ((VALUE))                        \
  17682. + +            ? asm_fprintf (FILE, "%I0r%s99e999", ((VALUE) > 0 ? "" : "-")) \
  17683. + +            : (VALUE) == -0.0                            \
  17684. + +            ? asm_fprintf (FILE, "%I0r-0.0")                    \
  17685. + +            : asm_fprintf (FILE, "%I0r%.9g", (VALUE))) \
  17686. + +         } else {                                        \
  17687. + +           long l;                        \
  17688. + +           REAL_VALUE_TO_TARGET_SINGLE (VALUE, l);        \
  17689. + +           if (sizeof (int) == sizeof (long))            \
  17690. + +             asm_fprintf ((FILE), "%I0x%x", l);            \
  17691. + +           else                            \
  17692. + +             asm_fprintf ((FILE), "%I0x%lx", l);            \
  17693. + +         }                            \
  17694. + +      } while (0)
  17695. + + 
  17696. + + #undef ASM_OUTPUT_DOUBLE_OPERAND
  17697. + + #define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE)                \
  17698. + +   (REAL_VALUE_ISINF ((VALUE))                        \
  17699. + +    ? asm_fprintf (FILE, "%I0r%s99e999", ((VALUE) > 0 ? "" : "-")) \
  17700. + +    : (VALUE) == -0.0                            \
  17701. + +    ? asm_fprintf (FILE, "%I0r-0.0")                    \
  17702. + +    : asm_fprintf (FILE, "%I0r%.17g", (VALUE)))
  17703. + + 
  17704. + + #endif    /* 0 */
  17705. + + 
  17706. + + /* use A5 as framepointer instead of A6, this makes A6 available as a
  17707. + +    general purpose register, and can thus be used without problems in
  17708. + +    direct library calls. */
  17709. + + 
  17710. + + #undef FRAME_POINTER_REGNUM
  17711. + + #define FRAME_POINTER_REGNUM 13
  17712. + + #undef ARG_POINTER_REGNUM
  17713. + + #define ARG_POINTER_REGNUM 13
  17714. + + 
  17715. + + /* we use A4 for this, not A5, which is the framepointer */
  17716. + + #undef PIC_OFFSET_TABLE_REGNUM
  17717. + + #define PIC_OFFSET_TABLE_REGNUM 12
  17718. + + 
  17719. + + /* setup a default shell return value for those (gazillion..) programs that
  17720. + +    (inspite of ANSI-C) declare main() to be void (or even VOID...) and thus
  17721. + +    cause the shell to randomly caugh upon executing such programs (contrary
  17722. + +    to Unix, AmigaDOS scripts are terminated with an error if a program returns
  17723. + +    with an error code above the `error' or even `failure' level
  17724. + +    (which is configurable with the FAILAT command) */
  17725. + + 
  17726. + + #define DEFAULT_MAIN_RETURN c_expand_return (integer_zero_node)
  17727. + + 
  17728. + + /* we do have an ansi-compliant c-library ;-) */
  17729. + + #define HAVE_VPRINTF
  17730. + + #define HAVE_VFPRINTF
  17731. + + #define HAVE_PUTENV
  17732. + + #define HAVE_STRERROR
  17733. + + #define HAVE_ATEXIT
  17734. + + 
  17735. + + /* given that symbolic_operand(X), return TRUE if no special
  17736. + +    base relative relocation is necessary */
  17737. + + 
  17738. + + #define LEGITIMATE_BASEREL_OPERAND_P(X) \
  17739. + +   (flag_pic >= 3 && read_only_operand (X))
  17740. + + 
  17741. + + #undef LEGITIMATE_PIC_OPERAND_P
  17742. + + #define LEGITIMATE_PIC_OPERAND_P(X) \
  17743. + +   (! symbolic_operand (X, VOIDmode) || LEGITIMATE_BASEREL_OPERAND_P (X))
  17744. + + 
  17745. + + 
  17746. + + /* Define this macro if references to a symbol must be treated
  17747. + +    differently depending on something about the variable or
  17748. + +    function named by the symbol (such as what section it is in).
  17749. + + 
  17750. + +    The macro definition, if any, is executed immediately after the
  17751. + +    rtl for DECL or other node is created.
  17752. + +    The value of the rtl will be a `mem' whose address is a
  17753. + +    `symbol_ref'.
  17754. + + 
  17755. + +    The usual thing for this macro to do is to a flag in the
  17756. + +    `symbol_ref' (such as `SYMBOL_REF_FLAG') or to store a modified
  17757. + +    name string in the `symbol_ref' (if one bit is not enough
  17758. + +    information).
  17759. + + 
  17760. + +    On the Amiga we use this to indicate if a symbol is in text or
  17761. + +    data space.  */
  17762. + + 
  17763. + + #define ENCODE_SECTION_INFO(DECL)\
  17764. + + do                                    \
  17765. + +   {                                    \
  17766. + +     if (TREE_CODE (DECL) == FUNCTION_DECL)                \
  17767. + +       SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1;            \
  17768. + +     else                                \
  17769. + +       {                                    \
  17770. + +     rtx rtl = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd'        \
  17771. + +            ? TREE_CST_RTL (DECL) : DECL_RTL (DECL));        \
  17772. + +     if (RTX_UNCHANGING_P (rtl) && !MEM_VOLATILE_P (rtl))        \
  17773. + +       SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;                \
  17774. + +       }                                    \
  17775. + +   }                                    \
  17776. + + while (0)
  17777. + + 
  17778. + + #undef SELECT_RTX_SECTION
  17779. + + #define SELECT_RTX_SECTION(MODE, X) readonly_data_section ();
  17780. + + 
  17781. + + /* according to varasm.c, RELOC referrs *only* to whether constants (!)
  17782. + +    are addressed by address. This doesn't matter in baserelative code,
  17783. + +    so we allow (inspite of flag_pic) readonly_data_section() in that
  17784. + +    case */
  17785. + + 
  17786. + + #undef SELECT_SECTION
  17787. + + #define SELECT_SECTION(DECL, RELOC)                    \
  17788. + + {                                    \
  17789. + +   if (TREE_CODE (DECL) == STRING_CST)                    \
  17790. + +     {                                    \
  17791. + +       if (! flag_writable_strings)                    \
  17792. + +     readonly_data_section ();                    \
  17793. + +       else                                \
  17794. + +     data_section ();                        \
  17795. + +     }                                    \
  17796. + +   else if (TREE_CODE (DECL) == VAR_DECL)                \
  17797. + +     {                                    \
  17798. + +       if ((flag_pic && flag_pic < 3 && RELOC)                \
  17799. + +       || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL))        \
  17800. + +     data_section ();                        \
  17801. + +       else                                \
  17802. + +     readonly_data_section ();                    \
  17803. + +     }                                    \
  17804. + +   else                                    \
  17805. + +     readonly_data_section ();                        \
  17806. + + }
  17807. + + 
  17808. + + 
  17809. + + 
  17810. + + #if not_yet_working
  17811. + + 
  17812. + + /* starting support for amiga specific keywords
  17813. + +  * --------------------------------------------
  17814. + +  */
  17815. + + 
  17816. + + /* validate attributes that don't take a parameter. Currently we support
  17817. + +  * __attribute__ (saveds) and __attribute__ (interrupt)
  17818. + +  */
  17819. + + #define HANDLE_ATTRIBUTE0(attr) \
  17820. + +   (strcmp(attr, "saveds") != 0 && strcmp(attr, "interrupt") != 0)
  17821. + + 
  17822. + + /* (c-common.c)
  17823. + +  * install additional attributes
  17824. + +  */
  17825. + + #define HANDLE_EXTRA_ATTRIBUTES(a)                         \
  17826. + +   if (TREE_VALUE (a) != 0                            \
  17827. + +       && TREE_CODE (TREE_VALUE (a)) == IDENTIFIER_NODE                \
  17828. + +       && TREE_VALUE (a) == get_identifier ("saveds"))                \
  17829. + +     {                                        \
  17830. + +       if (TREE_CODE (decl) != FUNCTION_DECL)                    \
  17831. + +         {                                    \
  17832. + +           warning_with_decl (decl,                        \
  17833. + +               "saveds attribute specified for non-function `%s'");        \
  17834. + +       return;                                \
  17835. + +         }                                    \
  17836. + +                                               \
  17837. + +       attr_do_saveds (DECL_NAME (decl));                    \
  17838. + +     }                                        \
  17839. + +   else if (TREE_VALUE (a) != 0                            \
  17840. + +       && TREE_CODE (TREE_VALUE (a)) == IDENTIFIER_NODE                \
  17841. + +       && TREE_VALUE (a) == get_identifier ("interrupt"))            \
  17842. + +     {                                        \
  17843. + +       if (TREE_CODE (decl) != FUNCTION_DECL)                    \
  17844. + +         {                                    \
  17845. + +           warning_with_decl (decl,                        \
  17846. + +               "saveds attribute specified for non-function `%s'");        \
  17847. + +       return;                                \
  17848. + +         }                                    \
  17849. + +                                               \
  17850. + +       attr_do_interrupt (DECL_NAME (decl));                    \
  17851. + +     }                                        \
  17852. + + 
  17853. + + 
  17854. + + #define PROLOGUE_EXTRA_SAVE(mask)                        \
  17855. + +   { extern char *current_function_name;                        \
  17856. + +     /* saveds makes the function preserve d1/a0/a1 as well */            \
  17857. + +     if (attr_does_saveds (current_function_name))                \
  17858. + +       mask |= 0x40c0; }                                \
  17859. + + 
  17860. + + 
  17861. + + #define EPILOGUE_EXTRA_RESTORE(mask, nregs)                    \
  17862. + +   { extern char *current_function_name;                        \
  17863. + +     /* restore those extra registers */                        \
  17864. + +     if (attr_does_saveds (current_function_name))                \
  17865. + +       {                                        \
  17866. + +     mask |= 0x0302;                                \
  17867. + +     nregs += 3;                                \
  17868. + +       } }                                    \
  17869. + + 
  17870. + + 
  17871. + + #define EPILOGUE_EXTRA_BARRIER_KLUDGE(stream)                    \
  17872. + +   { extern char *current_function_name;                        \
  17873. + +     /* PLEASE Help! how is this done cleaner?? */                \
  17874. + +     if (attr_does_saveds (current_function_name))                \
  17875. + +       {                                        \
  17876. + +     fprintf (stderr,                             \
  17877. + +          "warning: couldn't cleanup `saveds'-stack in `%s'.\n");    \
  17878. + +     fprintf (stderr,                            \
  17879. + +          "         this is only ok, if the function never returns!\n");    \
  17880. + +       }    }                                    \
  17881. + +         
  17882. + + 
  17883. + + #define EPILOGUE_EXTRA_TEST(stream)                        \
  17884. + +   { extern char *current_function_name;                        \
  17885. + +     /* with the interrupt-attribute, we have to set the cc before rts */    \
  17886. + +     if (attr_does_interrupt (current_function_name))                \
  17887. + +       asm_fprintf (stream, "\ttstl %s\n", reg_names[0]); }            \
  17888. + + 
  17889. + + #endif
  17890. + diff -rc --new-file gcc-2.5.8-fsf/config/m68k/m68k.c gcc-2.5.8/config/m68k/m68k.c
  17891. + *** gcc-2.5.8-fsf/config/m68k/m68k.c    Wed Nov  3 21:17:46 1993
  17892. + --- gcc-2.5.8/config/m68k/m68k.c    Tue Feb 22 11:22:46 1994
  17893. + ***************
  17894. + *** 61,67 ****
  17895. +   void
  17896. +   finalize_pic ()
  17897. +   {
  17898. + !   if (flag_pic && current_function_uses_pic_offset_table)
  17899. +       emit_insn (gen_rtx (USE, VOIDmode, pic_offset_table_rtx));
  17900. +   }
  17901. +   
  17902. + --- 61,67 ----
  17903. +   void
  17904. +   finalize_pic ()
  17905. +   {
  17906. + !   if (flag_pic && (flag_pic < 3) && current_function_uses_pic_offset_table)
  17907. +       emit_insn (gen_rtx (USE, VOIDmode, pic_offset_table_rtx));
  17908. +   }
  17909. +   
  17910. + ***************
  17911. + *** 181,186 ****
  17912. + --- 181,189 ----
  17913. +         mask &= ~ (1 << (15 - FRAME_POINTER_REGNUM));
  17914. +         num_saved_regs--;
  17915. +       }
  17916. + + #ifdef PROLOGUE_EXTRA_SAVE
  17917. + +   PROLOGUE_EXTRA_SAVE (mask);
  17918. + + #endif
  17919. +   
  17920. +   #if NEED_PROBE
  17921. +     fprintf (stream, "\ttstl sp@(%d)\n", NEED_PROBE - num_saved_regs * 4);
  17922. + ***************
  17923. + *** 214,220 ****
  17924. +         asm_fprintf (stream, "\tmoveml %0I0x%x,%Rsp@-\n", mask);
  17925. +   #endif
  17926. +       }
  17927. + !   if (flag_pic && current_function_uses_pic_offset_table)
  17928. +       {
  17929. +   #ifdef MOTOROLA
  17930. +         asm_fprintf (stream, "\t%Olea (%Rpc, %U_GLOBAL_OFFSET_TABLE_@GOTPC), %s\n",
  17931. + --- 217,223 ----
  17932. +         asm_fprintf (stream, "\tmoveml %0I0x%x,%Rsp@-\n", mask);
  17933. +   #endif
  17934. +       }
  17935. + !   if (flag_pic && (flag_pic < 3) && current_function_uses_pic_offset_table)
  17936. +       {
  17937. +   #ifdef MOTOROLA
  17938. +         asm_fprintf (stream, "\t%Olea (%Rpc, %U_GLOBAL_OFFSET_TABLE_@GOTPC), %s\n",
  17939. + ***************
  17940. + *** 279,284 ****
  17941. + --- 282,290 ----
  17942. +         /* Output just a no-op so that debuggers don't get confused
  17943. +        about which function the pc is in at this address.  */
  17944. +         asm_fprintf (stream, "\tnop\n");
  17945. + + #ifdef EPILOGUE_EXTRA_BARRIER_KLUDGE
  17946. + +       EPILOGUE_EXTRA_BARRIER_KLUDGE(stream);
  17947. + + #endif
  17948. +         return;
  17949. +       }
  17950. +   
  17951. + ***************
  17952. + *** 309,314 ****
  17953. + --- 315,323 ----
  17954. +           nregs++;
  17955. +       mask |= 1 << regno;
  17956. +         }
  17957. + + #ifdef EPILOGUE_EXTRA_RESTORE
  17958. + +   EPILOGUE_EXTRA_RESTORE(mask, nregs);
  17959. + + #endif
  17960. +     offset = foffset + nregs * 4;
  17961. +     if (offset + fsize >= 0x8000
  17962. +         && frame_pointer_needed
  17963. + ***************
  17964. + *** 511,516 ****
  17965. + --- 520,528 ----
  17966. +   #endif
  17967. +       }
  17968. +       }
  17969. + + #ifdef EPILOGUE_EXTRA_TEST
  17970. + +   EPILOGUE_EXTRA_TEST(stream);
  17971. + + #endif
  17972. +     if (current_function_pops_args)
  17973. +       asm_fprintf (stream, "\trtd %0I%d\n", current_function_pops_args);
  17974. +     else
  17975. + ***************
  17976. + *** 801,815 ****
  17977. +     /* First handle a simple SYMBOL_REF or LABEL_REF */
  17978. +     if (GET_CODE (orig) == SYMBOL_REF || GET_CODE (orig) == LABEL_REF)
  17979. +       {
  17980. +         if (reg == 0)
  17981. +       abort ();
  17982. +   
  17983. + !       pic_ref = gen_rtx (MEM, Pmode,
  17984. + !              gen_rtx (PLUS, Pmode,
  17985. + !                   pic_offset_table_rtx, orig));
  17986. +         current_function_uses_pic_offset_table = 1;
  17987. +         RTX_UNCHANGING_P (pic_ref) = 1;
  17988. +         emit_move_insn (reg, pic_ref);
  17989. +         return reg;
  17990. +       }
  17991. +     else if (GET_CODE (orig) == CONST)
  17992. + --- 813,837 ----
  17993. +     /* First handle a simple SYMBOL_REF or LABEL_REF */
  17994. +     if (GET_CODE (orig) == SYMBOL_REF || GET_CODE (orig) == LABEL_REF)
  17995. +       {
  17996. + + #ifdef LEGITIMATE_BASEREL_OPERAND_P
  17997. + +   if (LEGITIMATE_BASEREL_OPERAND_P (orig))
  17998. + +     return orig;
  17999. + + #endif
  18000. + + 
  18001. +         if (reg == 0)
  18002. +       abort ();
  18003. +   
  18004. + !       if (flag_pic >= 3)
  18005. + !     pic_ref = gen_rtx (PLUS, Pmode, pic_offset_table_rtx, orig);
  18006. + !       else
  18007. + !         pic_ref = gen_rtx (MEM, Pmode,
  18008. + !                gen_rtx (PLUS, Pmode,
  18009. + !                     pic_offset_table_rtx, orig));
  18010. + ! 
  18011. +         current_function_uses_pic_offset_table = 1;
  18012. +         RTX_UNCHANGING_P (pic_ref) = 1;
  18013. +         emit_move_insn (reg, pic_ref);
  18014. + + 
  18015. +         return reg;
  18016. +       }
  18017. +     else if (GET_CODE (orig) == CONST)
  18018. + ***************
  18019. + *** 838,843 ****
  18020. + --- 860,866 ----
  18021. +         pic_ref = gen_rtx (PLUS, Pmode, base, orig);
  18022. +         /* Likewise, should we set special REG_NOTEs here?  */
  18023. +       }
  18024. + + 
  18025. +     return pic_ref;
  18026. +   }
  18027. +   
  18028. + ***************
  18029. + *** 2166,2171 ****
  18030. + --- 2189,2198 ----
  18031. +                 fprintf (file, ":w");
  18032. +               if ((flag_pic == 2) && (breg == pic_offset_table_rtx))
  18033. +                 fprintf (file, ":l");
  18034. + +             if ((flag_pic == 3) && (breg == pic_offset_table_rtx))
  18035. + +               fprintf (file, ":W");
  18036. + +             if ((flag_pic == 4) && (breg == pic_offset_table_rtx))
  18037. + +               fprintf (file, ":L");
  18038. +             }
  18039. +           if (addr != 0 && ireg != 0)
  18040. +             {
  18041. + diff -rc --new-file gcc-2.5.8-fsf/config/m68k/m68k.h gcc-2.5.8/config/m68k/m68k.h
  18042. + *** gcc-2.5.8-fsf/config/m68k/m68k.h    Fri Nov  5 08:09:54 1993
  18043. + --- gcc-2.5.8/config/m68k/m68k.h    Tue Feb 22 11:22:49 1994
  18044. + ***************
  18045. + *** 353,361 ****
  18046. +   #ifndef SUPPORT_SUN_FPA
  18047. +   
  18048. +   #define CONDITIONAL_REGISTER_USAGE \
  18049. + ! {                                               \
  18050. + !   if (flag_pic)                                 \
  18051. + !     fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1;    \
  18052. +   }
  18053. +   
  18054. +   #else /* defined SUPPORT_SUN_FPA */
  18055. + --- 353,364 ----
  18056. +   #ifndef SUPPORT_SUN_FPA
  18057. +   
  18058. +   #define CONDITIONAL_REGISTER_USAGE \
  18059. + ! {                                                \
  18060. + !   if (flag_pic)                                  \
  18061. + !     fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1;     \
  18062. + !   /* prevent saving/restoring of the base reg */ \
  18063. + !   if (flag_pic == 3)                 \
  18064. + !     call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \
  18065. +   }
  18066. +   
  18067. +   #else /* defined SUPPORT_SUN_FPA */
  18068. + diff -rc --new-file gcc-2.5.8-fsf/config/m68k/m68k.md gcc-2.5.8/config/m68k/m68k.md
  18069. + *** gcc-2.5.8-fsf/config/m68k/m68k.md    Wed Dec  1 00:17:46 1993
  18070. + --- gcc-2.5.8/config/m68k/m68k.md    Tue Feb 22 11:22:53 1994
  18071. + ***************
  18072. + *** 716,728 ****
  18073. +   {
  18074. +     if (flag_pic && symbolic_operand (operands[1], SImode)) 
  18075. +       {
  18076. + !       /* The source is an address which requires PIC relocation.  
  18077. + !          Call legitimize_pic_address with the source, mode, and a relocation
  18078. + !          register (a new pseudo, or the final destination if reload_in_progress
  18079. + !          is set).   Then fall through normally */
  18080. + !       extern rtx legitimize_pic_address();
  18081. + !       rtx temp = reload_in_progress ? operands[0] : gen_reg_rtx (Pmode);
  18082. + !       operands[1] = legitimize_pic_address (operands[1], SImode, temp);
  18083. +       }
  18084. +   }")
  18085. +   
  18086. + --- 716,733 ----
  18087. +   {
  18088. +     if (flag_pic && symbolic_operand (operands[1], SImode)) 
  18089. +       {
  18090. + ! #ifdef LEGITIMATE_BASEREL_OPERAND_P
  18091. + !       if (flag_pic < 3 || !LEGITIMATE_BASEREL_OPERAND_P (operands[1]))
  18092. + ! #endif
  18093. + !       {
  18094. + !         /* The source is an address which requires PIC relocation.  
  18095. + !            Call legitimize_pic_address with the source, mode, and a relocation
  18096. + !            register (a new pseudo, or the final destination if reload_in_progress
  18097. + !            is set).   Then fall through normally */
  18098. + !         extern rtx legitimize_pic_address();
  18099. + !         rtx temp = reload_in_progress ? operands[0] : gen_reg_rtx (Pmode);
  18100. + !         operands[1] = legitimize_pic_address (operands[1], SImode, temp);
  18101. + !       }
  18102. +       }
  18103. +   }")
  18104. +   
  18105. + ***************
  18106. + *** 1890,1897 ****
  18107. +   
  18108. +         /* These insns can result from reloads to access
  18109. +        stack slots over 64k from the frame pointer.  */
  18110. + !       if (GET_CODE (operands[2]) == CONST_INT
  18111. + !       && INTVAL (operands[2]) + 0x8000 >= (unsigned) 0x10000)
  18112. +           return \"move%.l %2,%0\;add%.l %1,%0\";
  18113. +   #ifdef SGS
  18114. +         if (GET_CODE (operands[2]) == REG)
  18115. + --- 1895,1903 ----
  18116. +   
  18117. +         /* These insns can result from reloads to access
  18118. +        stack slots over 64k from the frame pointer.  */
  18119. + !       if (((GET_CODE (operands[2]) == CONST_INT
  18120. + !        && INTVAL (operands[2]) + 0x8000 >= (unsigned) 0x10000))
  18121. + !       || (flag_pic == 4 && operands[1] == pic_offset_table_rtx))
  18122. +           return \"move%.l %2,%0\;add%.l %1,%0\";
  18123. +   #ifdef SGS
  18124. +         if (GET_CODE (operands[2]) == REG)
  18125. + ***************
  18126. + *** 4858,4864 ****
  18127. +     ""
  18128. +     "
  18129. +   {
  18130. + !   if (flag_pic && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)
  18131. +   #ifdef MOTOROLA
  18132. +       SYMBOL_REF_FLAG (XEXP (operands[0], 0)) = 1;
  18133. +   #else
  18134. + --- 4864,4870 ----
  18135. +     ""
  18136. +     "
  18137. +   {
  18138. + !   if (flag_pic && flag_pic < 3 && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)
  18139. +   #ifdef MOTOROLA
  18140. +       SYMBOL_REF_FLAG (XEXP (operands[0], 0)) = 1;
  18141. +   #else
  18142. + ***************
  18143. + *** 4873,4879 ****
  18144. +        (match_operand:SI 1 "general_operand" "g"))]
  18145. +     ;; Operand 1 not really used on the m68000.
  18146. +   
  18147. + !   "! flag_pic"
  18148. +     "*
  18149. +   #ifdef MOTOROLA
  18150. +     return \"jsr %0\";
  18151. + --- 4879,4885 ----
  18152. +        (match_operand:SI 1 "general_operand" "g"))]
  18153. +     ;; Operand 1 not really used on the m68000.
  18154. +   
  18155. + !   "(! flag_pic || flag_pic >= 3)"
  18156. +     "*
  18157. +   #ifdef MOTOROLA
  18158. +     return \"jsr %0\";
  18159. + ***************
  18160. + *** 4888,4894 ****
  18161. +        (match_operand:SI 1 "general_operand" "g"))]
  18162. +     ;; Operand 1 not really used on the m68000.
  18163. +   
  18164. + !   "flag_pic"
  18165. +     "*
  18166. +   #ifdef HPUX_ASM
  18167. +     return \"bsr %0\";
  18168. + --- 4894,4900 ----
  18169. +        (match_operand:SI 1 "general_operand" "g"))]
  18170. +     ;; Operand 1 not really used on the m68000.
  18171. +   
  18172. + !   "(flag_pic && flag_pic < 3)"
  18173. +     "*
  18174. +   #ifdef HPUX_ASM
  18175. +     return \"bsr %0\";
  18176. + ***************
  18177. + *** 4913,4919 ****
  18178. +     ""
  18179. +     "
  18180. +   {
  18181. + !   if (flag_pic && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
  18182. +   #ifdef MOTOROLA
  18183. +       SYMBOL_REF_FLAG (XEXP (operands[1], 0)) = 1;
  18184. +   #else
  18185. + --- 4919,4925 ----
  18186. +     ""
  18187. +     "
  18188. +   {
  18189. + !   if (flag_pic && flag_pic < 3 && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
  18190. +   #ifdef MOTOROLA
  18191. +       SYMBOL_REF_FLAG (XEXP (operands[1], 0)) = 1;
  18192. +   #else
  18193. + ***************
  18194. + *** 4928,4934 ****
  18195. +       (call (match_operand:QI 1 "memory_operand" "o")
  18196. +             (match_operand:SI 2 "general_operand" "g")))]
  18197. +     ;; Operand 2 not really used on the m68000.
  18198. + !   "! flag_pic"
  18199. +     "*
  18200. +   #ifdef MOTOROLA
  18201. +     return \"jsr %1\";
  18202. + --- 4934,4940 ----
  18203. +       (call (match_operand:QI 1 "memory_operand" "o")
  18204. +             (match_operand:SI 2 "general_operand" "g")))]
  18205. +     ;; Operand 2 not really used on the m68000.
  18206. + !   "(! flag_pic || flag_pic >= 3)"
  18207. +     "*
  18208. +   #ifdef MOTOROLA
  18209. +     return \"jsr %1\";
  18210. + ***************
  18211. + *** 4943,4949 ****
  18212. +       (call (match_operand:QI 1 "memory_operand" "o")
  18213. +             (match_operand:SI 2 "general_operand" "g")))]
  18214. +     ;; Operand 2 not really used on the m68000.
  18215. + !   "flag_pic"
  18216. +     "*
  18217. +   #ifdef HPUX_ASM
  18218. +     return \"bsr %1\";
  18219. + --- 4949,4955 ----
  18220. +       (call (match_operand:QI 1 "memory_operand" "o")
  18221. +             (match_operand:SI 2 "general_operand" "g")))]
  18222. +     ;; Operand 2 not really used on the m68000.
  18223. + !   "(flag_pic && flag_pic < 3)"
  18224. +     "*
  18225. +   #ifdef HPUX_ASM
  18226. +     return \"bsr %1\";
  18227. + diff -rc --new-file gcc-2.5.8-fsf/config/m68k/t-amigados gcc-2.5.8/config/m68k/t-amigados
  18228. + *** gcc-2.5.8-fsf/config/m68k/t-amigados    Thu Jan  1 00:00:00 1970
  18229. + --- gcc-2.5.8/config/m68k/t-amigados    Tue Feb 22 11:27:03 1994
  18230. + ***************
  18231. + *** 0 ****
  18232. + --- 1,186 ----
  18233. + + # Makefile fragment for amigados target.
  18234. + + 
  18235. + + # We generate two additional things:
  18236. + + #
  18237. + + # libb/libgcc.a
  18238. + + #    A base relative version of libgcc.a which is used when compiling and
  18239. + + #    linking with the '-resident' option.
  18240. + + #
  18241. + + # xgccv
  18242. + + #    A forking gcc instead of one calling ssytem(). This makes it less
  18243. + + #    system conformant (can't ^C it when started from make), while providing
  18244. + + #    increased functionality (-pipe option).
  18245. + + 
  18246. + + # Use the vfork'ing version of gcc by default, so that the -pipe option can
  18247. + + # get tested.  To use the regular version just do "make XGCC=gcc".  Note that
  18248. + + # PIPE is defined in x-amigados, so if we are doing a native build, it will
  18249. + + # be defined.  It can be overridden with "make PIPE=".
  18250. + + 
  18251. + + XGCC = xgccv $(PIPE)
  18252. + + GCC_FOR_TARGET = ./$(XGCC) -B./
  18253. + + 
  18254. + + # Build residentable versions of the gcc executables by default.  Use
  18255. + + # "make RESIDENT=" to build non-residentable versions.
  18256. + + # Note:  This failed during bootstrapping of 2.5.5.
  18257. + + 
  18258. + + #RESIDENT = -resident
  18259. + + 
  18260. + + # The standard additional target flags for the compiler.
  18261. + + 
  18262. + + T_CFLAGS = $(RESIDENT)
  18263. + + 
  18264. + + # Allow the user to override the default target optimizations with gcc, or if
  18265. + + # the target compiler is not gcc and doesn't understand -O<N>.
  18266. + + 
  18267. + + T_OPTIMISE = -O2
  18268. + + 
  18269. + + # Each compilation environment (Manx, Dice, GCC, SAS/C, etc) provides its
  18270. + + # own equivalent of the UNIX /usr/include tree.  For gcc, the standard headers
  18271. + + # are in /gnu/include and system specific headers are in /gnu/os-include.
  18272. + + # Use these paths for fixincludes.
  18273. + + 
  18274. + + SYSTEM_HEADER_DIR = /gnu/include
  18275. + + OTHER_FIXINCLUDES_DIRS = /gnu/os-include
  18276. + + 
  18277. + + # We don't need a libgcc1, it's all in ixemul.library
  18278. + + 
  18279. + + LIBGCC1 = libgcc1.null
  18280. + + 
  18281. + + # Flags to use when compiling the normal version of libgcc.a.
  18282. + + # Don't compile with debugging, as long as there is no debugger.
  18283. + + # Explicitly leave out the -resident compilation flag and don't use T_CFLAGS.
  18284. + + 
  18285. + + LIBGCC2_CFLAGS = $(T_OPTIMIZE) $(INTERNAL_CFLAGS) $(X_CFLAGS) $(CFLAGS) \
  18286. + +           $(CROSS_GCC_CFLAGS)
  18287. + + 
  18288. + + # Flags to use when compiling the base relative version of libgcc.a.
  18289. + + # Don't compile with debugging, as long as there is no debugger.
  18290. + + # Explicitly force -resident in the compilation flags and don't use T_CFLAGS.
  18291. + + 
  18292. + + LIBBGCC2_CFLAGS = $(T_OPTIMIZE) $(INTERNAL_CFLAGS) $(X_CFLAGS) $(CFLAGS) \
  18293. + +           $(CROSS_GCC_CFLAGS) -resident
  18294. + + 
  18295. + + # Build the base relative library.
  18296. + + # It is later copied into /gnu/lib/gcc-lib/amigados/<version>/libb/libgcc.a, whereas
  18297. + + # libgcc.a is copied into /gnu/lib/gcc-lib/amigados/<version>/libgcc.a.
  18298. + + # It doesn't work very well to define one of the EXTRA_* macros to contain
  18299. + + # libb/libgcc.a, particularly for doing "make stageN" or "make install".
  18300. + + 
  18301. + + GCC_PARTS=$(GCC_PASSES) libgcc.a libb/libgcc.a $(EXTRA_PROGRAMS) $(USE_COLLECT2) $(EXTRA_PARTS)
  18302. + + 
  18303. + + # Add install_libbgcc to normal define of INSTALL_LIBGCC.  Let install-gccv
  18304. + + # hitch a ride on here as well.
  18305. + + 
  18306. + + INSTALL_LIBGCC = install-libgcc install-libbgcc install-gccv
  18307. + + 
  18308. + + # This includes the knowledge that target amigados doesn't need libgcc1.a
  18309. + + 
  18310. + + libb/libgcc.a: libgcc1.null libgcc2.c libgcc2.ready $(CONFIG_H) \
  18311. + +    $(LIB2FUNCS_EXTRA) machmode.h longlong.h gbl-ctors.h config.status
  18312. + + # Actually build it in tmplibbgcc.a, then rename at end,
  18313. + + # so that libb/libgcc.a itself remains nonexistent if compilation is aborted.
  18314. + +     -rm -f tmplibbgcc.a
  18315. + + # -e causes any failing command to make this rule fail.
  18316. + + # -e doesn't work in certain shells, so we test $$? as well.
  18317. + +     set -e; \
  18318. + +     for name in $(LIB2FUNCS); \
  18319. + +     do \
  18320. + +       echo $${name}; \
  18321. + +       $(GCC_FOR_TARGET) $(LIBBGCC2_CFLAGS) $(INCLUDES) -c -DL$${name} \
  18322. + +           $(srcdir)/libgcc2.c -o $${name}.o; \
  18323. + +       if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
  18324. + +       $(AR) $(AR_FLAGS) tmplibbgcc.a $${name}.o; \
  18325. + +       rm -f $${name}.o; \
  18326. + +     done
  18327. + + # Some shells crash when a loop has no items.
  18328. + + # So make sure there is always at least one--`..'.
  18329. + + # Then ignore it.
  18330. + + # We don't use -e here because there are if statements
  18331. + + # that should not make the command give up when the if condition is false.
  18332. + + # Instead, we test for failure after each command where it matters.
  18333. + +     -for file in .. $(LIB2FUNCS_EXTRA); \
  18334. + +     do \
  18335. + +       if [ x$${file} != x.. ]; then \
  18336. + +         name=`echo $${file} | sed -e 's/[.]c$$//' -e 's/[.]asm$$//'`; \
  18337. + +         echo $${name}; \
  18338. + +         if [ $${name}.asm = $${file} ]; then \
  18339. + +           cp $${file} $${name}.s || exit 1; file=$${name}.s; \
  18340. + +         else true; fi; \
  18341. + +         $(GCC_FOR_TARGET) $(LIBBGCC2_CFLAGS) $(INCLUDES) -c $${file}; \
  18342. + +         if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
  18343. + +         $(AR) $(AR_FLAGS) tmplibbgcc.a $${name}.o; \
  18344. + +         rm -f $${name}.[so]; \
  18345. + +       else true; \
  18346. + +       fi; \
  18347. + +     done
  18348. + +     -if $(RANLIB_TEST) ; then $(RANLIB) tmplibbgcc.a; else true; fi
  18349. + +     -if [ -d libb ] ; then true ; else mkdir libb ; fi
  18350. + +     mv tmplibbgcc.a libb/libgcc.a
  18351. + + 
  18352. + + 
  18353. + + install-libbgcc: libb/libgcc.a install-dir
  18354. + +     -if [ -d $(libsubdir)/libb ] ; then true ; else mkdir $(libsubdir)/libb ; fi
  18355. + +     -if [ -f libb/libgcc.a ] ; then \
  18356. + +       rm -f $(libsubdir)/libb/libgcc.a; \
  18357. + +       $(INSTALL_DATA) libb/libgcc.a $(libsubdir)/libb/libgcc.a; \
  18358. + +       if $(RANLIB_TEST) ; then \
  18359. + +         (cd $(libsubdir)/libb; $(RANLIB) libgcc.a); else true; fi; \
  18360. + +       chmod a-x $(libsubdir)/libb/libgcc.a; \
  18361. + +     else true; fi
  18362. + +     
  18363. + + 
  18364. + + # The default gcc (xgcc) is built without -DAMIGADOS_FORK_GCC. This gcc (xgccv)
  18365. + + # is built with AMIGADOS_FORK_GCC defined, so that it can use '-pipe'.  We
  18366. + + # don't want to define EXTRA_PASSES to xgccv because that will cause xgccv
  18367. + + # to be installed in $(libsubdir), so instead we use the default GCC_PASSES
  18368. + + # and add xgccv to it.
  18369. + + 
  18370. + + GCC_PASSES = xgcc xgccv cc1 cpp $(EXTRA_PASSES)
  18371. + + 
  18372. + + xgccv: xgccv.o version.o $(LIBDEPS)
  18373. + +     $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o xgccv xgccv.o version.o $(LIBS)
  18374. + + 
  18375. + + xgccv.o: gcc.c $(CONFIG_H) gvarargs.h obstack.h
  18376. + +     $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  18377. + +   -DSTANDARD_STARTFILE_PREFIX=\"$(libdir)/\" \
  18378. + +   -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc-lib/\" \
  18379. + +   -DDEFAULT_TARGET_MACHINE=\"$(target)\" \
  18380. + +   -DTOOLDIR=\"$(tooldir)/\" \
  18381. + +   -DAMIGADOS_FORK_GCC \
  18382. + +   -c `echo $(srcdir)/gcc.c | sed 's,^\./,,'` -o xgccv.o
  18383. + + 
  18384. + + install-gccv: xgccv
  18385. + +     rm -f $(bindir)/gccv
  18386. + +     $(INSTALL_PROGRAM) xgccv $(bindir)/gccv
  18387. + + 
  18388. + + # When making one of the stage<N> dirs, we need to make a libb subdir for
  18389. + + # it, and copy libbgcc.a there as libgcc.a.
  18390. + + 
  18391. + + EXTRA_STAGE1_TARGETS = stage1-libb
  18392. + + EXTRA_STAGE2_TARGETS = stage2-libb
  18393. + + EXTRA_STAGE3_TARGETS = stage3-libb
  18394. + + EXTRA_STAGE4_TARGETS = stage4-libb
  18395. + + 
  18396. + + stage1-libb:
  18397. + +     -if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi
  18398. + +     -if [ -d stage1/libb ] ; then true ; else mkdir stage1/libb ; fi
  18399. + +     -cp libb/libgcc.a stage1/libb/libgcc.a
  18400. + +     -if $(RANLIB_TEST) ; then $(RANLIB) stage1/libb/libgcc.a; else true; fi
  18401. + + 
  18402. + + stage2-libb:
  18403. + +     -if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi
  18404. + +     -if [ -d stage2/libb ] ; then true ; else mkdir stage2/libb ; fi
  18405. + +     -cp libb/libgcc.a stage2/libb/libgcc.a
  18406. + +     -if $(RANLIB_TEST) ; then $(RANLIB) stage2/libb/libgcc.a; else true; fi
  18407. + + 
  18408. + + stage3-libb:
  18409. + +     -if [ -d stage3 ] ; then true ; else mkdir stage3 ; fi
  18410. + +     -if [ -d stage3/libb ] ; then true ; else mkdir stage3/libb ; fi
  18411. + +     -cp libb/libgcc.a stage3/libb/libgcc.a
  18412. + +     -if $(RANLIB_TEST) ; then $(RANLIB) stage3/libb/libgcc.a; else true; fi
  18413. + + 
  18414. + + stage4-libb:
  18415. + +     -if [ -d stage4 ] ; then true ; else mkdir stage4 ; fi
  18416. + +     -if [ -d stage4/libb ] ; then true ; else mkdir stage4/libb ; fi
  18417. + +     -cp libb/libgcc.a stage4/libb/libgcc.a
  18418. + +     -if $(RANLIB_TEST) ; then $(RANLIB) stage4/libb/libgcc.a; else true; fi
  18419. + diff -rc --new-file gcc-2.5.8-fsf/config/m68k/x-amigados gcc-2.5.8/config/m68k/x-amigados
  18420. + *** gcc-2.5.8-fsf/config/m68k/x-amigados    Thu Jan  1 00:00:00 1970
  18421. + --- gcc-2.5.8/config/m68k/x-amigados    Tue Feb 22 11:22:55 1994
  18422. + ***************
  18423. + *** 0 ****
  18424. + --- 1,44 ----
  18425. + + # Note: It doesn't do any good to try to define prefix or local_prefix
  18426. + + # in the host overrides because configure will just change them back.
  18427. + + # You either have to give an appropriate option to configure or live with
  18428. + + # an Amiga specific patch to configure.  See the note in configure.  -fnf
  18429. + + 
  18430. + + # Building under amigados almost certainly requires an already working gcc.
  18431. + + # Use gccv, which is a gcc compiled with AMIGADOS_FORK_GCC so "-pipe" will
  18432. + + # work and get exercised.  To bootstrap with the regular gcc just do
  18433. + + # "make CC=gcc".  To bootstrap without "-pipe" do "make PIPE=".
  18434. + + 
  18435. + + CC = gccv $(PIPE)
  18436. + + 
  18437. + + # Disable -pipe for now since I had problems bootstrapping gcc 2.5.5 with
  18438. + + # it. (fnf)
  18439. + + #PIPE = -pipe
  18440. + + 
  18441. + + # Allow the user to override the default host optimization with gcc, or if the
  18442. + + # host compiler is not gcc and doesn't understand -O<N>.
  18443. + + 
  18444. + + X_OPTIMIZE = -O2
  18445. + + 
  18446. + + # The standard additional host flags for the compiler.
  18447. + + 
  18448. + + X_CFLAGS = $(X_OPTIMIZE)
  18449. + + 
  18450. + + # Man pages get a wierd suffix...
  18451. + + 
  18452. + + manext = .0
  18453. + + 
  18454. + + # We really shouldn't specify CFLAGS from here, but there's no other way
  18455. + + # to get rid of the `-g' indoctrinated by Makefile.in.  Note this becomes
  18456. + + # part of both the host compilation CFLAGS and the target compilation
  18457. + + # CFLAGS.
  18458. + + 
  18459. + + CFLAGS =
  18460. + + 
  18461. + + # Ranlib does exist, but may not be in a path where the default RANLIB_TEST
  18462. + + # expects it, so just force it to true.
  18463. + + 
  18464. + + RANLIB_TEST = true
  18465. + + 
  18466. + + # My current version of ln doesn't work, so use cp instead.  -fnf
  18467. + + 
  18468. + + HARDLINK = cp
  18469. + diff -rc --new-file gcc-2.5.8-fsf/config/m68k/xm-amigados.h gcc-2.5.8/config/m68k/xm-amigados.h
  18470. + *** gcc-2.5.8-fsf/config/m68k/xm-amigados.h    Thu Jan  1 00:00:00 1970
  18471. + --- gcc-2.5.8/config/m68k/xm-amigados.h    Tue Feb 22 11:27:04 1994
  18472. + ***************
  18473. + *** 0 ****
  18474. + --- 1,215 ----
  18475. + + /* Configuration for GNU C-compiler for Commodore Amiga, running AmigaDOS.
  18476. + +    Copyright (C) 1992 Free Software Foundation, Inc.
  18477. + +    Contributed by Markus M. Wild (wild@amiga.physik.unizh.ch).
  18478. + + 
  18479. + + This file is part of GNU CC.
  18480. + + 
  18481. + + GNU CC is free software; you can redistribute it and/or modify
  18482. + + it under the terms of the GNU General Public License as published by
  18483. + + the Free Software Foundation; either version 2, or (at your option)
  18484. + + any later version.
  18485. + + 
  18486. + + GNU CC is distributed in the hope that it will be useful,
  18487. + + but WITHOUT ANY WARRANTY; without even the implied warranty of
  18488. + + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18489. + + GNU General Public License for more details.
  18490. + + 
  18491. + + You should have received a copy of the GNU General Public License
  18492. + + along with GNU CC; see the file COPYING.  If not, write to
  18493. + + the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  18494. + + 
  18495. + + /* first include the generic header, then modify some parts.. */
  18496. + + 
  18497. + + #include "m68k/xm-m68k.h"
  18498. + + 
  18499. + + /* Amiga specific headers, such as from the Native Developer Update kits,
  18500. + +    go in SYSTEM_INCLUDE_DIR.  STANDARD_INCLUDE_DIR is the equivalent of
  18501. + +    Unix "/usr/include".  All other include paths are set in Makefile. */
  18502. + + 
  18503. + + #define SYSTEM_INCLUDE_DIR    "/gnu/os-include"
  18504. + + #define STANDARD_INCLUDE_DIR    "/gnu/include"
  18505. + + 
  18506. + + /* Fork one piped subcommand.  SEARCH_FLAG is the system call to use
  18507. + +    (either execv or execvp).  ARGV is the arg vector to use.
  18508. + +    NOT_LAST is nonzero if this is not the last subcommand
  18509. + +    (i.e. its output should be piped to the next one.)  */
  18510. + + 
  18511. + + #ifndef AMIGADOS_FORK_GCC
  18512. + + 
  18513. + + /* This version uses a more or less amigados-conformant way of running a
  18514. + +    program (in the context of the parent). If you want to use -pipe however,
  18515. + +    you'll have to use the vfork() version afterwards. */
  18516. + + 
  18517. + + #define PEXECUTE(SEARCH_FLAG,PROGRAM,ARGV,NOT_LAST) \
  18518. + + ({char *_argline;                        \
  18519. + +   int _arglinelength, _i;                    \
  18520. + +                                 \
  18521. + +   for (_i = 1, _arglinelength=0; ARGV[_i]; ++_i)        \
  18522. + +     _arglinelength += strlen(ARGV[_i]) + 1;            \
  18523. + +                                 \
  18524. + +   _arglinelength += strlen(PROGRAM) + 1;            \
  18525. + +                                 \
  18526. + +   if (!(_argline = (char *)alloca(_arglinelength)))         \
  18527. + +     pfatal_with_name ("alloca");                \
  18528. + +                                 \
  18529. + +   strcpy(_argline, PROGRAM);                    \
  18530. + +   for (_i = 1; ARGV[_i]; ++_i)                     \
  18531. + +     {                                \
  18532. + +       strcat(_argline, " ");                    \
  18533. + +       strcat(_argline, ARGV[_i]);                \
  18534. + +     }                                \
  18535. + +                                 \
  18536. + +   ssystem(_argline); })                        \
  18537. + + 
  18538. + + #define PEXECUTE_RESULT(STATUS, COMMAND) \
  18539. + +   ({ STATUS = COMMAND.pid; })
  18540. + + 
  18541. + + #else
  18542. + + 
  18543. + + /* the vfork() version. This one has the drawback, that gcc is not 
  18544. + +    interruptible when started from make, since ixemul.library doesn't yet
  18545. + +    propagate ^C to subprocesses. */
  18546. + + 
  18547. + + #define PEXECUTE(SEARCH_FLAG,PROGRAM,ARGV,NOT_LAST) \
  18548. + + ({int (*_func)() = (SEARCH_FLAG ? execv : execvp);            \
  18549. + +   int _pid;                                \
  18550. + +   int _pdes[2];                                \
  18551. + +   int _input_desc = last_pipe_input;                    \
  18552. + +   int _output_desc = STDOUT_FILE_NO;                    \
  18553. + +   int _retries, _sleep_interval, _result;                \
  18554. + +                                     \
  18555. + +   /* If this isn't the last process, make a pipe for its output,    \
  18556. + +      and record it as waiting to be the input to the next process.  */    \
  18557. + +                                     \
  18558. + +   if (NOT_LAST)                                \
  18559. + +     {                                    \
  18560. + +       if (pipe (_pdes) < 0)                        \
  18561. + +     pfatal_with_name ("pipe");                    \
  18562. + +       _output_desc = _pdes[WRITE_PORT];                    \
  18563. + +       last_pipe_input = _pdes[READ_PORT];                \
  18564. + +     }                                    \
  18565. + +   else                                    \
  18566. + +     last_pipe_input = STDIN_FILE_NO;                    \
  18567. + +                                     \
  18568. + +   /* Fork a subprocess; wait and retry if it fails.  */            \
  18569. + +   _sleep_interval = 1;                            \
  18570. + +   for (_retries = 0; _retries < 4; _retries++)                \
  18571. + +     {                                    \
  18572. + +       _pid = vfork ();                            \
  18573. + +       if (_pid >= 0)                            \
  18574. + +     break;                                \
  18575. + +       sleep (_sleep_interval);                        \
  18576. + +       _sleep_interval *= 2;                        \
  18577. + +     }                                    \
  18578. + +                                     \
  18579. + +   switch (_pid)                                \
  18580. + +     {                                    \
  18581. + +     case -1:                                \
  18582. + +       pfatal_with_name ("vfork");                    \
  18583. + +       /* NOTREACHED */                            \
  18584. + +       _result = 0;                            \
  18585. + +       break;                                \
  18586. + +                                     \
  18587. + +     case 0: /* child */                            \
  18588. + +       /* Move the input and output pipes into place, if nec.  */    \
  18589. + +       if (_input_desc != STDIN_FILE_NO)                    \
  18590. + +     {                                \
  18591. + +       close (STDIN_FILE_NO);                    \
  18592. + +       dup (_input_desc);                        \
  18593. + +       close (_input_desc);                        \
  18594. + +     }                                \
  18595. + +       if (_output_desc != STDOUT_FILE_NO)                \
  18596. + +     {                                \
  18597. + +       close (STDOUT_FILE_NO);                    \
  18598. + +       dup (_output_desc);                        \
  18599. + +       close (_output_desc);                        \
  18600. + +     }                                \
  18601. + +                                     \
  18602. + +       /* Close the parent's descs that aren't wanted here.  */        \
  18603. + +       if (last_pipe_input != STDIN_FILE_NO)                \
  18604. + +     close (last_pipe_input);                    \
  18605. + +                                     \
  18606. + +       /* Exec the program.  */                        \
  18607. + +       (*_func) (PROGRAM, ARGV);                        \
  18608. + +       perror_exec (PROGRAM);                        \
  18609. + +       exit (-1);                            \
  18610. + +       /* NOTREACHED */                            \
  18611. + +       _result = 0;                            \
  18612. + +       break;                                \
  18613. + +                                     \
  18614. + +     default:                                \
  18615. + +       /* In the parent, after forking.                    \
  18616. + +      Close the descriptors that we made for this child.  */        \
  18617. + +       if (_input_desc != STDIN_FILE_NO)                    \
  18618. + +     close (_input_desc);                        \
  18619. + +       if (_output_desc != STDOUT_FILE_NO)                \
  18620. + +     close (_output_desc);                        \
  18621. + +                                     \
  18622. + +       /* Return child's process number.  */                \
  18623. + +       _result = _pid;                            \
  18624. + +       break;                                \
  18625. + +     }                                     \
  18626. + + _result; })                                \
  18627. + + 
  18628. + + #define PEXECUTE_RESULT(STATUS, COMMAND) \
  18629. + +   ({ wait (& STATUS); })
  18630. + + 
  18631. + + #endif /* AMIGADOS_FORK_GCC */
  18632. + + 
  18633. + + /* the following macros are stolen more or less from xm-vms.h ... */
  18634. + + 
  18635. + + /* This macro is used to help compare filenames in cp-lex.c.
  18636. + + 
  18637. + +    We also need to make sure that the names are all lower case, because
  18638. + +    we must be able to compare filenames to determine if a file implements
  18639. + +    a class.  */
  18640. + + 
  18641. + + #define FILE_NAME_NONDIRECTORY(C)                \
  18642. + + ({                                \
  18643. + +    extern char *rindex();                    \
  18644. + +    char * pnt_ = (C), * pnt1_;                    \
  18645. + +    pnt1_ = pnt_ - 1;                        \
  18646. + +    while (*++pnt1_)                        \
  18647. + +      if ((*pnt1_ >= 'A' && *pnt1_ <= 'Z')) *pnt1_ |= 0x20;    \
  18648. + +    pnt1_ = rindex (pnt_, '/');                     \
  18649. + +    pnt1_ = (pnt1_ == 0 ? rindex (pnt_, ':') : pnt1_);        \
  18650. + +    (pnt1_ == 0 ? pnt_ : pnt1_ + 1);                \
  18651. + +  })
  18652. + + 
  18653. + + /* Macro to generate the name of the cross reference file.  The standard
  18654. + +    one does not work, since it was written assuming that the conventions
  18655. + +    of a unix style filesystem will work on the host system.
  18656. + +  
  18657. + +    Contrary to VMS, I'm using the original unix filename, there's no reason
  18658. + +    not to use this under AmigaDOS. */
  18659. + + 
  18660. + + #define XREF_FILE_NAME(BUFF, NAME)    \
  18661. + +   s = FILE_NAME_NONDIRECTORY (NAME);            \
  18662. + +   if (s == NAME) sprintf(BUFF, ".%s.gxref", NAME);    \
  18663. + +   else {                        \
  18664. + +     unsigned char ch = *s; /* could be Latin1 char.. */    \
  18665. + +     /* temporary: cut the filename from the directory */\
  18666. + +     *s = 0;                        \
  18667. + +     sprintf (BUFF, "%s.%c%s.gxref", NAME, ch, s+1);    \
  18668. + +     /* and restore the filename */            \
  18669. + +     *s = ch;                        \
  18670. + +   }                            \
  18671. + + 
  18672. + + /* Macro that is used in cp-xref.c to determine whether a file name is
  18673. + +    absolute or not.
  18674. + + 
  18675. + +    This checks for both, '/' as first character, since we're running under
  18676. + +    ixemul.library which provides for this unix'ism, and for the usual 
  18677. + +    logical-terminator, ':', somewhere in the filename. */
  18678. + + 
  18679. + + #define FILE_NAME_ABSOLUTE_P(NAME) (NAME[0] == '/' || index(NAME, ':'))
  18680. + + 
  18681. + + /* the colon conflicts with the name space of logicals */
  18682. + + 
  18683. + + #define PATH_SEPARATOR ','
  18684. + + 
  18685. + + /* AmigaDOS handles rename(2) *much* better than any link(2)/unlink(2)
  18686. + +    hacks. It's actually the inverse case as on Unix. rename(2) was always
  18687. + +    there, link(2) is new with OS 2.0 */
  18688. + + 
  18689. + + #define HAVE_rename 1
  18690. + diff -rc --new-file gcc-2.5.8-fsf/configure gcc-2.5.8/configure
  18691. + *** gcc-2.5.8-fsf/configure    Fri Nov 19 21:44:34 1993
  18692. + --- gcc-2.5.8/configure    Thu Apr 21 22:35:12 1994
  18693. + ***************
  18694. + *** 4,9 ****
  18695. + --- 4,13 ----
  18696. +   
  18697. +   #This file is part of GNU CC.
  18698. +   
  18699. + + # AmigaDOS Notes:  Where "echo" can be invoked with a first arg that
  18700. + + # starts with '-', run the external echo instead, since the pdksh builtin
  18701. + + # version botches this case.
  18702. + + 
  18703. +   #GNU CC is free software; you can redistribute it and/or modify
  18704. +   #it under the terms of the GNU General Public License as published by
  18705. +   #the Free Software Foundation; either version 2, or (at your option)
  18706. + ***************
  18707. + *** 45,52 ****
  18708. +   
  18709. +   # Default --srcdir to the directory where the script is found, 
  18710. +   # if a directory was specified.
  18711. + ! # The second sed call is to convert `.//configure' to `./configure'.
  18712. + ! srcdir=`echo $0 | sed 's|//|/|' | sed 's|/[^/]*$||'`
  18713. +   if [ x$srcdir = x$0 ]
  18714. +   then
  18715. +   srcdir=
  18716. + --- 49,58 ----
  18717. +   
  18718. +   # Default --srcdir to the directory where the script is found, 
  18719. +   # if a directory was specified.
  18720. + ! # The first sed call works around a bug in the AmigaDOS port of sksh, where
  18721. + ! # $0 has a trailing slash appended to it.  It is a NOP for other systems.
  18722. + ! # The third sed call is to convert `.//configure' to `./configure'.
  18723. + ! srcdir=`echo $0 | sed 's|/$||' | sed 's|//|/|' | sed 's|/[^/]*$||'`
  18724. +   if [ x$srcdir = x$0 ]
  18725. +   then
  18726. +   srcdir=
  18727. + ***************
  18728. + *** 54,75 ****
  18729. +   
  18730. +   host=
  18731. +   
  18732. + ! # Default prefix to /usr/local.
  18733. + ! prefix=/usr/local
  18734. +   
  18735. + ! # local_prefix specifies where to find the directory /usr/local/include
  18736. +   # We don't use $(prefix) for this
  18737. + ! # because we always want GCC to search /usr/local/include
  18738. + ! # even if GCC is installed somewhere other than /usr/local.
  18739. +   # Think THREE TIMES before specifying any other value for this!
  18740. +   # DO NOT make this use $prefix!
  18741. + ! local_prefix=/usr/local
  18742. +   # Default is to let the Makefile set exec_prefix from $(prefix)
  18743. +   exec_prefix='$(prefix)'
  18744. +   
  18745. +   remove=rm
  18746. + ! hard_link=ln
  18747. + ! symbolic_link='ln -s'
  18748. +   copy=cp
  18749. +   
  18750. +   # Record all the arguments, to write them in config.status.
  18751. + --- 60,87 ----
  18752. +   
  18753. +   host=
  18754. +   
  18755. + ! # Note:  For AmigaDOS we want this to default to /gnu unless we specify
  18756. + ! # otherwise to configure.  Changing it in Makefile.in or config/m68k/x-amigados
  18757. + ! # is ineffective since configure will always change them back in the final
  18758. + ! # generated Makefile, so we have to go to the root of the problem, which is
  18759. + ! # here.  -fnf
  18760. + ! # Default prefix to "/gnu".
  18761. + ! prefix=/gnu
  18762. +   
  18763. + ! # local_prefix specifies where to find the directory /local/include
  18764. +   # We don't use $(prefix) for this
  18765. + ! # because we always want GCC to search /local/include
  18766. + ! # even if GCC is installed somewhere other than /local.
  18767. +   # Think THREE TIMES before specifying any other value for this!
  18768. +   # DO NOT make this use $prefix!
  18769. + ! # Note:  See AmigaDOS note above for this AmigaDOS specific change.  -fnf
  18770. + ! local_prefix=/local
  18771. +   # Default is to let the Makefile set exec_prefix from $(prefix)
  18772. +   exec_prefix='$(prefix)'
  18773. +   
  18774. +   remove=rm
  18775. + ! hard_link=cp
  18776. + ! symbolic_link=cp
  18777. +   copy=cp
  18778. +   
  18779. +   # Record all the arguments, to write them in config.status.
  18780. + ***************
  18781. + *** 121,151 ****
  18782. +       next_arg=--srcdir
  18783. +       ;;
  18784. +        -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=* | --s=*)
  18785. + !     srcdir=`echo $arg | sed 's/-*s[a-z]*=//'`
  18786. +       ;;
  18787. +        -host | --host | --hos | --ho | --h)
  18788. +       next_arg=--host
  18789. +       ;;
  18790. +        -host=* | --host=* | --hos=* | --ho=* | --h=*)
  18791. + !     host=`echo $arg | sed 's/-*h[a-z]*=//'`
  18792. +       ;; 
  18793. +        -target | --target | --targe | --targ | --tar | --ta | --t)
  18794. +       next_arg=--target
  18795. +       ;;
  18796. +        -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
  18797. + !     target=`echo $arg | sed 's/-*t[a-z]*=//'`
  18798. +       ;; 
  18799. +        -build | --build | --buil | --bui | --bu | --b)
  18800. +       next_arg=--build
  18801. +       ;;
  18802. +        -build=* | --build=* | --buil=* | --bui=* | --bu=* | --b=*)
  18803. + !     build=`echo $arg | sed 's/-*b[a-z]*=//'`
  18804. +       ;; 
  18805. +        -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
  18806. +       next_arg=--prefix
  18807. +       ;;
  18808. +        -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
  18809. + !     prefix=`echo $arg | sed 's/-*p[a-z]*=//'`
  18810. +       ;;
  18811. +        -local-prefix | --local-prefix | --local-prefi | --local-pref | --local-pre \
  18812. +       | --local-pr | --local-p | --local- | --local | --loc | --lo | --l)
  18813. + --- 133,163 ----
  18814. +       next_arg=--srcdir
  18815. +       ;;
  18816. +        -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=* | --s=*)
  18817. + !     srcdir=`/bin/echo $arg | sed 's/-*s[a-z]*=//'`
  18818. +       ;;
  18819. +        -host | --host | --hos | --ho | --h)
  18820. +       next_arg=--host
  18821. +       ;;
  18822. +        -host=* | --host=* | --hos=* | --ho=* | --h=*)
  18823. + !     host=`/bin/echo $arg | sed 's/-*h[a-z]*=//'`
  18824. +       ;; 
  18825. +        -target | --target | --targe | --targ | --tar | --ta | --t)
  18826. +       next_arg=--target
  18827. +       ;;
  18828. +        -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
  18829. + !     target=`/bin/echo $arg | sed 's/-*t[a-z]*=//'`
  18830. +       ;; 
  18831. +        -build | --build | --buil | --bui | --bu | --b)
  18832. +       next_arg=--build
  18833. +       ;;
  18834. +        -build=* | --build=* | --buil=* | --bui=* | --bu=* | --b=*)
  18835. + !     build=`/bin/echo $arg | sed 's/-*b[a-z]*=//'`
  18836. +       ;; 
  18837. +        -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
  18838. +       next_arg=--prefix
  18839. +       ;;
  18840. +        -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
  18841. + !     prefix=`/bin/echo $arg | sed 's/-*p[a-z]*=//'`
  18842. +       ;;
  18843. +        -local-prefix | --local-prefix | --local-prefi | --local-pref | --local-pre \
  18844. +       | --local-pr | --local-p | --local- | --local | --loc | --lo | --l)
  18845. + ***************
  18846. + *** 154,160 ****
  18847. +        -local-prefix=* | --local-prefix=* | --local-prefi=* | --local-pref=* \
  18848. +       | --local-pre=* | --local-pr=* | --local-p=* | --local-=* | --local=* \
  18849. +       | --loc=* | --lo=* | --l=*)
  18850. + !     local_prefix=`echo $arg | sed 's/-*l[-a-z]*=//'`
  18851. +       ;;
  18852. +        -exec-prefix | --exec-prefix | --exec-prefi | --exec-pref | --exec-pre \
  18853. +       | --exec-pr | --exec-p | --exec- | --exec | --exe | --ex | --e)
  18854. + --- 166,172 ----
  18855. +        -local-prefix=* | --local-prefix=* | --local-prefi=* | --local-pref=* \
  18856. +       | --local-pre=* | --local-pr=* | --local-p=* | --local-=* | --local=* \
  18857. +       | --loc=* | --lo=* | --l=*)
  18858. + !     local_prefix=`/bin/echo $arg | sed 's/-*l[-a-z]*=//'`
  18859. +       ;;
  18860. +        -exec-prefix | --exec-prefix | --exec-prefi | --exec-pref | --exec-pre \
  18861. +       | --exec-pr | --exec-p | --exec- | --exec | --exe | --ex | --e)
  18862. + ***************
  18863. + *** 163,169 ****
  18864. +        -exec-prefix=* | --exec-prefix=* | --exec-prefi=* | --exec-pref=* \
  18865. +       | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* | --exec=* \
  18866. +       | --exe=* | --ex=* | --e=*)
  18867. + !     exec_prefix=`echo $arg | sed 's/-*e[-a-z]*=//'`
  18868. +       ;;
  18869. +        -with-gnu-ld | --with-gnu-ld | --with-gnu-l)
  18870. +       gnu_ld=yes
  18871. + --- 175,181 ----
  18872. +        -exec-prefix=* | --exec-prefix=* | --exec-prefi=* | --exec-pref=* \
  18873. +       | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* | --exec=* \
  18874. +       | --exe=* | --ex=* | --e=*)
  18875. + !     exec_prefix=`/bin/echo $arg | sed 's/-*e[-a-z]*=//'`
  18876. +       ;;
  18877. +        -with-gnu-ld | --with-gnu-ld | --with-gnu-l)
  18878. +       gnu_ld=yes
  18879. + ***************
  18880. + *** 297,303 ****
  18881. +       use_collect2=
  18882. +       # Set this to override the default target model.
  18883. +       target_cpu_default=
  18884. + !     # Set this to force use of install.sh.
  18885. +       broken_install=
  18886. +       # Set this to control which fixincludes program to use.
  18887. +       fixincludes=fixincludes
  18888. + --- 309,316 ----
  18889. +       use_collect2=
  18890. +       # Set this to override the default target model.
  18891. +       target_cpu_default=
  18892. + !     # Set this to force use of install.sh (if set to 'yes')
  18893. + !     # Set to name of installer to use a custom installer.
  18894. +       broken_install=
  18895. +       # Set this to control which fixincludes program to use.
  18896. +       fixincludes=fixincludes
  18897. + ***************
  18898. + *** 642,647 ****
  18899. + --- 655,670 ----
  18900. +           tm_file=sparc/lite.h
  18901. +           use_collect2=yes
  18902. +           ;;
  18903. + +     m68k-*-amigados)
  18904. + +         xm_file=m68k/xm-amigados.h
  18905. + +         out_file=m68k/amigados.c
  18906. + +         tm_file=m68k/amigados.h
  18907. + +         tmake_file=m68k/t-amigados
  18908. + +         xmake_file=m68k/x-amigados
  18909. + +         fixincludes=Makefile.in # Headers are already fixed.
  18910. + +         broken_install=cp
  18911. + +         install_headers_dir=install-headers-cp
  18912. + +         ;;
  18913. +       m68k-cbm-sysv4*)        # Commodore variant of V.4.
  18914. +           tm_file=m68k/amix.h
  18915. +           xm_file=m68k/xm-amix.h
  18916. + ***************
  18917. + *** 1763,1770 ****
  18918. +   then true
  18919. +   else
  18920. +       rm -f Makefile.xx
  18921. + !     abssrcdir=`cd ${srcdir}; pwd`
  18922. + !     sed "s|^INSTALL = .*|INSTALL = ${abssrcdir}/install.sh -c|" Makefile.tem > Makefile.xx
  18923. +       rm -f Makefile.tem
  18924. +       mv Makefile.xx Makefile.tem
  18925. +   fi
  18926. + --- 1786,1799 ----
  18927. +   then true
  18928. +   else
  18929. +       rm -f Makefile.xx
  18930. + !     if [ x$host_broken_install = xyes ]
  18931. + !     then
  18932. + !         abssrcdir=`cd ${srcdir}; pwd`
  18933. + !         installer=${abssrcdir}/install.sh -c
  18934. + !     else
  18935. + !         installer=$host_broken_install
  18936. + !     fi
  18937. + !     sed "s|^INSTALL = .*|INSTALL = ${installer}|" Makefile.tem > Makefile.xx
  18938. +       rm -f Makefile.tem
  18939. +       mv Makefile.xx Makefile.tem
  18940. +   fi
  18941. + diff -rc --new-file gcc-2.5.8-fsf/cp-parse.c gcc-2.5.8/cp-parse.c
  18942. + *** gcc-2.5.8-fsf/cp-parse.c    Sat Nov 27 11:35:17 1993
  18943. + --- gcc-2.5.8/cp-parse.c    Tue Feb 22 11:23:11 1994
  18944. + ***************
  18945. + *** 2657,2663 ****
  18946. +       65,    66,    67,    68,    69,    70,    71,    72,    73
  18947. +   };
  18948. +   /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
  18949. + ! #line 3 "/usr/local/lib/bison.simple"
  18950. +   
  18951. +   /* Skeleton output parser for bison,
  18952. +      Copyright (C) 1984, 1989, 1990 Bob Corbett and Richard Stallman
  18953. + --- 2657,2663 ----
  18954. +       65,    66,    67,    68,    69,    70,    71,    72,    73
  18955. +   };
  18956. +   /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
  18957. + ! #line 3 "/usr/lib/bison.simple"
  18958. +   
  18959. +   /* Skeleton output parser for bison,
  18960. +      Copyright (C) 1984, 1989, 1990 Bob Corbett and Richard Stallman
  18961. + ***************
  18962. + *** 2838,2861 ****
  18963. +   #endif
  18964. +   #endif
  18965. +   
  18966. + ! #line 184 "/usr/local/lib/bison.simple"
  18967. + ! 
  18968. + ! /* The user can define YYPARSE_PARAM as the name of an argument to be passed
  18969. + !    into yyparse.  The argument should have type void *.
  18970. + !    It should actually point to an object.
  18971. + !    Grammar actions can access the variable by casting it
  18972. + !    to the proper pointer type.  */
  18973. + ! 
  18974. + ! #ifdef YYPARSE_PARAM
  18975. + ! #define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
  18976. + ! #else
  18977. + ! #define YYPARSE_PARAM
  18978. + ! #define YYPARSE_PARAM_DECL
  18979. + ! #endif
  18980. + ! 
  18981. +   int
  18982. + ! yyparse(YYPARSE_PARAM)
  18983. + !      YYPARSE_PARAM_DECL
  18984. +   {
  18985. +     register int yystate;
  18986. +     register int yyn;
  18987. + --- 2838,2846 ----
  18988. +   #endif
  18989. +   #endif
  18990. +   
  18991. + ! #line 184 "/usr/lib/bison.simple"
  18992. +   int
  18993. + ! yyparse()
  18994. +   {
  18995. +     register int yystate;
  18996. +     register int yyn;
  18997. + ***************
  18998. + *** 7264,7270 ****
  18999. +       break;}
  19000. +   }
  19001. +      /* the action file gets copied in in place of this dollarsign */
  19002. + ! #line 480 "/usr/local/lib/bison.simple"
  19003. +   
  19004. +     yyvsp -= yylen;
  19005. +     yyssp -= yylen;
  19006. + --- 7249,7255 ----
  19007. +       break;}
  19008. +   }
  19009. +      /* the action file gets copied in in place of this dollarsign */
  19010. + ! #line 465 "/usr/lib/bison.simple"
  19011. +   
  19012. +     yyvsp -= yylen;
  19013. +     yyssp -= yylen;
  19014. + diff -rc --new-file gcc-2.5.8-fsf/cpp.info gcc-2.5.8/cpp.info
  19015. + *** gcc-2.5.8-fsf/cpp.info    Thu Oct 14 08:47:18 1993
  19016. + --- gcc-2.5.8/cpp.info    Tue May  3 14:09:31 1994
  19017. + ***************
  19018. + *** 1,4 ****
  19019. + ! This is Info file cpp.info, produced by Makeinfo-1.54 from the input
  19020. +   file cpp.texi.
  19021. +   
  19022. +      This file documents the GNU C Preprocessor.
  19023. + --- 1,4 ----
  19024. + ! This is Info file cpp.info, produced by Makeinfo-1.55 from the input
  19025. +   file cpp.texi.
  19026. +   
  19027. +      This file documents the GNU C Preprocessor.
  19028. + ***************
  19029. + *** 21,28 ****
  19030. +   
  19031. +   Indirect:
  19032. +   cpp.info-1: 778
  19033. + ! cpp.info-2: 50641
  19034. + ! cpp.info-3: 99631
  19035. +   
  19036. +   Tag Table:
  19037. +   (Indirect)
  19038. + --- 21,28 ----
  19039. +   
  19040. +   Indirect:
  19041. +   cpp.info-1: 778
  19042. + ! cpp.info-2: 50624
  19043. + ! cpp.info-3: 99614
  19044. +   
  19045. +   Tag Table:
  19046. +   (Indirect)
  19047. + ***************
  19048. + *** 35,74 ****
  19049. +   Node: Include Operation12652
  19050. +   Node: Once-Only14327
  19051. +   Node: Inheritance16636
  19052. + ! Node: Macros19196
  19053. + ! Node: Simple Macros20110
  19054. + ! Node: Argument Macros23230
  19055. + ! Node: Predefined28900
  19056. + ! Node: Standard Predefined29330
  19057. + ! Node: Nonstandard Predefined34543
  19058. + ! Node: Stringification38116
  19059. + ! Node: Concatenation41040
  19060. + ! Node: Undefining44313
  19061. + ! Node: Redefining45346
  19062. + ! Node: Macro Pitfalls46646
  19063. + ! Node: Misnesting47750
  19064. + ! Node: Macro Parentheses48764
  19065. + ! Node: Swallow Semicolon50641
  19066. + ! Node: Side Effects52541
  19067. + ! Node: Self-Reference54239
  19068. + ! Node: Argument Prescan56515
  19069. + ! Node: Cascaded Macros61517
  19070. + ! Node: Newlines in Args62572
  19071. + ! Node: Conditionals63917
  19072. + ! Node: Conditional Uses65263
  19073. + ! Node: Conditional Syntax66628
  19074. + ! Node: #if Command67206
  19075. + ! Node: #else Command69457
  19076. + ! Node: #elif Command70112
  19077. + ! Node: Deleted Code71474
  19078. + ! Node: Conditionals-Macros72010
  19079. + ! Node: Assertions75707
  19080. + ! Node: #error Command79937
  19081. + ! Node: Combining Sources81361
  19082. + ! Node: Other Commands84257
  19083. + ! Node: Output85692
  19084. + ! Node: Invocation86847
  19085. + ! Node: Concept Index97960
  19086. + ! Node: Index99631
  19087. +   
  19088. +   End Tag Table
  19089. + --- 35,74 ----
  19090. +   Node: Include Operation12652
  19091. +   Node: Once-Only14327
  19092. +   Node: Inheritance16636
  19093. + ! Node: Macros19179
  19094. + ! Node: Simple Macros20093
  19095. + ! Node: Argument Macros23213
  19096. + ! Node: Predefined28883
  19097. + ! Node: Standard Predefined29313
  19098. + ! Node: Nonstandard Predefined34526
  19099. + ! Node: Stringification38099
  19100. + ! Node: Concatenation41023
  19101. + ! Node: Undefining44296
  19102. + ! Node: Redefining45329
  19103. + ! Node: Macro Pitfalls46629
  19104. + ! Node: Misnesting47733
  19105. + ! Node: Macro Parentheses48747
  19106. + ! Node: Swallow Semicolon50624
  19107. + ! Node: Side Effects52524
  19108. + ! Node: Self-Reference54222
  19109. + ! Node: Argument Prescan56498
  19110. + ! Node: Cascaded Macros61500
  19111. + ! Node: Newlines in Args62555
  19112. + ! Node: Conditionals63900
  19113. + ! Node: Conditional Uses65246
  19114. + ! Node: Conditional Syntax66611
  19115. + ! Node: #if Command67189
  19116. + ! Node: #else Command69440
  19117. + ! Node: #elif Command70095
  19118. + ! Node: Deleted Code71457
  19119. + ! Node: Conditionals-Macros71993
  19120. + ! Node: Assertions75690
  19121. + ! Node: #error Command79920
  19122. + ! Node: Combining Sources81344
  19123. + ! Node: Other Commands84240
  19124. + ! Node: Output85675
  19125. + ! Node: Invocation86830
  19126. + ! Node: Concept Index97943
  19127. + ! Node: Index99614
  19128. +   
  19129. +   End Tag Table
  19130. + diff -rc --new-file gcc-2.5.8-fsf/cpp.info-1 gcc-2.5.8/cpp.info-1
  19131. + *** gcc-2.5.8-fsf/cpp.info-1    Thu Oct 14 08:47:17 1993
  19132. + --- gcc-2.5.8/cpp.info-1    Tue May  3 14:09:29 1994
  19133. + ***************
  19134. + *** 1,4 ****
  19135. + ! This is Info file cpp.info, produced by Makeinfo-1.54 from the input
  19136. +   file cpp.texi.
  19137. +   
  19138. +      This file documents the GNU C Preprocessor.
  19139. + --- 1,4 ----
  19140. + ! This is Info file cpp.info, produced by Makeinfo-1.55 from the input
  19141. +   file cpp.texi.
  19142. +   
  19143. +      This file documents the GNU C Preprocessor.
  19144. + ***************
  19145. + *** 415,421 ****
  19146. +   file `sys/signal.h', but the version of `/usr/include/sys/signal.h' on
  19147. +   a particular system doesn't do what the application program expects.
  19148. +   It might be convenient to define a "local" version, perhaps under the
  19149. + ! name `/usr/local/include/sys/signal.h', to override or add to the one
  19150. +   supplied by the system.
  19151. +   
  19152. +      You can do this by using the option `-I.' for compilation, and
  19153. + --- 415,421 ----
  19154. +   file `sys/signal.h', but the version of `/usr/include/sys/signal.h' on
  19155. +   a particular system doesn't do what the application program expects.
  19156. +   It might be convenient to define a "local" version, perhaps under the
  19157. + ! name `/gnu/include/sys/signal.h', to override or add to the one
  19158. +   supplied by the system.
  19159. +   
  19160. +      You can do this by using the option `-I.' for compilation, and
  19161. + ***************
  19162. + *** 438,449 ****
  19163. +   searching the list of header file directories *after* the directory in
  19164. +   which the current file was found.
  19165. +   
  19166. + !    Suppose you specify `-I /usr/local/include', and the list of
  19167. + ! directories to search also includes `/usr/include'; and suppose that
  19168. + ! both directories contain a file named `sys/signal.h'.  Ordinary
  19169. + ! `#include <sys/signal.h>' finds the file under `/usr/local/include'.
  19170. + ! If that file contains `#include_next <sys/signal.h>', it starts
  19171. + ! searching after that directory, and finds the file in `/usr/include'.
  19172. +   
  19173. +   
  19174. +   File: cpp.info,  Node: Macros,  Next: Conditionals,  Prev: Header Files,  Up: Top
  19175. + --- 438,449 ----
  19176. +   searching the list of header file directories *after* the directory in
  19177. +   which the current file was found.
  19178. +   
  19179. + !    Suppose you specify `-I /gnu/include', and the list of directories
  19180. + ! to search also includes `/usr/include'; and suppose that both
  19181. + ! directories contain a file named `sys/signal.h'.  Ordinary `#include
  19182. + ! <sys/signal.h>' finds the file under `/gnu/include'.  If that file
  19183. + ! contains `#include_next <sys/signal.h>', it starts searching after that
  19184. + ! directory, and finds the file in `/usr/include'.
  19185. +   
  19186. +   
  19187. +   File: cpp.info,  Node: Macros,  Next: Conditionals,  Prev: Header Files,  Up: Top
  19188. + diff -rc --new-file gcc-2.5.8-fsf/cpp.info-2 gcc-2.5.8/cpp.info-2
  19189. + *** gcc-2.5.8-fsf/cpp.info-2    Thu Oct 14 08:47:17 1993
  19190. + --- gcc-2.5.8/cpp.info-2    Tue May  3 14:09:30 1994
  19191. + ***************
  19192. + *** 1,4 ****
  19193. + ! This is Info file cpp.info, produced by Makeinfo-1.54 from the input
  19194. +   file cpp.texi.
  19195. +   
  19196. +      This file documents the GNU C Preprocessor.
  19197. + --- 1,4 ----
  19198. + ! This is Info file cpp.info, produced by Makeinfo-1.55 from the input
  19199. +   file cpp.texi.
  19200. +   
  19201. +      This file documents the GNU C Preprocessor.
  19202. + diff -rc --new-file gcc-2.5.8-fsf/cpp.info-3 gcc-2.5.8/cpp.info-3
  19203. + *** gcc-2.5.8-fsf/cpp.info-3    Thu Oct 14 08:47:18 1993
  19204. + --- gcc-2.5.8/cpp.info-3    Tue May  3 14:09:30 1994
  19205. + ***************
  19206. + *** 1,4 ****
  19207. + ! This is Info file cpp.info, produced by Makeinfo-1.54 from the input
  19208. +   file cpp.texi.
  19209. +   
  19210. +      This file documents the GNU C Preprocessor.
  19211. + --- 1,4 ----
  19212. + ! This is Info file cpp.info, produced by Makeinfo-1.55 from the input
  19213. +   file cpp.texi.
  19214. +   
  19215. +      This file documents the GNU C Preprocessor.
  19216. + diff -rc --new-file gcc-2.5.8-fsf/cpp.texi gcc-2.5.8/cpp.texi
  19217. + *** gcc-2.5.8-fsf/cpp.texi    Tue Oct 12 06:59:12 1993
  19218. + --- gcc-2.5.8/cpp.texi    Tue Feb 22 11:27:15 1994
  19219. + ***************
  19220. + *** 477,483 ****
  19221. +   @file{sys/signal.h}, but the version of @file{/usr/include/sys/signal.h}
  19222. +   on a particular system doesn't do what the application program expects.
  19223. +   It might be convenient to define a ``local'' version, perhaps under the
  19224. + ! name @file{/usr/local/include/sys/signal.h}, to override or add to the
  19225. +   one supplied by the system.
  19226. +   
  19227. +   You can do this by using the option @samp{-I.} for compilation, and
  19228. + --- 477,483 ----
  19229. +   @file{sys/signal.h}, but the version of @file{/usr/include/sys/signal.h}
  19230. +   on a particular system doesn't do what the application program expects.
  19231. +   It might be convenient to define a ``local'' version, perhaps under the
  19232. + ! name @file{/gnu/include/sys/signal.h}, to override or add to the
  19233. +   one supplied by the system.
  19234. +   
  19235. +   You can do this by using the option @samp{-I.} for compilation, and
  19236. + ***************
  19237. + *** 503,513 ****
  19238. +   file directories @emph{after} the directory in which the current file
  19239. +   was found.
  19240. +   
  19241. + ! Suppose you specify @samp{-I /usr/local/include}, and the list of
  19242. +   directories to search also includes @file{/usr/include}; and suppose that
  19243. +   both directories contain a file named @file{sys/signal.h}.  Ordinary
  19244. +   @samp{#include <sys/signal.h>} finds the file under
  19245. + ! @file{/usr/local/include}.  If that file contains @samp{#include_next
  19246. +   <sys/signal.h>}, it starts searching after that directory, and finds the
  19247. +   file in @file{/usr/include}.
  19248. +   
  19249. + --- 503,513 ----
  19250. +   file directories @emph{after} the directory in which the current file
  19251. +   was found.
  19252. +   
  19253. + ! Suppose you specify @samp{-I /gnu/include}, and the list of
  19254. +   directories to search also includes @file{/usr/include}; and suppose that
  19255. +   both directories contain a file named @file{sys/signal.h}.  Ordinary
  19256. +   @samp{#include <sys/signal.h>} finds the file under
  19257. + ! @file{/gnu/include}.  If that file contains @samp{#include_next
  19258. +   <sys/signal.h>}, it starts searching after that directory, and finds the
  19259. +   file in @file{/usr/include}.
  19260. +   
  19261. + diff -rc --new-file gcc-2.5.8-fsf/cross-make gcc-2.5.8/cross-make
  19262. + *** gcc-2.5.8-fsf/cross-make    Thu Sep  9 18:17:56 1993
  19263. + --- gcc-2.5.8/cross-make    Tue Feb 22 11:27:19 1994
  19264. + ***************
  19265. + *** 11,17 ****
  19266. +   RANLIB = $(RANLIB_FOR_TARGET)
  19267. +   RANLIB_TEST = $(RANLIB_TEST_FOR_TARGET)
  19268. +   
  19269. + ! # Dir to search for system headers.  Normally /usr/include.
  19270. +   SYSTEM_HEADER_DIR = $(tooldir)/include
  19271. +   
  19272. +   # Don't try to compile the things we can't compile.
  19273. + --- 11,17 ----
  19274. +   RANLIB = $(RANLIB_FOR_TARGET)
  19275. +   RANLIB_TEST = $(RANLIB_TEST_FOR_TARGET)
  19276. +   
  19277. + ! # Dir to search for system headers.  Normally /gnu/include.
  19278. +   SYSTEM_HEADER_DIR = $(tooldir)/include
  19279. +   
  19280. +   # Don't try to compile the things we can't compile.
  19281. + ***************
  19282. + *** 20,26 ****
  19283. +   # Use cross-compiler version of float.h.
  19284. +   FLOAT_H = $(CROSS_FLOAT_H)
  19285. +   
  19286. + ! # Don't install assert.h in /usr/local/include.
  19287. +   assertdir = $(tooldir)/include
  19288. +   
  19289. +   # Don't run fixproto
  19290. + --- 20,26 ----
  19291. +   # Use cross-compiler version of float.h.
  19292. +   FLOAT_H = $(CROSS_FLOAT_H)
  19293. +   
  19294. + ! # Don't install assert.h in /local/include.
  19295. +   assertdir = $(tooldir)/include
  19296. +   
  19297. +   # Don't run fixproto
  19298. + diff -rc --new-file gcc-2.5.8-fsf/g++.1 gcc-2.5.8/g++.1
  19299. + *** gcc-2.5.8-fsf/g++.1    Wed Oct 13 23:15:18 1993
  19300. + --- gcc-2.5.8/g++.1    Tue Feb 22 11:27:23 1994
  19301. + ***************
  19302. + *** 598,604 ****
  19303. +   .sp
  19304. +   .I LIBDIR
  19305. +   is usually
  19306. + ! .B /usr/local/lib/\c
  19307. +   .IR machine / version .
  19308. +   .br
  19309. +   .I TMPDIR
  19310. + --- 598,604 ----
  19311. +   .sp
  19312. +   .I LIBDIR
  19313. +   is usually
  19314. + ! .B /gnu/lib/\c
  19315. +   .IR machine / version .
  19316. +   .br
  19317. +   .I TMPDIR
  19318. + diff -rc --new-file gcc-2.5.8-fsf/gcc.1 gcc-2.5.8/gcc.1
  19319. + *** gcc-2.5.8-fsf/gcc.1    Wed Oct 13 23:19:36 1993
  19320. + --- gcc-2.5.8/gcc.1    Tue Feb 22 11:27:28 1994
  19321. + ***************
  19322. + *** 1542,1548 ****
  19323. +   `\|\c
  19324. +   .B /usr/lib/gcc/\c
  19325. +   \&\|' and `\|\c
  19326. + ! .B /usr/local/lib/gcc-lib/\c
  19327. +   \&\|'.  If neither of
  19328. +   those results in a file name that is found, the compiler driver
  19329. +   searches for the unmodified program
  19330. + --- 1542,1548 ----
  19331. +   `\|\c
  19332. +   .B /usr/lib/gcc/\c
  19333. +   \&\|' and `\|\c
  19334. + ! .B /gnu/lib/gcc-lib/\c
  19335. +   \&\|'.  If neither of
  19336. +   those results in a file name that is found, the compiler driver
  19337. +   searches for the unmodified program
  19338. + ***************
  19339. + *** 3997,4003 ****
  19340. +   .fi
  19341. +   .I LIBDIR
  19342. +   is usually
  19343. + ! .B /usr/local/lib/\c
  19344. +   .IR machine / version .
  19345. +   .br
  19346. +   .I TMPDIR
  19347. + --- 3997,4003 ----
  19348. +   .fi
  19349. +   .I LIBDIR
  19350. +   is usually
  19351. + ! .B /gnu/lib/\c
  19352. +   .IR machine / version .
  19353. +   .br
  19354. +   .I TMPDIR
  19355. + diff -rc --new-file gcc-2.5.8-fsf/gcc.c gcc-2.5.8/gcc.c
  19356. + *** gcc-2.5.8-fsf/gcc.c    Thu Dec 23 22:50:01 1993
  19357. + --- gcc-2.5.8/gcc.c    Fri Jul  1 13:45:19 1994
  19358. + ***************
  19359. + *** 578,584 ****
  19360. +     {".adb", "@ada"},
  19361. +     {".ada", "@ada"},
  19362. +     {"@ada",
  19363. + !    "gnat1 %{gnat*} %{k8:-gnatk8} %{w:-gnatws}\
  19364. +          -dumpbase %b.ada\
  19365. +          %{g*} %{O*} %{p} %{pg:-p} %{f*} %{d*}\
  19366. +          %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
  19367. + --- 578,584 ----
  19368. +     {".adb", "@ada"},
  19369. +     {".ada", "@ada"},
  19370. +     {"@ada",
  19371. + !    "gnat1 %{gnat*} %{k8:-gnatk8} %{!v:-quiet} %{w:-gnatws}\
  19372. +          -dumpbase %b.ada\
  19373. +          %{g*} %{O*} %{p} %{pg:-p} %{f*} %{d*}\
  19374. +          %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
  19375. + ***************
  19376. + *** 1162,1178 ****
  19377. +   #endif
  19378. +   
  19379. +   #ifndef STANDARD_EXEC_PREFIX
  19380. + ! #define STANDARD_EXEC_PREFIX "/usr/local/lib/gcc-lib/"
  19381. +   #endif /* !defined STANDARD_EXEC_PREFIX */
  19382. +   
  19383. +   static char *standard_exec_prefix = STANDARD_EXEC_PREFIX;
  19384. + ! static char *standard_exec_prefix_1 = "/usr/lib/gcc/";
  19385. +   #ifdef MD_EXEC_PREFIX
  19386. +   static char *md_exec_prefix = MD_EXEC_PREFIX;
  19387. +   #endif
  19388. +   
  19389. +   #ifndef STANDARD_STARTFILE_PREFIX
  19390. + ! #define STANDARD_STARTFILE_PREFIX "/usr/local/lib/"
  19391. +   #endif /* !defined STANDARD_STARTFILE_PREFIX */
  19392. +   
  19393. +   #ifdef MD_STARTFILE_PREFIX
  19394. + --- 1162,1178 ----
  19395. +   #endif
  19396. +   
  19397. +   #ifndef STANDARD_EXEC_PREFIX
  19398. + ! #define STANDARD_EXEC_PREFIX "/gnu/lib/gcc-lib/"
  19399. +   #endif /* !defined STANDARD_EXEC_PREFIX */
  19400. +   
  19401. +   static char *standard_exec_prefix = STANDARD_EXEC_PREFIX;
  19402. + ! static char *standard_exec_prefix_1 = "/local/lib/gcc-lib/";
  19403. +   #ifdef MD_EXEC_PREFIX
  19404. +   static char *md_exec_prefix = MD_EXEC_PREFIX;
  19405. +   #endif
  19406. +   
  19407. +   #ifndef STANDARD_STARTFILE_PREFIX
  19408. + ! #define STANDARD_STARTFILE_PREFIX "/gnu/lib/"
  19409. +   #endif /* !defined STANDARD_STARTFILE_PREFIX */
  19410. +   
  19411. +   #ifdef MD_STARTFILE_PREFIX
  19412. + ***************
  19413. + *** 1182,1192 ****
  19414. +   static char *md_startfile_prefix_1 = MD_STARTFILE_PREFIX_1;
  19415. +   #endif
  19416. +   static char *standard_startfile_prefix = STANDARD_STARTFILE_PREFIX;
  19417. + ! static char *standard_startfile_prefix_1 = "/lib/";
  19418. + ! static char *standard_startfile_prefix_2 = "/usr/lib/";
  19419. +   
  19420. +   #ifndef TOOLDIR_BASE_PREFIX
  19421. + ! #define TOOLDIR_BASE_PREFIX "/usr/local/"
  19422. +   #endif
  19423. +   static char *tooldir_base_prefix = TOOLDIR_BASE_PREFIX;
  19424. +   static char *tooldir_prefix;
  19425. + --- 1182,1192 ----
  19426. +   static char *md_startfile_prefix_1 = MD_STARTFILE_PREFIX_1;
  19427. +   #endif
  19428. +   static char *standard_startfile_prefix = STANDARD_STARTFILE_PREFIX;
  19429. + ! static char *standard_startfile_prefix_1 = "/local/lib/";
  19430. + ! static char *standard_startfile_prefix_2 = "/local/lib/";
  19431. +   
  19432. +   #ifndef TOOLDIR_BASE_PREFIX
  19433. + ! #define TOOLDIR_BASE_PREFIX "/local/"
  19434. +   #endif
  19435. +   static char *tooldir_base_prefix = TOOLDIR_BASE_PREFIX;
  19436. +   static char *tooldir_prefix;
  19437. + ***************
  19438. + *** 1398,1405 ****
  19439. + --- 1398,1409 ----
  19440. +     base = choose_temp_base_try (P_tmpdir, base);
  19441. +   #endif
  19442. +   
  19443. + + #ifdef amigados
  19444. + +   base = "ram:";
  19445. + + #else
  19446. +     base = choose_temp_base_try ("/usr/tmp", base);
  19447. +     base = choose_temp_base_try ("/tmp", base);
  19448. + + #endif
  19449. +   
  19450. +     /* If all else fails, use the current directory! */  
  19451. +     if (base == (char *)0)
  19452. + ***************
  19453. + *** 1408,1414 ****
  19454. +     len = strlen (base);
  19455. +     temp_filename = xmalloc (len + sizeof("/ccXXXXXX") + 1);
  19456. +     strcpy (temp_filename, base);
  19457. + !   if (len > 0 && temp_filename[len-1] != '/')
  19458. +       temp_filename[len++] = '/';
  19459. +     strcpy (temp_filename + len, "ccXXXXXX");
  19460. +   
  19461. + --- 1412,1422 ----
  19462. +     len = strlen (base);
  19463. +     temp_filename = xmalloc (len + sizeof("/ccXXXXXX") + 1);
  19464. +     strcpy (temp_filename, base);
  19465. + !   if (len > 0 && temp_filename[len-1] != '/'
  19466. + ! #ifdef amigados
  19467. + !                         && temp_filename[len-1] != ':'
  19468. + ! #endif
  19469. + !                                     )
  19470. +       temp_filename[len++] = '/';
  19471. +     strcpy (temp_filename + len, "ccXXXXXX");
  19472. +   
  19473. + ***************
  19474. + *** 1552,1558 ****
  19475. +   
  19476. +     /* Determine the filename to execute (special case for absolute paths).  */
  19477. +   
  19478. + !   if (*name == '/')
  19479. +       {
  19480. +         if (access (name, mode))
  19481. +       {
  19482. + --- 1560,1570 ----
  19483. +   
  19484. +     /* Determine the filename to execute (special case for absolute paths).  */
  19485. +   
  19486. + !   if (*name == '/'
  19487. + ! #ifdef amigados
  19488. + !           || index (name, ':')
  19489. + ! #endif
  19490. + !                     )
  19491. +       {
  19492. +         if (access (name, mode))
  19493. +       {
  19494. + ***************
  19495. + *** 1758,1763 ****
  19496. + --- 1770,1776 ----
  19497. +      NOT_LAST is nonzero if this is not the last subcommand
  19498. +      (i.e. its output should be piped to the next one.)  */
  19499. +   
  19500. + + #ifndef PEXECUTE
  19501. +   #ifndef OS2
  19502. +   #ifdef __MSDOS__
  19503. +   
  19504. + ***************
  19505. + *** 1913,1918 ****
  19506. + --- 1926,1932 ----
  19507. +     return (search_flag ? spawnv : spawnvp) (1, program, argv);
  19508. +   }
  19509. +   #endif /* not OS2 */
  19510. + + #endif /* !defined (PEXECUTE) */
  19511. +   
  19512. +   /* Execute the command specified by the arguments on the current line of spec.
  19513. +      When using pipes, this includes several piped-together commands
  19514. + ***************
  19515. + *** 2007,2015 ****
  19516. + --- 2021,2035 ----
  19517. +       {
  19518. +         char *string = commands[i].argv[0];
  19519. +   
  19520. + + #ifdef PEXECUTE
  19521. + +       commands[i].pid = PEXECUTE (string != commands[i].prog,
  19522. + +                   string, commands[i].argv,
  19523. + +                   i + 1 < n_commands);
  19524. + + #else
  19525. +         commands[i].pid = pexecute (string != commands[i].prog,
  19526. +                     string, commands[i].argv,
  19527. +                     i + 1 < n_commands);
  19528. + + #endif
  19529. +   
  19530. +         if (string != commands[i].prog)
  19531. +       free (string);
  19532. + ***************
  19533. + *** 2030,2040 ****
  19534. + --- 2050,2064 ----
  19535. +       int pid;
  19536. +       char *prog;
  19537. +   
  19538. + + #ifdef PEXECUTE_RESULT
  19539. + +     pid = PEXECUTE_RESULT (status, commands[i]);
  19540. + + #else /* PEXECUTE_RESULT */
  19541. +   #ifdef __MSDOS__
  19542. +           status = pid = commands[i].pid;
  19543. +   #else
  19544. +       pid = wait (&status);
  19545. +   #endif
  19546. + + #endif /* PEXECUTE_RESULT */
  19547. +       if (pid < 0)
  19548. +         abort ();
  19549. +   
  19550. + ***************
  19551. + *** 2141,2146 ****
  19552. + --- 2165,2171 ----
  19553. +         if (*endp == PATH_SEPARATOR || *endp == 0)
  19554. +           {
  19555. +             strncpy (nstore, startp, endp-startp);
  19556. + + #ifndef amigados
  19557. +             if (endp == startp)
  19558. +           {
  19559. +             strcpy (nstore, "./");
  19560. + ***************
  19561. + *** 2152,2157 ****
  19562. + --- 2177,2191 ----
  19563. +           }
  19564. +             else
  19565. +           nstore[endp-startp] = 0;
  19566. + + #else
  19567. + +           if (endp[-1] != '/' && endp[-1] != ':')
  19568. + +         {
  19569. + +           nstore[endp-startp] = '/';
  19570. + +           nstore[endp-startp+1] = 0;
  19571. + +         }
  19572. + +           else
  19573. + +         nstore[endp-startp] = 0;
  19574. + + #endif
  19575. +             add_prefix (&exec_prefix, nstore, 0, 0, NULL_PTR);
  19576. +             if (*endp == 0)
  19577. +           break;
  19578. + ***************
  19579. + *** 2174,2179 ****
  19580. + --- 2208,2214 ----
  19581. +         if (*endp == PATH_SEPARATOR || *endp == 0)
  19582. +           {
  19583. +             strncpy (nstore, startp, endp-startp);
  19584. + + #ifndef amigados
  19585. +             if (endp == startp)
  19586. +           {
  19587. +             strcpy (nstore, "./");
  19588. + ***************
  19589. + *** 2185,2190 ****
  19590. + --- 2220,2234 ----
  19591. +           }
  19592. +             else
  19593. +           nstore[endp-startp] = 0;
  19594. + + #else
  19595. + +           if (endp[-1] != '/' && endp[-1] != ':')
  19596. + +         {
  19597. + +           nstore[endp-startp] = '/';
  19598. + +           nstore[endp-startp+1] = 0;
  19599. + +         }
  19600. + +           else
  19601. + +         nstore[endp-startp] = 0;
  19602. + + #endif
  19603. +             add_prefix (&startfile_prefix, nstore, 0, 0, NULL_PTR);
  19604. +             if (*endp == 0)
  19605. +           break;
  19606. + ***************
  19607. + *** 2208,2213 ****
  19608. + --- 2252,2258 ----
  19609. +         if (*endp == PATH_SEPARATOR || *endp == 0)
  19610. +           {
  19611. +             strncpy (nstore, startp, endp-startp);
  19612. + + #ifndef amigados
  19613. +             if (endp == startp)
  19614. +           {
  19615. +             strcpy (nstore, "./");
  19616. + ***************
  19617. + *** 2219,2224 ****
  19618. + --- 2264,2278 ----
  19619. +           }
  19620. +             else
  19621. +           nstore[endp-startp] = 0;
  19622. + + #else
  19623. + +           if (endp[-1] != '/' && endp[-1] != ':')
  19624. + +         {
  19625. + +           nstore[endp-startp] = '/';
  19626. + +           nstore[endp-startp+1] = 0;
  19627. + +         }
  19628. + +           else
  19629. + +         nstore[endp-startp] = 0;
  19630. + + #endif
  19631. +             add_prefix (&startfile_prefix, nstore, 0, 0, NULL_PTR);
  19632. +             if (*endp == 0)
  19633. +           break;
  19634. + ***************
  19635. + *** 3862,3871 ****
  19636. + --- 3916,3929 ----
  19637. +         register char *p;
  19638. +         int len;
  19639. +   
  19640. + + #ifdef FILE_NAME_NONDIRECTORY
  19641. + +       input_basename = FILE_NAME_NONDIRECTORY (input_filename);
  19642. + + #else
  19643. +         input_basename = input_filename;
  19644. +         for (p = input_filename; *p; p++)
  19645. +           if (*p == '/')
  19646. +             input_basename = p + 1;
  19647. + + #endif
  19648. +   
  19649. +         /* Find a suffix starting with the last period,
  19650. +            and set basename_length to exclude that suffix.  */
  19651. + diff -rc --new-file gcc-2.5.8-fsf/gcc.info gcc-2.5.8/gcc.info
  19652. + *** gcc-2.5.8-fsf/gcc.info    Sat Nov 27 19:39:23 1993
  19653. + --- gcc-2.5.8/gcc.info    Tue May  3 14:10:31 1994
  19654. + ***************
  19655. + *** 1,4 ****
  19656. + ! This is Info file gcc.info, produced by Makeinfo-1.54 from the input
  19657. +   file gcc.texi.
  19658. +   
  19659. +      This file documents the use and the internals of the GNU compiler.
  19660. + --- 1,4 ----
  19661. + ! This is Info file gcc.info, produced by Makeinfo-1.55 from the input
  19662. +   file gcc.texi.
  19663. +   
  19664. +      This file documents the use and the internals of the GNU compiler.
  19665. + ***************
  19666. + *** 32,57 ****
  19667. +   gcc.info-1: 1305
  19668. +   gcc.info-2: 49956
  19669. +   gcc.info-3: 91430
  19670. + ! gcc.info-4: 136088
  19671. + ! gcc.info-5: 176230
  19672. + ! gcc.info-6: 225032
  19673. + ! gcc.info-7: 274452
  19674. + ! gcc.info-8: 323146
  19675. + ! gcc.info-9: 372521
  19676. + ! gcc.info-10: 411789
  19677. + ! gcc.info-11: 448922
  19678. + ! gcc.info-12: 498287
  19679. + ! gcc.info-13: 541773
  19680. + ! gcc.info-14: 591219
  19681. + ! gcc.info-15: 622815
  19682. + ! gcc.info-16: 670482
  19683. + ! gcc.info-17: 716044
  19684. + ! gcc.info-18: 765468
  19685. + ! gcc.info-19: 812673
  19686. + ! gcc.info-20: 861775
  19687. + ! gcc.info-21: 909034
  19688. + ! gcc.info-22: 944667
  19689. + ! gcc.info-23: 966158
  19690. +   
  19691. +   Tag Table:
  19692. +   (Indirect)
  19693. + --- 32,57 ----
  19694. +   gcc.info-1: 1305
  19695. +   gcc.info-2: 49956
  19696. +   gcc.info-3: 91430
  19697. + ! gcc.info-4: 136070
  19698. + ! gcc.info-5: 176194
  19699. + ! gcc.info-6: 224902
  19700. + ! gcc.info-7: 274304
  19701. + ! gcc.info-8: 322998
  19702. + ! gcc.info-9: 372325
  19703. + ! gcc.info-10: 411593
  19704. + ! gcc.info-11: 448726
  19705. + ! gcc.info-12: 498091
  19706. + ! gcc.info-13: 541577
  19707. + ! gcc.info-14: 591023
  19708. + ! gcc.info-15: 622619
  19709. + ! gcc.info-16: 670286
  19710. + ! gcc.info-17: 715848
  19711. + ! gcc.info-18: 765243
  19712. + ! gcc.info-19: 812448
  19713. + ! gcc.info-20: 861550
  19714. + ! gcc.info-21: 908809
  19715. + ! gcc.info-22: 944442
  19716. + ! gcc.info-23: 965933
  19717. +   
  19718. +   Tag Table:
  19719. +   (Indirect)
  19720. + ***************
  19721. + *** 73,286 ****
  19722. +   Node: Assembler Options107289
  19723. +   Node: Link Options107613
  19724. +   Node: Directory Options111621
  19725. + ! Node: Target Options114521
  19726. + ! Node: Submodel Options118248
  19727. + ! Node: M680x0 Options119594
  19728. + ! Node: VAX Options122978
  19729. + ! Node: SPARC Options123513
  19730. + ! Node: Convex Options125569
  19731. + ! Node: AMD29K Options127750
  19732. + ! Node: M88K Options129898
  19733. + ! Node: RS/6000 and PowerPC Options136088
  19734. + ! Node: RT Options142032
  19735. + ! Node: MIPS Options143736
  19736. + ! Node: i386 Options149801
  19737. + ! Node: HPPA Options151147
  19738. + ! Node: Intel 960 Options152342
  19739. + ! Node: DEC Alpha Options154952
  19740. + ! Node: Clipper Options156624
  19741. + ! Node: System V Options157024
  19742. + ! Node: Code Gen Options157711
  19743. + ! Node: Environment Variables165976
  19744. + ! Node: Running Protoize170001
  19745. + ! Node: Installation176230
  19746. + ! Node: Other Dir211589
  19747. + ! Node: Cross-Compiler213273
  19748. + ! Node: Steps of Cross215085
  19749. + ! Node: Configure Cross216203
  19750. + ! Node: Tools and Libraries216852
  19751. + ! Node: Cross Runtime219295
  19752. + ! Node: Cross Headers223047
  19753. + ! Node: Build Cross225032
  19754. + ! Node: PA Install226937
  19755. + ! Node: Sun Install229239
  19756. + ! Node: 3b1 Install230978
  19757. + ! Node: Unos Install232011
  19758. + ! Node: VMS Install233551
  19759. + ! Node: WE32K Install243486
  19760. + ! Node: MIPS Install244865
  19761. + ! Node: Collect2247727
  19762. + ! Node: Header Dirs250570
  19763. + ! Node: C Extensions251984
  19764. + ! Node: Statement Exprs255159
  19765. + ! Node: Local Labels257053
  19766. + ! Node: Labels as Values259115
  19767. + ! Node: Nested Functions260980
  19768. + ! Node: Constructing Calls264836
  19769. + ! Node: Naming Types266893
  19770. + ! Node: Typeof267987
  19771. + ! Node: Lvalues269852
  19772. + ! Node: Conditionals272117
  19773. + ! Node: Long Long273008
  19774. + ! Node: Complex274452
  19775. + ! Node: Zero Length276314
  19776. + ! Node: Variable Length276988
  19777. + ! Node: Macro Varargs279513
  19778. + ! Node: Subscripting281616
  19779. + ! Node: Pointer Arith282099
  19780. + ! Node: Initializers282664
  19781. + ! Node: Constructors283110
  19782. + ! Node: Labeled Elements284804
  19783. + ! Node: Case Ranges287126
  19784. + ! Node: Cast to Union288085
  19785. + ! Node: Function Attributes289163
  19786. + ! Node: Function Prototypes294844
  19787. + ! Node: Dollar Signs296549
  19788. + ! Node: Character Escapes297336
  19789. + ! Node: Alignment297617
  19790. + ! Node: Variable Attributes299093
  19791. + ! Node: Inline301992
  19792. + ! Node: Extended Asm305727
  19793. + ! Node: Asm Labels316014
  19794. + ! Node: Explicit Reg Vars317333
  19795. + ! Node: Global Reg Vars318581
  19796. + ! Node: Local Reg Vars323146
  19797. + ! Node: Alternate Keywords324738
  19798. + ! Node: Incomplete Enums326140
  19799. + ! Node: Function Names326848
  19800. + ! Node: C++ Extensions327853
  19801. + ! Node: Naming Results328833
  19802. + ! Node: Min and Max332147
  19803. + ! Node: Destructors and Goto333597
  19804. + ! Node: C++ Interface334147
  19805. + ! Node: Trouble339014
  19806. + ! Node: Actual Bugs340582
  19807. + ! Node: Installation Problems341688
  19808. + ! Node: Cross-Compiler Problems355013
  19809. + ! Node: Interoperation356484
  19810. + ! Node: External Bugs370514
  19811. + ! Node: Incompatibilities372521
  19812. + ! Node: Fixed Headers381069
  19813. + ! Node: Disappointments383408
  19814. + ! Node: C++ Misunderstandings387628
  19815. + ! Node: Static Definitions388275
  19816. + ! Node: Temporaries389329
  19817. + ! Node: Protoize Caveats391533
  19818. + ! Node: Non-bugs395488
  19819. + ! Node: Warnings and Errors404690
  19820. + ! Node: Bugs406461
  19821. + ! Node: Bug Criteria407821
  19822. + ! Node: Bug Lists410251
  19823. + ! Node: Bug Reporting411789
  19824. + ! Node: Sending Patches423733
  19825. + ! Node: Service429085
  19826. + ! Node: VMS429646
  19827. + ! Node: Include Files and VMS430001
  19828. + ! Node: Global Declarations433891
  19829. + ! Node: VMS Misc438200
  19830. + ! Node: Portability442526
  19831. + ! Node: Interface444289
  19832. + ! Node: Passes448922
  19833. + ! Node: RTL466265
  19834. + ! Node: RTL Objects468153
  19835. + ! Node: Accessors471197
  19836. + ! Node: Flags476523
  19837. + ! Node: Machine Modes485542
  19838. + ! Node: Constants493099
  19839. + ! Node: Regs and Memory498287
  19840. + ! Node: Arithmetic509997
  19841. + ! Node: Comparisons516065
  19842. + ! Node: Bit Fields520127
  19843. + ! Node: Conversions521491
  19844. + ! Node: RTL Declarations524379
  19845. + ! Node: Side Effects525188
  19846. + ! Node: Incdec537735
  19847. + ! Node: Assembler540251
  19848. + ! Node: Insns541773
  19849. + ! Node: Calls562518
  19850. + ! Node: Sharing565113
  19851. + ! Node: Reading RTL568189
  19852. + ! Node: Machine Desc569133
  19853. + ! Node: Patterns570986
  19854. + ! Node: Example573930
  19855. + ! Node: RTL Template575058
  19856. + ! Node: Output Template587258
  19857. + ! Node: Output Statement591219
  19858. + ! Node: Constraints594932
  19859. + ! Node: Simple Constraints595935
  19860. + ! Node: Multi-Alternative607368
  19861. + ! Node: Class Preferences610204
  19862. + ! Node: Modifiers611084
  19863. + ! Node: Machine Constraints614199
  19864. + ! Node: No Constraints621694
  19865. + ! Node: Standard Names622815
  19866. + ! Node: Pattern Ordering650086
  19867. + ! Node: Dependent Patterns651312
  19868. + ! Node: Jump Patterns654252
  19869. + ! Node: Insn Canonicalizations660068
  19870. + ! Node: Peephole Definitions663563
  19871. + ! Node: Expander Definitions670482
  19872. + ! Node: Insn Splitting677622
  19873. + ! Node: Insn Attributes684636
  19874. + ! Node: Defining Attributes685683
  19875. + ! Node: Expressions687695
  19876. + ! Node: Tagging Insns694017
  19877. + ! Node: Attr Example698380
  19878. + ! Node: Insn Lengths700756
  19879. + ! Node: Constant Attributes704120
  19880. + ! Node: Delay Slots705280
  19881. + ! Node: Function Units708491
  19882. + ! Node: Target Macros714161
  19883. + ! Node: Driver716044
  19884. + ! Node: Run-time Target726307
  19885. + ! Node: Storage Layout731789
  19886. + ! Node: Type Layout744378
  19887. + ! Node: Registers750707
  19888. + ! Node: Register Basics751687
  19889. + ! Node: Allocation Order755680
  19890. + ! Node: Values in Registers757060
  19891. + ! Node: Leaf Functions761814
  19892. + ! Node: Stack Registers764635
  19893. + ! Node: Obsolete Register Macros765468
  19894. + ! Node: Register Classes768163
  19895. + ! Node: Stack and Calling785880
  19896. + ! Node: Frame Layout786255
  19897. + ! Node: Frame Registers789660
  19898. + ! Node: Elimination793379
  19899. + ! Node: Stack Arguments797682
  19900. + ! Node: Register Arguments803998
  19901. + ! Node: Scalar Return812673
  19902. + ! Node: Aggregate Return816636
  19903. + ! Node: Caller Saves820351
  19904. + ! Node: Function Entry821501
  19905. + ! Node: Profiling830429
  19906. + ! Node: Varargs833333
  19907. + ! Node: Trampolines840016
  19908. + ! Node: Library Calls846451
  19909. + ! Node: Addressing Modes854223
  19910. + ! Node: Condition Code861775
  19911. + ! Node: Costs866398
  19912. + ! Node: Sections874777
  19913. + ! Node: PIC879566
  19914. + ! Node: Assembler Format882056
  19915. + ! Node: File Framework883061
  19916. + ! Node: Data Output886768
  19917. + ! Node: Uninitialized Data892207
  19918. + ! Node: Label Output894802
  19919. + ! Node: Initialization902891
  19920. + ! Node: Macros for Initialization909034
  19921. + ! Node: Instruction Output911817
  19922. + ! Node: Dispatch Tables919763
  19923. + ! Node: Alignment Output922105
  19924. + ! Node: Debugging Info923802
  19925. + ! Node: All Debuggers924354
  19926. + ! Node: DBX Options926721
  19927. + ! Node: DBX Hooks931305
  19928. + ! Node: File Names and DBX934608
  19929. + ! Node: SDB and DWARF936536
  19930. + ! Node: Cross-compilation938220
  19931. + ! Node: Misc944667
  19932. + ! Node: Config960043
  19933. + ! Node: Index966158
  19934. +   
  19935. +   End Tag Table
  19936. + --- 73,286 ----
  19937. +   Node: Assembler Options107289
  19938. +   Node: Link Options107613
  19939. +   Node: Directory Options111621
  19940. + ! Node: Target Options114515
  19941. + ! Node: Submodel Options118230
  19942. + ! Node: M680x0 Options119576
  19943. + ! Node: VAX Options122960
  19944. + ! Node: SPARC Options123495
  19945. + ! Node: Convex Options125551
  19946. + ! Node: AMD29K Options127732
  19947. + ! Node: M88K Options129880
  19948. + ! Node: RS/6000 and PowerPC Options136070
  19949. + ! Node: RT Options142014
  19950. + ! Node: MIPS Options143718
  19951. + ! Node: i386 Options149783
  19952. + ! Node: HPPA Options151129
  19953. + ! Node: Intel 960 Options152324
  19954. + ! Node: DEC Alpha Options154934
  19955. + ! Node: Clipper Options156606
  19956. + ! Node: System V Options157006
  19957. + ! Node: Code Gen Options157693
  19958. + ! Node: Environment Variables165958
  19959. + ! Node: Running Protoize169971
  19960. + ! Node: Installation176194
  19961. + ! Node: Other Dir211501
  19962. + ! Node: Cross-Compiler213185
  19963. + ! Node: Steps of Cross214997
  19964. + ! Node: Configure Cross216115
  19965. + ! Node: Tools and Libraries216764
  19966. + ! Node: Cross Runtime219177
  19967. + ! Node: Cross Headers222929
  19968. + ! Node: Build Cross224902
  19969. + ! Node: PA Install226807
  19970. + ! Node: Sun Install229103
  19971. + ! Node: 3b1 Install230842
  19972. + ! Node: Unos Install231875
  19973. + ! Node: VMS Install233415
  19974. + ! Node: WE32K Install243350
  19975. + ! Node: MIPS Install244729
  19976. + ! Node: Collect2247591
  19977. + ! Node: Header Dirs250434
  19978. + ! Node: C Extensions251836
  19979. + ! Node: Statement Exprs255011
  19980. + ! Node: Local Labels256905
  19981. + ! Node: Labels as Values258967
  19982. + ! Node: Nested Functions260832
  19983. + ! Node: Constructing Calls264688
  19984. + ! Node: Naming Types266745
  19985. + ! Node: Typeof267839
  19986. + ! Node: Lvalues269704
  19987. + ! Node: Conditionals271969
  19988. + ! Node: Long Long272860
  19989. + ! Node: Complex274304
  19990. + ! Node: Zero Length276166
  19991. + ! Node: Variable Length276840
  19992. + ! Node: Macro Varargs279365
  19993. + ! Node: Subscripting281468
  19994. + ! Node: Pointer Arith281951
  19995. + ! Node: Initializers282516
  19996. + ! Node: Constructors282962
  19997. + ! Node: Labeled Elements284656
  19998. + ! Node: Case Ranges286978
  19999. + ! Node: Cast to Union287937
  20000. + ! Node: Function Attributes289015
  20001. + ! Node: Function Prototypes294696
  20002. + ! Node: Dollar Signs296401
  20003. + ! Node: Character Escapes297188
  20004. + ! Node: Alignment297469
  20005. + ! Node: Variable Attributes298945
  20006. + ! Node: Inline301844
  20007. + ! Node: Extended Asm305579
  20008. + ! Node: Asm Labels315866
  20009. + ! Node: Explicit Reg Vars317185
  20010. + ! Node: Global Reg Vars318433
  20011. + ! Node: Local Reg Vars322998
  20012. + ! Node: Alternate Keywords324590
  20013. + ! Node: Incomplete Enums325992
  20014. + ! Node: Function Names326700
  20015. + ! Node: C++ Extensions327705
  20016. + ! Node: Naming Results328685
  20017. + ! Node: Min and Max331999
  20018. + ! Node: Destructors and Goto333449
  20019. + ! Node: C++ Interface333999
  20020. + ! Node: Trouble338866
  20021. + ! Node: Actual Bugs340434
  20022. + ! Node: Installation Problems341540
  20023. + ! Node: Cross-Compiler Problems354841
  20024. + ! Node: Interoperation356312
  20025. + ! Node: External Bugs370324
  20026. + ! Node: Incompatibilities372325
  20027. + ! Node: Fixed Headers380873
  20028. + ! Node: Disappointments383212
  20029. + ! Node: C++ Misunderstandings387432
  20030. + ! Node: Static Definitions388079
  20031. + ! Node: Temporaries389133
  20032. + ! Node: Protoize Caveats391337
  20033. + ! Node: Non-bugs395292
  20034. + ! Node: Warnings and Errors404494
  20035. + ! Node: Bugs406265
  20036. + ! Node: Bug Criteria407625
  20037. + ! Node: Bug Lists410055
  20038. + ! Node: Bug Reporting411593
  20039. + ! Node: Sending Patches423537
  20040. + ! Node: Service428889
  20041. + ! Node: VMS429450
  20042. + ! Node: Include Files and VMS429805
  20043. + ! Node: Global Declarations433695
  20044. + ! Node: VMS Misc438004
  20045. + ! Node: Portability442330
  20046. + ! Node: Interface444093
  20047. + ! Node: Passes448726
  20048. + ! Node: RTL466069
  20049. + ! Node: RTL Objects467957
  20050. + ! Node: Accessors471001
  20051. + ! Node: Flags476327
  20052. + ! Node: Machine Modes485346
  20053. + ! Node: Constants492903
  20054. + ! Node: Regs and Memory498091
  20055. + ! Node: Arithmetic509801
  20056. + ! Node: Comparisons515869
  20057. + ! Node: Bit Fields519931
  20058. + ! Node: Conversions521295
  20059. + ! Node: RTL Declarations524183
  20060. + ! Node: Side Effects524992
  20061. + ! Node: Incdec537539
  20062. + ! Node: Assembler540055
  20063. + ! Node: Insns541577
  20064. + ! Node: Calls562322
  20065. + ! Node: Sharing564917
  20066. + ! Node: Reading RTL567993
  20067. + ! Node: Machine Desc568937
  20068. + ! Node: Patterns570790
  20069. + ! Node: Example573734
  20070. + ! Node: RTL Template574862
  20071. + ! Node: Output Template587062
  20072. + ! Node: Output Statement591023
  20073. + ! Node: Constraints594736
  20074. + ! Node: Simple Constraints595739
  20075. + ! Node: Multi-Alternative607172
  20076. + ! Node: Class Preferences610008
  20077. + ! Node: Modifiers610888
  20078. + ! Node: Machine Constraints614003
  20079. + ! Node: No Constraints621498
  20080. + ! Node: Standard Names622619
  20081. + ! Node: Pattern Ordering649890
  20082. + ! Node: Dependent Patterns651116
  20083. + ! Node: Jump Patterns654056
  20084. + ! Node: Insn Canonicalizations659872
  20085. + ! Node: Peephole Definitions663367
  20086. + ! Node: Expander Definitions670286
  20087. + ! Node: Insn Splitting677426
  20088. + ! Node: Insn Attributes684440
  20089. + ! Node: Defining Attributes685487
  20090. + ! Node: Expressions687499
  20091. + ! Node: Tagging Insns693821
  20092. + ! Node: Attr Example698184
  20093. + ! Node: Insn Lengths700560
  20094. + ! Node: Constant Attributes703924
  20095. + ! Node: Delay Slots705084
  20096. + ! Node: Function Units708295
  20097. + ! Node: Target Macros713965
  20098. + ! Node: Driver715848
  20099. + ! Node: Run-time Target726082
  20100. + ! Node: Storage Layout731564
  20101. + ! Node: Type Layout744153
  20102. + ! Node: Registers750482
  20103. + ! Node: Register Basics751462
  20104. + ! Node: Allocation Order755455
  20105. + ! Node: Values in Registers756835
  20106. + ! Node: Leaf Functions761589
  20107. + ! Node: Stack Registers764410
  20108. + ! Node: Obsolete Register Macros765243
  20109. + ! Node: Register Classes767938
  20110. + ! Node: Stack and Calling785655
  20111. + ! Node: Frame Layout786030
  20112. + ! Node: Frame Registers789435
  20113. + ! Node: Elimination793154
  20114. + ! Node: Stack Arguments797457
  20115. + ! Node: Register Arguments803773
  20116. + ! Node: Scalar Return812448
  20117. + ! Node: Aggregate Return816411
  20118. + ! Node: Caller Saves820126
  20119. + ! Node: Function Entry821276
  20120. + ! Node: Profiling830204
  20121. + ! Node: Varargs833108
  20122. + ! Node: Trampolines839791
  20123. + ! Node: Library Calls846226
  20124. + ! Node: Addressing Modes853998
  20125. + ! Node: Condition Code861550
  20126. + ! Node: Costs866173
  20127. + ! Node: Sections874552
  20128. + ! Node: PIC879341
  20129. + ! Node: Assembler Format881831
  20130. + ! Node: File Framework882836
  20131. + ! Node: Data Output886543
  20132. + ! Node: Uninitialized Data891982
  20133. + ! Node: Label Output894577
  20134. + ! Node: Initialization902666
  20135. + ! Node: Macros for Initialization908809
  20136. + ! Node: Instruction Output911592
  20137. + ! Node: Dispatch Tables919538
  20138. + ! Node: Alignment Output921880
  20139. + ! Node: Debugging Info923577
  20140. + ! Node: All Debuggers924129
  20141. + ! Node: DBX Options926496
  20142. + ! Node: DBX Hooks931080
  20143. + ! Node: File Names and DBX934383
  20144. + ! Node: SDB and DWARF936311
  20145. + ! Node: Cross-compilation937995
  20146. + ! Node: Misc944442
  20147. + ! Node: Config959818
  20148. + ! Node: Index965933
  20149. +   
  20150. +   End Tag Table
  20151. + diff -rc --new-file gcc-2.5.8-fsf/gcc.info-1 gcc-2.5.8/gcc.info-1
  20152. + *** gcc-2.5.8-fsf/gcc.info-1    Sat Nov 27 19:38:42 1993
  20153. + --- gcc-2.5.8/gcc.info-1    Tue May  3 14:10:10 1994
  20154. + ***************
  20155. + *** 1,4 ****
  20156. + ! This is Info file gcc.info, produced by Makeinfo-1.54 from the input
  20157. +   file gcc.texi.
  20158. +   
  20159. +      This file documents the use and the internals of the GNU compiler.
  20160. + --- 1,4 ----
  20161. + ! This is Info file gcc.info, produced by Makeinfo-1.55 from the input
  20162. +   file gcc.texi.
  20163. +   
  20164. +      This file documents the use and the internals of the GNU compiler.
  20165. + diff -rc --new-file gcc-2.5.8-fsf/gcc.info-10 gcc-2.5.8/gcc.info-10
  20166. + *** gcc-2.5.8-fsf/gcc.info-10    Sat Nov 27 19:38:59 1993
  20167. + --- gcc-2.5.8/gcc.info-10    Tue May  3 14:10:18 1994
  20168. + ***************
  20169. + *** 1,4 ****
  20170. + ! This is Info file gcc.info, produced by Makeinfo-1.54 from the input
  20171. +   file gcc.texi.
  20172. +   
  20173. +      This file documents the use and the internals of the GNU compiler.
  20174. + --- 1,4 ----
  20175. + ! This is Info file gcc.info, produced by Makeinfo-1.55 from the input
  20176. +   file gcc.texi.
  20177. +   
  20178. +      This file documents the use and the internals of the GNU compiler.
  20179. + diff -rc --new-file gcc-2.5.8-fsf/gcc.info-11 gcc-2.5.8/gcc.info-11
  20180. + *** gcc-2.5.8-fsf/gcc.info-11    Sat Nov 27 19:38:59 1993
  20181. + --- gcc-2.5.8/gcc.info-11    Tue May  3 14:10:19 1994
  20182. + ***************
  20183. + *** 1,4 ****
  20184. + ! This is Info file gcc.info, produced by Makeinfo-1.54 from the input
  20185. +   file gcc.texi.
  20186. +   
  20187. +      This file documents the use and the internals of the GNU compiler.
  20188. + --- 1,4 ----
  20189. + ! This is Info file gcc.info, produced by Makeinfo-1.55 from the input
  20190. +   file gcc.texi.
  20191. +   
  20192. +      This file documents the use and the internals of the GNU compiler.
  20193. + diff -rc --new-file gcc-2.5.8-fsf/gcc.info-12 gcc-2.5.8/gcc.info-12
  20194. + *** gcc-2.5.8-fsf/gcc.info-12    Sat Nov 27 19:39:04 1993
  20195. + --- gcc-2.5.8/gcc.info-12    Tue May  3 14:10:20 1994
  20196. + ***************
  20197. + *** 1,4 ****
  20198. + ! This is Info file gcc.info, produced by Makeinfo-1.54 from the input
  20199. +   file gcc.texi.
  20200. +   
  20201. +      This file documents the use and the internals of the GNU compiler.
  20202. + --- 1,4 ----
  20203. + ! This is Info file gcc.info, produced by Makeinfo-1.55 from the input
  20204. +   file gcc.texi.
  20205. +   
  20206. +      This file documents the use and the internals of the GNU compiler.
  20207. + diff -rc --new-file gcc-2.5.8-fsf/gcc.info-13 gcc-2.5.8/gcc.info-13
  20208. + *** gcc-2.5.8-fsf/gcc.info-13    Sat Nov 27 19:39:09 1993
  20209. + --- gcc-2.5.8/gcc.info-13    Tue May  3 14:10:21 1994
  20210. + ***************
  20211. + *** 1,4 ****
  20212. + ! This is Info file gcc.info, produced by Makeinfo-1.54 from the input
  20213. +   file gcc.texi.
  20214. +   
  20215. +      This file documents the use and the internals of the GNU compiler.
  20216. + --- 1,4 ----
  20217. + ! This is Info file gcc.info, produced by Makeinfo-1.55 from the input
  20218. +   file gcc.texi.
  20219. +   
  20220. +      This file documents the use and the internals of the GNU compiler.
  20221. + diff -rc --new-file gcc-2.5.8-fsf/gcc.info-14 gcc-2.5.8/gcc.info-14
  20222. + *** gcc-2.5.8-fsf/gcc.info-14    Sat Nov 27 19:39:13 1993
  20223. + --- gcc-2.5.8/gcc.info-14    Tue May  3 14:10:22 1994
  20224. + ***************
  20225. + *** 1,4 ****
  20226. + ! This is Info file gcc.info, produced by Makeinfo-1.54 from the input
  20227. +   file gcc.texi.
  20228. +   
  20229. +      This file documents the use and the internals of the GNU compiler.
  20230. + --- 1,4 ----
  20231. + ! This is Info file gcc.info, produced by Makeinfo-1.55 from the input
  20232. +   file gcc.texi.
  20233. +   
  20234. +      This file documents the use and the internals of the GNU compiler.
  20235. + diff -rc --new-file gcc-2.5.8-fsf/gcc.info-15 gcc-2.5.8/gcc.info-15
  20236. + *** gcc-2.5.8-fsf/gcc.info-15    Sat Nov 27 19:39:14 1993
  20237. + --- gcc-2.5.8/gcc.info-15    Tue May  3 14:10:23 1994
  20238. + ***************
  20239. + *** 1,4 ****
  20240. + ! This is Info file gcc.info, produced by Makeinfo-1.54 from the input
  20241. +   file gcc.texi.
  20242. +   
  20243. +      This file documents the use and the internals of the GNU compiler.
  20244. + --- 1,4 ----
  20245. + ! This is Info file gcc.info, produced by Makeinfo-1.55 from the input
  20246. +   file gcc.texi.
  20247. +   
  20248. +      This file documents the use and the internals of the GNU compiler.
  20249. + diff -rc --new-file gcc-2.5.8-fsf/gcc.info-16 gcc-2.5.8/gcc.info-16
  20250. + *** gcc-2.5.8-fsf/gcc.info-16    Sat Nov 27 19:39:14 1993
  20251. + --- gcc-2.5.8/gcc.info-16    Tue May  3 14:10:23 1994
  20252. + ***************
  20253. + *** 1,4 ****
  20254. + ! This is Info file gcc.info, produced by Makeinfo-1.54 from the input
  20255. +   file gcc.texi.
  20256. +   
  20257. +      This file documents the use and the internals of the GNU compiler.
  20258. + --- 1,4 ----
  20259. + ! This is Info file gcc.info, produced by Makeinfo-1.55 from the input
  20260. +   file gcc.texi.
  20261. +   
  20262. +      This file documents the use and the internals of the GNU compiler.
  20263. + diff -rc --new-file gcc-2.5.8-fsf/gcc.info-17 gcc-2.5.8/gcc.info-17
  20264. + *** gcc-2.5.8-fsf/gcc.info-17    Sat Nov 27 19:39:15 1993
  20265. + --- gcc-2.5.8/gcc.info-17    Tue May  3 14:10:25 1994
  20266. + ***************
  20267. + *** 1,4 ****
  20268. + ! This is Info file gcc.info, produced by Makeinfo-1.54 from the input
  20269. +   file gcc.texi.
  20270. +   
  20271. +      This file documents the use and the internals of the GNU compiler.
  20272. + --- 1,4 ----
  20273. + ! This is Info file gcc.info, produced by Makeinfo-1.55 from the input
  20274. +   file gcc.texi.
  20275. +   
  20276. +      This file documents the use and the internals of the GNU compiler.
  20277. + ***************
  20278. + *** 174,182 ****
  20279. +   
  20280. +   `STANDARD_EXEC_PREFIX'
  20281. +        Define this macro as a C string constant if you wish to override
  20282. + !      the standard choice of `/usr/local/lib/gcc-lib/' as the default
  20283. + !      prefix to try when searching for the executable files of the
  20284. + !      compiler.
  20285. +   
  20286. +   `MD_EXEC_PREFIX'
  20287. +        If defined, this macro is an additional prefix to try after
  20288. + --- 174,181 ----
  20289. +   
  20290. +   `STANDARD_EXEC_PREFIX'
  20291. +        Define this macro as a C string constant if you wish to override
  20292. + !      the standard choice of `/gnu/lib/gcc-lib/' as the default prefix to
  20293. + !      try when searching for the executable files of the compiler.
  20294. +   
  20295. +   `MD_EXEC_PREFIX'
  20296. +        If defined, this macro is an additional prefix to try after
  20297. + ***************
  20298. + *** 185,192 ****
  20299. +   
  20300. +   `STANDARD_STARTFILE_PREFIX'
  20301. +        Define this macro as a C string constant if you wish to override
  20302. + !      the standard choice of `/usr/local/lib/' as the default prefix to
  20303. + !      try when searching for startup files such as `crt0.o'.
  20304. +   
  20305. +   `MD_STARTFILE_PREFIX'
  20306. +        If defined, this macro supplies an additional prefix to try after
  20307. + --- 184,191 ----
  20308. +   
  20309. +   `STANDARD_STARTFILE_PREFIX'
  20310. +        Define this macro as a C string constant if you wish to override
  20311. + !      the standard choice of `/gnu/lib/' as the default prefix to try
  20312. + !      when searching for startup files such as `crt0.o'.
  20313. +   
  20314. +   `MD_STARTFILE_PREFIX'
  20315. +        If defined, this macro supplies an additional prefix to try after
  20316. + ***************
  20317. + *** 201,212 ****
  20318. +   
  20319. +   `LOCAL_INCLUDE_DIR'
  20320. +        Define this macro as a C string constant if you wish to override
  20321. + !      the standard choice of `/usr/local/include' as the default prefix
  20322. + !      to try when searching for local header files.  `LOCAL_INCLUDE_DIR'
  20323. + !      comes before `SYSTEM_INCLUDE_DIR' in the search order.
  20324. +   
  20325. +        Cross compilers do not use this macro and do not search either
  20326. + !      `/usr/local/include' or its replacement.
  20327. +   
  20328. +   `SYSTEM_INCLUDE_DIR'
  20329. +        Define this macro as a C string constant if you wish to specify a
  20330. + --- 200,211 ----
  20331. +   
  20332. +   `LOCAL_INCLUDE_DIR'
  20333. +        Define this macro as a C string constant if you wish to override
  20334. + !      the standard choice of `/gnu/include' as the default prefix to try
  20335. + !      when searching for local header files.  `LOCAL_INCLUDE_DIR' comes
  20336. + !      before `SYSTEM_INCLUDE_DIR' in the search order.
  20337. +   
  20338. +        Cross compilers do not use this macro and do not search either
  20339. + !      `/gnu/include' or its replacement.
  20340. +   
  20341. +   `SYSTEM_INCLUDE_DIR'
  20342. +        Define this macro as a C string constant if you wish to specify a
  20343. + diff -rc --new-file gcc-2.5.8-fsf/gcc.info-18 gcc-2.5.8/gcc.info-18
  20344. + *** gcc-2.5.8-fsf/gcc.info-18    Sat Nov 27 19:39:15 1993
  20345. + --- gcc-2.5.8/gcc.info-18    Tue May  3 14:10:25 1994
  20346. + ***************
  20347. + *** 1,4 ****
  20348. + ! This is Info file gcc.info, produced by Makeinfo-1.54 from the input
  20349. +   file gcc.texi.
  20350. +   
  20351. +      This file documents the use and the internals of the GNU compiler.
  20352. + --- 1,4 ----
  20353. + ! This is Info file gcc.info, produced by Makeinfo-1.55 from the input
  20354. +   file gcc.texi.
  20355. +   
  20356. +      This file documents the use and the internals of the GNU compiler.
  20357. + diff -rc --new-file gcc-2.5.8-fsf/gcc.info-19 gcc-2.5.8/gcc.info-19
  20358. + *** gcc-2.5.8-fsf/gcc.info-19    Sat Nov 27 19:39:16 1993
  20359. + --- gcc-2.5.8/gcc.info-19    Tue May  3 14:10:26 1994
  20360. + ***************
  20361. + *** 1,4 ****
  20362. + ! This is Info file gcc.info, produced by Makeinfo-1.54 from the input
  20363. +   file gcc.texi.
  20364. +   
  20365. +      This file documents the use and the internals of the GNU compiler.
  20366. + --- 1,4 ----
  20367. + ! This is Info file gcc.info, produced by Makeinfo-1.55 from the input
  20368. +   file gcc.texi.
  20369. +   
  20370. +      This file documents the use and the internals of the GNU compiler.
  20371. + diff -rc --new-file gcc-2.5.8-fsf/gcc.info-2 gcc-2.5.8/gcc.info-2
  20372. + *** gcc-2.5.8-fsf/gcc.info-2    Sat Nov 27 19:38:47 1993
  20373. + --- gcc-2.5.8/gcc.info-2    Tue May  3 14:10:11 1994
  20374. + ***************
  20375. + *** 1,4 ****
  20376. + ! This is Info file gcc.info, produced by Makeinfo-1.54 from the input
  20377. +   file gcc.texi.
  20378. +   
  20379. +      This file documents the use and the internals of the GNU compiler.
  20380. + --- 1,4 ----
  20381. + ! This is Info file gcc.info, produced by Makeinfo-1.55 from the input
  20382. +   file gcc.texi.
  20383. +   
  20384. +      This file documents the use and the internals of the GNU compiler.
  20385. + diff -rc --new-file gcc-2.5.8-fsf/gcc.info-20 gcc-2.5.8/gcc.info-20
  20386. + *** gcc-2.5.8-fsf/gcc.info-20    Sat Nov 27 19:39:21 1993
  20387. + --- gcc-2.5.8/gcc.info-20    Tue May  3 14:10:27 1994
  20388. + ***************
  20389. + *** 1,4 ****
  20390. + ! This is Info file gcc.info, produced by Makeinfo-1.54 from the input
  20391. +   file gcc.texi.
  20392. +   
  20393. +      This file documents the use and the internals of the GNU compiler.
  20394. + --- 1,4 ----
  20395. + ! This is Info file gcc.info, produced by Makeinfo-1.55 from the input
  20396. +   file gcc.texi.
  20397. +   
  20398. +      This file documents the use and the internals of the GNU compiler.
  20399. + diff -rc --new-file gcc-2.5.8-fsf/gcc.info-21 gcc-2.5.8/gcc.info-21
  20400. + *** gcc-2.5.8-fsf/gcc.info-21    Sat Nov 27 19:39:21 1993
  20401. + --- gcc-2.5.8/gcc.info-21    Tue May  3 14:10:28 1994
  20402. + ***************
  20403. + *** 1,4 ****
  20404. + ! This is Info file gcc.info, produced by Makeinfo-1.54 from the input
  20405. +   file gcc.texi.
  20406. +   
  20407. +      This file documents the use and the internals of the GNU compiler.
  20408. + --- 1,4 ----
  20409. + ! This is Info file gcc.info, produced by Makeinfo-1.55 from the input
  20410. +   file gcc.texi.
  20411. +   
  20412. +      This file documents the use and the internals of the GNU compiler.
  20413. + diff -rc --new-file gcc-2.5.8-fsf/gcc.info-22 gcc-2.5.8/gcc.info-22
  20414. + *** gcc-2.5.8-fsf/gcc.info-22    Sat Nov 27 19:39:22 1993
  20415. + --- gcc-2.5.8/gcc.info-22    Tue May  3 14:10:29 1994
  20416. + ***************
  20417. + *** 1,4 ****
  20418. + ! This is Info file gcc.info, produced by Makeinfo-1.54 from the input
  20419. +   file gcc.texi.
  20420. +   
  20421. +      This file documents the use and the internals of the GNU compiler.
  20422. + --- 1,4 ----
  20423. + ! This is Info file gcc.info, produced by Makeinfo-1.55 from the input
  20424. +   file gcc.texi.
  20425. +   
  20426. +      This file documents the use and the internals of the GNU compiler.
  20427. + diff -rc --new-file gcc-2.5.8-fsf/gcc.info-23 gcc-2.5.8/gcc.info-23
  20428. + *** gcc-2.5.8-fsf/gcc.info-23    Sat Nov 27 19:39:23 1993
  20429. + --- gcc-2.5.8/gcc.info-23    Tue May  3 14:10:31 1994
  20430. + ***************
  20431. + *** 1,4 ****
  20432. + ! This is Info file gcc.info, produced by Makeinfo-1.54 from the input
  20433. +   file gcc.texi.
  20434. +   
  20435. +      This file documents the use and the internals of the GNU compiler.
  20436. + --- 1,4 ----
  20437. + ! This is Info file gcc.info, produced by Makeinfo-1.55 from the input
  20438. +   file gcc.texi.
  20439. +   
  20440. +      This file documents the use and the internals of the GNU compiler.
  20441. + diff -rc --new-file gcc-2.5.8-fsf/gcc.info-3 gcc-2.5.8/gcc.info-3
  20442. + *** gcc-2.5.8-fsf/gcc.info-3    Sat Nov 27 19:38:47 1993
  20443. + --- gcc-2.5.8/gcc.info-3    Tue May  3 14:10:12 1994
  20444. + ***************
  20445. + *** 1,4 ****
  20446. + ! This is Info file gcc.info, produced by Makeinfo-1.54 from the input
  20447. +   file gcc.texi.
  20448. +   
  20449. +      This file documents the use and the internals of the GNU compiler.
  20450. + --- 1,4 ----
  20451. + ! This is Info file gcc.info, produced by Makeinfo-1.55 from the input
  20452. +   file gcc.texi.
  20453. +   
  20454. +      This file documents the use and the internals of the GNU compiler.
  20455. + ***************
  20456. + *** 568,577 ****
  20457. +        For each subprogram to be run, the compiler driver first tries the
  20458. +        `-B' prefix, if any.  If that name is not found, or if `-B' was
  20459. +        not specified, the driver tries two standard prefixes, which are
  20460. + !      `/usr/lib/gcc/' and `/usr/local/lib/gcc-lib/'.  If neither of
  20461. + !      those results in a file name that is found, the unmodified program
  20462. + !      name is searched for using the directories specified in your
  20463. + !      `PATH' environment variable.
  20464. +   
  20465. +        `-B' prefixes that effectively specify directory names also apply
  20466. +        to libraries in the linker, because the compiler translates these
  20467. + --- 568,577 ----
  20468. +        For each subprogram to be run, the compiler driver first tries the
  20469. +        `-B' prefix, if any.  If that name is not found, or if `-B' was
  20470. +        not specified, the driver tries two standard prefixes, which are
  20471. + !      `/usr/lib/gcc/' and `/gnu/lib/gcc-lib/'.  If neither of those
  20472. + !      results in a file name that is found, the unmodified program name
  20473. + !      is searched for using the directories specified in your `PATH'
  20474. + !      environment variable.
  20475. +   
  20476. +        `-B' prefixes that effectively specify directory names also apply
  20477. +        to libraries in the linker, because the compiler translates these
  20478. + ***************
  20479. + *** 628,640 ****
  20480. +      The `-b' and `-V' options actually work by controlling part of the
  20481. +   file name used for the executable files and libraries used for
  20482. +   compilation.  A given version of GNU CC, for a given target machine, is
  20483. + ! normally kept in the directory `/usr/local/lib/gcc-lib/MACHINE/VERSION'.
  20484. +   
  20485. +      Thus, sites can customize the effect of `-b' or `-V' either by
  20486. +   changing the names of these directories or adding alternate names (or
  20487. + ! symbolic links).  If in directory `/usr/local/lib/gcc-lib/' the file
  20488. + ! `80386' is a link to the file `i386v', then `-b 80386' becomes an alias
  20489. + ! for `-b i386v'.
  20490. +   
  20491. +      In one respect, the `-b' or `-V' do not completely change to a
  20492. +   different compiler: the top-level driver program `gcc' that you
  20493. + --- 628,640 ----
  20494. +      The `-b' and `-V' options actually work by controlling part of the
  20495. +   file name used for the executable files and libraries used for
  20496. +   compilation.  A given version of GNU CC, for a given target machine, is
  20497. + ! normally kept in the directory `/gnu/lib/gcc-lib/MACHINE/VERSION'.
  20498. +   
  20499. +      Thus, sites can customize the effect of `-b' or `-V' either by
  20500. +   changing the names of these directories or adding alternate names (or
  20501. + ! symbolic links).  If in directory `/gnu/lib/gcc-lib/' the file `80386'
  20502. + ! is a link to the file `i386v', then `-b 80386' becomes an alias for `-b
  20503. + ! i386v'.
  20504. +   
  20505. +      In one respect, the `-b' or `-V' do not completely change to a
  20506. +   different compiler: the top-level driver program `gcc' that you
  20507. + diff -rc --new-file gcc-2.5.8-fsf/gcc.info-4 gcc-2.5.8/gcc.info-4
  20508. + *** gcc-2.5.8-fsf/gcc.info-4    Sat Nov 27 19:38:47 1993
  20509. + --- gcc-2.5.8/gcc.info-4    Tue May  3 14:10:12 1994
  20510. + ***************
  20511. + *** 1,4 ****
  20512. + ! This is Info file gcc.info, produced by Makeinfo-1.54 from the input
  20513. +   file gcc.texi.
  20514. +   
  20515. +      This file documents the use and the internals of the GNU compiler.
  20516. + --- 1,4 ----
  20517. + ! This is Info file gcc.info, produced by Makeinfo-1.55 from the input
  20518. +   file gcc.texi.
  20519. +   
  20520. +      This file documents the use and the internals of the GNU compiler.
  20521. + ***************
  20522. + *** 789,801 ****
  20523. +   
  20524. +        In addition, the prefix is used in an unusual way in finding the
  20525. +        directories to search for header files.  For each of the standard
  20526. + !      directories whose name normally begins with
  20527. + !      `/usr/local/lib/gcc-lib' (more precisely, with the value of
  20528. + !      `GCC_INCLUDE_DIR'), GNU CC tries replacing that beginning with the
  20529. + !      specified prefix to produce an alternate directory name.  Thus,
  20530. + !      with `-Bfoo/', GNU CC will search `foo/bar' where it would
  20531. + !      normally search `/usr/local/lib/bar'.  These alternate directories
  20532. + !      are searched first; the standard directories come next.
  20533. +   
  20534. +   `COMPILER_PATH'
  20535. +        The value of `COMPILER_PATH' is a colon-separated list of
  20536. + --- 789,801 ----
  20537. +   
  20538. +        In addition, the prefix is used in an unusual way in finding the
  20539. +        directories to search for header files.  For each of the standard
  20540. + !      directories whose name normally begins with `/gnu/lib/gcc-lib'
  20541. + !      (more precisely, with the value of `GCC_INCLUDE_DIR'), GNU CC tries
  20542. + !      replacing that beginning with the specified prefix to produce an
  20543. + !      alternate directory name.  Thus, with `-Bfoo/', GNU CC will search
  20544. + !      `foo/bar' where it would normally search `/gnu/lib/bar'.  These
  20545. + !      alternate directories are searched first; the standard directories
  20546. + !      come next.
  20547. +   
  20548. +   `COMPILER_PATH'
  20549. +        The value of `COMPILER_PATH' is a colon-separated list of
  20550. + ***************
  20551. + *** 896,902 ****
  20552. +   
  20553. +   `-B DIRECTORY'
  20554. +        Look for the file `SYSCALLS.c.X' in DIRECTORY, instead of the
  20555. + !      usual directory (normally `/usr/local/lib').  This file contains
  20556. +        prototype information about standard system functions.  This option
  20557. +        applies only to `protoize'.
  20558. +   
  20559. + --- 896,902 ----
  20560. +   
  20561. +   `-B DIRECTORY'
  20562. +        Look for the file `SYSCALLS.c.X' in DIRECTORY, instead of the
  20563. + !      usual directory (normally `/gnu/lib').  This file contains
  20564. +        prototype information about standard system functions.  This option
  20565. +        applies only to `protoize'.
  20566. +   
  20567. + diff -rc --new-file gcc-2.5.8-fsf/gcc.info-5 gcc-2.5.8/gcc.info-5
  20568. + *** gcc-2.5.8-fsf/gcc.info-5    Sat Nov 27 19:38:48 1993
  20569. + --- gcc-2.5.8/gcc.info-5    Tue May  3 14:10:13 1994
  20570. + ***************
  20571. + *** 1,4 ****
  20572. + ! This is Info file gcc.info, produced by Makeinfo-1.54 from the input
  20573. +   file gcc.texi.
  20574. +   
  20575. +      This file documents the use and the internals of the GNU compiler.
  20576. + --- 1,4 ----
  20577. + ! This is Info file gcc.info, produced by Makeinfo-1.55 from the input
  20578. +   file gcc.texi.
  20579. +   
  20580. +      This file documents the use and the internals of the GNU compiler.
  20581. + ***************
  20582. + *** 557,576 ****
  20583. +             files do not exist, it means nothing needs to be added for a
  20584. +             given target or host.
  20585. +   
  20586. + !   4. The standard directory for installing GNU CC is `/usr/local/lib'.
  20587. + !      If you want to install its files somewhere else, specify
  20588. +        `--prefix=DIR' when you run `configure'.  Here DIR is a directory
  20589. + !      name to use instead of `/usr/local' for all purposes with one
  20590. + !      exception: the directory `/usr/local/include' is searched for
  20591. + !      header files no matter where you install the compiler.
  20592. +   
  20593. +     5. Specify `--local-prefix=DIR' if you want the compiler to search
  20594. +        directory `DIR/include' for header files *instead* of
  20595. + !      `/usr/local/include'.  (This is for systems that have different
  20596. +        conventions for where to put site-specific things.)
  20597. +   
  20598. + !      Unless you have a convention other than `/usr/local' for
  20599. + !      site-specific files, it is a bad idea to specify `--local-prefix'.
  20600. +   
  20601. +     6. Make sure the Bison parser generator is installed.  (This is
  20602. +        unnecessary if the Bison output files `c-parse.c' and `cexp.c' are
  20603. + --- 557,576 ----
  20604. +             files do not exist, it means nothing needs to be added for a
  20605. +             given target or host.
  20606. +   
  20607. + !   4. The standard directory for installing GNU CC is `/gnu/lib'.  If
  20608. + !      you want to install its files somewhere else, specify
  20609. +        `--prefix=DIR' when you run `configure'.  Here DIR is a directory
  20610. + !      name to use instead of `/gnu' for all purposes with one exception:
  20611. + !      the directory `/gnu/include' is searched for header files no
  20612. + !      matter where you install the compiler.
  20613. +   
  20614. +     5. Specify `--local-prefix=DIR' if you want the compiler to search
  20615. +        directory `DIR/include' for header files *instead* of
  20616. + !      `/gnu/include'.  (This is for systems that have different
  20617. +        conventions for where to put site-specific things.)
  20618. +   
  20619. + !      Unless you have a convention other than `/gnu' for site-specific
  20620. + !      files, it is a bad idea to specify `--local-prefix'.
  20621. +   
  20622. +     6. Make sure the Bison parser generator is installed.  (This is
  20623. +        unnecessary if the Bison output files `c-parse.c' and `cexp.c' are
  20624. + ***************
  20625. + *** 621,629 ****
  20626. +        If you are building with a previous GNU C compiler, do not use
  20627. +        `CC=gcc' on the make command or by editing the Makefile.  Instead,
  20628. +        use a full pathname to specify the compiler, such as
  20629. + !      `CC=/usr/local/bin/gcc'.  This is because make might execute the
  20630. + !      `gcc' in the current directory before all of the compiler
  20631. + !      components have been built.
  20632. +   
  20633. +     9. If you are building a cross-compiler, stop here.  *Note
  20634. +        Cross-Compiler::.
  20635. + --- 621,629 ----
  20636. +        If you are building with a previous GNU C compiler, do not use
  20637. +        `CC=gcc' on the make command or by editing the Makefile.  Instead,
  20638. +        use a full pathname to specify the compiler, such as
  20639. + !      `CC=/gnu/bin/gcc'.  This is because make might execute the `gcc'
  20640. + !      in the current directory before all of the compiler components
  20641. + !      have been built.
  20642. +   
  20643. +     9. If you are building a cross-compiler, stop here.  *Note
  20644. +        Cross-Compiler::.
  20645. + ***************
  20646. + *** 746,760 ****
  20647. +   
  20648. +        This copies the files `cc1', `cpp' and `libgcc.a' to files `cc1',
  20649. +        `cpp' and `libgcc.a' in the directory
  20650. + !      `/usr/local/lib/gcc-lib/TARGET/VERSION', which is where the
  20651. + !      compiler driver program looks for them.  Here TARGET is the target
  20652. + !      machine type specified when you ran `configure', and VERSION is
  20653. + !      the version number of GNU CC.  This naming scheme permits various
  20654. +        versions and/or cross-compilers to coexist.
  20655. +   
  20656. + !      This also copies the driver program `xgcc' into
  20657. + !      `/usr/local/bin/gcc', so that it appears in typical execution
  20658. + !      search paths.
  20659. +   
  20660. +        On some systems, this command causes recompilation of some files.
  20661. +        This is usually due to bugs in `make'.  You should either ignore
  20662. + --- 746,759 ----
  20663. +   
  20664. +        This copies the files `cc1', `cpp' and `libgcc.a' to files `cc1',
  20665. +        `cpp' and `libgcc.a' in the directory
  20666. + !      `/gnu/lib/gcc-lib/TARGET/VERSION', which is where the compiler
  20667. + !      driver program looks for them.  Here TARGET is the target machine
  20668. + !      type specified when you ran `configure', and VERSION is the
  20669. + !      version number of GNU CC.  This naming scheme permits various
  20670. +        versions and/or cross-compilers to coexist.
  20671. +   
  20672. + !      This also copies the driver program `xgcc' into `/gnu/bin/gcc', so
  20673. + !      that it appears in typical execution search paths.
  20674. +   
  20675. +        On some systems, this command causes recompilation of some files.
  20676. +        This is usually due to bugs in `make'.  You should either ignore
  20677. + ***************
  20678. + *** 919,926 ****
  20679. +   ----------------------------------------
  20680. +   
  20681. +      If you have a cross-assembler and cross-linker available, you should
  20682. + ! install them now.  Put them in the directory `/usr/local/TARGET/bin'.
  20683. + ! Here is a table of the tools you should put in this directory:
  20684. +   
  20685. +   `as'
  20686. +        This should be the cross-assembler.
  20687. + --- 918,925 ----
  20688. +   ----------------------------------------
  20689. +   
  20690. +      If you have a cross-assembler and cross-linker available, you should
  20691. + ! install them now.  Put them in the directory `/gnu/TARGET/bin'.  Here
  20692. + ! is a table of the tools you should put in this directory:
  20693. +   
  20694. +   `as'
  20695. +        This should be the cross-assembler.
  20696. + ***************
  20697. + *** 949,961 ****
  20698. +   
  20699. +      If you want to install libraries to use with the cross-compiler,
  20700. +   such as a standard C library, put them in the directory
  20701. + ! `/usr/local/TARGET/lib'; installation of GNU CC copies all all the
  20702. + ! files in that subdirectory into the proper place for GNU CC to find
  20703. + ! them and link with them.  Here's an example of copying some libraries
  20704. + ! from a target machine:
  20705. +   
  20706. +        ftp TARGET-MACHINE
  20707. + !      lcd /usr/local/TARGET/lib
  20708. +        cd /lib
  20709. +        get libc.a
  20710. +        cd /usr/lib
  20711. + --- 948,960 ----
  20712. +   
  20713. +      If you want to install libraries to use with the cross-compiler,
  20714. +   such as a standard C library, put them in the directory
  20715. + ! `/gnu/TARGET/lib'; installation of GNU CC copies all all the files in
  20716. + ! that subdirectory into the proper place for GNU CC to find them and
  20717. + ! link with them.  Here's an example of copying some libraries from a
  20718. + ! target machine:
  20719. +   
  20720. +        ftp TARGET-MACHINE
  20721. + !      lcd /gnu/TARGET/lib
  20722. +        cd /lib
  20723. +        get libc.a
  20724. +        cd /usr/lib
  20725. + ***************
  20726. + *** 968,981 ****
  20727. +   
  20728. +      Many targets require "start files" such as `crt0.o' and `crtn.o'
  20729. +   which are linked into each executable; these too should be placed in
  20730. + ! `/usr/local/TARGET/lib'.  There may be several alternatives for
  20731. + ! `crt0.o', for use with profiling or other compilation options.  Check
  20732. + ! your target's definition of `STARTFILE_SPEC' to find out what start
  20733. + ! files it uses.  Here's an example of copying these files from a target
  20734. + ! machine:
  20735. +   
  20736. +        ftp TARGET-MACHINE
  20737. + !      lcd /usr/local/TARGET/lib
  20738. +        prompt
  20739. +        cd /lib
  20740. +        mget *crt*.o
  20741. + --- 967,979 ----
  20742. +   
  20743. +      Many targets require "start files" such as `crt0.o' and `crtn.o'
  20744. +   which are linked into each executable; these too should be placed in
  20745. + ! `/gnu/TARGET/lib'.  There may be several alternatives for `crt0.o', for
  20746. + ! use with profiling or other compilation options.  Check your target's
  20747. + ! definition of `STARTFILE_SPEC' to find out what start files it uses.
  20748. + ! Here's an example of copying these files from a target machine:
  20749. +   
  20750. +        ftp TARGET-MACHINE
  20751. + !      lcd /gnu/TARGET/lib
  20752. +        prompt
  20753. +        cd /lib
  20754. +        mget *crt*.o
  20755. + ***************
  20756. + *** 1094,1100 ****
  20757. +   cross-compiling.
  20758. +   
  20759. +      When you have found suitable header files, put them in
  20760. + ! `/usr/local/TARGET/include', before building the cross compiler.  Then
  20761. +   installation will run fixincludes properly and install the corrected
  20762. +   versions of the header files where the compiler will use them.
  20763. +   
  20764. + --- 1092,1098 ----
  20765. +   cross-compiling.
  20766. +   
  20767. +      When you have found suitable header files, put them in
  20768. + ! `/gnu/TARGET/include', before building the cross compiler.  Then
  20769. +   installation will run fixincludes properly and install the corrected
  20770. +   versions of the header files where the compiler will use them.
  20771. +   
  20772. + ***************
  20773. + *** 1111,1117 ****
  20774. +      Then, on the host machine, do this:
  20775. +   
  20776. +        ftp TARGET-MACHINE
  20777. + !      lcd /usr/local/TARGET/include
  20778. +        get tarfile
  20779. +        quit
  20780. +        tar xf tarfile
  20781. + --- 1109,1115 ----
  20782. +      Then, on the host machine, do this:
  20783. +   
  20784. +        ftp TARGET-MACHINE
  20785. + !      lcd /gnu/TARGET/include
  20786. +        get tarfile
  20787. +        quit
  20788. +        tar xf tarfile
  20789. + diff -rc --new-file gcc-2.5.8-fsf/gcc.info-6 gcc-2.5.8/gcc.info-6
  20790. + *** gcc-2.5.8-fsf/gcc.info-6    Sat Nov 27 19:38:48 1993
  20791. + --- gcc-2.5.8/gcc.info-6    Tue May  3 14:10:15 1994
  20792. + ***************
  20793. + *** 1,4 ****
  20794. + ! This is Info file gcc.info, produced by Makeinfo-1.54 from the input
  20795. +   file gcc.texi.
  20796. +   
  20797. +      This file documents the use and the internals of the GNU compiler.
  20798. + --- 1,4 ----
  20799. + ! This is Info file gcc.info, produced by Makeinfo-1.55 from the input
  20800. +   file gcc.texi.
  20801. +   
  20802. +      This file documents the use and the internals of the GNU compiler.
  20803. + ***************
  20804. + *** 86,92 ****
  20805. +   `jaguar.cs.utah.edu' `dist' subdirectory.  You would need to install
  20806. +   GAS in the file
  20807. +   
  20808. + !      /usr/local/lib/gcc-lib/CONFIGURATION/GCCVERSION/as
  20809. +   
  20810. +   where CONFIGURATION is the configuration name (perhaps `hpNNN-hpux')
  20811. +   and GCCVERSION is the GNU CC version number.  Do this *before* starting
  20812. + --- 86,92 ----
  20813. +   `jaguar.cs.utah.edu' `dist' subdirectory.  You would need to install
  20814. +   GAS in the file
  20815. +   
  20816. + !      /gnu/lib/gcc-lib/CONFIGURATION/GCCVERSION/as
  20817. +   
  20818. +   where CONFIGURATION is the configuration name (perhaps `hpNNN-hpux')
  20819. +   and GCCVERSION is the GNU CC version number.  Do this *before* starting
  20820. + ***************
  20821. + *** 631,638 ****
  20822. +   target independent header files in that directory.
  20823. +   
  20824. +      `LOCAL_INCLUDE_DIR' is used only for a native compiler.  It is
  20825. + ! normally `/usr/local/include'.  GNU CC searches this directory so that
  20826. + ! users can install header files in `/usr/local/include'.
  20827. +   
  20828. +      `CROSS_INCLUDE_DIR' is used only for a cross compiler.  GNU CC
  20829. +   doesn't install anything there.
  20830. + --- 631,638 ----
  20831. +   target independent header files in that directory.
  20832. +   
  20833. +      `LOCAL_INCLUDE_DIR' is used only for a native compiler.  It is
  20834. + ! normally `/gnu/include'.  GNU CC searches this directory so that users
  20835. + ! can install header files in `/gnu/include'.
  20836. +   
  20837. +      `CROSS_INCLUDE_DIR' is used only for a cross compiler.  GNU CC
  20838. +   doesn't install anything there.
  20839. + diff -rc --new-file gcc-2.5.8-fsf/gcc.info-7 gcc-2.5.8/gcc.info-7
  20840. + *** gcc-2.5.8-fsf/gcc.info-7    Sat Nov 27 19:38:49 1993
  20841. + --- gcc-2.5.8/gcc.info-7    Tue May  3 14:10:15 1994
  20842. + ***************
  20843. + *** 1,4 ****
  20844. + ! This is Info file gcc.info, produced by Makeinfo-1.54 from the input
  20845. +   file gcc.texi.
  20846. +   
  20847. +      This file documents the use and the internals of the GNU compiler.
  20848. + --- 1,4 ----
  20849. + ! This is Info file gcc.info, produced by Makeinfo-1.55 from the input
  20850. +   file gcc.texi.
  20851. +   
  20852. +      This file documents the use and the internals of the GNU compiler.
  20853. + diff -rc --new-file gcc-2.5.8-fsf/gcc.info-8 gcc-2.5.8/gcc.info-8
  20854. + *** gcc-2.5.8-fsf/gcc.info-8    Sat Nov 27 19:38:54 1993
  20855. + --- gcc-2.5.8/gcc.info-8    Tue May  3 14:10:16 1994
  20856. + ***************
  20857. + *** 1,4 ****
  20858. + ! This is Info file gcc.info, produced by Makeinfo-1.54 from the input
  20859. +   file gcc.texi.
  20860. +   
  20861. +      This file documents the use and the internals of the GNU compiler.
  20862. + --- 1,4 ----
  20863. + ! This is Info file gcc.info, produced by Makeinfo-1.55 from the input
  20864. +   file gcc.texi.
  20865. +   
  20866. +      This file documents the use and the internals of the GNU compiler.
  20867. + ***************
  20868. + *** 509,516 ****
  20869. +   
  20870. +      * In previous versions of GNU CC, the `gcc' driver program looked for
  20871. +        `as' and `ld' in various places; for example, in files beginning
  20872. + !      with `/usr/local/lib/gcc-'.  GNU CC version 2 looks for them in
  20873. + !      the directory `/usr/local/lib/gcc-lib/TARGET/VERSION'.
  20874. +   
  20875. +        Thus, to use a version of `as' or `ld' that is not the system
  20876. +        default, for example `gas' or GNU `ld', you must put them in that
  20877. + --- 509,516 ----
  20878. +   
  20879. +      * In previous versions of GNU CC, the `gcc' driver program looked for
  20880. +        `as' and `ld' in various places; for example, in files beginning
  20881. + !      with `/gnu/lib/gcc-'.  GNU CC version 2 looks for them in the
  20882. + !      directory `/gnu/lib/gcc-lib/TARGET/VERSION'.
  20883. +   
  20884. +        Thus, to use a version of `as' or `ld' that is not the system
  20885. +        default, for example `gas' or GNU `ld', you must put them in that
  20886. + ***************
  20887. + *** 680,687 ****
  20888. +   
  20889. +      * On System V, if you get an error like this,
  20890. +   
  20891. + !           /usr/local/lib/bison.simple: In function `yyparse':
  20892. + !           /usr/local/lib/bison.simple:625: virtual memory exhausted
  20893. +   
  20894. +        that too indicates a problem with disk space, ULIMIT, or `MAXUMEM'.
  20895. +   
  20896. + --- 680,687 ----
  20897. +   
  20898. +      * On System V, if you get an error like this,
  20899. +   
  20900. + !           /gnu/lib/bison.simple: In function `yyparse':
  20901. + !           /gnu/lib/bison.simple:625: virtual memory exhausted
  20902. +   
  20903. +        that too indicates a problem with disk space, ULIMIT, or `MAXUMEM'.
  20904. +   
  20905. + ***************
  20906. + *** 871,877 ****
  20907. +   
  20908. +        Instead, you should use these options (when compiling C programs):
  20909. +   
  20910. + !           -I/usr/local/lib/gcc-lib/TARGET/VERSION/include -I/usr/include
  20911. +   
  20912. +        For C++ programs, GNU CC also uses a special directory that
  20913. +        defines C++ interfaces to standard C subroutines.  This directory
  20914. + --- 871,877 ----
  20915. +   
  20916. +        Instead, you should use these options (when compiling C programs):
  20917. +   
  20918. + !           -I/gnu/lib/gcc-lib/TARGET/VERSION/include -I/usr/include
  20919. +   
  20920. +        For C++ programs, GNU CC also uses a special directory that
  20921. +        defines C++ interfaces to standard C subroutines.  This directory
  20922. + ***************
  20923. + *** 880,886 ****
  20924. +        C++ programs and specifying include directories explicitly, use
  20925. +        this option first, then the two options above:
  20926. +   
  20927. + !           -I/usr/local/lib/g++-include
  20928. +   
  20929. +      * On some SGI systems, when you use `-lgl_s' as an option, it gets
  20930. +        translated magically to `-lgl_s -lX11_s -lc_s'.  Naturally, this
  20931. + --- 880,886 ----
  20932. +        C++ programs and specifying include directories explicitly, use
  20933. +        this option first, then the two options above:
  20934. +   
  20935. + !           -I/gnu/lib/g++-include
  20936. +   
  20937. +      * On some SGI systems, when you use `-lgl_s' as an option, it gets
  20938. +        translated magically to `-lgl_s -lX11_s -lc_s'.  Naturally, this
  20939. + ***************
  20940. + *** 1098,1104 ****
  20941. +        with the ordinary C compiler.  If you do so, you must specify the
  20942. +        following options:
  20943. +   
  20944. + !           -L/usr/local/lib/gcc-lib/we32k-att-sysv/2.5 -lgcc -lc_s
  20945. +   
  20946. +        The first specifies where to find the library `libgcc.a' specified
  20947. +        with the `-lgcc' option.
  20948. + --- 1098,1104 ----
  20949. +        with the ordinary C compiler.  If you do so, you must specify the
  20950. +        following options:
  20951. +   
  20952. + !           -L/gnu/lib/gcc-lib/we32k-att-sysv/2.5 -lgcc -lc_s
  20953. +   
  20954. +        The first specifies where to find the library `libgcc.a' specified
  20955. +        with the `-lgcc' option.
  20956. + ***************
  20957. + *** 1167,1173 ****
  20958. +        If you have installed GNU malloc as a separate library package,
  20959. +        use this option when you relink GNU CC:
  20960. +   
  20961. + !           MALLOC=/usr/local/lib/libgmalloc.a
  20962. +   
  20963. +        Alternatively, if you have compiled `gmalloc.c' from Emacs 19, copy
  20964. +        the object file to `gmalloc.o' and use this option when you relink
  20965. + --- 1167,1173 ----
  20966. +        If you have installed GNU malloc as a separate library package,
  20967. +        use this option when you relink GNU CC:
  20968. +   
  20969. + !           MALLOC=/gnu/lib/libgmalloc.a
  20970. +   
  20971. +        Alternatively, if you have compiled `gmalloc.c' from Emacs 19, copy
  20972. +        the object file to `gmalloc.o' and use this option when you relink
  20973. + diff -rc --new-file gcc-2.5.8-fsf/gcc.info-9 gcc-2.5.8/gcc.info-9
  20974. + *** gcc-2.5.8-fsf/gcc.info-9    Sat Nov 27 19:38:54 1993
  20975. + --- gcc-2.5.8/gcc.info-9    Tue May  3 14:10:17 1994
  20976. + ***************
  20977. + *** 1,4 ****
  20978. + ! This is Info file gcc.info, produced by Makeinfo-1.54 from the input
  20979. +   file gcc.texi.
  20980. +   
  20981. +      This file documents the use and the internals of the GNU compiler.
  20982. + --- 1,4 ----
  20983. + ! This is Info file gcc.info, produced by Makeinfo-1.55 from the input
  20984. +   file gcc.texi.
  20985. +   
  20986. +      This file documents the use and the internals of the GNU compiler.
  20987. + diff -rc --new-file gcc-2.5.8-fsf/gcc.texi gcc-2.5.8/gcc.texi
  20988. + *** gcc-2.5.8-fsf/gcc.texi    Sat Nov 27 19:13:22 1993
  20989. + --- gcc-2.5.8/gcc.texi    Tue Feb 22 11:27:42 1994
  20990. + ***************
  20991. + *** 1075,1083 ****
  20992. +   @item
  20993. +   In previous versions of GNU CC, the @code{gcc} driver program looked for
  20994. +   @code{as} and @code{ld} in various places; for example, in files
  20995. + ! beginning with @file{/usr/local/lib/gcc-}.  GNU CC version 2 looks for
  20996. +   them in the directory
  20997. + ! @file{/usr/local/lib/gcc-lib/@var{target}/@var{version}}.
  20998. +   
  20999. +   Thus, to use a version of @code{as} or @code{ld} that is not the system
  21000. +   default, for example @code{gas} or GNU @code{ld}, you must put them in
  21001. + --- 1075,1083 ----
  21002. +   @item
  21003. +   In previous versions of GNU CC, the @code{gcc} driver program looked for
  21004. +   @code{as} and @code{ld} in various places; for example, in files
  21005. + ! beginning with @file{/gnu/lib/gcc-}.  GNU CC version 2 looks for
  21006. +   them in the directory
  21007. + ! @file{/gnu/lib/gcc-lib/@var{target}/@var{version}}.
  21008. +   
  21009. +   Thus, to use a version of @code{as} or @code{ld} that is not the system
  21010. +   default, for example @code{gas} or GNU @code{ld}, you must put them in
  21011. + ***************
  21012. + *** 1276,1283 ****
  21013. +   On System V, if you get an error like this,
  21014. +   
  21015. +   @example
  21016. + ! /usr/local/lib/bison.simple: In function `yyparse':
  21017. + ! /usr/local/lib/bison.simple:625: virtual memory exhausted
  21018. +   @end example
  21019. +   
  21020. +   @noindent
  21021. + --- 1276,1283 ----
  21022. +   On System V, if you get an error like this,
  21023. +   
  21024. +   @example
  21025. + ! /gnu/lib/bison.simple: In function `yyparse':
  21026. + ! /gnu/lib/bison.simple:625: virtual memory exhausted
  21027. +   @end example
  21028. +   
  21029. +   @noindent
  21030. + ***************
  21031. + *** 1507,1513 ****
  21032. +   Instead, you should use these options (when compiling C programs):
  21033. +   
  21034. +   @smallexample
  21035. + ! -I/usr/local/lib/gcc-lib/@var{target}/@var{version}/include -I/usr/include
  21036. +   @end smallexample
  21037. +   
  21038. +   For C++ programs, GNU CC also uses a special directory that defines C++
  21039. + --- 1507,1513 ----
  21040. +   Instead, you should use these options (when compiling C programs):
  21041. +   
  21042. +   @smallexample
  21043. + ! -I/gnu/lib/gcc-lib/@var{target}/@var{version}/include -I/usr/include
  21044. +   @end smallexample
  21045. +   
  21046. +   For C++ programs, GNU CC also uses a special directory that defines C++
  21047. + ***************
  21048. + *** 1518,1524 ****
  21049. +   options above:
  21050. +   
  21051. +   @example
  21052. + ! -I/usr/local/lib/g++-include
  21053. +   @end example
  21054. +   
  21055. +   @ignore
  21056. + --- 1518,1524 ----
  21057. +   options above:
  21058. +   
  21059. +   @example
  21060. + ! -I/gnu/lib/g++-include
  21061. +   @end example
  21062. +   
  21063. +   @ignore
  21064. + ***************
  21065. + *** 1789,1795 ****
  21066. +   options:
  21067. +   
  21068. +   @smallexample
  21069. + ! -L/usr/local/lib/gcc-lib/we32k-att-sysv/2.5 -lgcc -lc_s
  21070. +   @end smallexample
  21071. +   
  21072. +   The first specifies where to find the library @file{libgcc.a}
  21073. + --- 1789,1795 ----
  21074. +   options:
  21075. +   
  21076. +   @smallexample
  21077. + ! -L/gnu/lib/gcc-lib/we32k-att-sysv/2.5 -lgcc -lc_s
  21078. +   @end smallexample
  21079. +   
  21080. +   The first specifies where to find the library @file{libgcc.a}
  21081. + ***************
  21082. + *** 1869,1875 ****
  21083. +   option when you relink GNU CC:
  21084. +   
  21085. +   @example
  21086. + ! MALLOC=/usr/local/lib/libgmalloc.a 
  21087. +   @end example
  21088. +   
  21089. +   Alternatively, if you have compiled @file{gmalloc.c} from Emacs 19, copy
  21090. + --- 1869,1875 ----
  21091. +   option when you relink GNU CC:
  21092. +   
  21093. +   @example
  21094. + ! MALLOC=/gnu/lib/libgmalloc.a 
  21095. +   @end example
  21096. +   
  21097. +   Alternatively, if you have compiled @file{gmalloc.c} from Emacs 19, copy
  21098. + diff -rc --new-file gcc-2.5.8-fsf/genconfig.c gcc-2.5.8/genconfig.c
  21099. + *** gcc-2.5.8-fsf/genconfig.c    Tue Oct 13 04:11:48 1992
  21100. + --- gcc-2.5.8/genconfig.c    Tue Feb 22 11:23:23 1994
  21101. + ***************
  21102. + *** 303,310 ****
  21103. + --- 303,318 ----
  21104. +     printf ("/* Generated automatically by the program `genconfig'\n\
  21105. +   from the machine description file `md'.  */\n\n");
  21106. +   
  21107. + + #ifdef amigados
  21108. + +   /* this constant probably better be 14 in general, or a cross compiling
  21109. + +      host might choke on some amigados header files... */
  21110. + + 
  21111. + +   /* Allow at least 14 operands for the sake of asm constructs.  */
  21112. + +   max_recog_operands = 14;
  21113. + + #else
  21114. +     /* Allow at least 10 operands for the sake of asm constructs.  */
  21115. +     max_recog_operands = 9;  /* We will add 1 later.  */
  21116. + + #endif
  21117. +     max_dup_operands = 1;
  21118. +   
  21119. +     /* Read the machine description.  */
  21120. + diff -rc --new-file gcc-2.5.8-fsf/gstdarg.h gcc-2.5.8/gstdarg.h
  21121. + *** gcc-2.5.8-fsf/gstdarg.h    Sat Nov 13 01:54:16 1993
  21122. + --- gcc-2.5.8/gstdarg.h    Tue Feb 22 11:23:26 1994
  21123. + ***************
  21124. + *** 157,160 ****
  21125. + --- 157,166 ----
  21126. +   
  21127. +   #endif /* __GNUC__ */
  21128. +   #endif /* not _ANSI_STDARG_H_ */
  21129. + + #ifdef amigados
  21130. + + # ifndef _VA_LIST
  21131. + + #  define _VA_LIST
  21132. + +    typedef __gnuc_va_list va_list;
  21133. + + # endif
  21134. + + #endif /* amigados */
  21135. +   #endif /* not _STDARG_H */
  21136. + diff -rc --new-file gcc-2.5.8-fsf/gstddef.h gcc-2.5.8/gstddef.h
  21137. + *** gcc-2.5.8-fsf/gstddef.h    Fri Dec  3 11:47:17 1993
  21138. + --- gcc-2.5.8/gstddef.h    Tue Feb 22 11:23:31 1994
  21139. + ***************
  21140. + *** 3,8 ****
  21141. + --- 3,48 ----
  21142. +   #ifndef _ANSI_STDDEF_H
  21143. +   #ifndef __STDDEF_H__
  21144. +   
  21145. + + #ifdef amigados
  21146. + + 
  21147. + + /* GNU libc has special support in this file, 4.3bsd-net2 libc deserves that
  21148. + +    just as well. The system headers are ANSI compliant, the used compiler IS
  21149. + +    gcc, so it's really ok to use the system header, no reason to hassle
  21150. + +    with a jungle of ifdefs. Besides, amigados is only defined if compiling
  21151. + +    with host=amigados, it doesn't apply if compiling with target=amigados
  21152. + +    on a different host with possibly different system headers. Same thing
  21153. + +    would apply to gstdarg.h and gvarargs.h, but those headers are more
  21154. + +    easily fixable than this one and I'm sick of writing the same comment
  21155. + +    there as well. MW
  21156. + + 
  21157. + +    Include the contents of <stddef.h> inline rather than with a #include,
  21158. + +    to avoid infinite include recursion when this file is installed in
  21159. + +    gcc's include directory as stddef.h.  (fnf)  */
  21160. + + 
  21161. + + #define _STDDEF_H_
  21162. + + 
  21163. + + #include <machine/ansi.h>
  21164. + + 
  21165. + + typedef    _PTRDIFF_T_    ptrdiff_t;
  21166. + + 
  21167. + + #ifdef    _SIZE_T_
  21168. + + typedef    _SIZE_T_    size_t;
  21169. + + #undef    _SIZE_T_
  21170. + + #endif
  21171. + + 
  21172. + + #ifdef    _WCHAR_T_
  21173. + + typedef    _WCHAR_T_    wchar_t;
  21174. + + #undef    _WCHAR_T_
  21175. + + #endif
  21176. + + 
  21177. + + #ifndef    NULL
  21178. + + #define    NULL    0
  21179. + + #endif
  21180. + + 
  21181. + + #define    offsetof(type, member)    ((size_t)(&((type *)0)->member))
  21182. + + 
  21183. + + #else /* not amigados */
  21184. + + 
  21185. +   /* Any one of these symbols __need_* means that GNU libc
  21186. +      wants us just to define one data type.  So don't define
  21187. +      the symbols that indicate this file's entire job has been done.  */
  21188. + ***************
  21189. + *** 172,177 ****
  21190. + --- 212,219 ----
  21191. +   #ifndef __WCHAR_TYPE__
  21192. +   #define __WCHAR_TYPE__ int
  21193. +   #endif
  21194. + + 
  21195. + + #endif /* not amigados */
  21196. +   #ifdef __GNUG__
  21197. +   /* In C++, wchar_t is a distinct basic type,
  21198. +      and we can expect __wchar_t to be defined by cc1plus.  */
  21199. + diff -rc --new-file gcc-2.5.8-fsf/gvarargs.h gcc-2.5.8/gvarargs.h
  21200. + *** gcc-2.5.8-fsf/gvarargs.h    Sat Nov 13 08:33:41 1993
  21201. + --- gcc-2.5.8/gvarargs.h    Tue Feb 22 11:23:35 1994
  21202. + ***************
  21203. + *** 156,162 ****
  21204. +   /* The macro _VA_LIST_T_H is used in the Bull dpx2  */
  21205. +   #ifndef _VA_LIST_T_H
  21206. +   #define _VA_LIST_T_H
  21207. + ! #if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__))
  21208. +   #define _VA_LIST_
  21209. +   #endif
  21210. +   #define _VA_LIST
  21211. + --- 156,162 ----
  21212. +   /* The macro _VA_LIST_T_H is used in the Bull dpx2  */
  21213. +   #ifndef _VA_LIST_T_H
  21214. +   #define _VA_LIST_T_H
  21215. + ! #if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__amigados__))
  21216. +   #define _VA_LIST_
  21217. +   #endif
  21218. +   #define _VA_LIST
  21219. + ***************
  21220. + *** 172,176 ****
  21221. + --- 172,183 ----
  21222. +   #ifdef _BSD_VA_LIST
  21223. +   #undef _BSD_VA_LIST
  21224. +   #endif
  21225. + + 
  21226. + + #ifdef amigados
  21227. + + # ifndef _VA_LIST
  21228. + + #  define _VA_LIST
  21229. + +    typedef __gnuc_va_list va_list;
  21230. + + # endif
  21231. + + #endif /* amigados */
  21232. +   
  21233. +   #endif /* __GNUC__ */
  21234. + diff -rc --new-file gcc-2.5.8-fsf/install.texi gcc-2.5.8/install.texi
  21235. + *** gcc-2.5.8-fsf/install.texi    Wed Nov 24 20:09:49 1993
  21236. + --- gcc-2.5.8/install.texi    Tue Feb 22 11:27:48 1994
  21237. + ***************
  21238. + *** 599,618 ****
  21239. +   @end itemize
  21240. +   
  21241. +   @item
  21242. + ! The standard directory for installing GNU CC is @file{/usr/local/lib}.
  21243. +   If you want to install its files somewhere else, specify
  21244. +   @samp{--prefix=@var{dir}} when you run @file{configure}.  Here @var{dir}
  21245. + ! is a directory name to use instead of @file{/usr/local} for all purposes
  21246. + ! with one exception: the directory @file{/usr/local/include} is searched
  21247. +   for header files no matter where you install the compiler.
  21248. +   
  21249. +   @item
  21250. +   Specify @samp{--local-prefix=@var{dir}} if you want the compiler to
  21251. +   search directory @file{@var{dir}/include} for header files
  21252. + ! @emph{instead} of @file{/usr/local/include}.  (This is for systems that
  21253. +   have different conventions for where to put site-specific things.)
  21254. +   
  21255. + ! Unless you have a convention other than @file{/usr/local} for
  21256. +   site-specific files, it is a bad idea to specify @samp{--local-prefix}.
  21257. +   
  21258. +   @cindex Bison parser generator
  21259. + --- 599,618 ----
  21260. +   @end itemize
  21261. +   
  21262. +   @item
  21263. + ! The standard directory for installing GNU CC is @file{/gnu/lib}.
  21264. +   If you want to install its files somewhere else, specify
  21265. +   @samp{--prefix=@var{dir}} when you run @file{configure}.  Here @var{dir}
  21266. + ! is a directory name to use instead of @file{/gnu} for all purposes
  21267. + ! with one exception: the directory @file{/gnu/include} is searched
  21268. +   for header files no matter where you install the compiler.
  21269. +   
  21270. +   @item
  21271. +   Specify @samp{--local-prefix=@var{dir}} if you want the compiler to
  21272. +   search directory @file{@var{dir}/include} for header files
  21273. + ! @emph{instead} of @file{/gnu/include}.  (This is for systems that
  21274. +   have different conventions for where to put site-specific things.)
  21275. +   
  21276. + ! Unless you have a convention other than @file{/gnu} for
  21277. +   site-specific files, it is a bad idea to specify @samp{--local-prefix}.
  21278. +   
  21279. +   @cindex Bison parser generator
  21280. + ***************
  21281. + *** 673,679 ****
  21282. +   If you are building with a previous GNU C compiler, do not
  21283. +   use @samp{CC=gcc} on the make command or by editing the Makefile.
  21284. +   Instead, use a full pathname to specify the compiler, such as
  21285. + ! @samp{CC=/usr/local/bin/gcc}.  This is because make might execute
  21286. +   the @file{gcc} in the current directory before all of the
  21287. +   compiler components have been built.
  21288. +   
  21289. + --- 673,679 ----
  21290. +   If you are building with a previous GNU C compiler, do not
  21291. +   use @samp{CC=gcc} on the make command or by editing the Makefile.
  21292. +   Instead, use a full pathname to specify the compiler, such as
  21293. + ! @samp{CC=/gnu/bin/gcc}.  This is because make might execute
  21294. +   the @file{gcc} in the current directory before all of the
  21295. +   compiler components have been built.
  21296. +   
  21297. + ***************
  21298. + *** 827,840 ****
  21299. +   @noindent
  21300. +   This copies the files @file{cc1}, @file{cpp} and @file{libgcc.a} to
  21301. +   files @file{cc1}, @file{cpp} and @file{libgcc.a} in the directory
  21302. + ! @file{/usr/local/lib/gcc-lib/@var{target}/@var{version}}, which is where
  21303. +   the compiler driver program looks for them.  Here @var{target} is the
  21304. +   target machine type specified when you ran @file{configure}, and
  21305. +   @var{version} is the version number of GNU CC.  This naming scheme
  21306. +   permits various versions and/or cross-compilers to coexist.
  21307. +   
  21308. +   This also copies the driver program @file{xgcc} into
  21309. + ! @file{/usr/local/bin/gcc}, so that it appears in typical execution
  21310. +   search paths.
  21311. +   
  21312. +   On some systems, this command causes recompilation of some files.  This
  21313. + --- 827,840 ----
  21314. +   @noindent
  21315. +   This copies the files @file{cc1}, @file{cpp} and @file{libgcc.a} to
  21316. +   files @file{cc1}, @file{cpp} and @file{libgcc.a} in the directory
  21317. + ! @file{/gnu/lib/gcc-lib/@var{target}/@var{version}}, which is where
  21318. +   the compiler driver program looks for them.  Here @var{target} is the
  21319. +   target machine type specified when you ran @file{configure}, and
  21320. +   @var{version} is the version number of GNU CC.  This naming scheme
  21321. +   permits various versions and/or cross-compilers to coexist.
  21322. +   
  21323. +   This also copies the driver program @file{xgcc} into
  21324. + ! @file{/gnu/bin/gcc}, so that it appears in typical execution
  21325. +   search paths.
  21326. +   
  21327. +   On some systems, this command causes recompilation of some files.  This
  21328. + ***************
  21329. + *** 1021,1027 ****
  21330. +   
  21331. +   If you have a cross-assembler and cross-linker available, you should
  21332. +   install them now.  Put them in the directory
  21333. + ! @file{/usr/local/@var{target}/bin}.  Here is a table of the tools
  21334. +   you should put in this directory:
  21335. +   
  21336. +   @table @file
  21337. + --- 1021,1027 ----
  21338. +   
  21339. +   If you have a cross-assembler and cross-linker available, you should
  21340. +   install them now.  Put them in the directory
  21341. + ! @file{/gnu/@var{target}/bin}.  Here is a table of the tools
  21342. +   you should put in this directory:
  21343. +   
  21344. +   @table @file
  21345. + ***************
  21346. + *** 1052,1065 ****
  21347. +   
  21348. +   If you want to install libraries to use with the cross-compiler, such as
  21349. +   a standard C library, put them in the directory
  21350. + ! @file{/usr/local/@var{target}/lib}; installation of GNU CC copies all
  21351. +   all the files in that subdirectory into the proper place for GNU CC to
  21352. +   find them and link with them.  Here's an example of copying some
  21353. +   libraries from a target machine:
  21354. +   
  21355. +   @example
  21356. +   ftp @var{target-machine}
  21357. + ! lcd /usr/local/@var{target}/lib
  21358. +   cd /lib
  21359. +   get libc.a
  21360. +   cd /usr/lib
  21361. + --- 1052,1065 ----
  21362. +   
  21363. +   If you want to install libraries to use with the cross-compiler, such as
  21364. +   a standard C library, put them in the directory
  21365. + ! @file{/gnu/@var{target}/lib}; installation of GNU CC copies all
  21366. +   all the files in that subdirectory into the proper place for GNU CC to
  21367. +   find them and link with them.  Here's an example of copying some
  21368. +   libraries from a target machine:
  21369. +   
  21370. +   @example
  21371. +   ftp @var{target-machine}
  21372. + ! lcd /gnu/@var{target}/lib
  21373. +   cd /lib
  21374. +   get libc.a
  21375. +   cd /usr/lib
  21376. + ***************
  21377. + *** 1075,1081 ****
  21378. +   @cindex start files
  21379. +   Many targets require ``start files'' such as @file{crt0.o} and
  21380. +   @file{crtn.o} which are linked into each executable; these too should be
  21381. + ! placed in @file{/usr/local/@var{target}/lib}.  There may be several
  21382. +   alternatives for @file{crt0.o}, for use with profiling or other
  21383. +   compilation options.  Check your target's definition of
  21384. +   @code{STARTFILE_SPEC} to find out what start files it uses.
  21385. + --- 1075,1081 ----
  21386. +   @cindex start files
  21387. +   Many targets require ``start files'' such as @file{crt0.o} and
  21388. +   @file{crtn.o} which are linked into each executable; these too should be
  21389. + ! placed in @file{/gnu/@var{target}/lib}.  There may be several
  21390. +   alternatives for @file{crt0.o}, for use with profiling or other
  21391. +   compilation options.  Check your target's definition of
  21392. +   @code{STARTFILE_SPEC} to find out what start files it uses.
  21393. + ***************
  21394. + *** 1083,1089 ****
  21395. +   
  21396. +   @example
  21397. +   ftp @var{target-machine}
  21398. + ! lcd /usr/local/@var{target}/lib
  21399. +   prompt
  21400. +   cd /lib
  21401. +   mget *crt*.o
  21402. + --- 1083,1089 ----
  21403. +   
  21404. +   @example
  21405. +   ftp @var{target-machine}
  21406. + ! lcd /gnu/@var{target}/lib
  21407. +   prompt
  21408. +   cd /lib
  21409. +   mget *crt*.o
  21410. + ***************
  21411. + *** 1201,1207 ****
  21412. +   cross-compiling.
  21413. +   
  21414. +   When you have found suitable header files, put them in
  21415. + ! @file{/usr/local/@var{target}/include}, before building the cross
  21416. +   compiler.  Then installation will run fixincludes properly and install
  21417. +   the corrected versions of the header files where the compiler will use
  21418. +   them.
  21419. + --- 1201,1207 ----
  21420. +   cross-compiling.
  21421. +   
  21422. +   When you have found suitable header files, put them in
  21423. + ! @file{/gnu/@var{target}/include}, before building the cross
  21424. +   compiler.  Then installation will run fixincludes properly and install
  21425. +   the corrected versions of the header files where the compiler will use
  21426. +   them.
  21427. + ***************
  21428. + *** 1222,1228 ****
  21429. +   
  21430. +   @example
  21431. +   ftp @var{target-machine}
  21432. + ! lcd /usr/local/@var{target}/include
  21433. +   get tarfile
  21434. +   quit
  21435. +   tar xf tarfile
  21436. + --- 1222,1228 ----
  21437. +   
  21438. +   @example
  21439. +   ftp @var{target-machine}
  21440. + ! lcd /gnu/@var{target}/include
  21441. +   get tarfile
  21442. +   quit
  21443. +   tar xf tarfile
  21444. + ***************
  21445. + *** 1283,1289 ****
  21446. +   @samp{dist} subdirectory.  You would need to install GAS in the file
  21447. +   
  21448. +   @example
  21449. + ! /usr/local/lib/gcc-lib/@var{configuration}/@var{gccversion}/as
  21450. +   @end example
  21451. +   
  21452. +   @noindent
  21453. + --- 1283,1289 ----
  21454. +   @samp{dist} subdirectory.  You would need to install GAS in the file
  21455. +   
  21456. +   @example
  21457. + ! /gnu/lib/gcc-lib/@var{configuration}/@var{gccversion}/as
  21458. +   @end example
  21459. +   
  21460. +   @noindent
  21461. + ***************
  21462. + *** 1915,1922 ****
  21463. +   installs only target independent header files in that directory.
  21464. +   
  21465. +   @code{LOCAL_INCLUDE_DIR} is used only for a native compiler.  It is
  21466. + ! normally @file{/usr/local/include}.  GNU CC searches this directory so
  21467. + ! that users can install header files in @file{/usr/local/include}.
  21468. +   
  21469. +   @code{CROSS_INCLUDE_DIR} is used only for a cross compiler.  GNU CC
  21470. +   doesn't install anything there.
  21471. + --- 1915,1922 ----
  21472. +   installs only target independent header files in that directory.
  21473. +   
  21474. +   @code{LOCAL_INCLUDE_DIR} is used only for a native compiler.  It is
  21475. + ! normally @file{/gnu/include}.  GNU CC searches this directory so
  21476. + ! that users can install header files in @file{/gnu/include}.
  21477. +   
  21478. +   @code{CROSS_INCLUDE_DIR} is used only for a cross compiler.  GNU CC
  21479. +   doesn't install anything there.
  21480. + diff -rc --new-file gcc-2.5.8-fsf/invoke.texi gcc-2.5.8/invoke.texi
  21481. + *** gcc-2.5.8-fsf/invoke.texi    Thu Nov 11 13:32:01 1993
  21482. + --- gcc-2.5.8/invoke.texi    Tue Feb 22 11:27:55 1994
  21483. + ***************
  21484. + *** 2079,2085 ****
  21485. +   For each subprogram to be run, the compiler driver first tries the
  21486. +   @samp{-B} prefix, if any.  If that name is not found, or if @samp{-B}
  21487. +   was not specified, the driver tries two standard prefixes, which are
  21488. + ! @file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc-lib/}.  If neither of
  21489. +   those results in a file name that is found, the unmodified program
  21490. +   name is searched for using the directories specified in your
  21491. +   @samp{PATH} environment variable.
  21492. + --- 2079,2085 ----
  21493. +   For each subprogram to be run, the compiler driver first tries the
  21494. +   @samp{-B} prefix, if any.  If that name is not found, or if @samp{-B}
  21495. +   was not specified, the driver tries two standard prefixes, which are
  21496. + ! @file{/usr/lib/gcc/} and @file{/gnu/lib/gcc-lib/}.  If neither of
  21497. +   those results in a file name that is found, the unmodified program
  21498. +   name is searched for using the directories specified in your
  21499. +   @samp{PATH} environment variable.
  21500. + ***************
  21501. + *** 2145,2155 ****
  21502. +   The @samp{-b} and @samp{-V} options actually work by controlling part of
  21503. +   the file name used for the executable files and libraries used for
  21504. +   compilation.  A given version of GNU CC, for a given target machine, is
  21505. + ! normally kept in the directory @file{/usr/local/lib/gcc-lib/@var{machine}/@var{version}}.@refill
  21506. +   
  21507. +   Thus, sites can customize the effect of @samp{-b} or @samp{-V} either by
  21508. +   changing the names of these directories or adding alternate names (or
  21509. + ! symbolic links).  If in directory @file{/usr/local/lib/gcc-lib/} the
  21510. +   file @file{80386} is a link to the file @file{i386v}, then @samp{-b
  21511. +   80386} becomes an alias for @samp{-b i386v}.
  21512. +   
  21513. + --- 2145,2155 ----
  21514. +   The @samp{-b} and @samp{-V} options actually work by controlling part of
  21515. +   the file name used for the executable files and libraries used for
  21516. +   compilation.  A given version of GNU CC, for a given target machine, is
  21517. + ! normally kept in the directory @file{/gnu/lib/gcc-lib/@var{machine}/@var{version}}.@refill
  21518. +   
  21519. +   Thus, sites can customize the effect of @samp{-b} or @samp{-V} either by
  21520. +   changing the names of these directories or adding alternate names (or
  21521. + ! symbolic links).  If in directory @file{/gnu/lib/gcc-lib/} the
  21522. +   file @file{80386} is a link to the file @file{i386v}, then @samp{-b
  21523. +   80386} becomes an alias for @samp{-b i386v}.
  21524. +   
  21525. + ***************
  21526. + *** 3526,3536 ****
  21527. +   
  21528. +   In addition, the prefix is used in an unusual way in finding the
  21529. +   directories to search for header files.  For each of the standard
  21530. + ! directories whose name normally begins with @samp{/usr/local/lib/gcc-lib}
  21531. +   (more precisely, with the value of @code{GCC_INCLUDE_DIR}), GNU CC tries
  21532. +   replacing that beginning with the specified prefix to produce an
  21533. +   alternate directory name.  Thus, with @samp{-Bfoo/}, GNU CC will search
  21534. + ! @file{foo/bar} where it would normally search @file{/usr/local/lib/bar}.
  21535. +   These alternate directories are searched first; the standard directories
  21536. +   come next.
  21537. +   
  21538. + --- 3526,3536 ----
  21539. +   
  21540. +   In addition, the prefix is used in an unusual way in finding the
  21541. +   directories to search for header files.  For each of the standard
  21542. + ! directories whose name normally begins with @samp{/gnu/lib/gcc-lib}
  21543. +   (more precisely, with the value of @code{GCC_INCLUDE_DIR}), GNU CC tries
  21544. +   replacing that beginning with the specified prefix to produce an
  21545. +   alternate directory name.  Thus, with @samp{-Bfoo/}, GNU CC will search
  21546. + ! @file{foo/bar} where it would normally search @file{/gnu/lib/bar}.
  21547. +   These alternate directories are searched first; the standard directories
  21548. +   come next.
  21549. +   
  21550. + ***************
  21551. + *** 3641,3647 ****
  21552. +   @table @code
  21553. +   @item -B @var{directory}
  21554. +   Look for the file @file{SYSCALLS.c.X} in @var{directory}, instead of the
  21555. + ! usual directory (normally @file{/usr/local/lib}).  This file contains
  21556. +   prototype information about standard system functions.  This option
  21557. +   applies only to @code{protoize}.
  21558. +   
  21559. + --- 3641,3647 ----
  21560. +   @table @code
  21561. +   @item -B @var{directory}
  21562. +   Look for the file @file{SYSCALLS.c.X} in @var{directory}, instead of the
  21563. + ! usual directory (normally @file{/gnu/lib}).  This file contains
  21564. +   prototype information about standard system functions.  This option
  21565. +   applies only to @code{protoize}.
  21566. +   
  21567. + diff -rc --new-file gcc-2.5.8-fsf/machmode.h gcc-2.5.8/machmode.h
  21568. + *** gcc-2.5.8-fsf/machmode.h    Mon Jun 28 01:18:48 1993
  21569. + --- gcc-2.5.8/machmode.h    Tue Feb 22 11:23:39 1994
  21570. + ***************
  21571. + *** 92,98 ****
  21572. +   
  21573. +   /* Get the name of mode MODE as a string.  */
  21574. +   
  21575. + ! extern char *mode_name[];
  21576. +   #define GET_MODE_NAME(MODE)        (mode_name[(int)(MODE)])
  21577. +   
  21578. +   enum mode_class { MODE_RANDOM, MODE_INT, MODE_FLOAT, MODE_PARTIAL_INT, MODE_CC,
  21579. + --- 92,98 ----
  21580. +   
  21581. +   /* Get the name of mode MODE as a string.  */
  21582. +   
  21583. + ! extern char * const mode_name[];
  21584. +   #define GET_MODE_NAME(MODE)        (mode_name[(int)(MODE)])
  21585. +   
  21586. +   enum mode_class { MODE_RANDOM, MODE_INT, MODE_FLOAT, MODE_PARTIAL_INT, MODE_CC,
  21587. + ***************
  21588. + *** 101,107 ****
  21589. +   /* Get the general kind of object that mode MODE represents
  21590. +      (integer, floating, complex, etc.)  */
  21591. +   
  21592. + ! extern enum mode_class mode_class[];
  21593. +   #define GET_MODE_CLASS(MODE)        (mode_class[(int)(MODE)])
  21594. +   
  21595. +   /* Nonzero if MODE is an integral mode.  */
  21596. + --- 101,107 ----
  21597. +   /* Get the general kind of object that mode MODE represents
  21598. +      (integer, floating, complex, etc.)  */
  21599. +   
  21600. + ! extern const enum mode_class mode_class[];
  21601. +   #define GET_MODE_CLASS(MODE)        (mode_class[(int)(MODE)])
  21602. +   
  21603. +   /* Nonzero if MODE is an integral mode.  */
  21604. + ***************
  21605. + *** 117,128 ****
  21606. +   
  21607. +   /* Get the size in bytes of an object of mode MODE.  */
  21608. +   
  21609. + ! extern int mode_size[];
  21610. +   #define GET_MODE_SIZE(MODE)        (mode_size[(int)(MODE)])
  21611. +   
  21612. +   /* Get the size in bytes of the basic parts of an object of mode MODE.  */
  21613. +   
  21614. + ! extern int mode_unit_size[];
  21615. +   #define GET_MODE_UNIT_SIZE(MODE)    (mode_unit_size[(int)(MODE)])
  21616. +   
  21617. +   /* Get the number of units in the object.  */
  21618. + --- 117,128 ----
  21619. +   
  21620. +   /* Get the size in bytes of an object of mode MODE.  */
  21621. +   
  21622. + ! extern const int mode_size[];
  21623. +   #define GET_MODE_SIZE(MODE)        (mode_size[(int)(MODE)])
  21624. +   
  21625. +   /* Get the size in bytes of the basic parts of an object of mode MODE.  */
  21626. +   
  21627. + ! extern const int mode_unit_size[];
  21628. +   #define GET_MODE_UNIT_SIZE(MODE)    (mode_unit_size[(int)(MODE)])
  21629. +   
  21630. +   /* Get the number of units in the object.  */
  21631. + ***************
  21632. + *** 144,150 ****
  21633. +   
  21634. +   /* Get the next wider natural mode (eg, QI -> HI -> SI -> DI -> TI).  */
  21635. +   
  21636. + ! extern enum machine_mode mode_wider_mode[];
  21637. +   #define GET_MODE_WIDER_MODE(MODE)    (mode_wider_mode[(int)(MODE)])
  21638. +   
  21639. +   /* Return the mode for data of a given size SIZE and mode class CLASS.
  21640. + --- 144,150 ----
  21641. +   
  21642. +   /* Get the next wider natural mode (eg, QI -> HI -> SI -> DI -> TI).  */
  21643. +   
  21644. + ! extern const enum machine_mode mode_wider_mode[];
  21645. +   #define GET_MODE_WIDER_MODE(MODE)    (mode_wider_mode[(int)(MODE)])
  21646. +   
  21647. +   /* Return the mode for data of a given size SIZE and mode class CLASS.
  21648. + diff -rc --new-file gcc-2.5.8-fsf/objc-parse.c gcc-2.5.8/objc-parse.c
  21649. + *** gcc-2.5.8-fsf/objc-parse.c    Sat Nov 27 11:34:19 1993
  21650. + --- gcc-2.5.8/objc-parse.c    Tue Feb 22 11:23:46 1994
  21651. + ***************
  21652. + *** 1529,1535 ****
  21653. +       53
  21654. +   };
  21655. +   /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
  21656. + ! #line 3 "/usr/local/lib/bison.simple"
  21657. +   
  21658. +   /* Skeleton output parser for bison,
  21659. +      Copyright (C) 1984, 1989, 1990 Bob Corbett and Richard Stallman
  21660. + --- 1529,1535 ----
  21661. +       53
  21662. +   };
  21663. +   /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
  21664. + ! #line 3 "/usr/lib/bison.simple"
  21665. +   
  21666. +   /* Skeleton output parser for bison,
  21667. +      Copyright (C) 1984, 1989, 1990 Bob Corbett and Richard Stallman
  21668. + ***************
  21669. + *** 1710,1733 ****
  21670. +   #endif
  21671. +   #endif
  21672. +   
  21673. + ! #line 184 "/usr/local/lib/bison.simple"
  21674. + ! 
  21675. + ! /* The user can define YYPARSE_PARAM as the name of an argument to be passed
  21676. + !    into yyparse.  The argument should have type void *.
  21677. + !    It should actually point to an object.
  21678. + !    Grammar actions can access the variable by casting it
  21679. + !    to the proper pointer type.  */
  21680. + ! 
  21681. + ! #ifdef YYPARSE_PARAM
  21682. + ! #define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
  21683. + ! #else
  21684. + ! #define YYPARSE_PARAM
  21685. + ! #define YYPARSE_PARAM_DECL
  21686. + ! #endif
  21687. + ! 
  21688. +   int
  21689. + ! yyparse(YYPARSE_PARAM)
  21690. + !      YYPARSE_PARAM_DECL
  21691. +   {
  21692. +     register int yystate;
  21693. +     register int yyn;
  21694. + --- 1710,1718 ----
  21695. +   #endif
  21696. +   #endif
  21697. +   
  21698. + ! #line 184 "/usr/lib/bison.simple"
  21699. +   int
  21700. + ! yyparse()
  21701. +   {
  21702. +     register int yystate;
  21703. +     register int yyn;
  21704. + ***************
  21705. + *** 4516,4522 ****
  21706. +       break;}
  21707. +   }
  21708. +      /* the action file gets copied in in place of this dollarsign */
  21709. + ! #line 480 "/usr/local/lib/bison.simple"
  21710. +   
  21711. +     yyvsp -= yylen;
  21712. +     yyssp -= yylen;
  21713. + --- 4501,4507 ----
  21714. +       break;}
  21715. +   }
  21716. +      /* the action file gets copied in in place of this dollarsign */
  21717. + ! #line 465 "/usr/lib/bison.simple"
  21718. +   
  21719. +     yyvsp -= yylen;
  21720. +     yyssp -= yylen;
  21721. + diff -rc --new-file gcc-2.5.8-fsf/print-tree.c gcc-2.5.8/print-tree.c
  21722. + *** gcc-2.5.8-fsf/print-tree.c    Wed Oct 27 05:55:26 1993
  21723. + --- gcc-2.5.8/print-tree.c    Tue Feb 22 11:23:51 1994
  21724. + ***************
  21725. + *** 24,30 ****
  21726. +   
  21727. +   extern char **tree_code_name;
  21728. +   
  21729. + ! extern char *mode_name[];
  21730. +   
  21731. +   void print_node ();
  21732. +   void indent_to ();
  21733. + --- 24,30 ----
  21734. +   
  21735. +   extern char **tree_code_name;
  21736. +   
  21737. + ! extern char *const mode_name[];
  21738. +   
  21739. +   void print_node ();
  21740. +   void indent_to ();
  21741. + diff -rc --new-file gcc-2.5.8-fsf/protoize.c gcc-2.5.8/protoize.c
  21742. + *** gcc-2.5.8-fsf/protoize.c    Wed Nov 24 19:31:26 1993
  21743. + --- gcc-2.5.8/protoize.c    Tue Feb 22 11:28:02 1994
  21744. + ***************
  21745. + *** 202,208 ****
  21746. +   /* Define a default place to find the SYSCALLS.X file.  */
  21747. +   
  21748. +   #ifndef STD_PROTO_DIR
  21749. + ! #define STD_PROTO_DIR "/usr/local/lib"
  21750. +   #endif /* !defined (STD_PROTO_DIR) */
  21751. +   
  21752. +   /* Suffix of aux_info files.  */
  21753. + --- 202,208 ----
  21754. +   /* Define a default place to find the SYSCALLS.X file.  */
  21755. +   
  21756. +   #ifndef STD_PROTO_DIR
  21757. + ! #define STD_PROTO_DIR "/gnu/lib"
  21758. +   #endif /* !defined (STD_PROTO_DIR) */
  21759. +   
  21760. +   /* Suffix of aux_info files.  */
  21761. + ***************
  21762. + *** 266,276 ****
  21763. +      just as it is done in cccp.c.  */
  21764. +   
  21765. +   #ifndef STANDARD_INCLUDE_DIR
  21766. + ! #define STANDARD_INCLUDE_DIR "/usr/include"
  21767. +   #endif
  21768. +   
  21769. +   #ifndef LOCAL_INCLUDE_DIR
  21770. + ! #define LOCAL_INCLUDE_DIR "/usr/local/include"
  21771. +   #endif
  21772. +   
  21773. +   struct default_include { const char *fname; int cplusplus; } include_defaults[]
  21774. + --- 266,276 ----
  21775. +      just as it is done in cccp.c.  */
  21776. +   
  21777. +   #ifndef STANDARD_INCLUDE_DIR
  21778. + ! #define STANDARD_INCLUDE_DIR "/gnu/include"
  21779. +   #endif
  21780. +   
  21781. +   #ifndef LOCAL_INCLUDE_DIR
  21782. + ! #define LOCAL_INCLUDE_DIR "/local/include"
  21783. +   #endif
  21784. +   
  21785. +   struct default_include { const char *fname; int cplusplus; } include_defaults[]
  21786. + ***************
  21787. + *** 839,846 ****
  21788. + --- 839,851 ----
  21789. +   {
  21790. +     struct default_include *p;
  21791. +   
  21792. + + #ifdef FILE_NAME_ABSOLUTE_P
  21793. + +   if (! FILE_NAME_ABSOLUTE_P (path))
  21794. + +     abort ();
  21795. + + #else
  21796. +     if (path[0] != '/')
  21797. +       abort ();        /* Must be an absolutized filename.  */
  21798. + + #endif
  21799. +   
  21800. +     for (p = include_defaults; p->fname; p++)
  21801. +       if (!strncmp (path, p->fname, strlen (p->fname))
  21802. + ***************
  21803. + *** 1267,1273 ****
  21804. + --- 1272,1282 ----
  21805. +     {
  21806. +       const char *src_p;
  21807. +   
  21808. + + #ifdef FILE_NAME_ABSOLUTE_P
  21809. + +     if (! FILE_NAME_ABSOLUTE_P (rel_filename))
  21810. + + #else
  21811. +       if (rel_filename[0] != '/')
  21812. + + #endif
  21813. +         {
  21814. +           src_p = cwd2;
  21815. +           while (*endp++ = *src_p++)
  21816. + ***************
  21817. + *** 1530,1535 ****
  21818. + --- 1539,1563 ----
  21819. +     return ++q;
  21820. +   }
  21821. +   
  21822. + + /* Use this macro to advance a char * over the filename part in a line
  21823. + +    read from an aux-info file. */
  21824. + + 
  21825. + + #ifndef amigados
  21826. + + /* Version for file systems where the colon has no special meaning */
  21827. + + #define ADVANCE_PAST_FILENAME(CP) \
  21828. + +   while (* (CP) != ':') (CP)++
  21829. + + #else
  21830. + + /* Have to heuristically decide whether the colon is part of the filename
  21831. + +    or whether it serves to delimit the filename from the line number. If
  21832. + +    it's the latter case, then the character following the colon *must*
  21833. + +    be a digit. Note that this heuristic fails if the filename starts
  21834. + +    with a digit. */
  21835. + + #define ADVANCE_PAST_FILENAME(CP) \
  21836. + +     while ((CP)[0] != ':' || !isdigit ((CP)[1])) \
  21837. + +       (CP)++;
  21838. + + #endif
  21839. + + 
  21840. + + 
  21841. +   /* Given a line from  an aux info file, and a time at which the aux info
  21842. +      file it came from was created, check to see if the item described in
  21843. +      the line comes from a file which has been modified since the aux info
  21844. + ***************
  21845. + *** 1551,1558 ****
  21846. +     {
  21847. +       const char *filename_start = p = l + 3;
  21848. +   
  21849. + !     while (*p != ':')
  21850. + !       p++;
  21851. +       filename = (char *) alloca ((size_t) (p - filename_start) + 1);
  21852. +       strncpy (filename, filename_start, (size_t) (p - filename_start));
  21853. +       filename[p-filename_start] = '\0';
  21854. + --- 1579,1585 ----
  21855. +     {
  21856. +       const char *filename_start = p = l + 3;
  21857. +   
  21858. + !     ADVANCE_PAST_FILENAME (p);
  21859. +       filename = (char *) alloca ((size_t) (p - filename_start) + 1);
  21860. +       strncpy (filename, filename_start, (size_t) (p - filename_start));
  21861. +       filename[p-filename_start] = '\0';
  21862. + ***************
  21863. + *** 1609,1616 ****
  21864. +       const char *filename_start = p = l + 3;
  21865. +       char *filename;
  21866. +   
  21867. + !     while (*p != ':')
  21868. + !       p++;
  21869. +       filename = (char *) alloca ((size_t) (p - filename_start) + 1);
  21870. +       strncpy (filename, filename_start, (size_t) (p - filename_start));
  21871. +       filename[p-filename_start] = '\0';
  21872. + --- 1636,1642 ----
  21873. +       const char *filename_start = p = l + 3;
  21874. +       char *filename;
  21875. +   
  21876. + !     ADVANCE_PAST_FILENAME (p);
  21877. +       filename = (char *) alloca ((size_t) (p - filename_start) + 1);
  21878. +       strncpy (filename, filename_start, (size_t) (p - filename_start));
  21879. +       filename[p-filename_start] = '\0';
  21880. + ***************
  21881. + *** 2330,2336 ****
  21882. +     {
  21883. +       char *p = aux_info_base;
  21884. +   
  21885. + !     while (*p != ':')
  21886. +         p++;
  21887. +       p++;
  21888. +       while (*p == ' ')
  21889. + --- 2356,2364 ----
  21890. +     {
  21891. +       char *p = aux_info_base;
  21892. +   
  21893. + !     /* have to make sure at least one space is following the colon to make
  21894. + !        sure the colon is not part of the filename */
  21895. + !     while (*p != ':' && p[1] != ' ')
  21896. +         p++;
  21897. +       p++;
  21898. +       while (*p == ' ')
  21899. + ***************
  21900. + *** 2344,2350 ****
  21901. +         continue;
  21902. +       aux_info_second_line = p;
  21903. +       aux_info_relocated_name = 0;
  21904. + !     if (invocation_filename[0] != '/')
  21905. +         {
  21906. +       /* INVOCATION_FILENAME is relative;
  21907. +          append it to BASE_SOURCE_FILENAME's dir.  */
  21908. + --- 2372,2382 ----
  21909. +         continue;
  21910. +       aux_info_second_line = p;
  21911. +       aux_info_relocated_name = 0;
  21912. + ! #ifdef FILE_NAME_ABSOLUTE_P
  21913. + !     if (! FILE_NAME_ABSOLUTE_P (invocation_filename))
  21914. + ! #else
  21915. + !       if (invocation_filename[0] != '/')
  21916. + ! #endif
  21917. +         {
  21918. +       /* INVOCATION_FILENAME is relative;
  21919. +          append it to BASE_SOURCE_FILENAME's dir.  */
  21920. + ***************
  21921. + *** 2432,2438 ****
  21922. +   #ifndef UNPROTOIZE
  21923. +   
  21924. +   /* Check an individual filename for a .c suffix.  If the filename has this
  21925. + !    suffix, rename the file such that its suffix is changed to .C.  This
  21926. +      function implements the -C option.  */
  21927. +   
  21928. +   static void
  21929. + --- 2464,2470 ----
  21930. +   #ifndef UNPROTOIZE
  21931. +   
  21932. +   /* Check an individual filename for a .c suffix.  If the filename has this
  21933. + !    suffix, rename the file such that its suffix is changed to .cc.  This
  21934. +      function implements the -C option.  */
  21935. +   
  21936. +   static void
  21937. + ***************
  21938. + *** 2441,2447 ****
  21939. +   {
  21940. +     const char *filename = hp->symbol;
  21941. +     int last_char_index = strlen (filename) - 1;
  21942. + !   char *const new_filename = (char *) alloca (strlen (filename) + 1);
  21943. +   
  21944. +     /* Note that we don't care here if the given file was converted or not.  It
  21945. +        is possible that the given file was *not* converted, simply because there
  21946. + --- 2473,2479 ----
  21947. +   {
  21948. +     const char *filename = hp->symbol;
  21949. +     int last_char_index = strlen (filename) - 1;
  21950. + !   char *const new_filename = (char *) alloca (strlen (filename) + 2);
  21951. +   
  21952. +     /* Note that we don't care here if the given file was converted or not.  It
  21953. +        is possible that the given file was *not* converted, simply because there
  21954. + ***************
  21955. + *** 2453,2460 ****
  21956. +       return;
  21957. +   
  21958. +     strcpy (new_filename, filename);
  21959. + !   new_filename[last_char_index] = 'C';
  21960. +   
  21961. +     if (my_link (filename, new_filename) == -1)
  21962. +       {
  21963. +         fprintf (stderr, "%s: warning: can't link file `%s' to `%s': %s\n",
  21964. + --- 2485,2509 ----
  21965. +       return;
  21966. +   
  21967. +     strcpy (new_filename, filename);
  21968. + !   strcat (new_filename + last_char_index, "cc");
  21969. + !   
  21970. + !   /* use rename(2) if available !! Update config files to include HAVE_rename
  21971. + !      if the used OS provides it. Advantages are: it's atomic, it's one
  21972. + !      system call compared to two. */
  21973. +   
  21974. + + #ifdef HAVE_rename
  21975. + +   /* if the mentioned systems (POSIX 1003.1-1988) have rename(2), this has
  21976. + +      to be changed to `my_rename' as well. */
  21977. + + 
  21978. + +   if (rename (filename, new_filename) == -1)
  21979. + +     {
  21980. + +       fprintf (stderr, "%s: warning: can't rename file `%s' to `%s': %s\n",
  21981. + +            pname, shortpath (NULL, filename),
  21982. + +            shortpath (NULL, new_filename), sys_errlist[errno]);
  21983. + +       errors++;
  21984. + +       return;
  21985. + +     }
  21986. + + #else
  21987. +     if (my_link (filename, new_filename) == -1)
  21988. +       {
  21989. +         fprintf (stderr, "%s: warning: can't link file `%s' to `%s': %s\n",
  21990. + ***************
  21991. + *** 2471,2476 ****
  21992. + --- 2520,2526 ----
  21993. +         errors++;
  21994. +         return;
  21995. +       }
  21996. + + #endif
  21997. +   }
  21998. +   
  21999. +   #endif /* !defined (UNPROTOIZE) */
  22000. + diff -rc --new-file gcc-2.5.8-fsf/real.c gcc-2.5.8/real.c
  22001. + *** gcc-2.5.8-fsf/real.c    Wed Oct 13 19:46:38 1993
  22002. + --- gcc-2.5.8/real.c    Tue Feb 22 11:24:04 1994
  22003. + ***************
  22004. + *** 4333,4341 ****
  22005. +     if (y[NE - 1] == 0x7fff)
  22006. +       {
  22007. +         if (sign)
  22008. + !     sprintf (wstring, " -Infinity ");
  22009. +         else
  22010. + !     sprintf (wstring, " Infinity ");
  22011. +         goto bxit;
  22012. +       }
  22013. +   
  22014. + --- 4333,4341 ----
  22015. +     if (y[NE - 1] == 0x7fff)
  22016. +       {
  22017. +         if (sign)
  22018. + !     sprintf (wstring, " -NaN ");
  22019. +         else
  22020. + !     sprintf (wstring, " NaN ");
  22021. +         goto bxit;
  22022. +       }
  22023. +   
  22024. + diff -rc --new-file gcc-2.5.8-fsf/rtl.c gcc-2.5.8/rtl.c
  22025. + *** gcc-2.5.8-fsf/rtl.c    Thu Oct  7 21:05:00 1993
  22026. + --- gcc-2.5.8/rtl.c    Tue Feb 22 11:24:10 1994
  22027. + ***************
  22028. + *** 50,56 ****
  22029. +   
  22030. +   #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS)   NAME ,
  22031. +   
  22032. + ! char *rtx_name[] = {
  22033. +   #include "rtl.def"        /* rtl expressions are documented here */
  22034. +   };
  22035. +   
  22036. + --- 50,56 ----
  22037. +   
  22038. +   #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS)   NAME ,
  22039. +   
  22040. + ! char * const rtx_name[] = {
  22041. +   #include "rtl.def"        /* rtl expressions are documented here */
  22042. +   };
  22043. +   
  22044. + ***************
  22045. + *** 61,67 ****
  22046. +   
  22047. +   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  NAME,
  22048. +   
  22049. + ! char *mode_name[(int) MAX_MACHINE_MODE] = {
  22050. +   #include "machmode.def"
  22051. +   
  22052. +   #ifdef EXTRA_CC_MODES
  22053. + --- 61,67 ----
  22054. +   
  22055. +   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  NAME,
  22056. +   
  22057. + ! char * const mode_name[(int) MAX_MACHINE_MODE] = {
  22058. +   #include "machmode.def"
  22059. +   
  22060. +   #ifdef EXTRA_CC_MODES
  22061. + ***************
  22062. + *** 77,83 ****
  22063. +   
  22064. +   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  CLASS,
  22065. +   
  22066. + ! enum mode_class mode_class[(int) MAX_MACHINE_MODE] = {
  22067. +   #include "machmode.def"
  22068. +   };
  22069. +   
  22070. + --- 77,83 ----
  22071. +   
  22072. +   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  CLASS,
  22073. +   
  22074. + ! const enum mode_class mode_class[(int) MAX_MACHINE_MODE] = {
  22075. +   #include "machmode.def"
  22076. +   };
  22077. +   
  22078. + ***************
  22079. + *** 88,94 ****
  22080. +   
  22081. +   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  SIZE,
  22082. +   
  22083. + ! int mode_size[(int) MAX_MACHINE_MODE] = {
  22084. +   #include "machmode.def"
  22085. +   };
  22086. +   
  22087. + --- 88,94 ----
  22088. +   
  22089. +   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  SIZE,
  22090. +   
  22091. + ! const int mode_size[(int) MAX_MACHINE_MODE] = {
  22092. +   #include "machmode.def"
  22093. +   };
  22094. +   
  22095. + ***************
  22096. + *** 99,105 ****
  22097. +   
  22098. +   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  UNIT,
  22099. +   
  22100. + ! int mode_unit_size[(int) MAX_MACHINE_MODE] = {
  22101. +   #include "machmode.def"        /* machine modes are documented here */
  22102. +   };
  22103. +   
  22104. + --- 99,105 ----
  22105. +   
  22106. +   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  UNIT,
  22107. +   
  22108. + ! const int mode_unit_size[(int) MAX_MACHINE_MODE] = {
  22109. +   #include "machmode.def"        /* machine modes are documented here */
  22110. +   };
  22111. +   
  22112. + ***************
  22113. + *** 112,118 ****
  22114. +   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  \
  22115. +     (enum machine_mode) WIDER,
  22116. +   
  22117. + ! enum machine_mode mode_wider_mode[(int) MAX_MACHINE_MODE] = {
  22118. +   #include "machmode.def"        /* machine modes are documented here */
  22119. +   };
  22120. +   
  22121. + --- 112,118 ----
  22122. +   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  \
  22123. +     (enum machine_mode) WIDER,
  22124. +   
  22125. + ! const enum machine_mode mode_wider_mode[(int) MAX_MACHINE_MODE] = {
  22126. +   #include "machmode.def"        /* machine modes are documented here */
  22127. +   };
  22128. +   
  22129. + ***************
  22130. + *** 126,132 ****
  22131. +      rtx's of that code.  The sequence is a C string in which
  22132. +      each character describes one operand.  */
  22133. +   
  22134. + ! char *rtx_format[] = {
  22135. +     /* "*" undefined.
  22136. +            can cause a warning message
  22137. +        "0" field is unused (or used in a phase-dependent manner)
  22138. + --- 126,132 ----
  22139. +      rtx's of that code.  The sequence is a C string in which
  22140. +      each character describes one operand.  */
  22141. +   
  22142. + ! char *const rtx_format[] = {
  22143. +     /* "*" undefined.
  22144. +            can cause a warning message
  22145. +        "0" field is unused (or used in a phase-dependent manner)
  22146. + ***************
  22147. + *** 157,163 ****
  22148. +   /* Indexed by rtx code, gives a character representing the "class" of
  22149. +      that rtx code.  See rtl.def for documentation on the defined classes.  */
  22150. +   
  22151. + ! char rtx_class[] = {
  22152. +   #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS)   CLASS, 
  22153. +   #include "rtl.def"        /* rtl expressions are defined here */
  22154. +   #undef DEF_RTL_EXPR
  22155. + --- 157,163 ----
  22156. +   /* Indexed by rtx code, gives a character representing the "class" of
  22157. +      that rtx code.  See rtl.def for documentation on the defined classes.  */
  22158. +   
  22159. + ! const char rtx_class[] = {
  22160. +   #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS)   CLASS, 
  22161. +   #include "rtl.def"        /* rtl expressions are defined here */
  22162. +   #undef DEF_RTL_EXPR
  22163. + ***************
  22164. + *** 165,171 ****
  22165. +   
  22166. +   /* Names for kinds of NOTEs and REG_NOTEs.  */
  22167. +   
  22168. + ! char *note_insn_name[] = { 0                    , "NOTE_INSN_DELETED",
  22169. +                  "NOTE_INSN_BLOCK_BEG", "NOTE_INSN_BLOCK_END",
  22170. +                  "NOTE_INSN_LOOP_BEG", "NOTE_INSN_LOOP_END",
  22171. +                  "NOTE_INSN_FUNCTION_END", "NOTE_INSN_SETJMP",
  22172. + --- 165,171 ----
  22173. +   
  22174. +   /* Names for kinds of NOTEs and REG_NOTEs.  */
  22175. +   
  22176. + ! char * const note_insn_name[] = { 0                    , "NOTE_INSN_DELETED",
  22177. +                  "NOTE_INSN_BLOCK_BEG", "NOTE_INSN_BLOCK_END",
  22178. +                  "NOTE_INSN_LOOP_BEG", "NOTE_INSN_LOOP_END",
  22179. +                  "NOTE_INSN_FUNCTION_END", "NOTE_INSN_SETJMP",
  22180. + ***************
  22181. + *** 173,179 ****
  22182. +                  "NOTE_INSN_PROLOGUE_END", "NOTE_INSN_EPILOGUE_BEG",
  22183. +                  "NOTE_INSN_DELETED_LABEL", "NOTE_INSN_FUNCTION_BEG"};
  22184. +   
  22185. + ! char *reg_note_name[] = { "", "REG_DEAD", "REG_INC", "REG_EQUIV", "REG_WAS_0",
  22186. +                 "REG_EQUAL", "REG_RETVAL", "REG_LIBCALL",
  22187. +                 "REG_NONNEG", "REG_NO_CONFLICT", "REG_UNUSED",
  22188. +                 "REG_CC_SETTER", "REG_CC_USER", "REG_LABEL",
  22189. + --- 173,180 ----
  22190. +                  "NOTE_INSN_PROLOGUE_END", "NOTE_INSN_EPILOGUE_BEG",
  22191. +                  "NOTE_INSN_DELETED_LABEL", "NOTE_INSN_FUNCTION_BEG"};
  22192. +   
  22193. + ! char * const reg_note_name[] =
  22194. + !              { "", "REG_DEAD", "REG_INC", "REG_EQUIV", "REG_WAS_0",
  22195. +                 "REG_EQUAL", "REG_RETVAL", "REG_LIBCALL",
  22196. +                 "REG_NONNEG", "REG_NO_CONFLICT", "REG_UNUSED",
  22197. +                 "REG_CC_SETTER", "REG_CC_USER", "REG_LABEL",
  22198. + diff -rc --new-file gcc-2.5.8-fsf/rtl.h gcc-2.5.8/rtl.h
  22199. + *** gcc-2.5.8-fsf/rtl.h    Wed Sep 29 22:34:24 1993
  22200. + --- gcc-2.5.8/rtl.h    Tue Feb 22 11:24:14 1994
  22201. + ***************
  22202. + *** 44,56 ****
  22203. +   extern int rtx_length[];
  22204. +   #define GET_RTX_LENGTH(CODE)        (rtx_length[(int)(CODE)])
  22205. +   
  22206. + ! extern char *rtx_name[];
  22207. +   #define GET_RTX_NAME(CODE)        (rtx_name[(int)(CODE)])
  22208. +   
  22209. + ! extern char *rtx_format[];
  22210. +   #define GET_RTX_FORMAT(CODE)        (rtx_format[(int)(CODE)])
  22211. +   
  22212. + ! extern char rtx_class[];
  22213. +   #define GET_RTX_CLASS(CODE)        (rtx_class[(int)(CODE)])
  22214. +   
  22215. +   /* Common union for an element of an rtx.  */
  22216. + --- 44,56 ----
  22217. +   extern int rtx_length[];
  22218. +   #define GET_RTX_LENGTH(CODE)        (rtx_length[(int)(CODE)])
  22219. +   
  22220. + ! extern char * const rtx_name[];
  22221. +   #define GET_RTX_NAME(CODE)        (rtx_name[(int)(CODE)])
  22222. +   
  22223. + ! extern char * const rtx_format[];
  22224. +   #define GET_RTX_FORMAT(CODE)        (rtx_format[(int)(CODE)])
  22225. +   
  22226. + ! extern const char rtx_class[];
  22227. +   #define GET_RTX_CLASS(CODE)        (rtx_class[(int)(CODE)])
  22228. +   
  22229. +   /* Common union for an element of an rtx.  */
  22230. + ***************
  22231. + *** 331,337 ****
  22232. +   
  22233. +   /* Names for REG_NOTE's in EXPR_LIST insn's.  */
  22234. +   
  22235. + ! extern char *reg_note_name[];
  22236. +   #define GET_REG_NOTE_NAME(MODE) (reg_note_name[(int)(MODE)])
  22237. +   
  22238. +   /* The label-number of a code-label.  The assembler label
  22239. + --- 331,337 ----
  22240. +   
  22241. +   /* Names for REG_NOTE's in EXPR_LIST insn's.  */
  22242. +   
  22243. + ! extern char *const reg_note_name[];
  22244. +   #define GET_REG_NOTE_NAME(MODE) (reg_note_name[(int)(MODE)])
  22245. +   
  22246. +   /* The label-number of a code-label.  The assembler label
  22247. + ***************
  22248. + *** 408,414 ****
  22249. +   
  22250. +   /* Names for NOTE insn's other than line numbers.  */
  22251. +   
  22252. + ! extern char *note_insn_name[];
  22253. +   #define GET_NOTE_INSN_NAME(NOTE_CODE) (note_insn_name[-(NOTE_CODE)])
  22254. +   
  22255. +   /* The name of a label, in case it corresponds to an explicit label
  22256. + --- 408,414 ----
  22257. +   
  22258. +   /* Names for NOTE insn's other than line numbers.  */
  22259. +   
  22260. + ! extern char *const note_insn_name[];
  22261. +   #define GET_NOTE_INSN_NAME(NOTE_CODE) (note_insn_name[-(NOTE_CODE)])
  22262. +   
  22263. +   /* The name of a label, in case it corresponds to an explicit label
  22264. + diff -rc --new-file gcc-2.5.8-fsf/scan-types.sh gcc-2.5.8/scan-types.sh
  22265. + *** gcc-2.5.8-fsf/scan-types.sh    Tue Oct 26 23:01:02 1993
  22266. + --- gcc-2.5.8/scan-types.sh    Tue Feb 22 11:24:18 1994
  22267. + ***************
  22268. + *** 1,4 ****
  22269. + ! #! /bin/sh
  22270. +   # Deduce values of standard ANSI and POSIX types (e.g. size_t, pid_t).
  22271. +   # Emits macros definitions for these, and some other types.
  22272. +   # Intended to be used to massage the sys-protos.h file.
  22273. + --- 1,4 ----
  22274. + ! #!/bin/sh
  22275. +   # Deduce values of standard ANSI and POSIX types (e.g. size_t, pid_t).
  22276. +   # Emits macros definitions for these, and some other types.
  22277. +   # Intended to be used to massage the sys-protos.h file.
  22278. + diff -rc --new-file gcc-2.5.8-fsf/tm.texi gcc-2.5.8/tm.texi
  22279. + *** gcc-2.5.8-fsf/tm.texi    Thu Nov 11 13:45:26 1993
  22280. + --- gcc-2.5.8/tm.texi    Tue Feb 22 11:28:11 1994
  22281. + ***************
  22282. + *** 205,211 ****
  22283. +   @findex STANDARD_EXEC_PREFIX
  22284. +   @item STANDARD_EXEC_PREFIX
  22285. +   Define this macro as a C string constant if you wish to override the
  22286. + ! standard choice of @file{/usr/local/lib/gcc-lib/} as the default prefix to
  22287. +   try when searching for the executable files of the compiler.
  22288. +   
  22289. +   @findex MD_EXEC_PREFIX
  22290. + --- 205,211 ----
  22291. +   @findex STANDARD_EXEC_PREFIX
  22292. +   @item STANDARD_EXEC_PREFIX
  22293. +   Define this macro as a C string constant if you wish to override the
  22294. + ! standard choice of @file{/gnu/lib/gcc-lib/} as the default prefix to
  22295. +   try when searching for the executable files of the compiler.
  22296. +   
  22297. +   @findex MD_EXEC_PREFIX
  22298. + ***************
  22299. + *** 218,224 ****
  22300. +   @findex STANDARD_STARTFILE_PREFIX
  22301. +   @item STANDARD_STARTFILE_PREFIX
  22302. +   Define this macro as a C string constant if you wish to override the
  22303. + ! standard choice of @file{/usr/local/lib/} as the default prefix to
  22304. +   try when searching for startup files such as @file{crt0.o}.
  22305. +   
  22306. +   @findex MD_STARTFILE_PREFIX
  22307. + --- 218,224 ----
  22308. +   @findex STANDARD_STARTFILE_PREFIX
  22309. +   @item STANDARD_STARTFILE_PREFIX
  22310. +   Define this macro as a C string constant if you wish to override the
  22311. + ! standard choice of @file{/gnu/lib/} as the default prefix to
  22312. +   try when searching for startup files such as @file{crt0.o}.
  22313. +   
  22314. +   @findex MD_STARTFILE_PREFIX
  22315. + ***************
  22316. + *** 237,248 ****
  22317. +   @findex LOCAL_INCLUDE_DIR
  22318. +   @item LOCAL_INCLUDE_DIR
  22319. +   Define this macro as a C string constant if you wish to override the
  22320. + ! standard choice of @file{/usr/local/include} as the default prefix to
  22321. +   try when searching for local header files.  @code{LOCAL_INCLUDE_DIR}
  22322. +   comes before @code{SYSTEM_INCLUDE_DIR} in the search order.
  22323. +   
  22324. +   Cross compilers do not use this macro and do not search either
  22325. + ! @file{/usr/local/include} or its replacement.
  22326. +   
  22327. +   @findex SYSTEM_INCLUDE_DIR
  22328. +   @item SYSTEM_INCLUDE_DIR
  22329. + --- 237,248 ----
  22330. +   @findex LOCAL_INCLUDE_DIR
  22331. +   @item LOCAL_INCLUDE_DIR
  22332. +   Define this macro as a C string constant if you wish to override the
  22333. + ! standard choice of @file{/gnu/include} as the default prefix to
  22334. +   try when searching for local header files.  @code{LOCAL_INCLUDE_DIR}
  22335. +   comes before @code{SYSTEM_INCLUDE_DIR} in the search order.
  22336. +   
  22337. +   Cross compilers do not use this macro and do not search either
  22338. + ! @file{/gnu/include} or its replacement.
  22339. +   
  22340. +   @findex SYSTEM_INCLUDE_DIR
  22341. +   @item SYSTEM_INCLUDE_DIR
  22342. + diff -rc --new-file gcc-2.5.8-fsf/toplev.c gcc-2.5.8/toplev.c
  22343. + *** gcc-2.5.8-fsf/toplev.c    Sat Dec 11 00:59:54 1993
  22344. + --- gcc-2.5.8/toplev.c    Tue Feb 22 11:24:24 1994
  22345. + ***************
  22346. + *** 504,509 ****
  22347. + --- 504,510 ----
  22348. +     {"unroll-all-loops", &flag_unroll_all_loops, 1},
  22349. +     {"writable-strings", &flag_writable_strings, 1},
  22350. +     {"peephole", &flag_no_peephole, 0},
  22351. + +   {"large-baserel", &flag_pic, 4},
  22352. +     {"force-mem", &flag_force_mem, 1},
  22353. +     {"force-addr", &flag_force_addr, 1},
  22354. +     {"function-cse", &flag_no_function_cse, 0},
  22355. + ***************
  22356. + *** 522,527 ****
  22357. + --- 523,529 ----
  22358. +     {"schedule-insns2", &flag_schedule_insns_after_reload, 1},
  22359. +     {"pic", &flag_pic, 1},
  22360. +     {"PIC", &flag_pic, 2},
  22361. + +   {"baserel", &flag_pic, 3},
  22362. +     {"fast-math", &flag_fast_math, 1},
  22363. +     {"common", &flag_no_common, 0},
  22364. +     {"inhibit-size-directive", &flag_inhibit_size_directive, 1},
  22365. + ***************
  22366. + *** 1530,1535 ****
  22367. + --- 1532,1540 ----
  22368. +        FILE *asm_file;
  22369. +        char *input_name;
  22370. +   {
  22371. + + #ifdef FILE_NAME_NONDIRECTORY
  22372. + +   char *na = FILE_NAME_NONDIRECTORY (input_name);
  22373. + + #else
  22374. +     int len = strlen (input_name);
  22375. +     char *na = input_name + len;
  22376. +   
  22377. + ***************
  22378. + *** 1540,1545 ****
  22379. + --- 1545,1551 ----
  22380. +       break;
  22381. +         na--;
  22382. +       }
  22383. + + #endif
  22384. +   
  22385. +   #ifdef ASM_OUTPUT_MAIN_SOURCE_FILENAME
  22386. +     ASM_OUTPUT_MAIN_SOURCE_FILENAME (asm_file, na);
  22387. + ***************
  22388. + *** 3507,3512 ****
  22389. + --- 3513,3519 ----
  22390. +   
  22391. +   #ifndef OS2
  22392. +   #ifndef VMS
  22393. + + #ifndef amigados
  22394. +     if (flag_print_mem)
  22395. +       {
  22396. +         char *lim = (char *) sbrk (0);
  22397. + ***************
  22398. + *** 3521,3526 ****
  22399. + --- 3528,3534 ----
  22400. +         system ("ps v");
  22401. +   #endif /* not USG */
  22402. +       }
  22403. + + #endif /* not amigados */
  22404. +   #endif /* not VMS */
  22405. +   #endif /* not OS2 */
  22406. +   
  22407. + diff -rc --new-file gcc-2.5.8-fsf/tree.c gcc-2.5.8/tree.c
  22408. + *** gcc-2.5.8-fsf/tree.c    Tue Jan  4 12:36:01 1994
  22409. + --- gcc-2.5.8/tree.c    Tue Feb 22 11:24:31 1994
  22410. + ***************
  22411. + *** 248,254 ****
  22412. +   /* Unique id for next type created.  */
  22413. +   static int next_type_uid = 1;
  22414. +   
  22415. + ! extern char *mode_name[];
  22416. +   
  22417. +   void gcc_obstack_init ();
  22418. +   static tree stabilize_reference_1 ();
  22419. + --- 248,254 ----
  22420. +   /* Unique id for next type created.  */
  22421. +   static int next_type_uid = 1;
  22422. +   
  22423. + ! extern char *const mode_name[];
  22424. +   
  22425. +   void gcc_obstack_init ();
  22426. +   static tree stabilize_reference_1 ();
  22427. diff -rc --new-file /src/baseline/gnat-1.80/amiga/gcc-gnat.diffs gnat-1.80/amiga/gcc-gnat.diffs
  22428. *** /src/baseline/gnat-1.80/amiga/gcc-gnat.diffs    Thu Jan  1 00:00:00 1970
  22429. --- gnat-1.80/amiga/gcc-gnat.diffs    Wed Jul  6 14:44:54 1994
  22430. ***************
  22431. *** 0 ****
  22432. --- 1,2092 ----
  22433. + diff -rc gcc-2.5.8/Makefile.in gcc-2.5.8-ada/Makefile.in
  22434. + *** gcc-2.5.8/Makefile.in    Tue Feb 22 11:26:49 1994
  22435. + --- gcc-2.5.8-ada/Makefile.in    Wed Jul  6 08:41:43 1994
  22436. + ***************
  22437. + *** 29,41 ****
  22438. +   # See below for how to change them for certain systems.
  22439. +   
  22440. +   # Selection of languages to be made.
  22441. + ! LANGUAGES = c c++ objective-c proto
  22442. +   
  22443. +   ALLOCA =
  22444. +   ALLOCA_FLAGS =
  22445. +   ALLOCA_FINISH = true
  22446. +   
  22447. + ! # Various ways of specifying flags for compilations:  
  22448. +   # CFLAGS is for the user to override to, e.g., do a bootstrap with -O2.
  22449. +   # BOOT_CFLAGS is the value of CFLAGS to pass
  22450. +   # to the stage2 and stage3 compilations
  22451. + --- 29,41 ----
  22452. +   # See below for how to change them for certain systems.
  22453. +   
  22454. +   # Selection of languages to be made.
  22455. + ! LANGUAGES = c c++ objective-c ada proto
  22456. +   
  22457. +   ALLOCA =
  22458. +   ALLOCA_FLAGS =
  22459. +   ALLOCA_FINISH = true
  22460. +   
  22461. + ! # Various ways of specifying flags for compilations:
  22462. +   # CFLAGS is for the user to override to, e.g., do a bootstrap with -O2.
  22463. +   # BOOT_CFLAGS is the value of CFLAGS to pass
  22464. +   # to the stage2 and stage3 compilations
  22465. + ***************
  22466. + *** 70,76 ****
  22467. +   TEXI2DVI = texi2dvi
  22468. +   
  22469. +   # Define this as & to perform parallel make on a Sequent.
  22470. + ! # Note that this has some bugs, and it seems currently necessary 
  22471. +   # to compile all the gen* files first by hand to avoid erroneous results.
  22472. +   P =
  22473. +   
  22474. + --- 70,76 ----
  22475. +   TEXI2DVI = texi2dvi
  22476. +   
  22477. +   # Define this as & to perform parallel make on a Sequent.
  22478. + ! # Note that this has some bugs, and it seems currently necessary
  22479. +   # to compile all the gen* files first by hand to avoid erroneous results.
  22480. +   P =
  22481. +   
  22482. + ***************
  22483. + *** 133,139 ****
  22484. +   # PREMADE_ATTRTAB is the file name of the file to use.
  22485. +   # PREMADE_ATTRTAB_MD is the md file it corresponds to.
  22486. +   PREMADE_ATTRTAB_MD = Makefile  # Guaranteed not to cmp equal to md.
  22487. + ! PREMADE_ATTRTAB = 
  22488. +   
  22489. +   target= ... `configure' substitutes actual target name here.
  22490. +   xmake_file= ... `configure' substitutes actual x- file name here.
  22491. + --- 133,139 ----
  22492. +   # PREMADE_ATTRTAB is the file name of the file to use.
  22493. +   # PREMADE_ATTRTAB_MD is the md file it corresponds to.
  22494. +   PREMADE_ATTRTAB_MD = Makefile  # Guaranteed not to cmp equal to md.
  22495. + ! PREMADE_ATTRTAB =
  22496. +   
  22497. +   target= ... `configure' substitutes actual target name here.
  22498. +   xmake_file= ... `configure' substitutes actual x- file name here.
  22499. + ***************
  22500. + *** 230,243 ****
  22501. +   EXTRA_PASSES =
  22502. +   
  22503. +   # Like EXTRA_PASSES, but these are used when linking.
  22504. + ! EXTRA_PROGRAMS = 
  22505. +   
  22506. +   # List of extra object files that should be compiled for this target machine.
  22507. +   # The rules for compiling them should be in the t-* file for the machine.
  22508. +   EXTRA_PARTS =
  22509. +   
  22510. +   # List of extra object files that should be compiled and linked with
  22511. + ! # compiler proper (cc1, cc1obj, cc1plus).
  22512. +   EXTRA_OBJS =
  22513. +   
  22514. +   # List of additional header files to install.
  22515. + --- 230,243 ----
  22516. +   EXTRA_PASSES =
  22517. +   
  22518. +   # Like EXTRA_PASSES, but these are used when linking.
  22519. + ! EXTRA_PROGRAMS =
  22520. +   
  22521. +   # List of extra object files that should be compiled for this target machine.
  22522. +   # The rules for compiling them should be in the t-* file for the machine.
  22523. +   EXTRA_PARTS =
  22524. +   
  22525. +   # List of extra object files that should be compiled and linked with
  22526. + ! # compiler proper (cc1, cc1obj, cc1plus, gnat1).
  22527. +   EXTRA_OBJS =
  22528. +   
  22529. +   # List of additional header files to install.
  22530. + ***************
  22531. + *** 251,267 ****
  22532. +   
  22533. +   # List of extra C and assembler files to add to libgcc1.a.
  22534. +   # Assembler files should have names ending in `.asm'.
  22535. + ! LIB1FUNCS_EXTRA = 
  22536. +   
  22537. +   # List of extra C and assembler files to add to libgcc2.a.
  22538. +   # Assembler files should have names ending in `.asm'.
  22539. + ! LIB2FUNCS_EXTRA = 
  22540. +   
  22541. +   # Default float.h source to use for cross-compiler.
  22542. +   CROSS_FLOAT_H=float.h-cross
  22543. +   
  22544. +   # Program to convert libraries.
  22545. + ! LIBCONVERT = 
  22546. +   
  22547. +   # Control whether header files are installed.
  22548. +   INSTALL_HEADERS=install-headers
  22549. + --- 251,267 ----
  22550. +   
  22551. +   # List of extra C and assembler files to add to libgcc1.a.
  22552. +   # Assembler files should have names ending in `.asm'.
  22553. + ! LIB1FUNCS_EXTRA =
  22554. +   
  22555. +   # List of extra C and assembler files to add to libgcc2.a.
  22556. +   # Assembler files should have names ending in `.asm'.
  22557. + ! LIB2FUNCS_EXTRA =
  22558. +   
  22559. +   # Default float.h source to use for cross-compiler.
  22560. +   CROSS_FLOAT_H=float.h-cross
  22561. +   
  22562. +   # Program to convert libraries.
  22563. + ! LIBCONVERT =
  22564. +   
  22565. +   # Control whether header files are installed.
  22566. +   INSTALL_HEADERS=install-headers
  22567. + ***************
  22568. + *** 276,282 ****
  22569. +   # Additional directories of header files to run fixincludes on.
  22570. +   # These should be directories searched automatically by default
  22571. +   # just as /usr/include is.
  22572. + ! # *Do not* use this for directories that happen to contain 
  22573. +   # header files, but are not searched automatically by default.
  22574. +   # On most systems, this is empty.
  22575. +   OTHER_FIXINCLUDES_DIRS=
  22576. + --- 276,282 ----
  22577. +   # Additional directories of header files to run fixincludes on.
  22578. +   # These should be directories searched automatically by default
  22579. +   # just as /usr/include is.
  22580. + ! # *Do not* use this for directories that happen to contain
  22581. +   # header files, but are not searched automatically by default.
  22582. +   # On most systems, this is empty.
  22583. +   OTHER_FIXINCLUDES_DIRS=
  22584. + ***************
  22585. + *** 301,307 ****
  22586. +   HOST_PREFIX=
  22587. +   # Prefix to apply to names of object files when compiling them
  22588. +   # to run on the machine we are compiling on.
  22589. + ! # The default for this variable is chosen to keep these rules 
  22590. +   # out of the way of the other rules for compiling the same source files.
  22591. +   HOST_PREFIX_1=loser-
  22592. +   HOST_CC=$(CC)
  22593. + --- 301,307 ----
  22594. +   HOST_PREFIX=
  22595. +   # Prefix to apply to names of object files when compiling them
  22596. +   # to run on the machine we are compiling on.
  22597. + ! # The default for this variable is chosen to keep these rules
  22598. +   # out of the way of the other rules for compiling the same source files.
  22599. +   HOST_PREFIX_1=loser-
  22600. +   HOST_CC=$(CC)
  22601. + ***************
  22602. + *** 399,405 ****
  22603. +   # Lists of files for various purposes.
  22604. +   
  22605. +   # A list of all the language-specific executables.
  22606. + ! COMPILERS = cc1 cc1plus cc1obj
  22607. +   
  22608. +   # Language-specific object files for C.
  22609. +   C_OBJS = c-parse.o c-lang.o c-lex.o c-pragma.o \
  22610. + --- 399,405 ----
  22611. +   # Lists of files for various purposes.
  22612. +   
  22613. +   # A list of all the language-specific executables.
  22614. + ! COMPILERS = cc1 cc1plus cc1obj gnat1
  22615. +   
  22616. +   # Language-specific object files for C.
  22617. +   C_OBJS = c-parse.o c-lang.o c-lex.o c-pragma.o \
  22618. + ***************
  22619. + *** 417,422 ****
  22620. + --- 417,714 ----
  22621. +      cp-expr.o cp-pt.o cp-edsel.o cp-xref.o \
  22622. +      $(CPLUS_INPUT) cp-spew.o c-common.o cp-error.o cp-errfn.o
  22623. +   
  22624. + + # Languages-specific object files for Ada.
  22625. + + # Object files for gnat1 from C sources.
  22626. + + GNAT1_C_OBJS = b_gnat1.o a-adaint.o a-gettty.o a-gtran3.o a-misc.o a-trans3.o \
  22627. + +  a-trans4.o a-trans.o a-uintp.o a-urealp.o
  22628. + + 
  22629. + + # Object files from Ada sources that are used by gnat1 and gnatf
  22630. + + GNAT_ADA_OBJS = alloc.o atree.o casing.o comperr.o csets.o debug.o \
  22631. + +  debug_a.o einfo.o elists.o errout.o excep.o expand.o \
  22632. + +  exp_attr.o exp_ch2.o exp_ch3.o \
  22633. + +  exp_ch4.o exp_ch5.o exp_ch6.o exp_ch7.o exp_ch8.o exp_ch9.o exp_ch10.o \
  22634. + +  exp_ch11.o exp_ch12.o exp_ch13.o exp_intr.o exp_prag.o exp_util.o \
  22635. + +  fix_util.o fname.o frontend.o \
  22636. + +  get_targ.o gnatvsn.o itypes.o krunch.o lib.o limits.o namet.o nlists.o \
  22637. + +  nmake.o  opt.o osint.o output.o par.o rtsfind.o scans.o scn.o \
  22638. + +  sdefault.o sem.o sem_aggr.o sem_attr.o sem_ch3.o sem_ch4.o \
  22639. + +  sem_ch5.o sem_ch6.o sem_ch7.o sem_ch8.o sem_ch9.o sem_ch10.o sem_ch11.o \
  22640. + +  sem_ch12.o sem_ch13.o sem_disp.o sem_eval.o sem_intr.o sem_prag.o \
  22641. + +  sem_res.o sem_type.o \
  22642. + +  sem_util.o sinfo.o sinfo-cn.o sinput.o snames.o sprint.o stand.o \
  22643. + +  stringt.o style.o switch.o system.o s-assert.o  s-secsta.o \
  22644. + +  s-stalib.o s-stoele.o s-strcon.o s-strequ.o s-strops.o s-tasoli.o s-taspda.o \
  22645. + +  s-enviro.o tbuild.o treepr.o treeprs.o ttypes.o ttypef.o types.o \
  22646. + +  uintp.o urealp.o uname.o unixlib.o usage.o widechar.o
  22647. + + 
  22648. + + # Object files for gnat executables
  22649. + + GNATF_OBJS =  $(GNAT_ADA_OBJS) gnatfdrv.o xref.o xref_tab.o a-adaint.o \
  22650. + +  a-gettty.o a-deftarg.o
  22651. + + GNAT1_ADA_OBJS = $(GNAT_ADA_OBJS) back_end.o gnat1drv.o
  22652. + + GNAT1_OBJS = $(GNAT1_C_OBJS) $(GNAT1_ADA_OBJS)
  22653. + + GNATBIND_OBJS = gnatbind.o ali.o alloc.o bcheck.o binde.o binderr.o bindgen.o \
  22654. + +   bindusg.o butil.o debug.o excep.o gnatvsn.o limits.o namet.o \
  22655. + +   opt.o osint.o output.o sdefault.o switch.o system.o \
  22656. + +   s-assert.o s-strequ.o s-strops.o s-tasoli.o s-taspda.o s-secsta.o \
  22657. + +   s-stalib.o s-stoele.o s-enviro.o types.o unixlib.o widechar.o a-adaint.o
  22658. + + 
  22659. + + # ??? should this include all the s-*.o files explicitly?
  22660. + + GNATK8_OBJS = ada.o a-ioexce.o a-teioau.o a-textio.o gnatk8.o krunch.o \
  22661. + +   system.o s-enviro.o s-stoele.o s-secsta.o s-taspda.o s-tasoli.o \
  22662. + +   s-stalib.o $(LIBGNAT_OBJS)
  22663. + + 
  22664. + + # The runtime library for gnat comprises two directories.  One contains the
  22665. + + # Ada source files that the compiler (gnat1) needs -- these files are listed
  22666. + + # by ADA_INCLUDE_SRCS -- and the other contains the object files and their
  22667. + + # corresponding .ali files for the parts written in Ada, libgnat.a for
  22668. + + # the parts of the runtime written in C, and libpthreads.a for the pthreads
  22669. + + # emulation library.  LIBGNAT_OBJS lists the objects that go into libgnat.a,
  22670. + + # while GNAT_RTL_OBJS lists the object files compiled from Ada sources that
  22671. + + # go into the directory.  The pthreads emulation is built in the threads
  22672. + + # subdirectory and copied.
  22673. + + LIBGNAT_SRCS = io-aux.c a-cio.c get_errno.c
  22674. + + 
  22675. + + LIBGNAT_OBJS = io-aux.o a-cio.o get_errno.o
  22676. + + 
  22677. + + # NOTE ??? - when the -I option for compiling Ada code is made to work,
  22678. + + #  the library installation will change and there will be a
  22679. + + #  GNAT_RTL_SRCS.  Right now we count on being able to build GNAT_RTL_OBJS
  22680. + + #  from ADA_INCLUDE_SRCS.
  22681. + + GNAT_RTL_OBJS = ada.o \
  22682. + + a-calend.o \
  22683. + + a-calcon.o \
  22684. + + a-chlat1.o a-cwila1.o a-finali.o \
  22685. + + a-charac.o \
  22686. + + a-ioexce.o \
  22687. + + a-numeri.o \
  22688. + + a-numaux.o \
  22689. + + a-nlelfu.o \
  22690. + + a-nllefu.o \
  22691. + + a-nselfu.o \
  22692. + + a-nuelfu.o a-nuranu.o \
  22693. + + a-reatim.o \
  22694. + + a-retico.o \
  22695. + + a-retide.o \
  22696. + + a-string.o a-strmap.o a-strbou.o a-strcon.o\
  22697. + + a-strfix.o a-strsea.o a-tags.o \
  22698. + + a-taside.o \
  22699. + + a-textio.o \
  22700. + + a-teioau.o calendar.o interfac.o ioexcept.o \
  22701. + + i-c.o \
  22702. + + i-cstrin.o \
  22703. + + system.o \
  22704. + + s-addima.o \
  22705. + + s-pooglo.o \
  22706. + + s-poosiz.o \
  22707. + + s-pooemp.o \
  22708. + + s-pooloc.o \
  22709. + + s-stopoo.o \
  22710. + + s-assert.o \
  22711. + + s-enviro.o \
  22712. + + s-errrep.o \
  22713. + + s-cconst.o \
  22714. + + s-comexc.o \
  22715. + + s-comopt.o \
  22716. + + s-finimp.o \
  22717. + + s-norstr.o \
  22718. + + s-poscon.o \
  22719. + + s-poserr.o \
  22720. + + s-posrte.o \
  22721. + + s-postim.o \
  22722. + + s-pthrea.o \
  22723. + + s-img_b.o \
  22724. + + s-img_c.o s-img_i.o s-imglli.o \
  22725. + + s-img_f.o s-img_lf.o s-imgllf.o s-img_sf.o \
  22726. + + s-img_wc.o \
  22727. + + s-secsta.o \
  22728. + + s-stalib.o \
  22729. + + s-std.o s-stoele.o \
  22730. + + s-strcon.o s-strequ.o \
  22731. + + s-strops.o \
  22732. + + s-taprob.o \
  22733. + + s-tasabo.o \
  22734. + + s-tasoli.o \
  22735. + + s-tasclo.o \
  22736. + + s-taskin.o \
  22737. + + s-tasmem.o \
  22738. + + s-taspda.o \
  22739. + + s-taspri.o \
  22740. + + s-tasque.o \
  22741. + + s-tasren.o \
  22742. + + s-tassta.o \
  22743. + + s-tastal.o \
  22744. + + s-tasuti.o \
  22745. + + s-tatise.o \
  22746. + + s-tcmasp.o \
  22747. + + s-timtyp.o \
  22748. + + s-unstyp.o \
  22749. + + s-xn.o \
  22750. + + s-xn_f.o \
  22751. + + s-xn_i.o \
  22752. + + s-xn_lf.o \
  22753. + + s-xn_li.o \
  22754. + + s-xn_llf.o \
  22755. + + s-xn_lli.o \
  22756. + + s-xn_sf.o \
  22757. + + s-xn_si.o \
  22758. + + s-xn_ssi.o \
  22759. + + s-xp.o \
  22760. + + s-xp_bml.o \
  22761. + + s-xp_bmi.o \
  22762. + + s-xp_f.o s-xp_i.o \
  22763. + + s-xp_lf.o s-xp_li.o s-xp_llf.o s-xp_lli.o \
  22764. + + s-xp_nbm.o \
  22765. + + s-xp_sf.o s-xp_si.o s-xp_ssi.o \
  22766. + + s-valenu.o \
  22767. + + s-valueb.o \
  22768. + + s-valuec.o \
  22769. + + text_io.o \
  22770. + + io.o a-cio.o get_errno.o \
  22771. + + s-retico.o \
  22772. + + s-retide.o
  22773. + + 
  22774. + + ADA_INCLUDE_SRCS = ada.ads \
  22775. + +   a-astaco.ads \
  22776. + +   a-calend.ads a-calend.adb \
  22777. + +   a-calcon.ads a-calcon.adb \
  22778. + +   a-caldel.adb \
  22779. + +   a-charac.ads a-charac.adb \
  22780. + +   a-chlat1.ads a-cwila1.ads \
  22781. + +   a-decima.ads \
  22782. + +   a-direio.ads a-direio.adb \
  22783. + +   a-dynpri.ads \
  22784. + +   a-except.ads a-finali.ads a-finali.adb \
  22785. + +   a-interr.ads \
  22786. + +   a-intnam.ads \
  22787. + +   a-ioexce.ads \
  22788. + +   a-numeri.ads \
  22789. + +   a-numaux.ads \
  22790. + +   a-nuelfu.ads \
  22791. + +   a-ngelfu.ads \
  22792. + +   a-ngelfu.adb \
  22793. + +   a-ngcoty.ads \
  22794. + +   a-ngcoty.adb \
  22795. + +   a-ngcefu.ads \
  22796. + +   a-ngcefu.adb \
  22797. + +   a-nlelfu.ads \
  22798. + +   a-nllefu.ads \
  22799. + +   a-nuranu.ads \
  22800. + +   a-nuranu.adb \
  22801. + +   a-nselfu.ads \
  22802. + +   a-reatim.ads a-reatim.adb \
  22803. + +   a-retico.ads a-retico.adb \
  22804. + +   a-retide.ads a-retide.adb \
  22805. + +   a-sequio.ads a-sequio.adb\
  22806. + +   a-string.ads \
  22807. + +   a-strcon.ads \
  22808. + +   a-strbou.ads a-strbou.adb \
  22809. + +   a-strfix.ads a-strfix.adb \
  22810. + +   a-strsea.ads a-strsea.adb \
  22811. + +   a-strmap.ads a-strmap.adb \
  22812. + +   a-stwibo.ads a-stwibo.adb \
  22813. + +   a-stwico.ads \
  22814. + +   a-stwifi.ads a-stwifi.adb \
  22815. + +   a-stwima.ads a-stwima.adb \
  22816. + +   a-stwise.ads a-stwise.adb \
  22817. + +   a-stwiun.ads a-stwiun.adb \
  22818. + +   a-strunb.ads a-strunb.adb \
  22819. + +   a-storio.ads a-storio.adb \
  22820. + +   a-stream.ads a-ststio.ads \
  22821. + +   a-tags.adb a-tags.ads \
  22822. + +   a-sytaco.ads \
  22823. + +   a-tasatt.ads a-tasatt.adb \
  22824. + +   a-taside.ads a-taside.adb \
  22825. + +   a-textio.ads a-textio.adb \
  22826. + +   a-teioau.ads a-teioau.adb \
  22827. + +   a-ticoio.ads a-ticoio.adb \
  22828. + +   a-teiopi.ads \
  22829. + +   a-unccon.ads a-unccon.adb \
  22830. + +   a-uncdea.ads a-uncdea.adb \
  22831. + +   a-witeio.ads \
  22832. + +   a-wticio.ads a-wticio.adb \
  22833. + +   a-wtiopi.ads \
  22834. + +   calendar.ads \
  22835. + +   directio.ads \
  22836. + +   interfac.ads \
  22837. + +   i-c.ads i-c.adb \
  22838. + +   i-cpoint.ads \
  22839. + +   i-cstrin.ads i-cstrin.adb\
  22840. + +   i-cobol.ads i-fortra.ads \
  22841. + +   ioexcept.ads \
  22842. + +   sequenio.ads \
  22843. + +   s-assert.ads \
  22844. + +   s-addima.ads s-addima.adb \
  22845. + +   s-errrep.ads s-errrep.adb \
  22846. + +   s-cconst.ads \
  22847. + +   s-comexc.ads s-comexc.adb \
  22848. + +   s-comopt.ads \
  22849. + +   s-enviro.ads s-enviro.adb \
  22850. + +   s-finimp.ads s-finimp.adb \
  22851. + +   s-img_b.adb s-img_b.ads \
  22852. + +   s-img_c.adb s-img_c.ads s-img_f.ads s-img_f.adb \
  22853. + +   s-img_i.ads s-img_i.adb s-img_lf.adb s-img_lf.ads \
  22854. + +   s-imgllf.adb s-imgllf.ads s-imglli.adb s-imglli.ads \
  22855. + +   s-img_sf.adb s-img_sf.ads s-img_wc.ads s-img_wc.adb \
  22856. + +   s-norstr.ads s-norstr.adb \
  22857. + +   s-pooglo.ads s-pooglo.adb \
  22858. + +   s-poosiz.ads s-poosiz.adb \
  22859. + +   s-pooemp.ads s-pooemp.adb \
  22860. + +   s-pooloc.ads s-pooloc.adb \
  22861. + +   s-stopoo.ads\
  22862. + +   s-poscon.ads \
  22863. + +   s-poserr.ads \
  22864. + +   s-posrte.ads s-posrte.adb \
  22865. + +   s-postim.ads s-postim.adb \
  22866. + +   s-pthrea.ads s-pthrea.adb \
  22867. + +   s-secsta.ads s-secsta.adb \
  22868. + +   s-stalib.ads \
  22869. + +   s-std.ads s-std.adb \
  22870. + +   s-stoele.ads s-stoele.adb \
  22871. + +   s-strcon.adb s-strcon.ads \
  22872. + +   s-strequ.adb s-strequ.ads \
  22873. + +   s-strops.adb s-strops.ads \
  22874. + +   s-taprob.adb s-taprob.ads \
  22875. + +   s-tasabo.adb s-tasabo.ads \
  22876. + +   s-tasoli.adb s-tasoli.ads \
  22877. + +   s-taspda.adb s-taspda.ads \
  22878. + +   s-tasclo.adb s-tasclo.ads \
  22879. + +   s-taskin.adb s-taskin.ads \
  22880. + +   s-tasmem.adb s-tasmem.ads \
  22881. + +   s-taspri.adb s-taspri.ads \
  22882. + +   s-tasque.adb s-tasque.ads \
  22883. + +   s-tasren.adb s-tasren.ads \
  22884. + +   s-tassta.adb s-tassta.ads \
  22885. + +   s-tastal.adb s-tastal.ads \
  22886. + +   s-tasuti.ads s-tasuti.adb \
  22887. + +   s-tatise.adb s-tatise.ads \
  22888. + +   s-tcmasp.adb s-tcmasp.ads \
  22889. + +   s-timtyp.ads \
  22890. + +   system.ads \
  22891. + +   s-xn.ads s-xn.adb \
  22892. + +   s-xn_i.ads s-xn_llf.ads s-xn_si.ads \
  22893. + +   s-xn_lf.ads s-xn_lli.ads s-xn_ssi.ads \
  22894. + +   s-xn_f.ads s-xn_li.ads  s-xn_sf.ads \
  22895. + +   s-xp.adb s-xp.ads \
  22896. + +   s-xp_bml.ads s-xp_bml.adb \
  22897. + +   s-xp_bmi.ads s-xp_bmi.adb \
  22898. + +   s-xp_f.ads s-xp_i.ads s-xp_lf.ads s-xp_li.ads \
  22899. + +   s-xp_llf.ads s-xp_lli.ads \
  22900. + +   s-xp_nbm.adb s-xp_nbm.ads \
  22901. + +   s-xp_sf.ads s-xp_si.ads \
  22902. + +   s-xp_ssi.ads \
  22903. + +   s-unstyp.ads \
  22904. + +   s-valenu.ads s-valenu.adb \
  22905. + +   s-valueb.ads s-valueb.adb \
  22906. + +   s-valuec.ads s-valuec.adb \
  22907. + +   text_io.ads \
  22908. + +   unchconv.adb unchconv.ads \
  22909. + +   unchdeal.adb unchdeal.ads \
  22910. + +   io.ads io.adb \
  22911. + +   s-reatim.ads s-reatim.adb \
  22912. + +   s-retico.ads s-retico.adb \
  22913. + +   s-retide.ads s-retide.adb \
  22914. + +   s-taruty.ads s-taruty.adb
  22915. + + 
  22916. +   # Files specific to the C interpreter bytecode compiler(s).
  22917. +   BC_OBJS = bc-emit.o bc-optab.o
  22918. +   
  22919. + ***************
  22920. + *** 449,455 ****
  22921. +    stamp-bcarity stamp-bcopcode stamp-bcopname \
  22922. +    bi-arity bi-opcode bi-opname \
  22923. +    $(GCC_PASSES) $(EXTRA_PARTS) $(EXTRA_PROGRAMS) gcc-cross cccp g++ g++-cross \
  22924. + !  cc1plus cc1obj enquire protoize unprotoize specs collect2 $(USE_COLLECT2)
  22925. +   
  22926. +   # Members of libgcc1.a.
  22927. +   LIB1FUNCS = _mulsi3 _udivsi3 _divsi3 _umodsi3 _modsi3 \
  22928. + --- 741,748 ----
  22929. +    stamp-bcarity stamp-bcopcode stamp-bcopname \
  22930. +    bi-arity bi-opcode bi-opname \
  22931. +    $(GCC_PASSES) $(EXTRA_PARTS) $(EXTRA_PROGRAMS) gcc-cross cccp g++ g++-cross \
  22932. + !  cc1plus cc1obj enquire protoize unprotoize specs collect2 $(USE_COLLECT2) \
  22933. + !  gnat1 gnatbind gnatbl gnatf gnatk8 gnatchop *.ali
  22934. +   
  22935. +   # Members of libgcc1.a.
  22936. +   LIB1FUNCS = _mulsi3 _udivsi3 _divsi3 _umodsi3 _modsi3 \
  22937. + ***************
  22938. + *** 491,503 ****
  22939. +   # Avoid a lot of time thinking about remaking Makefile.in and *.def.
  22940. +   .SUFFIXES: .in .def
  22941. +   
  22942. +   Makefile: $(srcdir)/Makefile.in $(srcdir)/configure $(srcdir)/version.c \
  22943. +      $(srcdir)/config/$(xmake_file) $(srcdir)/config/$(tmake_file)
  22944. +       sh config.status
  22945. +   
  22946. +   all.internal: start.encap rest.encap
  22947. +   # This is what to compile if making a cross-compiler.
  22948. + ! # Note that we can compile enquire using the cross-compiler just build,
  22949. +   # although we can't run it on this machine.
  22950. +   all.cross: native gcc-cross g++-cross specs $(LIBGCC) stmp-headers $(STMP_FIXPROTO) $(CROSS_TEST) $(ENQUIRE) $(EXTRA_PARTS)
  22951. +   # This is what to compile if making gcc with a cross-compiler.
  22952. + --- 784,812 ----
  22953. +   # Avoid a lot of time thinking about remaking Makefile.in and *.def.
  22954. +   .SUFFIXES: .in .def
  22955. +   
  22956. + + # Say how to compile Ada programs.
  22957. + + .SUFFIXES: .ada .adb .ads
  22958. + + 
  22959. + + ADA_CC=$(CC)
  22960. + + ADAFLAGS= -gnatg -gnata
  22961. + + BOOT_ADAFLAGS= $(ADAFLAGS)
  22962. + + ALL_ADAFLAGS= $(CFLAGS) $(ADAFLAGS)
  22963. + + GNATBIND= gnatbind
  22964. + + 
  22965. + + .ada.o:
  22966. + +     $(ADA_CC) -c $(ALL_ADAFLAGS) $<
  22967. + + .adb.o:
  22968. + +     $(ADA_CC) -c $(ALL_ADAFLAGS) $<
  22969. + + .ads.o:
  22970. + +     $(ADA_CC) -c $(ALL_ADAFLAGS) $<
  22971. + + 
  22972. +   Makefile: $(srcdir)/Makefile.in $(srcdir)/configure $(srcdir)/version.c \
  22973. +      $(srcdir)/config/$(xmake_file) $(srcdir)/config/$(tmake_file)
  22974. +       sh config.status
  22975. +   
  22976. +   all.internal: start.encap rest.encap
  22977. +   # This is what to compile if making a cross-compiler.
  22978. + ! # Note that we can compile enquire using the cross-compiler just built,
  22979. +   # although we can't run it on this machine.
  22980. +   all.cross: native gcc-cross g++-cross specs $(LIBGCC) stmp-headers $(STMP_FIXPROTO) $(CROSS_TEST) $(ENQUIRE) $(EXTRA_PARTS)
  22981. +   # This is what to compile if making gcc with a cross-compiler.
  22982. + ***************
  22983. + *** 521,526 ****
  22984. + --- 830,837 ----
  22985. +   # The next two ought to depend on objc-runtime, but that doesn't work yet.
  22986. +   OBJC objc: cc1obj
  22987. +   OBJECTIVE-C objective-c: cc1obj
  22988. + + Ada ada: gnat1 gnatbind gnatbl gnatf gnatk8 gnatchop
  22989. + +     true
  22990. +   PROTO: proto
  22991. +   
  22992. +   # Really, really stupid make features, such as SUN's KEEP_STATE, may force
  22993. + ***************
  22994. + *** 583,588 ****
  22995. + --- 894,927 ----
  22996. +   cc1obj: $(P) $(OBJC_OBJS) $(OBJS) $(BC_OBJS) $(LIBDEPS)
  22997. +       $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cc1obj $(OBJC_OBJS) $(OBJS) $(BC_OBJS) $(LIBS)
  22998. +   
  22999. + + # Needs to be built with CC=gcc
  23000. + + gnat1: $(P) $(GNAT1_OBJS) $(OBJS) $(BC_OBJS) $(LIBDEPS)
  23001. + +     $(ADA_CC) $(ALL_CFLAGS) $(LDFLAGS) -o gnat1 $(GNAT1_OBJS) $(OBJS) $(BC_OBJS) $(LIBS)
  23002. + + 
  23003. + + gnatf: $(P) $(GNATF_OBJS) b_gnatf.o
  23004. + +     $(ADA_CC) $(ALL_CFLAGS) $(LDFLAGS) -o gnatf $(GNATF_OBJS) b_gnatf.o
  23005. + + 
  23006. + + gnatbind: $(P) $(GNATBIND_OBJS) b_gnatb.o
  23007. + +     $(ADA_CC) $(ALL_CFLAGS) $(LDFLAGS) -o gnatbind $(GNATBIND_OBJS)\
  23008. + +                b_gnatb.o
  23009. + + 
  23010. + + gnatk8: $(P) $(GNATK8_OBJS) b_gnatk8.o
  23011. + +     $(ADA_CC) $(ALL_CFLAGS) $(LDFLAGS) -o gnatk8 $(GNATK8_OBJS) b_gnatk8.o
  23012. + + 
  23013. + + gnatchp: $(P) gnatchop.o
  23014. + +     $(ADA_CC) $(ALL_CFLAGS) $(LDFLAGS) -o gnatchp gnatchop.o
  23015. + + 
  23016. + + gnatbl.o: gnatbl.c config.status
  23017. + +     $(ADA_CC) -c $(ALL_CFLAGS) $(INCLUDES) \
  23018. + +            -DADA_RTL_OBJ_DIR="\"$(ADA_RTL_OBJ_DIR)\"" gnatbl.c
  23019. + + 
  23020. + + gnatbl: gnatbl.o
  23021. + +     $(ADA_CC) -o gnatbl $(ALL_CFLAGS) $(LDFLAGS) gnatbl.o
  23022. + + 
  23023. + + # .s files for cross-building
  23024. + + gnat-cross: force
  23025. + +     make $(GNAT1_ADA_OBJS) CC="gcc -Bstage1/" CFLAGS="-S -gnatp"
  23026. + + 
  23027. +   # Copy float.h from its source.
  23028. +   gfloat.h: $(FLOAT_H)
  23029. +       cp $(FLOAT_H) gfloat.h
  23030. + ***************
  23031. + *** 634,640 ****
  23032. +       rm -f dummy.o dummy.c
  23033. +   
  23034. +   # This is $(LIBGCC1) for a cross-compiler.
  23035. + ! # We have no automatic way of building libgcc1.a, 
  23036. +   # so it's up to the installer to find a way to do that.
  23037. +   # This rule deliberately does not depend on libgcc1.a
  23038. +   # so that it will fail if the installer hasn't provided it.
  23039. + --- 973,979 ----
  23040. +       rm -f dummy.o dummy.c
  23041. +   
  23042. +   # This is $(LIBGCC1) for a cross-compiler.
  23043. + ! # We have no automatic way of building libgcc1.a,
  23044. +   # so it's up to the installer to find a way to do that.
  23045. +   # This rule deliberately does not depend on libgcc1.a
  23046. +   # so that it will fail if the installer hasn't provided it.
  23047. + ***************
  23048. + *** 794,799 ****
  23049. + --- 1133,1153 ----
  23050. +         GCC_FOR_TARGET="$$thisdir1/$(XGCC) -B$$thisdir1/" \
  23051. +         GCC_CFLAGS="$(GCC_CFLAGS)"
  23052. +   
  23053. + + ada-runtime : $(GNAT_RTL_OBJS) libgnat.a
  23054. + + 
  23055. + + libgnat.a : $(LIBGNAT_OBJS)
  23056. + +     -rm -f libgnat.a
  23057. + +     $(AR) rc libgnat.a $(LIBGNAT_OBJS)
  23058. + + 
  23059. + + # The pthreads emulation is presumed to only work for sunos4.1
  23060. + + # Create a dummy (links will fail) in other cases
  23061. + + stamp-pthreads :
  23062. + +     (cd threads/src; \
  23063. + +          $(MAKE) clean; \
  23064. + +          $(MAKE) CC="../../xgcc -B../../" INC2="-I../../include" `case $(target) in sparc-sun-sunos4.1*) true;; \
  23065. + +          *) echo OBJS=fake.o ;; esac`)
  23066. + +     touch stamp-pthreads
  23067. + + 
  23068. +   # Compile two additional files that are linked with every program
  23069. +   # linked using GCC on system V, for the sake of C++ constructors.
  23070. +   crtbegin.o:    crtstuff.c $(GCC_PASSES) $(CONFIG_H) gbl-ctors.h
  23071. + ***************
  23072. + *** 877,882 ****
  23073. + --- 1231,1921 ----
  23074. +   
  23075. +   g++.o : g++.c $(CONFIG_H) gvarargs.h
  23076. +   
  23077. + + # Ada language specific files.
  23078. + + 
  23079. + + ada_extra_files : treeprs.ads a-einfo.h a-sinfo.h nmake.adb \
  23080. + +     nmake.ads
  23081. + + 
  23082. + + b_gnat1.c : $(GNAT1_ADA_OBJS)
  23083. + +     $(GNATBIND) -o b_gnat1.c -n -t gnat1drv.ali
  23084. + + b_gnat1.o : b_gnat1.c
  23085. + + 
  23086. + + b_gnatf.c : $(GNATF_OBJS)
  23087. + +     $(GNATBIND) -o b_gnatf.c -t gnatfdrv.ali
  23088. + + 
  23089. + + b_gnatf.o : b_gnatf.c
  23090. + + 
  23091. + + 
  23092. + + b_gnatb.c : $(GNATBIND_OBJS)
  23093. + +     $(GNATBIND) -o b_gnatb.c -t gnatbind.ali
  23094. + + b_gnatb.o : b_gnatb.c
  23095. + + 
  23096. + + b_gnatk8.c : $(GNATK8_OBJS)
  23097. + +     $(GNATBIND) -o b_gnatk8.c -t gnatk8.ali
  23098. + + 
  23099. + + b_gnatk8.o : b_gnatk8.c
  23100. + + 
  23101. + + treeprs.ads : treeprs.adt sinfo.ads xtreeprs.spt
  23102. + +     spitbol xtreeprs.spt
  23103. + + 
  23104. + + a-einfo.h : einfo.ads einfo.adb xeinfo.spt
  23105. + +     spitbol xeinfo.spt
  23106. + + 
  23107. + + a-sinfo.h : sinfo.ads xsinfo.spt
  23108. + +     spitbol xsinfo.spt
  23109. + + 
  23110. + + nmake.adb : nmake.adt sinfo.ads xnmake.spt
  23111. + +     spitbol xnmake.spt -b
  23112. + + 
  23113. + + nmake.ads :  nmake.adt sinfo.ads xnmake.spt
  23114. + +     spitbol xnmake.spt -s
  23115. + + 
  23116. + + mkttypef.o : mkttypef.c hconfig.h machmode.h real.h
  23117. + +     $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/mkttypef.c
  23118. + + 
  23119. + + mkttypef : mkttypef.o $(HOST_LIBDEPS)
  23120. + +     $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o mkttypef \
  23121. + +      mkttypef.o $(HOST_LIBS)
  23122. + + 
  23123. + + ttypef.ads: stamp-ttypef; @true
  23124. + + stamp-ttypef : ttypef.adt mkttypef $(srcdir)/move-if-change
  23125. + +     ./mkttypef ttypef.adt > tmp-ttypef.ads
  23126. + +     $(srcdir)/move-if-change tmp-ttypef.ads ttypef.ads
  23127. + +     touch stamp-ttypef
  23128. + + 
  23129. + + ADA_INCLUDE_DIR = $(libsubdir)/adainclude
  23130. + + ADA_RTL_OBJ_DIR = $(libsubdir)/adalib
  23131. + + # Note: the strings below do not make sense for Ada strings in the OS/2
  23132. + + #  case.  This is ignored for now since the OS/2 version doesn't use
  23133. + + #  these -- there are no default locations.
  23134. + + sdefault.adb: stamp-sdefault ; @true
  23135. + + stamp-sdefault : $(srcdir)/version.c $(srcdir)/move-if-change Makefile.in
  23136. + +     echo "package body Sdefault is" >tmp-sdefault.adb
  23137. + +     echo "   function Include_Dir_Default_Name return String is" >>tmp-sdefault.adb
  23138. + +     echo "   begin" >>tmp-sdefault.adb
  23139. + +     echo "      return \"$(ADA_INCLUDE_DIR)/\";" >>tmp-sdefault.adb
  23140. + +     echo "   end Include_Dir_Default_Name;" >>tmp-sdefault.adb
  23141. + +     echo "   function Object_Dir_Default_Name return String is" >>tmp-sdefault.adb
  23142. + +     echo "   begin" >>tmp-sdefault.adb
  23143. + +     echo "      return \"$(ADA_RTL_OBJ_DIR)/\";" >>tmp-sdefault.adb
  23144. + +     echo "   end Object_Dir_Default_Name;" >>tmp-sdefault.adb
  23145. + +     echo "end Sdefault;" >> tmp-sdefault.adb
  23146. + +     $(srcdir)/move-if-change tmp-sdefault.adb sdefault.adb
  23147. + +     touch stamp-sdefault
  23148. + + 
  23149. + + A_MISC_H = a-misc.h a-tree.def
  23150. + + 
  23151. + + # special compiles for sdefault without -gnatg, to avoid long line error
  23152. + + osint.o : alloc.ads debug.ads limits.ads namet.ads opt.ads osint.ads \
  23153. + +    osint.adb output.ads sdefault.ads switch.ads system.ads \
  23154. + +    s-assert.ads s-strequ.ads s-enviro.ads \
  23155. + +    table.ads table.adb types.ads unchdeal.ads \
  23156. + +    unchdeal.adb unixlib.ads
  23157. + +     $(ADA_CC) -c $(CFLAGS) -gnata osint.adb
  23158. + + 
  23159. + + sdefault.o : sdefault.ads sdefault.adb
  23160. + +     $(ADA_CC) -c $(CFLAGS) -gnata sdefault.adb
  23161. + + 
  23162. + + a-adaint.o : $(CONFIG_H)
  23163. + + 
  23164. + + a-gtran3.o : $(CONFIG_H) $(TREE_H) obstack.h flags.h convert.h a-ada.h \
  23165. + +    a-types.h a-atree.h a-sinfo.h a-snames.h a-einfo.h a-namet.h a-string.h \
  23166. + +    a-uintp.h a-trans.h a-trans3.h a-trans4.h a-gtran3.h $(A_MISC_H) a-rtree.h
  23167. + + 
  23168. + + a-ptypes.o : $(CONFIG_H)
  23169. + + 
  23170. + + a-misc.o : $(CONFIG_H) $(TREE_H) a-ada.h a-types.h a-atree.h a-sinfo.h \
  23171. + +    a-einfo.h a-namet.h a-string.h a-uintp.h a-trans.h a-trans3.h $(A_MISC_H) \
  23172. + +    a-rtree.h flags.h $(RTL_H) expr.h insn-codes.h
  23173. + + 
  23174. + + a-trans3.o : $(CONFIG_H) $(TREE_H) flags.h a-ada.h a-types.h a-atree.h \
  23175. + +    a-sinfo.h a-einfo.h a-namet.h a-string.h a-uintp.h a-trans.h a-gtran3.h \
  23176. + +    a-trans3.h a-trans4.h $(A_MISC_H) a-rtree.h convert.h
  23177. + + 
  23178. + + a-trans4.o : $(CONFIG_H) $(TREE_H) flags.h a-ada.h a-types.h a-atree.h \
  23179. + +    a-sinfo.h a-einfo.h a-namet.h a-snames.h a-string.h a-uintp.h a-trans.h \
  23180. + +    a-trans3.h a-trans4.h $(A_MISC_H)
  23181. + + 
  23182. + + a-trans.o : $(CONFIG_H) $(TREE_H) flags.h a-ada.h a-types.h a-atree.h \
  23183. + +    a-sinfo.h a-snames.h a-einfo.h a-namet.h a-string.h a-uintp.h a-urealp.h \
  23184. + +    a-trans.h \
  23185. + +    a-trans3.h a-gtran3.h a-trans4.h $(A_MISC_H) a-rtree.h
  23186. + + 
  23187. + + a-uintp.o : $(CONFIG_H) $(TREE_H) a-ada.h a-types.h a-atree.h a-sinfo.h \
  23188. + +    a-einfo.h a-namet.h a-string.h a-uintp.h
  23189. + + 
  23190. + + a-urealp.o : $(CONFIG_H) $(TREE_H) a-ada.h a-types.h a-atree.h \
  23191. + +    a-einfo.h a-namet.h a-string.h a-uintp.h a-urealp.h
  23192. + + 
  23193. + + a-ioexce.o : ada.ads a-ioexce.ads
  23194. + + 
  23195. + + a-teioau.o : ada.ads a-ioexce.ads a-textio.ads a-teioau.ads a-teioau.adb \
  23196. + +    system.ads
  23197. + + 
  23198. + + a-textio.o : ada.ads a-ioexce.ads a-textio.ads a-textio.adb a-teioau.ads
  23199. + + 
  23200. + + ada.o : ada.ads
  23201. + + 
  23202. + + ali.o : ali.ads ali.adb binderr.ads butil.ads debug.ads limits.ads \
  23203. + +    namet.ads opt.ads osint.ads output.ads system.ads table.ads table.adb \
  23204. + +    types.ads unchdeal.ads unchdeal.adb
  23205. + + 
  23206. + + alloc.o : alloc.ads
  23207. + + 
  23208. + + atree.o : alloc.ads atree.ads atree.adb casing.ads comperr.ads debug.ads \
  23209. + +    einfo.ads elists.ads nlists.ads output.ads sinfo.ads sinput.ads \
  23210. + +    system.ads s-assert.ads table.ads table.adb types.ads unchconv.ads \
  23211. + +    unchconv.adb unchdeal.ads unchdeal.adb
  23212. + + 
  23213. + + back_end.o : alloc.ads atree.ads back_end.ads back_end.adb casing.ads \
  23214. + +    debug.ads einfo.ads elists.ads get_targ.ads lib.ads limits.ads \
  23215. + +    namet.ads nlists.ads output.ads sinfo.ads sinput.ads stringt.ads \
  23216. + +    system.ads table.ads table.adb ttypes.ads types.ads uintp.ads \
  23217. + +    unchdeal.ads unchdeal.adb urealp.ads
  23218. + + 
  23219. + + bcheck.o : ali.ads bcheck.ads bcheck.adb binderr.ads debug.ads limits.ads \
  23220. + +    namet.ads opt.ads osint.ads output.ads system.ads table.ads table.adb \
  23221. + +    types.ads unchdeal.ads unchdeal.adb
  23222. + + 
  23223. + + binde.o : ali.ads binde.ads binde.adb binderr.ads butil.ads debug.ads \
  23224. + +    limits.ads namet.ads opt.ads osint.ads output.ads system.ads \
  23225. + +    s-assert.ads table.ads table.adb types.ads unchdeal.ads unchdeal.adb
  23226. + + 
  23227. + + binderr.o : binderr.ads binderr.adb butil.ads debug.ads excep.ads \
  23228. + +    limits.ads namet.ads opt.ads osint.ads output.ads system.ads table.ads \
  23229. + +    table.adb types.ads unchdeal.ads unchdeal.adb
  23230. + + 
  23231. + + bindgen.o : ali.ads binde.ads bindgen.ads bindgen.adb debug.ads limits.ads \
  23232. + +    namet.ads opt.ads osint.ads output.ads system.ads table.ads table.adb \
  23233. + +    types.ads unchdeal.ads unchdeal.adb
  23234. + + 
  23235. + + bindusg.o : bindusg.ads bindusg.adb osint.ads output.ads system.ads \
  23236. + +    s-assert.ads types.ads unchdeal.ads unchdeal.adb
  23237. + + 
  23238. + + butil.o : butil.ads butil.adb debug.ads limits.ads namet.ads output.ads \
  23239. + +    system.ads table.ads table.adb types.ads unchdeal.ads unchdeal.adb
  23240. + + 
  23241. + + casing.o : casing.ads casing.adb csets.ads debug.ads limits.ads namet.ads \
  23242. + +    output.ads scans.ads sinput.ads system.ads table.ads table.adb \
  23243. + +    types.ads unchdeal.ads unchdeal.adb widechar.ads
  23244. + + 
  23245. + + comperr.o : alloc.ads atree.ads casing.ads comperr.ads comperr.adb \
  23246. + +    debug.ads einfo.ads errout.ads excep.ads osint.ads output.ads sinfo.ads \
  23247. + +    sinput.ads sprint.ads system.ads table.ads table.adb treepr.ads \
  23248. + +    types.ads unchdeal.ads unchdeal.adb
  23249. + + 
  23250. + + csets.o : csets.ads csets.adb opt.ads osint.ads system.ads types.ads \
  23251. + +    unchdeal.ads unchdeal.adb
  23252. + + 
  23253. + + debug.o : debug.ads debug.adb
  23254. + + 
  23255. + + debug_a.o : alloc.ads atree.ads casing.ads comperr.ads debug.ads \
  23256. + +    debug_a.ads debug_a.adb einfo.ads output.ads sinfo.ads sinput.ads \
  23257. + +    system.ads table.ads table.adb types.ads unchdeal.ads unchdeal.adb
  23258. + + 
  23259. + + einfo.o : alloc.ads atree.ads debug.ads einfo.ads einfo.adb limits.ads \
  23260. + +    namet.ads nlists.ads output.ads sinfo.ads snames.ads stand.ads \
  23261. + +    system.ads s-assert.ads table.ads table.adb types.ads unchdeal.ads \
  23262. + +    unchdeal.adb
  23263. + + 
  23264. + + elists.o : alloc.ads debug.ads elists.ads elists.adb output.ads system.ads \
  23265. + +    table.ads table.adb types.ads unchdeal.ads unchdeal.adb
  23266. + + 
  23267. + + errout.o : alloc.ads atree.ads casing.ads csets.ads debug.ads einfo.ads \
  23268. + +    errout.ads errout.adb excep.ads exp_util.ads get_targ.ads lib.ads \
  23269. + +    limits.ads namet.ads opt.ads osint.ads output.ads rtsfind.ads scans.ads \
  23270. + +    sinfo.ads sinput.ads stand.ads system.ads s-assert.ads table.ads \
  23271. + +    table.adb ttypes.ads types.ads uintp.ads uname.ads unchdeal.ads \
  23272. + +    unchdeal.adb
  23273. + + 
  23274. + + excep.o : excep.ads
  23275. + + 
  23276. + + exp_attr.o : alloc.ads atree.ads debug.ads einfo.ads exp_attr.ads \
  23277. + +    exp_attr.adb exp_ch9.ads exp_util.ads get_targ.ads itypes.ads \
  23278. + +    limits.ads namet.ads nlists.ads nmake.ads opt.ads osint.ads output.ads \
  23279. + +    rtsfind.ads sem.ads sem_eval.ads sem_res.ads sem_util.ads sinfo.ads \
  23280. + +    snames.ads stand.ads system.ads s-assert.ads table.ads table.adb \
  23281. + +    tbuild.ads ttypes.ads types.ads uintp.ads unchdeal.ads unchdeal.adb
  23282. + + 
  23283. + + exp_ch10.o : exp_ch10.ads
  23284. + + 
  23285. + + exp_ch11.o : exp_ch11.ads
  23286. + + 
  23287. + + exp_ch12.o : exp_ch12.ads
  23288. + + 
  23289. + + exp_ch13.o : alloc.ads atree.ads debug.ads einfo.ads exp_ch13.ads \
  23290. + +    exp_ch13.adb exp_ch3.ads nlists.ads nmake.ads opt.ads osint.ads \
  23291. + +    output.ads rtsfind.ads sem.ads sem_util.ads sinfo.ads snames.ads \
  23292. + +    system.ads table.ads table.adb tbuild.ads types.ads unchdeal.ads \
  23293. + +    unchdeal.adb
  23294. + + 
  23295. + + exp_ch2.o : alloc.ads atree.ads debug.ads einfo.ads exp_ch2.ads \
  23296. + +    exp_ch2.adb nlists.ads nmake.ads opt.ads osint.ads output.ads sem.ads \
  23297. + +    sinfo.ads snames.ads system.ads table.ads table.adb tbuild.ads \
  23298. + +    types.ads unchdeal.ads unchdeal.adb
  23299. + + 
  23300. + + exp_ch3.o : alloc.ads atree.ads debug.ads einfo.ads elists.ads exp_ch3.ads \
  23301. + +    exp_ch3.adb exp_ch4.ads exp_ch7.ads exp_ch9.ads exp_util.ads \
  23302. + +    get_targ.ads itypes.ads limits.ads namet.ads nlists.ads nmake.ads \
  23303. + +    opt.ads osint.ads output.ads rtsfind.ads sem.ads sem_eval.ads \
  23304. + +    sem_res.ads sem_util.ads sinfo.ads snames.ads stand.ads system.ads \
  23305. + +    s-assert.ads table.ads table.adb tbuild.ads ttypes.ads types.ads \
  23306. + +    uintp.ads unchdeal.ads unchdeal.adb urealp.ads
  23307. + + 
  23308. + + exp_ch4.o : alloc.ads atree.ads debug.ads einfo.ads elists.ads exp_ch3.ads \
  23309. + +    exp_ch4.ads exp_ch4.adb exp_ch7.ads exp_ch9.ads exp_util.ads \
  23310. + +    fix_util.ads get_targ.ads itypes.ads limits.ads namet.ads nlists.ads \
  23311. + +    nmake.ads opt.ads osint.ads output.ads rtsfind.ads sem.ads sem_ch5.ads \
  23312. + +    sem_res.ads sem_util.ads sinfo.ads sinfo-cn.ads snames.ads stand.ads \
  23313. + +    system.ads s-assert.ads table.ads table.adb tbuild.ads ttypes.ads \
  23314. + +    types.ads uintp.ads unchdeal.ads unchdeal.adb urealp.ads
  23315. + + 
  23316. + + exp_ch5.o : alloc.ads atree.ads debug.ads einfo.ads exp_ch5.ads \
  23317. + +    exp_ch5.adb exp_ch7.ads exp_ch9.ads exp_util.ads get_targ.ads \
  23318. + +    limits.ads namet.ads nlists.ads nmake.ads opt.ads osint.ads output.ads \
  23319. + +    rtsfind.ads sem.ads sem_res.ads sem_util.ads sinfo.ads snames.ads \
  23320. + +    stand.ads system.ads table.ads table.adb tbuild.ads ttypes.ads \
  23321. + +    types.ads uintp.ads unchdeal.ads unchdeal.adb urealp.ads
  23322. + + 
  23323. + + exp_ch6.o : alloc.ads atree.ads debug.ads einfo.ads elists.ads errout.ads \
  23324. + +    exp_ch6.ads exp_ch6.adb exp_ch7.ads exp_ch9.ads exp_intr.ads \
  23325. + +    exp_util.ads limits.ads namet.ads nlists.ads nmake.ads opt.ads \
  23326. + +    osint.ads output.ads rtsfind.ads sem.ads sem_ch3.ads sem_disp.ads \
  23327. + +    sem_util.ads sinfo.ads snames.ads stand.ads system.ads s-assert.ads \
  23328. + +    table.ads table.adb tbuild.ads types.ads unchdeal.ads unchdeal.adb
  23329. + + 
  23330. + + exp_ch7.o : alloc.ads atree.ads debug.ads einfo.ads elists.ads exp_ch7.ads \
  23331. + +    exp_ch7.adb exp_ch9.ads exp_util.ads expand.ads limits.ads namet.ads \
  23332. + +    nlists.ads nmake.ads opt.ads osint.ads output.ads rtsfind.ads sem.ads \
  23333. + +    sem_ch7.ads sem_ch8.ads sem_res.ads sem_util.ads sinfo.ads snames.ads \
  23334. + +    stand.ads system.ads s-assert.ads table.ads table.adb tbuild.ads \
  23335. + +    types.ads unchdeal.ads unchdeal.adb
  23336. + + 
  23337. + + exp_ch8.o : exp_ch8.ads
  23338. + + 
  23339. + + exp_ch9.o : alloc.ads atree.ads debug.ads einfo.ads exp_ch3.ads \
  23340. + +    exp_ch6.ads exp_ch9.ads exp_ch9.adb exp_util.ads get_targ.ads \
  23341. + +    limits.ads namet.ads nlists.ads nmake.ads opt.ads osint.ads output.ads \
  23342. + +    rtsfind.ads sem.ads sem_ch11.ads sem_res.ads sem_util.ads sinfo.ads \
  23343. + +    snames.ads stand.ads system.ads s-assert.ads table.ads table.adb \
  23344. + +    tbuild.ads ttypes.ads types.ads uintp.ads unchdeal.ads unchdeal.adb
  23345. + + 
  23346. + + exp_intr.o : alloc.ads atree.ads debug.ads einfo.ads exp_intr.ads \
  23347. + +    exp_intr.adb exp_util.ads limits.ads namet.ads nlists.ads nmake.ads \
  23348. + +    opt.ads osint.ads output.ads rtsfind.ads sem.ads sem_util.ads sinfo.ads \
  23349. + +    snames.ads system.ads s-assert.ads table.ads table.adb tbuild.ads \
  23350. + +    types.ads unchdeal.ads unchdeal.adb
  23351. + + 
  23352. + + exp_prag.o : alloc.ads atree.ads debug.ads einfo.ads exp_prag.ads \
  23353. + +    exp_prag.adb exp_util.ads nlists.ads nmake.ads opt.ads osint.ads \
  23354. + +    output.ads rtsfind.ads sem.ads sinfo.ads snames.ads system.ads \
  23355. + +    s-assert.ads table.ads table.adb types.ads unchdeal.ads unchdeal.adb
  23356. + + 
  23357. + + exp_util.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads elists.ads \
  23358. + +    errout.ads exp_util.ads exp_util.adb get_targ.ads itypes.ads lib.ads \
  23359. + +    limits.ads namet.ads nlists.ads nmake.ads opt.ads osint.ads output.ads \
  23360. + +    rtsfind.ads sem.ads sem_ch13.ads sem_res.ads sem_util.ads sinfo.ads \
  23361. + +    sinput.ads snames.ads stand.ads system.ads table.ads table.adb \
  23362. + +    tbuild.ads ttypes.ads types.ads uintp.ads unchdeal.ads unchdeal.adb
  23363. + + 
  23364. + + expand.o : alloc.ads atree.ads debug.ads debug_a.ads einfo.ads \
  23365. + +    exp_attr.ads exp_ch13.ads exp_ch2.ads exp_ch3.ads exp_ch4.ads \
  23366. + +    exp_ch5.ads exp_ch6.ads exp_ch7.ads exp_ch9.ads exp_prag.ads \
  23367. + +    exp_util.ads expand.ads expand.adb output.ads rtsfind.ads sinfo.ads \
  23368. + +    system.ads table.ads table.adb types.ads unchdeal.ads unchdeal.adb
  23369. + + 
  23370. + + fix_util.o : debug.ads fix_util.ads fix_util.adb get_targ.ads output.ads \
  23371. + +    system.ads table.ads table.adb ttypes.ads types.ads uintp.ads \
  23372. + +    unchdeal.ads unchdeal.adb urealp.ads
  23373. + + 
  23374. + + fname.o : debug.ads fname.ads fname.adb krunch.ads limits.ads namet.ads \
  23375. + +    opt.ads osint.ads output.ads system.ads s-assert.ads table.ads \
  23376. + +    table.adb types.ads unchdeal.ads unchdeal.adb widechar.ads
  23377. + + 
  23378. + + frontend.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads elists.ads \
  23379. + +    errout.ads frontend.ads frontend.adb lib.ads limits.ads namet.ads \
  23380. + +    nlists.ads opt.ads osint.ads output.ads par.ads rtsfind.ads scn.ads \
  23381. + +    sem.ads sinfo.ads sinput.ads snames.ads sprint.ads stand.ads system.ads \
  23382. + +    table.ads table.adb tbuild.ads treepr.ads types.ads unchdeal.ads \
  23383. + +    unchdeal.adb usage.ads
  23384. + + 
  23385. + + get_targ.o : get_targ.ads get_targ.adb system.ads s-assert.ads types.ads \
  23386. + +    unchdeal.ads unchdeal.adb
  23387. + + 
  23388. + + gnatk8.o : ada.ads a-ioexce.ads a-textio.ads a-textio.adb a-teioau.ads \
  23389. + +    gnatk8.adb krunch.ads system.ads s-enviro.ads
  23390. + + 
  23391. + + gnat1drv.o : alloc.ads atree.ads back_end.ads casing.ads comperr.ads \
  23392. + +    csets.ads debug.ads einfo.ads errout.ads excep.ads frontend.ads \
  23393. + +    get_targ.ads gnat1drv.ads gnat1drv.adb gnatvsn.ads lib.ads limits.ads \
  23394. + +    namet.ads opt.ads osint.ads output.ads par.ads sinfo.ads snames.ads \
  23395. + +    sprint.ads stringt.ads system.ads s-assert.ads s-secsta.ads \
  23396. + +    s-stalib.ads s-stoele.ads s-taspda.ads s-tasoli.ads table.ads table.adb \
  23397. + +    treepr.ads ttypes.ads types.ads uintp.ads unchconv.ads unchconv.adb \
  23398. + +    unchdeal.ads unchdeal.adb urealp.ads usage.ads
  23399. + + 
  23400. + + gnatbind.o : ali.ads bcheck.ads binde.ads binderr.ads bindgen.ads \
  23401. + +    bindusg.ads butil.ads debug.ads excep.ads gnatbind.adb gnatvsn.ads \
  23402. + +    limits.ads namet.ads opt.ads osint.ads output.ads system.ads \
  23403. + +    s-secsta.ads s-stalib.ads s-stoele.ads s-taspda.ads s-tasoli.ads \
  23404. + +    table.ads table.adb types.ads unchconv.ads unchconv.adb unchdeal.ads \
  23405. + +    unchdeal.adb
  23406. + + 
  23407. + + gnatfdrv.o : casing.ads comperr.ads csets.ads debug.ads einfo.ads \
  23408. + +    errout.ads excep.ads frontend.ads get_targ.ads gnatfdrv.ads \
  23409. + +    gnatfdrv.adb gnatvsn.ads lib.ads limits.ads namet.ads opt.ads osint.ads \
  23410. + +    output.ads par.ads snames.ads sprint.ads stringt.ads system.ads \
  23411. + +    s-assert.ads table.ads table.adb treepr.ads ttypes.ads types.ads \
  23412. + +    uintp.ads unchdeal.ads unchdeal.adb urealp.ads usage.ads xref.ads \
  23413. + +    xref_tab.ads
  23414. + + 
  23415. + + gnatvsn.o : gnatvsn.ads
  23416. + + 
  23417. + + itypes.o : alloc.ads atree.ads debug.ads einfo.ads itypes.ads itypes.adb \
  23418. + +    limits.ads namet.ads nlists.ads output.ads sem_util.ads sinfo.ads \
  23419. + +    stand.ads system.ads s-assert.ads table.ads table.adb types.ads \
  23420. + +    unchdeal.ads unchdeal.adb
  23421. + + 
  23422. + + krunch.o : krunch.ads krunch.adb
  23423. + + 
  23424. + + lib.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads errout.ads \
  23425. + +    excep.ads fname.ads gnatvsn.ads lib.ads lib.adb lib-list.adb \
  23426. + +    lib-load.adb lib-sort.adb lib-writ.adb limits.ads namet.ads nlists.ads \
  23427. + +    osint.ads output.ads par.ads scn.ads sinfo.ads sinput.ads system.ads \
  23428. + +    table.ads table.adb types.ads uname.ads unchdeal.ads unchdeal.adb
  23429. + + 
  23430. + + limits.o : limits.ads
  23431. + + 
  23432. + + namet.o : alloc.ads debug.ads limits.ads namet.ads namet.adb \
  23433. + +    namet-hash.adb output.ads system.ads s-assert.ads table.ads table.adb \
  23434. + +    types.ads unchdeal.ads unchdeal.adb widechar.ads
  23435. + + 
  23436. + + nlists.o : alloc.ads atree.ads debug.ads einfo.ads nlists.ads nlists.adb \
  23437. + +    output.ads sinfo.ads system.ads s-assert.ads table.ads table.adb \
  23438. + +    types.ads unchdeal.ads unchdeal.adb
  23439. + + 
  23440. + + nmake.o : alloc.ads atree.ads debug.ads einfo.ads nlists.ads nmake.ads \
  23441. + +    nmake.adb output.ads sinfo.ads snames.ads system.ads table.ads \
  23442. + +    table.adb types.ads unchdeal.ads unchdeal.adb
  23443. + + 
  23444. + + opt.o : opt.ads osint.ads system.ads types.ads unchdeal.ads unchdeal.adb
  23445. + + 
  23446. + + osint.o : debug.ads limits.ads namet.ads opt.ads osint.ads osint.adb \
  23447. + +    output.ads sdefault.ads switch.ads system.ads s-assert.ads s-enviro.ads \
  23448. + +    s-secsta.ads s-tasoli.ads table.ads table.adb types.ads unchdeal.ads \
  23449. + +    unchdeal.adb unixlib.ads
  23450. + + 
  23451. + + output.o : output.ads output.adb system.ads types.ads unchdeal.ads \
  23452. + +    unchdeal.adb unixlib.ads
  23453. + + 
  23454. + + par.o : alloc.ads atree.ads casing.ads csets.ads debug.ads einfo.ads \
  23455. + +    elists.ads errout.ads excep.ads fname.ads get_targ.ads lib.ads \
  23456. + +    limits.ads namet.ads nlists.ads nmake.ads opt.ads osint.ads output.ads \
  23457. + +    par.ads par.adb par-ch10.adb par-ch11.adb par-ch12.adb par-ch13.adb \
  23458. + +    par-ch2.adb par-ch3.adb par-ch4.adb par-ch5.adb par-ch6.adb par-ch7.adb \
  23459. + +    par-ch8.adb par-ch9.adb par-endh.adb par-labl.adb par-load.adb \
  23460. + +    par-prag.adb par-sync.adb par-tchk.adb par-util.adb scans.ads scn.ads \
  23461. + +    sinfo.ads sinfo-cn.ads sinput.ads snames.ads style.ads system.ads \
  23462. + +    s-assert.ads table.ads table.adb tbuild.ads ttypes.ads types.ads \
  23463. + +    uintp.ads uname.ads unchdeal.ads unchdeal.adb
  23464. + + 
  23465. + + rtsfind.o : alloc.ads atree.ads casing.ads csets.ads debug.ads einfo.ads \
  23466. + +    excep.ads fname.ads lib.ads limits.ads namet.ads nlists.ads nmake.ads \
  23467. + +    opt.ads osint.ads output.ads rtsfind.ads rtsfind.adb sem.ads \
  23468. + +    sem_util.ads sinfo.ads snames.ads system.ads s-assert.ads table.ads \
  23469. + +    table.adb tbuild.ads types.ads unchdeal.ads unchdeal.adb
  23470. + + 
  23471. + + s-assert.o : system.ads s-assert.ads
  23472. + + 
  23473. + + s-enviro.o : system.ads s-enviro.ads s-enviro.adb
  23474. + + 
  23475. + + s-secsta.o : system.ads s-secsta.ads s-secsta.adb s-stoele.ads \
  23476. + +    s-taspda.ads unchconv.ads unchconv.adb unchdeal.ads unchdeal.adb
  23477. + + 
  23478. + + s-stalib.o : system.ads s-secsta.ads s-stalib.ads s-stoele.ads \
  23479. + +    s-taspda.ads s-tasoli.ads unchconv.ads unchconv.adb unchdeal.ads \
  23480. + +    unchdeal.adb
  23481. + + 
  23482. + + s-stoele.o : system.ads s-stoele.ads s-stoele.adb unchconv.ads \
  23483. + +    unchconv.adb
  23484. + + 
  23485. + + s-strcon.o : system.ads s-strcon.ads s-strcon.adb
  23486. + + 
  23487. + + s-strequ.o : system.ads s-strequ.ads s-strequ.adb
  23488. + + 
  23489. + + s-strops.o : system.ads s-strops.ads s-strops.adb
  23490. + + 
  23491. + + s-tasoli.o : system.ads s-taspda.ads s-tasoli.ads s-tasoli.adb
  23492. + + 
  23493. + + s-taspda.o : system.ads s-secsta.ads s-taspda.ads s-taspda.adb \
  23494. + +    s-tasoli.ads unchconv.ads unchconv.adb unchdeal.ads unchdeal.adb
  23495. + + 
  23496. + + scans.o : scans.ads scans.adb system.ads types.ads unchdeal.ads \
  23497. + +    unchdeal.adb
  23498. + + 
  23499. + + scn.o : alloc.ads atree.ads casing.ads csets.ads debug.ads einfo.ads \
  23500. + +    errout.ads get_targ.ads lib.ads limits.ads namet.ads opt.ads osint.ads \
  23501. + +    output.ads scans.ads scn.ads scn.adb scn-nlit.adb scn-slit.adb \
  23502. + +    sinfo.ads sinput.ads snames.ads stringt.ads style.ads system.ads \
  23503. + +    s-assert.ads table.ads table.adb ttypes.ads types.ads uintp.ads \
  23504. + +    unchdeal.ads unchdeal.adb urealp.ads widechar.ads
  23505. + + 
  23506. + + sdefault.o : sdefault.ads sdefault.adb
  23507. + + 
  23508. + + sem.o : alloc.ads atree.ads casing.ads comperr.ads debug.ads debug_a.ads \
  23509. + +    einfo.ads errout.ads exp_util.ads expand.ads lib.ads limits.ads \
  23510. + +    namet.ads nlists.ads opt.ads osint.ads output.ads rtsfind.ads sem.ads \
  23511. + +    sem.adb sem_attr.ads sem_ch10.ads sem_ch11.ads sem_ch12.ads \
  23512. + +    sem_ch13.ads sem_ch3.ads sem_ch4.ads sem_ch5.ads sem_ch6.ads \
  23513. + +    sem_ch7.ads sem_ch8.ads sem_ch9.ads sem_prag.ads sem_util.ads sinfo.ads \
  23514. + +    snames.ads stand.ads system.ads s-assert.ads table.ads table.adb \
  23515. + +    types.ads unchdeal.ads unchdeal.adb
  23516. + + 
  23517. + + sem_aggr.o : alloc.ads atree.ads debug.ads einfo.ads elists.ads errout.ads \
  23518. + +    exp_util.ads get_targ.ads itypes.ads limits.ads namet.ads nlists.ads \
  23519. + +    nmake.ads opt.ads osint.ads output.ads rtsfind.ads sem.ads sem_aggr.ads \
  23520. + +    sem_aggr.adb sem_ch3.ads sem_ch5.ads sem_eval.ads sem_res.ads \
  23521. + +    sem_type.ads sem_util.ads sinfo.ads snames.ads stand.ads system.ads \
  23522. + +    table.ads table.adb tbuild.ads ttypes.ads types.ads uintp.ads \
  23523. + +    unchdeal.ads unchdeal.adb
  23524. + + 
  23525. + + sem_attr.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads errout.ads \
  23526. + +    excep.ads get_targ.ads limits.ads namet.ads nlists.ads nmake.ads \
  23527. + +    opt.ads osint.ads output.ads rtsfind.ads sem.ads sem_attr.ads \
  23528. + +    sem_attr.adb sem_ch4.ads sem_ch6.ads sem_ch8.ads sem_eval.ads \
  23529. + +    sem_res.ads sem_type.ads sem_util.ads sinfo.ads sinput.ads snames.ads \
  23530. + +    stand.ads stringt.ads system.ads s-assert.ads table.ads table.adb \
  23531. + +    tbuild.ads ttypef.ads ttypes.ads types.ads uintp.ads unchdeal.ads \
  23532. + +    unchdeal.adb urealp.ads
  23533. + + 
  23534. + + sem_ch10.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads errout.ads \
  23535. + +    lib.ads limits.ads namet.ads nlists.ads nmake.ads opt.ads osint.ads \
  23536. + +    output.ads sem.ads sem_ch10.ads sem_ch10.adb sem_ch6.ads sem_ch7.ads \
  23537. + +    sem_ch8.ads sem_util.ads sinfo.ads sinfo-cn.ads sinput.ads snames.ads \
  23538. + +    stand.ads stringt.ads system.ads table.ads table.adb tbuild.ads \
  23539. + +    types.ads uname.ads unchdeal.ads unchdeal.adb
  23540. + + 
  23541. + + sem_ch11.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads errout.ads \
  23542. + +    lib.ads limits.ads namet.ads nlists.ads opt.ads osint.ads output.ads \
  23543. + +    sem.ads sem_ch11.ads sem_ch11.adb sem_ch5.ads sem_ch8.ads sem_util.ads \
  23544. + +    sinfo.ads snames.ads stand.ads system.ads table.ads table.adb types.ads \
  23545. + +    unchdeal.ads unchdeal.adb
  23546. + + 
  23547. + + sem_ch12.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads elists.ads \
  23548. + +    errout.ads excep.ads exp_util.ads lib.ads limits.ads namet.ads \
  23549. + +    nlists.ads nmake.ads opt.ads osint.ads output.ads rtsfind.ads sem.ads \
  23550. + +    sem_ch10.ads sem_ch12.ads sem_ch12.adb sem_ch13.ads sem_ch3.ads \
  23551. + +    sem_ch6.ads sem_ch7.ads sem_ch8.ads sem_res.ads sem_util.ads sinfo.ads \
  23552. + +    sinfo-cn.ads snames.ads stand.ads system.ads s-assert.ads table.ads \
  23553. + +    table.adb tbuild.ads types.ads uname.ads unchdeal.ads unchdeal.adb
  23554. + + 
  23555. + + sem_ch13.o : alloc.ads atree.ads debug.ads einfo.ads elists.ads errout.ads \
  23556. + +    excep.ads exp_util.ads get_targ.ads itypes.ads limits.ads namet.ads \
  23557. + +    nlists.ads nmake.ads opt.ads osint.ads output.ads rtsfind.ads sem.ads \
  23558. + +    sem_ch13.ads sem_ch13.adb sem_ch3.ads sem_ch8.ads sem_eval.ads \
  23559. + +    sem_res.ads sem_util.ads sinfo.ads snames.ads stand.ads system.ads \
  23560. + +    table.ads table.adb ttypes.ads types.ads uintp.ads unchdeal.ads \
  23561. + +    unchdeal.adb
  23562. + + 
  23563. + + sem_ch3.o : alloc.ads atree.ads debug.ads einfo.ads elists.ads errout.ads \
  23564. + +    exp_ch3.ads exp_util.ads get_targ.ads itypes.ads limits.ads namet.ads \
  23565. + +    nlists.ads nmake.ads opt.ads osint.ads output.ads rtsfind.ads sem.ads \
  23566. + +    sem_ch12.ads sem_ch13.ads sem_ch3.ads sem_ch3.adb sem_ch5.ads \
  23567. + +    sem_ch6.ads sem_ch7.ads sem_ch8.ads sem_eval.ads sem_res.ads \
  23568. + +    sem_type.ads sem_util.ads sinfo.ads snames.ads stand.ads system.ads \
  23569. + +    s-assert.ads table.ads table.adb tbuild.ads ttypes.ads types.ads \
  23570. + +    uintp.ads unchdeal.ads unchdeal.adb urealp.ads
  23571. + + 
  23572. + + sem_ch4.o : alloc.ads atree.ads debug.ads einfo.ads errout.ads exp_ch4.ads \
  23573. + +    itypes.ads limits.ads namet.ads nlists.ads nmake.ads opt.ads osint.ads \
  23574. + +    output.ads sem.ads sem_ch3.ads sem_ch4.ads sem_ch4.adb sem_ch8.ads \
  23575. + +    sem_type.ads sem_util.ads sinfo.ads snames.ads stand.ads system.ads \
  23576. + +    table.ads table.adb tbuild.ads types.ads unchdeal.ads unchdeal.adb
  23577. + + 
  23578. + + sem_ch5.o : alloc.ads atree.ads debug.ads einfo.ads errout.ads exp_ch7.ads \
  23579. + +    get_targ.ads itypes.ads limits.ads namet.ads nlists.ads opt.ads \
  23580. + +    osint.ads output.ads sem.ads sem_ch3.ads sem_ch5.ads sem_ch5.adb \
  23581. + +    sem_ch8.ads sem_disp.ads sem_eval.ads sem_res.ads sem_type.ads \
  23582. + +    sem_util.ads sinfo.ads snames.ads stand.ads system.ads s-assert.ads \
  23583. + +    table.ads table.adb ttypes.ads types.ads uintp.ads unchdeal.ads \
  23584. + +    unchdeal.adb
  23585. + + 
  23586. + + sem_ch6.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads errout.ads \
  23587. + +    exp_ch7.ads exp_util.ads lib.ads limits.ads namet.ads nlists.ads \
  23588. + +    nmake.ads opt.ads osint.ads output.ads rtsfind.ads sem.ads sem_ch12.ads \
  23589. + +    sem_ch3.ads sem_ch4.ads sem_ch6.ads sem_ch6.adb sem_ch8.ads \
  23590. + +    sem_disp.ads sem_res.ads sem_util.ads sinfo.ads sinfo-cn.ads sinput.ads \
  23591. + +    snames.ads stand.ads stringt.ads system.ads table.ads table.adb \
  23592. + +    tbuild.ads treepr.ads types.ads unchdeal.ads unchdeal.adb
  23593. + + 
  23594. + + sem_ch7.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads elists.ads \
  23595. + +    errout.ads excep.ads exp_util.ads itypes.ads lib.ads limits.ads \
  23596. + +    namet.ads nlists.ads opt.ads osint.ads output.ads rtsfind.ads sem.ads \
  23597. + +    sem_ch12.ads sem_ch13.ads sem_ch3.ads sem_ch7.ads sem_ch7.adb \
  23598. + +    sem_ch8.ads sem_util.ads sinfo.ads sinput.ads snames.ads stand.ads \
  23599. + +    system.ads table.ads table.adb types.ads unchdeal.ads unchdeal.adb
  23600. + + 
  23601. + + sem_ch8.o : alloc.ads atree.ads debug.ads einfo.ads errout.ads limits.ads \
  23602. + +    namet.ads nlists.ads nmake.ads opt.ads osint.ads output.ads sem.ads \
  23603. + +    sem_attr.ads sem_ch3.ads sem_ch4.ads sem_ch5.ads sem_ch6.ads \
  23604. + +    sem_ch8.ads sem_ch8.adb sem_res.ads sem_type.ads sem_util.ads sinfo.ads \
  23605. + +    sinfo-cn.ads snames.ads stand.ads system.ads s-assert.ads table.ads \
  23606. + +    table.adb tbuild.ads types.ads unchdeal.ads unchdeal.adb
  23607. + + 
  23608. + + sem_ch9.o : alloc.ads atree.ads debug.ads einfo.ads errout.ads exp_ch7.ads \
  23609. + +    exp_ch9.ads get_targ.ads limits.ads namet.ads nlists.ads nmake.ads \
  23610. + +    opt.ads osint.ads output.ads sem.ads sem_ch3.ads sem_ch4.ads \
  23611. + +    sem_ch5.ads sem_ch6.ads sem_ch8.ads sem_ch9.ads sem_ch9.adb sem_res.ads \
  23612. + +    sem_util.ads sinfo.ads snames.ads stand.ads system.ads table.ads \
  23613. + +    table.adb tbuild.ads ttypes.ads types.ads uintp.ads unchdeal.ads \
  23614. + +    unchdeal.adb
  23615. + + 
  23616. + + sem_disp.o : alloc.ads atree.ads debug.ads einfo.ads elists.ads errout.ads \
  23617. + +    exp_ch6.ads nlists.ads output.ads sem_disp.ads sem_disp.adb \
  23618. + +    sem_util.ads sinfo.ads system.ads table.ads table.adb types.ads \
  23619. + +    unchdeal.ads unchdeal.adb
  23620. + + 
  23621. + + sem_eval.o : alloc.ads atree.ads debug.ads einfo.ads errout.ads \
  23622. + +    get_targ.ads itypes.ads limits.ads namet.ads nlists.ads nmake.ads \
  23623. + +    opt.ads osint.ads output.ads sem.ads sem_eval.ads sem_eval.adb \
  23624. + +    sem_res.ads sem_util.ads sinfo.ads snames.ads stand.ads stringt.ads \
  23625. + +    system.ads s-assert.ads table.ads table.adb tbuild.ads ttypes.ads \
  23626. + +    types.ads uintp.ads unchdeal.ads unchdeal.adb urealp.ads
  23627. + + 
  23628. + + sem_intr.o : alloc.ads atree.ads debug.ads einfo.ads errout.ads \
  23629. + +    get_targ.ads limits.ads namet.ads output.ads sem_ch13.ads sem_intr.ads \
  23630. + +    sem_intr.adb sinfo.ads snames.ads stand.ads system.ads table.ads \
  23631. + +    table.adb ttypes.ads types.ads uintp.ads unchdeal.ads unchdeal.adb
  23632. + + 
  23633. + + sem_prag.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads errout.ads \
  23634. + +    excep.ads exp_util.ads get_targ.ads lib.ads limits.ads namet.ads \
  23635. + +    nlists.ads nmake.ads opt.ads osint.ads output.ads rtsfind.ads sem.ads \
  23636. + +    sem_ch8.ads sem_eval.ads sem_intr.ads sem_prag.ads sem_prag.adb \
  23637. + +    sem_res.ads sem_util.ads sinfo.ads snames.ads stand.ads stringt.ads \
  23638. + +    system.ads table.ads table.adb tbuild.ads ttypes.ads types.ads \
  23639. + +    uintp.ads unchdeal.ads unchdeal.adb
  23640. + + 
  23641. + + sem_res.o : alloc.ads atree.ads debug.ads debug_a.ads einfo.ads elists.ads \
  23642. + +    errout.ads exp_util.ads expand.ads get_targ.ads itypes.ads limits.ads \
  23643. + +    namet.ads nlists.ads nmake.ads opt.ads osint.ads output.ads rtsfind.ads \
  23644. + +    sem.ads sem_aggr.ads sem_attr.ads sem_ch13.ads sem_ch3.ads sem_ch4.ads \
  23645. + +    sem_ch5.ads sem_ch8.ads sem_disp.ads sem_eval.ads sem_res.ads \
  23646. + +    sem_res.adb sem_type.ads sem_util.ads sinfo.ads snames.ads stand.ads \
  23647. + +    stringt.ads system.ads s-assert.ads table.ads table.adb tbuild.ads \
  23648. + +    treepr.ads ttypes.ads types.ads uintp.ads unchdeal.ads unchdeal.adb
  23649. + + 
  23650. + + sem_type.o : alloc.ads atree.ads debug.ads einfo.ads errout.ads limits.ads \
  23651. + +    namet.ads output.ads sem_ch6.ads sem_ch8.ads sem_type.ads sem_type.adb \
  23652. + +    sem_util.ads sinfo.ads snames.ads stand.ads system.ads s-assert.ads \
  23653. + +    table.ads table.adb types.ads unchdeal.ads unchdeal.adb
  23654. + + 
  23655. + + sem_util.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads errout.ads \
  23656. + +    get_targ.ads itypes.ads limits.ads namet.ads nlists.ads nmake.ads \
  23657. + +    opt.ads osint.ads output.ads scans.ads scn.ads sem.ads sem_eval.ads \
  23658. + +    sem_res.ads sem_type.ads sem_util.ads sem_util.adb sinfo.ads sinput.ads \
  23659. + +    snames.ads stand.ads style.ads system.ads s-assert.ads s-secsta.ads \
  23660. + +    s-strcon.ads s-tasoli.ads table.ads table.adb tbuild.ads ttypes.ads \
  23661. + +    types.ads uintp.ads unchdeal.ads unchdeal.adb urealp.ads
  23662. + + 
  23663. + + sinfo-cn.o : alloc.ads atree.ads debug.ads einfo.ads output.ads sinfo.ads \
  23664. + +    sinfo-cn.ads sinfo-cn.adb system.ads table.ads table.adb types.ads \
  23665. + +    unchdeal.ads unchdeal.adb
  23666. + + 
  23667. + + sinfo.o : alloc.ads atree.ads debug.ads einfo.ads output.ads sinfo.ads \
  23668. + +    sinfo.adb system.ads s-assert.ads table.ads table.adb types.ads \
  23669. + +    unchdeal.ads unchdeal.adb
  23670. + + 
  23671. + + sinput.o : alloc.ads casing.ads debug.ads limits.ads namet.ads osint.ads \
  23672. + +    output.ads sinput.ads sinput.adb system.ads s-assert.ads table.ads \
  23673. + +    table.adb types.ads unchdeal.ads unchdeal.adb
  23674. + + 
  23675. + + snames.o : debug.ads limits.ads namet.ads output.ads snames.ads snames.adb \
  23676. + +    system.ads s-assert.ads table.ads table.adb types.ads unchdeal.ads \
  23677. + +    unchdeal.adb
  23678. + + 
  23679. + + sprint.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads get_targ.ads \
  23680. + +    itypes.ads lib.ads limits.ads namet.ads nlists.ads output.ads \
  23681. + +    sem_util.ads sinfo.ads sprint.ads sprint.adb stand.ads stringt.ads \
  23682. + +    system.ads table.ads table.adb ttypes.ads types.ads uintp.ads uname.ads \
  23683. + +    unchdeal.ads unchdeal.adb urealp.ads
  23684. + + 
  23685. + + stand.o : alloc.ads atree.ads csets.ads debug.ads einfo.ads get_targ.ads \
  23686. + +    gnatvsn.ads limits.ads namet.ads nlists.ads nmake.ads opt.ads osint.ads \
  23687. + +    output.ads sem_util.ads sinfo.ads snames.ads stand.ads stand.adb \
  23688. + +    system.ads s-assert.ads table.ads table.adb ttypef.ads ttypes.ads \
  23689. + +    types.ads uintp.ads unchdeal.ads unchdeal.adb
  23690. + + 
  23691. + + stringt.o : alloc.ads debug.ads output.ads stringt.ads stringt.adb \
  23692. + +    system.ads s-assert.ads table.ads table.adb types.ads unchdeal.ads \
  23693. + +    unchdeal.adb
  23694. + + 
  23695. + + style.o : alloc.ads atree.ads casing.ads csets.ads debug.ads einfo.ads \
  23696. + +    errout.ads limits.ads namet.ads output.ads scans.ads sinfo.ads \
  23697. + +    sinput.ads style.ads style.adb system.ads table.ads table.adb types.ads \
  23698. + +    unchdeal.ads unchdeal.adb
  23699. + + 
  23700. + + switch.o : debug.ads opt.ads osint.ads output.ads switch.ads switch.adb \
  23701. + +    system.ads types.ads unchdeal.ads unchdeal.adb
  23702. + + 
  23703. + + system.o : system.ads
  23704. + + 
  23705. + + tbuild.o : alloc.ads atree.ads debug.ads einfo.ads errout.ads limits.ads \
  23706. + +    namet.ads nlists.ads nmake.ads output.ads sinfo.ads stand.ads \
  23707. + +    system.ads s-assert.ads table.ads table.adb tbuild.ads tbuild.adb \
  23708. + +    types.ads unchdeal.ads unchdeal.adb
  23709. + + 
  23710. + + treepr.o : alloc.ads atree.ads casing.ads comperr.ads csets.ads debug.ads \
  23711. + +    einfo.ads elists.ads get_targ.ads itypes.ads lib.ads limits.ads \
  23712. + +    namet.ads nlists.ads output.ads sem_util.ads sinfo.ads sinput.ads \
  23713. + +    stand.ads stringt.ads system.ads table.ads table.adb treepr.ads \
  23714. + +    treepr.adb treeprs.ads ttypes.ads types.ads uintp.ads uname.ads \
  23715. + +    unchdeal.ads unchdeal.adb urealp.ads
  23716. + + 
  23717. + + treeprs.o : sinfo.ads system.ads treeprs.ads types.ads unchdeal.ads \
  23718. + +    unchdeal.adb
  23719. + + 
  23720. + + ttypef.o : ttypef.ads
  23721. + + 
  23722. + + ttypes.o : get_targ.ads system.ads ttypes.ads types.ads unchdeal.ads \
  23723. + +    unchdeal.adb
  23724. + + 
  23725. + + types.o : system.ads types.ads types.adb unchdeal.ads unchdeal.adb
  23726. + + 
  23727. + + uintp.o : alloc.ads debug.ads get_targ.ads limits.ads namet.ads output.ads \
  23728. + +    system.ads s-assert.ads table.ads table.adb ttypes.ads types.ads \
  23729. + +    uintp.ads uintp.adb unchdeal.ads unchdeal.adb
  23730. + + 
  23731. + + uname.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads lib.ads \
  23732. + +    limits.ads namet.ads nlists.ads output.ads sinfo.ads sinput.ads \
  23733. + +    system.ads s-assert.ads table.ads table.adb types.ads uname.ads \
  23734. + +    uname.adb unchdeal.ads unchdeal.adb
  23735. + + 
  23736. + + unixlib.o : system.ads types.ads unchdeal.ads unchdeal.adb unixlib.ads \
  23737. + +    unixlib.adb
  23738. + + 
  23739. + + urealp.o : alloc.ads debug.ads get_targ.ads nlists.ads nmake.ads \
  23740. + +    output.ads sinfo.ads system.ads s-assert.ads table.ads table.adb \
  23741. + +    ttypes.ads types.ads uintp.ads unchdeal.ads unchdeal.adb urealp.ads \
  23742. + +    urealp.adb
  23743. + + 
  23744. + + usage.o : osint.ads output.ads system.ads s-assert.ads types.ads \
  23745. + +    unchdeal.ads unchdeal.adb usage.ads usage.adb
  23746. + + 
  23747. + + widechar.o : system.ads s-assert.ads types.ads unchdeal.ads unchdeal.adb \
  23748. + +    widechar.ads widechar.adb
  23749. + + 
  23750. + + xref.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads elists.ads \
  23751. + +    lib.ads limits.ads namet.ads nlists.ads opt.ads osint.ads output.ads \
  23752. + +    sinfo.ads sinput.ads sprint.ads stand.ads system.ads s-assert.ads \
  23753. + +    table.ads table.adb types.ads unchdeal.ads unchdeal.adb xref.ads \
  23754. + +    xref.adb xref_tab.ads
  23755. + + 
  23756. + + xref_tab.o : alloc.ads atree.ads casing.ads debug.ads einfo.ads errout.ads \
  23757. + +    lib.ads limits.ads namet.ads osint.ads output.ads sinfo.ads sinput.ads \
  23758. + +    stand.ads system.ads s-secsta.ads s-strcon.ads s-tasoli.ads table.ads \
  23759. + +    table.adb types.ads unchdeal.ads unchdeal.adb xref_tab.ads xref_tab.adb
  23760. + + 
  23761. + + 
  23762. +   # To make a configuration always use collect2, set USE_COLLECT2 to ld.
  23763. +   ld: collect2
  23764. +       rm -f ld
  23765. + ***************
  23766. + *** 933,939 ****
  23767. +   tree.o : tree.c $(CONFIG_H) $(TREE_H) gvarargs.h flags.h function.h
  23768. +   print-tree.o : print-tree.c $(CONFIG_H) $(TREE_H)
  23769. +   stor-layout.o : stor-layout.c $(CONFIG_H) $(TREE_H) function.h
  23770. + ! fold-const.o : fold-const.c $(CONFIG_H) $(TREE_H) flags.h 
  23771. +   toplev.o : toplev.c $(CONFIG_H) $(TREE_H) $(RTL_H) flags.h input.h \
  23772. +      insn-attr.h xcoffout.h defaults.h
  23773. +       $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  23774. + --- 1972,1978 ----
  23775. +   tree.o : tree.c $(CONFIG_H) $(TREE_H) gvarargs.h flags.h function.h
  23776. +   print-tree.o : print-tree.c $(CONFIG_H) $(TREE_H)
  23777. +   stor-layout.o : stor-layout.c $(CONFIG_H) $(TREE_H) function.h
  23778. + ! fold-const.o : fold-const.c $(CONFIG_H) $(TREE_H) flags.h
  23779. +   toplev.o : toplev.c $(CONFIG_H) $(TREE_H) $(RTL_H) flags.h input.h \
  23780. +      insn-attr.h xcoffout.h defaults.h
  23781. +       $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  23782. + ***************
  23783. + *** 960,966 ****
  23784. +      typeclass.h bytecode.h bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h \
  23785. +      bc-emit.h modemap.def
  23786. +   calls.o : calls.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h expr.h insn-codes.h \
  23787. + !    insn-flags.h gvarargs.h 
  23788. +   expmed.o : expmed.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h  \
  23789. +      insn-flags.h insn-config.h insn-codes.h expr.h recog.h real.h
  23790. +   explow.o : explow.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h hard-reg-set.h \
  23791. + --- 1999,2005 ----
  23792. +      typeclass.h bytecode.h bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h \
  23793. +      bc-emit.h modemap.def
  23794. +   calls.o : calls.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h expr.h insn-codes.h \
  23795. + !    insn-flags.h gvarargs.h
  23796. +   expmed.o : expmed.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h  \
  23797. +      insn-flags.h insn-config.h insn-codes.h expr.h recog.h real.h
  23798. +   explow.o : explow.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h hard-reg-set.h \
  23799. + ***************
  23800. + *** 1050,1056 ****
  23801. +         -c `echo $(srcdir)/alloca.c | sed 's,^\./,,'`
  23802. +       $(ALLOCA_FINISH)
  23803. +   
  23804. + ! # Generate header and source files from the machine description, 
  23805. +   # and compile them.
  23806. +   
  23807. +   .PRECIOUS: insn-config.h insn-flags.h insn-codes.h \
  23808. + --- 2089,2095 ----
  23809. +         -c `echo $(srcdir)/alloca.c | sed 's,^\./,,'`
  23810. +       $(ALLOCA_FINISH)
  23811. +   
  23812. + ! # Generate header and source files from the machine description,
  23813. +   # and compile them.
  23814. +   
  23815. +   .PRECIOUS: insn-config.h insn-flags.h insn-codes.h \
  23816. + ***************
  23817. + *** 1181,1187 ****
  23818. +   # even if GCC is being compiled to run on some other machine.
  23819. +   
  23820. +   # $(CONFIG_H) is omitted from the deps of the gen*.o
  23821. + ! # because these programs don't really depend on anything 
  23822. +   # about the target machine.  They do depend on config.h itself,
  23823. +   # since that describes the host machine.
  23824. +   
  23825. + --- 2220,2226 ----
  23826. +   # even if GCC is being compiled to run on some other machine.
  23827. +   
  23828. +   # $(CONFIG_H) is omitted from the deps of the gen*.o
  23829. + ! # because these programs don't really depend on anything
  23830. +   # about the target machine.  They do depend on config.h itself,
  23831. +   # since that describes the host machine.
  23832. +   
  23833. + ***************
  23834. + *** 1305,1311 ****
  23835. +   
  23836. +   # This satisfies the dependency that we get if you cross-compile a compiler
  23837. +   # that does not need to compile alloca, malloc or whatever.
  23838. + ! $(HOST_PREFIX_1): 
  23839. +       touch $(HOST_PREFIX_1)
  23840. +   
  23841. +   # Remake bytecode files.
  23842. + --- 2344,2350 ----
  23843. +   
  23844. +   # This satisfies the dependency that we get if you cross-compile a compiler
  23845. +   # that does not need to compile alloca, malloc or whatever.
  23846. + ! $(HOST_PREFIX_1):
  23847. +       touch $(HOST_PREFIX_1)
  23848. +   
  23849. +   # Remake bytecode files.
  23850. + ***************
  23851. + *** 1647,1660 ****
  23852. +   #    $(MAKEINFO) `echo $(srcdir)/gplus.texi | sed 's,^\./,,'`
  23853. +   
  23854. +   $(srcdir)/gcc.info: gcc.texi extend.texi install.texi invoke.texi \
  23855. + !         md.texi rtl.texi tm.texi 
  23856. +       cd $(srcdir); $(MAKEINFO) gcc.texi
  23857. +   
  23858. +   dvi: $(srcdir)/gcc.dvi $(srcdir)/cpp.dvi
  23859. +   
  23860. +   # This works with GNU Make's default rule.
  23861. +   $(srcdir)/gcc.dvi: gcc.texi extend.texi install.texi invoke.texi \
  23862. + !         md.texi rtl.texi tm.texi 
  23863. +       $(TEXI2DVI) $<
  23864. +   
  23865. +   # This works with GNU Make's default rule.
  23866. + --- 2686,2699 ----
  23867. +   #    $(MAKEINFO) `echo $(srcdir)/gplus.texi | sed 's,^\./,,'`
  23868. +   
  23869. +   $(srcdir)/gcc.info: gcc.texi extend.texi install.texi invoke.texi \
  23870. + !         md.texi rtl.texi tm.texi
  23871. +       cd $(srcdir); $(MAKEINFO) gcc.texi
  23872. +   
  23873. +   dvi: $(srcdir)/gcc.dvi $(srcdir)/cpp.dvi
  23874. +   
  23875. +   # This works with GNU Make's default rule.
  23876. +   $(srcdir)/gcc.dvi: gcc.texi extend.texi install.texi invoke.texi \
  23877. + !         md.texi rtl.texi tm.texi
  23878. +       $(TEXI2DVI) $<
  23879. +   
  23880. +   # This works with GNU Make's default rule.
  23881. + ***************
  23882. + *** 1687,1693 ****
  23883. +   # Delete the temporary source copies for cross compilation.
  23884. +       -rm -f $(HOST_PREFIX_1)rtl.c $(HOST_PREFIX_1)rtlanal.c
  23885. +       -rm -f $(HOST_PREFIX_1)alloca.c $(HOST_PREFIX_1)malloc.c
  23886. + !     -rm -f $(HOST_PREFIX_1)obstack.c 
  23887. +   # Delete the temp files made in the course of building libgcc.a.
  23888. +       -rm -f tmplibgcc* tmpcopy xlimits.h
  23889. +       for name in $(LIB1FUNCS); do rm -f $${name}.c; done
  23890. + --- 2726,2732 ----
  23891. +   # Delete the temporary source copies for cross compilation.
  23892. +       -rm -f $(HOST_PREFIX_1)rtl.c $(HOST_PREFIX_1)rtlanal.c
  23893. +       -rm -f $(HOST_PREFIX_1)alloca.c $(HOST_PREFIX_1)malloc.c
  23894. + !     -rm -f $(HOST_PREFIX_1)obstack.c
  23895. +   # Delete the temp files made in the course of building libgcc.a.
  23896. +       -rm -f tmplibgcc* tmpcopy xlimits.h
  23897. +       for name in $(LIB1FUNCS); do rm -f $${name}.c; done
  23898. + ***************
  23899. + *** 1717,1723 ****
  23900. +   clean: mostlyclean bytecode.clean
  23901. +   # It may not be quite desirable to delete unprotoize.c here,
  23902. +   # but the spec for `make clean' requires it.
  23903. + ! # Using unprotoize.c is not quite right in the first place, 
  23904. +   # but what better way is there?
  23905. +       -rm -f libgcc.a libgcc1.a libgcc2.a libgcc2.ready libgcc1.null
  23906. +       -rm -f *.dvi
  23907. + --- 2756,2762 ----
  23908. +   clean: mostlyclean bytecode.clean
  23909. +   # It may not be quite desirable to delete unprotoize.c here,
  23910. +   # but the spec for `make clean' requires it.
  23911. + ! # Using unprotoize.c is not quite right in the first place,
  23912. +   # but what better way is there?
  23913. +       -rm -f libgcc.a libgcc1.a libgcc2.a libgcc2.ready libgcc1.null
  23914. +       -rm -f *.dvi
  23915. + ***************
  23916. + *** 1760,1766 ****
  23917. +       -rm -f cp-parse.c cp-parse.h cp-parse.output
  23918. +       -rm -f objc-parse.c objc-parse.output
  23919. +       -rm -f c-parse.c c-parse.h c-parse.output
  23920. + !     -rm -f cexp.c cexp.output TAGS 
  23921. +       -rm -f cpp.info* cpp.??s cpp.*aux
  23922. +       -rm -f gcc.info* gcc.??s gcc.*aux
  23923. +       -rm -f gplus.info* gplus.??s gplus.*aux
  23924. + --- 2799,2805 ----
  23925. +       -rm -f cp-parse.c cp-parse.h cp-parse.output
  23926. +       -rm -f objc-parse.c objc-parse.output
  23927. +       -rm -f c-parse.c c-parse.h c-parse.output
  23928. + !     -rm -f cexp.c cexp.output TAGS
  23929. +       -rm -f cpp.info* cpp.??s cpp.*aux
  23930. +       -rm -f gcc.info* gcc.??s gcc.*aux
  23931. +       -rm -f gplus.info* gplus.??s gplus.*aux
  23932. + ***************
  23933. + *** 1861,1866 ****
  23934. + --- 2900,2926 ----
  23935. +         rm -f $(bindir)/$(target)-gcc-1; \
  23936. +         $(HARDLINK) $(bindir)/gcc $(bindir)/$(target)-gcc-1; \
  23937. +         mv $(bindir)/$(target)-gcc-1 $(bindir)/$(target)-gcc; \
  23938. + +       if [ -f gnat1 ] ; then \
  23939. + +         rm -f $(bindir)/gnatbind; \
  23940. + +         $(INSTALL_PROGRAM) gnatbind $(bindir)/gnatbind; \
  23941. + +         chmod a+x $(bindir)/gnatbind; \
  23942. + +         rm -f $(bindir)/gnatchop; \
  23943. + +         $(INSTALL_PROGRAM) gnatchop $(bindir)/gnatchop; \
  23944. + +         chmod a+x $(bindir)/gnatchop; \
  23945. + +         rm -f $(bindir)/gnatchp; \
  23946. + +         $(INSTALL_PROGRAM) gnatchp $(bindir)/gnatchp; \
  23947. + +         chmod a+x $(bindir)/gnatchp; \
  23948. + +         rm -f $(bindir)/gnatbl; \
  23949. + +         $(INSTALL_PROGRAM) gnatbl $(bindir)/gnatbl; \
  23950. + +         chmod a+x $(bindir)/gnatbl; \
  23951. + +         rm -f $(bindir)/gnatf; \
  23952. + +         $(INSTALL_PROGRAM) gnatf $(bindir)/gnatf; \
  23953. + +         chmod a+x $(bindir)/gnatf; \
  23954. + +             rm -f $(bindir)/gnatk8; \
  23955. + +             $(INSTALL_PROGRAM) gnatk8 $(bindir)/gnatk8; \
  23956. + +             chmod a+x $(bindir)/gnatk8; \
  23957. + +             $(MAKE) install-gnatlib; \
  23958. + +       fi; \
  23959. +         if [ -f cc1plus ] ; then \
  23960. +           rm -f $(bindir)/g++; \
  23961. +           $(INSTALL_PROGRAM) g++ $(bindir)/g++; \
  23962. + ***************
  23963. + *** 1883,1888 ****
  23964. + --- 2943,2981 ----
  23965. +       -rm -f $(libsubdir)/cpp
  23966. +       $(INSTALL_PROGRAM) cpp $(libsubdir)/cpp
  23967. +   
  23968. + + # Note that in the below rules, when we install the Ada runtime files, we
  23969. + + # use "cp -p" to preserve the dates.
  23970. + + 
  23971. + + install-gnatlib:
  23972. + + #    rm -rf tmp-adainclude stamp-pthreads
  23973. + + #    $(MAKE) tmp-adainclude
  23974. + + #    $(MAKE) stamp-pthreads
  23975. + +     rm -rf $(ADA_RTL_OBJ_DIR)
  23976. + +     mkdir $(ADA_RTL_OBJ_DIR)
  23977. + +     cp -p tmp-adainclude/*.o tmp-adainclude/*.ali tmp-adainclude/*.a \
  23978. + +           threads/lib/libpthreads.a $(ADA_RTL_OBJ_DIR)
  23979. + +     (cd $(ADA_RTL_OBJ_DIR) ; rm -f $(LIBGNAT_OBJS))
  23980. + +     rm -rf $(ADA_INCLUDE_DIR)
  23981. + +     mkdir $(ADA_INCLUDE_DIR)
  23982. + +     cp -p tmp-adainclude/*.ad[bs] $(ADA_INCLUDE_DIR)
  23983. + +     if $(RANLIB_TEST) ; then $(RANLIB) $(ADA_RTL_OBJ_DIR)/*.a; \
  23984. + +           else true; fi
  23985. + + 
  23986. + + # Note that in the below rules, when we make the copy of the Ada runtime
  23987. + + # source files in the tmp directory, we use "cp -p" to preserve the dates
  23988. + + # so as to not make previously compiled objects become needlessly out-of-date.
  23989. + + 
  23990. + + tmp-adainclude:
  23991. + +     rm -rf tmp-tmp-adainclude
  23992. + +     mkdir tmp-tmp-adainclude
  23993. + +     for file in $(ADA_INCLUDE_SRCS) $(LIBGNAT_SRCS); do \
  23994. + +       cp -p $$file tmp-tmp-adainclude/$$file; \
  23995. + +     done
  23996. + +     (cd tmp-tmp-adainclude; $(MAKE) CC="../xgcc -B../" CFLAGS="" \
  23997. + +           -f ../Makefile ada-runtime)
  23998. + +     rm -rf tmp-adainclude
  23999. + +     mv tmp-tmp-adainclude tmp-adainclude
  24000. + + 
  24001. +   # Install the info files.
  24002. +   install-info: doc install-dir
  24003. +       -rm -f $(infodir)/cpp.info* $(infodir)/gcc.info*
  24004. + ***************
  24005. + *** 2039,2045 ****
  24006. +            $$1 " " $$2 " " $$3 != "This directory contains"' \
  24007. +         version=$(version) README > tmp.README
  24008. +       mv tmp.README README
  24009. + !     -rm -rf gcc-$(version) tmp    
  24010. +   # Put all the files in a temporary subdirectory
  24011. +   # which has the name that we want to have in the tar file.
  24012. +       mkdir tmp
  24013. + --- 3132,3138 ----
  24014. +            $$1 " " $$2 " " $$3 != "This directory contains"' \
  24015. +         version=$(version) README > tmp.README
  24016. +       mv tmp.README README
  24017. + !     -rm -rf gcc-$(version) tmp
  24018. +   # Put all the files in a temporary subdirectory
  24019. +   # which has the name that we want to have in the tar file.
  24020. +       mkdir tmp
  24021. + ***************
  24022. + *** 2072,2078 ****
  24023. +   # Get rid of everything we don't want in the distribution.
  24024. +       cd gcc-$(version); make -f Makefile.in extraclean
  24025. +   
  24026. + ! # make diff oldversion=M.N 
  24027. +   # creates a diff file between an older distribution and this one.
  24028. +   # The -P option assumes this is GNU diff.
  24029. +   diff:
  24030. + --- 3165,3171 ----
  24031. +   # Get rid of everything we don't want in the distribution.
  24032. +       cd gcc-$(version); make -f Makefile.in extraclean
  24033. +   
  24034. + ! # make diff oldversion=M.N
  24035. +   # creates a diff file between an older distribution and this one.
  24036. +   # The -P option assumes this is GNU diff.
  24037. +   diff:
  24038. + ***************
  24039. + *** 2084,2090 ****
  24040. +   
  24041. +   # do make -f ../gcc/Makefile maketest DIR=../gcc
  24042. +   # in the intended test directory to make it a suitable test directory.
  24043. + ! # THIS IS OBSOLETE; use the -srcdir operand in configure instead. 
  24044. +   maketest:
  24045. +       cp $(DIR)/*.[chy] .
  24046. +       cp $(DIR)/configure .
  24047. + --- 3177,3183 ----
  24048. +   
  24049. +   # do make -f ../gcc/Makefile maketest DIR=../gcc
  24050. +   # in the intended test directory to make it a suitable test directory.
  24051. + ! # THIS IS OBSOLETE; use the -srcdir operand in configure instead.
  24052. +   maketest:
  24053. +       cp $(DIR)/*.[chy] .
  24054. +       cp $(DIR)/configure .
  24055. + ***************
  24056. + *** 2173,2178 ****
  24057. + --- 3266,3319 ----
  24058. +       -rm -f stage4/libgcc.a
  24059. +       -cp libgcc.a stage4
  24060. +       -if $(RANLIB_TEST) ; then $(RANLIB) stage4/libgcc.a; else true; fi
  24061. + + 
  24062. + + # gnat bootstrapping targets - use the same stage directories
  24063. + + gnatboot: force
  24064. + +     $(MAKE) gnat1 CC="$(CC)" CFLAGS="$(CFLAGS)" ADA_CC="$(ADA_CC)" ADAFLAGS="$(ADAFLAGS)"
  24065. + +     $(MAKE) gnatbind CC="$(CC)" CFLAGS="$(CFLAGS)" ADA_CC="$(ADA_CC)" ADAFLAGS="$(ADAFLAGS)"
  24066. + +     $(MAKE) gnatstage1
  24067. + +     $(MAKE) CC="gcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" ADAFLAGS="$(BOOT_ADAFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" GNATBIND=stage1/gnatbind gnat1
  24068. + +     $(MAKE) CC="gcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" ADAFLAGS="$(BOOT_ADAFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" GNATBIND=stage1/gnatbind gnatbind
  24069. + +     $(MAKE) gnatstage2
  24070. + +     $(MAKE) CC="gcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" ADAFLAGS="$(BOOT_ADAFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" GNATBIND=stage2/gnatbind gnat1
  24071. + +     $(MAKE) CC="gcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" ADAFLAGS="$(BOOT_ADAFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" GNATBIND=stage2/gnatbind gnatbind
  24072. + + 
  24073. + + gnatboot2: force
  24074. + +     $(MAKE) CC="gcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" ADAFLAGS="$(BOOT_ADAFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" GNATBIND=stage1/gnatbind gnat1
  24075. + +     $(MAKE) CC="gcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" ADAFLAGS="$(BOOT_ADAFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" GNATBIND=stage1/gnatbind gnatbind
  24076. + +     $(MAKE) gnatstage2
  24077. + +     $(MAKE) CC="gcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" ADAFLAGS="$(BOOT_ADAFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" GNATBIND=stage2/gnatbind gnat1
  24078. + +     $(MAKE) CC="gcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" ADAFLAGS="$(BOOT_ADAFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" GNATBIND=stage2/gnatbind gnatbind
  24079. + + 
  24080. + + gnatboot3: force
  24081. + +     $(MAKE) CC="gcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" ADAFLAGS="$(BOOT_ADAFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" GNATBIND=stage2/gnatbind gnat1
  24082. + +     $(MAKE) CC="gcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" ADAFLAGS="$(BOOT_ADAFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" GNATBIND=stage2/gnatbind gnatbind
  24083. + + 
  24084. + + gnatcompare: force
  24085. + +     for file in $(GNAT1_ADA_OBJS); do \
  24086. + +       tail +16c $$file > tmp-foo1; \
  24087. + +       tail +16c stage2/$$file > tmp-foo2 2>/dev/null \
  24088. + +         && (cmp tmp-foo1 tmp-foo2 || echo $$file differs); \
  24089. + +     done
  24090. + +     -rm -f tmp-foo*
  24091. + + 
  24092. + + gnatstage1: force
  24093. + +     -if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi
  24094. + +     -for file in *.ali; do \
  24095. + +       mv -f $$file `echo $$file | sed -e 's+.ali$$+.o+'` stage1 ; \
  24096. + +     done
  24097. + +     -mv -f gnat1 gnatbind stage1
  24098. + + 
  24099. + + gnatstage2: force
  24100. + +     -if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi
  24101. + +     -for file in *.ali; do \
  24102. + +       mv -f $$file `echo $$file | sed -e 's+.ali$$+.o+'` stage2 ; \
  24103. + +     done
  24104. + +     -mv -f gnat1 gnatbind stage2
  24105. + + 
  24106. + + gnatclean: force
  24107. + +     rm -f $(GNAT1_OBJS) $(GNATF_OBJS) $(GNATBIND_OBJS) $(GNATK8_OBJS) \
  24108. + +           $(GNAT_RTL_OBJS) *.ali gnat1 gnatbind
  24109. +   
  24110. +   # Copy just the executable files from a particular stage into a subdirectory,
  24111. +   # and delete the object files.  Use this if you're just verifying a version
  24112. + diff -rc gcc-2.5.8/config/i386/xm-dos.h gcc-2.5.8-ada/config/i386/xm-dos.h
  24113. + *** gcc-2.5.8/config/i386/xm-dos.h    Fri Apr  9 21:40:56 1993
  24114. + --- gcc-2.5.8-ada/config/i386/xm-dos.h    Fri Jul  1 15:21:36 1994
  24115. + ***************
  24116. + *** 6,11 ****
  24117. + --- 6,14 ----
  24118. +   /* Use semicolons to separate elements of a path.  */
  24119. +   #define PATH_SEPARATOR ';'
  24120. +   
  24121. + + /* Use backslashs to separate levels of directory.  */
  24122. + + #define DIR_SEPARATOR '\\'
  24123. + + 
  24124. +   /* Suffix for executable file names.  */
  24125. +   #define EXECUTABLE_SUFFIX ".exe"
  24126. +   
  24127. + diff -rc gcc-2.5.8/config/m68k/m68k.md gcc-2.5.8-ada/config/m68k/m68k.md
  24128. + *** gcc-2.5.8/config/m68k/m68k.md    Tue Feb 22 11:22:53 1994
  24129. + --- gcc-2.5.8-ada/config/m68k/m68k.md    Fri Jul  1 15:15:28 1994
  24130. + ***************
  24131. + *** 933,939 ****
  24132. +        of several bytes a byte at a time.  */
  24133. +     if (GET_CODE (operands[0]) == MEM
  24134. +         && GET_CODE (XEXP (operands[0], 0)) == PRE_DEC
  24135. + !       && XEXP (XEXP (operands[0], 0), 0) == stack_pointer_rtx)
  24136. +       {
  24137. +         xoperands[1] = operands[1];
  24138. +         xoperands[2]
  24139. + --- 933,940 ----
  24140. +        of several bytes a byte at a time.  */
  24141. +     if (GET_CODE (operands[0]) == MEM
  24142. +         && GET_CODE (XEXP (operands[0], 0)) == PRE_DEC
  24143. + !       && XEXP (XEXP (operands[0], 0), 0) == stack_pointer_rtx
  24144. + !       && ! ADDRESS_REG_P (operands[1]))
  24145. +       {
  24146. +         xoperands[1] = operands[1];
  24147. +         xoperands[2]
  24148. + diff -rc gcc-2.5.8/config/m68k/next.h gcc-2.5.8-ada/config/m68k/next.h
  24149. + *** gcc-2.5.8/config/m68k/next.h    Sat Oct  2 08:20:32 1993
  24150. + --- gcc-2.5.8-ada/config/m68k/next.h    Fri Jul  1 15:16:37 1994
  24151. + ***************
  24152. + *** 175,181 ****
  24153. +   
  24154. +   #undef    GO_IF_INDEXABLE_BASE(X, ADDR)
  24155. +   #define GO_IF_INDEXABLE_BASE(X, ADDR)    \
  24156. + ! { if (GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X)) goto ADDR; }
  24157. +   
  24158. +   /* This accounts for the return pc and saved fp on the m68k. */
  24159. +   
  24160. + --- 175,181 ----
  24161. +   
  24162. +   #undef    GO_IF_INDEXABLE_BASE(X, ADDR)
  24163. +   #define GO_IF_INDEXABLE_BASE(X, ADDR)    \
  24164. + ! { if (LEGITIMATE_BASE_REG_P (X)) goto ADDR; }
  24165. +   
  24166. +   /* This accounts for the return pc and saved fp on the m68k. */
  24167. +   
  24168. + diff -rc gcc-2.5.8/config/rs6000/rs6000.md gcc-2.5.8-ada/config/rs6000/rs6000.md
  24169. + *** gcc-2.5.8/config/rs6000/rs6000.md    Tue Dec 21 00:25:10 1993
  24170. + --- gcc-2.5.8-ada/config/rs6000/rs6000.md    Fri Jul  1 15:17:07 1994
  24171. + ***************
  24172. + *** 3191,3197 ****
  24173. +   ;; are preferred.  Otherwise, we'd try to reload the output instead of
  24174. +   ;; giving the SCRATCH mq.
  24175. +   (define_insn ""
  24176. + !   [(set (match_operand:TI 0 "reg_or_mem_operand" "=Q,m,r,r,r")
  24177. +       (match_operand:TI 1 "reg_or_mem_operand" "r,r,r,Q,m"))
  24178. +      (clobber (match_scratch:SI 2 "=q,q#X,X,X,X"))]
  24179. +     "TARGET_POWER && (gpc_reg_operand (operands[0], TImode)
  24180. + --- 3191,3197 ----
  24181. +   ;; are preferred.  Otherwise, we'd try to reload the output instead of
  24182. +   ;; giving the SCRATCH mq.
  24183. +   (define_insn ""
  24184. + !   [(set (match_operand:TI 0 "reg_or_mem_operand" "=Q,m,????r,????r,????r")
  24185. +       (match_operand:TI 1 "reg_or_mem_operand" "r,r,r,Q,m"))
  24186. +      (clobber (match_scratch:SI 2 "=q,q#X,X,X,X"))]
  24187. +     "TARGET_POWER && (gpc_reg_operand (operands[0], TImode)
  24188. + diff -rc gcc-2.5.8/config/sparc/sparc.c gcc-2.5.8-ada/config/sparc/sparc.c
  24189. + *** gcc-2.5.8/config/sparc/sparc.c    Fri Dec  3 11:34:04 1993
  24190. + --- gcc-2.5.8-ada/config/sparc/sparc.c    Fri Jul  1 15:13:39 1994
  24191. + ***************
  24192. + *** 2876,2881 ****
  24193. + --- 2876,2885 ----
  24194. +       abort ();
  24195. +   }
  24196. +   
  24197. + + /* Return the value of a code used in the .proc pseudo-op that says
  24198. + +    what kind of result this function returns.  For non-C types, we pick
  24199. + +    the closest C type.  */
  24200. + + 
  24201. +   #ifndef CHAR_TYPE_SIZE
  24202. +   #define CHAR_TYPE_SIZE BITS_PER_UNIT
  24203. +   #endif
  24204. + ***************
  24205. + *** 2947,2952 ****
  24206. + --- 2951,2957 ----
  24207. +         return (qualifiers | 8);
  24208. +   
  24209. +       case UNION_TYPE:
  24210. + +     case QUAL_UNION_TYPE:
  24211. +         return (qualifiers | 9);
  24212. +   
  24213. +       case ENUMERAL_TYPE:
  24214. + ***************
  24215. + *** 2965,3042 ****
  24216. +           }
  24217. +   
  24218. +         /* Carefully distinguish all the standard types of C,
  24219. + !          without messing up if the language is not C.
  24220. + !          Note that we check only for the names that contain spaces;
  24221. + !          other names might occur by coincidence in other languages.  */
  24222. + !       if (TYPE_NAME (type) != 0
  24223. + !           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
  24224. + !           && DECL_NAME (TYPE_NAME (type)) != 0
  24225. + !           && TREE_CODE (DECL_NAME (TYPE_NAME (type))) == IDENTIFIER_NODE)
  24226. + !         {
  24227. + !           char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
  24228. + !   
  24229. + !           if (!strcmp (name, "unsigned char"))
  24230. + !         return (qualifiers | 12);
  24231. + !           if (!strcmp (name, "signed char"))
  24232. + !         return (qualifiers | 2);
  24233. + !           if (!strcmp (name, "unsigned int"))
  24234. + !         return (qualifiers | 14);
  24235. + !           if (!strcmp (name, "short int"))
  24236. + !         return (qualifiers | 3);
  24237. + !           if (!strcmp (name, "short unsigned int"))
  24238. + !         return (qualifiers | 13);
  24239. + !           if (!strcmp (name, "long int"))
  24240. + !         return (qualifiers | 5);
  24241. + !           if (!strcmp (name, "long unsigned int"))
  24242. + !         return (qualifiers | 15);
  24243. + !           if (!strcmp (name, "long long int"))
  24244. + !         return (qualifiers | 5);    /* Who knows? */
  24245. + !           if (!strcmp (name, "long long unsigned int"))
  24246. + !         return (qualifiers | 15);    /* Who knows? */
  24247. + !         }
  24248. +     
  24249. + !       /* Most integer types will be sorted out above, however, for the
  24250. + !          sake of special `array index' integer types, the following code
  24251. + !          is also provided.  */
  24252. +     
  24253. + !       if (TYPE_PRECISION (type) == INT_TYPE_SIZE)
  24254. +           return (qualifiers | (TREE_UNSIGNED (type) ? 14 : 4));
  24255. +     
  24256. + !       if (TYPE_PRECISION (type) == LONG_TYPE_SIZE)
  24257. + !         return (qualifiers | (TREE_UNSIGNED (type) ? 15 : 5));
  24258. + !   
  24259. + !       if (TYPE_PRECISION (type) == LONG_LONG_TYPE_SIZE)
  24260. +           return (qualifiers | (TREE_UNSIGNED (type) ? 15 : 5));
  24261. +     
  24262. + -       if (TYPE_PRECISION (type) == SHORT_TYPE_SIZE)
  24263. + -         return (qualifiers | (TREE_UNSIGNED (type) ? 13 : 3));
  24264. + -   
  24265. + -       if (TYPE_PRECISION (type) == CHAR_TYPE_SIZE)
  24266. + -         return (qualifiers | (TREE_UNSIGNED (type) ? 12 : 2));
  24267. + -   
  24268. + -       abort ();
  24269. + -   
  24270. +       case REAL_TYPE:
  24271. +         /* Carefully distinguish all the standard types of C,
  24272. +            without messing up if the language is not C.  */
  24273. + !       if (TYPE_NAME (type) != 0
  24274. + !           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
  24275. + !           && DECL_NAME (TYPE_NAME (type)) != 0
  24276. + !           && TREE_CODE (DECL_NAME (TYPE_NAME (type))) == IDENTIFIER_NODE)
  24277. + !         {
  24278. + !           char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
  24279. + !   
  24280. + !           if (!strcmp (name, "long double"))
  24281. + !         return (qualifiers | 7);    /* Who knows? */
  24282. + !         }
  24283. + !   
  24284. + !       if (TYPE_PRECISION (type) == DOUBLE_TYPE_SIZE)
  24285. + !         return (qualifiers | 7);
  24286. +         if (TYPE_PRECISION (type) == FLOAT_TYPE_SIZE)
  24287. +           return (qualifiers | 6);
  24288. + !       if (TYPE_PRECISION (type) == LONG_DOUBLE_TYPE_SIZE)
  24289. + !         return (qualifiers | 7);    /* Who knows? */
  24290. + !       abort ();
  24291. +     
  24292. +       case COMPLEX_TYPE:    /* GNU Fortran COMPLEX type.  */
  24293. +         /* ??? We need to distinguish between double and float complex types,
  24294. + --- 2970,3006 ----
  24295. +           }
  24296. +   
  24297. +         /* Carefully distinguish all the standard types of C,
  24298. + !          without messing up if the language is not C.  We do this by
  24299. + !          testing TYPE_PRECISION and TREE_UNSIGNED.  The old code used to
  24300. + !          look at both the names and the above fields, but that's redundant.
  24301. + !          Any type whose size is between two C types will be considered
  24302. + !          to be the wider of the two types.  Also, we do not have a
  24303. + !          special code to use for "long long", so anything wider than
  24304. + !          long is treated the same.  Note that we can't distinguish
  24305. + !          between "int" and "long" in this code if they are the same
  24306. + !          size, but that's fine, since neither can the assembler.  */
  24307. + ! 
  24308. + !       if (TYPE_PRECISION (type) <= CHAR_TYPE_SIZE)
  24309. + !         return (qualifiers | (TREE_UNSIGNED (type) ? 12 : 2));
  24310. +     
  24311. + !       else if (TYPE_PRECISION (type) <= SHORT_TYPE_SIZE)
  24312. + !         return (qualifiers | (TREE_UNSIGNED (type) ? 13 : 3));
  24313. +     
  24314. + !       else if (TYPE_PRECISION (type) <= INT_TYPE_SIZE)
  24315. +           return (qualifiers | (TREE_UNSIGNED (type) ? 14 : 4));
  24316. +     
  24317. + !       else
  24318. +           return (qualifiers | (TREE_UNSIGNED (type) ? 15 : 5));
  24319. +     
  24320. +       case REAL_TYPE:
  24321. +         /* Carefully distinguish all the standard types of C,
  24322. +            without messing up if the language is not C.  */
  24323. + ! 
  24324. +         if (TYPE_PRECISION (type) == FLOAT_TYPE_SIZE)
  24325. +           return (qualifiers | 6);
  24326. + ! 
  24327. + !       else 
  24328. + !         return (qualifiers | 7);
  24329. +     
  24330. +       case COMPLEX_TYPE:    /* GNU Fortran COMPLEX type.  */
  24331. +         /* ??? We need to distinguish between double and float complex types,
  24332. + diff -rc gcc-2.5.8/configure.bat gcc-2.5.8-ada/configure.bat
  24333. + *** gcc-2.5.8/configure.bat    Sun Dec 12 11:11:55 1993
  24334. + --- gcc-2.5.8-ada/configure.bat    Fri Jul  1 15:14:26 1994
  24335. + ***************
  24336. + *** 49,54 ****
  24337. + --- 49,60 ----
  24338. +   echo "s/tmp-/t-/g                    ">> config.sed
  24339. +   
  24340. +   sed -e "s/^\"//" -e "s/\"$//" -e "s/[     ]*$//" config.sed > config2.sed
  24341. + + 
  24342. + + echo s/echo "\(.*\)"/echo \1/ >>config2.sed
  24343. + + echo s/"\\"$(ADA_RTL_OBJ_DIR)\\""/\\"$(ADA_RTL_OBJ_DIR)\\"/ >>config2.sed
  24344. + + echo s/return \\"$(ADA_INCLUDE_DIR)\/\\"/return "$(ADA_INCLUDE_DIR)\/"/ >>config2.sed
  24345. + + echo s/return \\"$(ADA_RTL_OBJ_DIR)\/\\"/return "$(ADA_RTL_OBJ_DIR)\/"/ >>config2.sed
  24346. + + 
  24347. +   sed -f config2.sed Makefile.in >> Makefile
  24348. +   del config.sed
  24349. +   del config2.sed
  24350. + diff -rc gcc-2.5.8/expr.c gcc-2.5.8-ada/expr.c
  24351. + *** gcc-2.5.8/expr.c    Tue Jan 11 00:26:14 1994
  24352. + --- gcc-2.5.8-ada/expr.c    Tue Jul  5 08:50:38 1994
  24353. + ***************
  24354. + *** 8223,8228 ****
  24355. + --- 8223,8229 ----
  24356. +     rtx comparison = 0;
  24357. +     int i;
  24358. +     tree type;
  24359. + +   enum machine_mode mode;
  24360. +   
  24361. +     emit_queue ();
  24362. +   
  24363. + ***************
  24364. + *** 8299,8305 ****
  24365. +         && TREE_CODE (TREE_OPERAND (exp, 1)) == INTEGER_CST
  24366. +         && TYPE_PRECISION (TREE_TYPE (exp)) <= HOST_BITS_PER_WIDE_INT
  24367. +         && (i = floor_log2 (TREE_INT_CST_LOW (TREE_OPERAND (exp, 1)))) >= 0
  24368. + !       && (type = type_for_size (i + 1, 1)) != 0
  24369. +         && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (exp))
  24370. +         && (cmp_optab->handlers[(int) TYPE_MODE (type)].insn_code
  24371. +             != CODE_FOR_nothing))
  24372. + --- 8300,8307 ----
  24373. +         && TREE_CODE (TREE_OPERAND (exp, 1)) == INTEGER_CST
  24374. +         && TYPE_PRECISION (TREE_TYPE (exp)) <= HOST_BITS_PER_WIDE_INT
  24375. +         && (i = floor_log2 (TREE_INT_CST_LOW (TREE_OPERAND (exp, 1)))) >= 0
  24376. + !       && (mode = mode_for_size (i + 1, MODE_INT, 0)) != BLKmode
  24377. + !       && (type = type_for_mode (mode, 1)) != 0
  24378. +         && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (exp))
  24379. +         && (cmp_optab->handlers[(int) TYPE_MODE (type)].insn_code
  24380. +             != CODE_FOR_nothing))
  24381. + diff -rc gcc-2.5.8/stmt.c gcc-2.5.8-ada/stmt.c
  24382. + *** gcc-2.5.8/stmt.c    Thu Nov 25 23:07:56 1993
  24383. + --- gcc-2.5.8-ada/stmt.c    Fri Jul  1 15:17:59 1994
  24384. + ***************
  24385. + *** 497,502 ****
  24386. + --- 497,503 ----
  24387. +   {
  24388. +     /* We are not currently within any block, conditional, loop or case.  */
  24389. +     block_stack = 0;
  24390. + +   stack_block_stack = 0;
  24391. +     loop_stack = 0;
  24392. +     case_stack = 0;
  24393. +     cond_stack = 0;
  24394. + diff -rc gcc-2.5.8/stor-layout.c gcc-2.5.8-ada/stor-layout.c
  24395. + *** gcc-2.5.8/stor-layout.c    Wed Sep 22 18:27:58 1993
  24396. + --- gcc-2.5.8-ada/stor-layout.c    Fri Jul  1 15:18:32 1994
  24397. + ***************
  24398. + *** 82,96 ****
  24399. +   variable_size (size)
  24400. +        tree size;
  24401. +   {
  24402. + -   size = save_expr (size);
  24403. + - 
  24404. +     /* If the language-processor is to take responsibility for variable-sized
  24405. +        items (e.g., languages which have elaboration procedures like Ada),
  24406. +        just return SIZE unchanged.  */
  24407. +     if (global_bindings_p () < 0)
  24408. +       return size;
  24409. +   
  24410. + !   else if (global_bindings_p ())
  24411. +       {
  24412. +         if (TREE_CONSTANT (size))
  24413. +       error ("type size can't be explicitly evaluated");
  24414. + --- 82,96 ----
  24415. +   variable_size (size)
  24416. +        tree size;
  24417. +   {
  24418. +     /* If the language-processor is to take responsibility for variable-sized
  24419. +        items (e.g., languages which have elaboration procedures like Ada),
  24420. +        just return SIZE unchanged.  */
  24421. +     if (global_bindings_p () < 0)
  24422. +       return size;
  24423. +   
  24424. + !   size = save_expr (size);
  24425. + ! 
  24426. + !   if (global_bindings_p ())
  24427. +       {
  24428. +         if (TREE_CONSTANT (size))
  24429. +       error ("type size can't be explicitly evaluated");
  24430. + diff -rc gcc-2.5.8/tree.c gcc-2.5.8-ada/tree.c
  24431. + *** gcc-2.5.8/tree.c    Tue Feb 22 11:24:31 1994
  24432. + --- gcc-2.5.8-ada/tree.c    Fri Jul  1 15:19:11 1994
  24433. + ***************
  24434. + *** 1826,1833 ****
  24435. +   {
  24436. +     switch (TREE_CODE (arg))
  24437. +       {
  24438. + -     case VAR_DECL:
  24439. +       case FUNCTION_DECL:
  24440. +         return TREE_STATIC (arg) || DECL_EXTERNAL (arg);
  24441. +   
  24442. +       case CONSTRUCTOR:
  24443. + --- 1826,1838 ----
  24444. +   {
  24445. +     switch (TREE_CODE (arg))
  24446. +       {
  24447. +       case FUNCTION_DECL:
  24448. + +       /* Nested functions aren't static.  Since taking their address
  24449. + +      involves a trampoline.  */
  24450. + +       if (decl_function_context (arg) != 0)
  24451. + +     return 0;
  24452. + +       /* ... fall through ... */
  24453. + +     case VAR_DECL:
  24454. +         return TREE_STATIC (arg) || DECL_EXTERNAL (arg);
  24455. +   
  24456. +       case CONSTRUCTOR:
  24457. + ***************
  24458. + *** 3606,3618 ****
  24459. +        tree c, type;
  24460. +   {
  24461. +     if (TREE_UNSIGNED (type))
  24462. + !     return (!INT_CST_LT_UNSIGNED (TYPE_MAX_VALUE (type), c)
  24463. + !         && !INT_CST_LT_UNSIGNED (c, TYPE_MIN_VALUE (type))
  24464. + !         && (TREE_INT_CST_HIGH (c) >= 0 || TREE_UNSIGNED (TREE_TYPE (c))));
  24465. +     else
  24466. + !     return (!INT_CST_LT (TYPE_MAX_VALUE (type), c)
  24467. + !         && !INT_CST_LT (c, TYPE_MIN_VALUE (type))
  24468. + !         && (TREE_INT_CST_HIGH (c) >= 0 || !TREE_UNSIGNED (TREE_TYPE (c))));
  24469. +   }
  24470. +   
  24471. +   /* Return the innermost context enclosing DECL that is
  24472. + --- 3611,3625 ----
  24473. +        tree c, type;
  24474. +   {
  24475. +     if (TREE_UNSIGNED (type))
  24476. + !     return (! (TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST
  24477. + !            && INT_CST_LT_UNSIGNED (TYPE_MAX_VALUE (type), c))
  24478. + !         && ! (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
  24479. + !           && INT_CST_LT_UNSIGNED (c, TYPE_MIN_VALUE (type))));
  24480. +     else
  24481. + !     return (! (TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST
  24482. + !            && INT_CST_LT (TYPE_MAX_VALUE (type), c))
  24483. + !         && ! (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
  24484. + !           && INT_CST_LT (c, TYPE_MIN_VALUE (type))));
  24485. +   }
  24486. +   
  24487. +   /* Return the innermost context enclosing DECL that is
  24488. + diff -rc gcc-2.5.8/varasm.c gcc-2.5.8-ada/varasm.c
  24489. + *** gcc-2.5.8/varasm.c    Tue Jan 11 00:17:55 1994
  24490. + --- gcc-2.5.8-ada/varasm.c    Fri Jul  1 15:19:35 1994
  24491. + ***************
  24492. + *** 3269,3274 ****
  24493. + --- 3269,3284 ----
  24494. +     if (size == 0)
  24495. +       return;
  24496. +   
  24497. + +   /* Eliminate the NON_LVALUE_EXPR_EXPR that makes a cast not be an lvalue.
  24498. + +      That way we get the constant (we hope) inside it.  Also, strip
  24499. + +      off any NOP_EXPR that converts between two record or union types.  */
  24500. + +   while ((TREE_CODE (exp) == NOP_EXPR
  24501. + +         && (TREE_TYPE (exp) == TREE_TYPE (TREE_OPERAND (exp, 0))
  24502. + +             || TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE
  24503. + +             || TREE_CODE (TREE_TYPE (exp)) == UNION_TYPE
  24504. + +             || TREE_CODE (TREE_TYPE (exp)) == QUAL_UNION_TYPE))
  24505. + +        || TREE_CODE (exp) == NON_LVALUE_EXPR)
  24506. + +     exp = TREE_OPERAND (exp, 0);
  24507. +     /* Allow a constructor with no elements for any data type.
  24508. +        This means to fill the space with zeros.  */
  24509. +     if (TREE_CODE (exp) == CONSTRUCTOR && CONSTRUCTOR_ELTS (exp) == 0)
  24510. + ***************
  24511. + *** 3279,3290 ****
  24512. +       assemble_zeros (size);
  24513. +         return;
  24514. +       }
  24515. + - 
  24516. + -   /* Eliminate the NOP_EXPR that makes a cast not be an lvalue.
  24517. + -      That way we get the constant (we hope) inside it.  */
  24518. + -   if (TREE_CODE (exp) == NOP_EXPR
  24519. + -       && TREE_TYPE (exp) == TREE_TYPE (TREE_OPERAND (exp, 0)))
  24520. + -     exp = TREE_OPERAND (exp, 0);
  24521. +   
  24522. +     switch (code)
  24523. +       {
  24524. + --- 3289,3294 ----
  24525. diff -rc --new-file /src/baseline/gnat-1.80/examples/Makefile gnat-1.80/examples/Makefile
  24526. *** /src/baseline/gnat-1.80/examples/Makefile    Fri Jun 10 15:40:51 1994
  24527. --- gnat-1.80/examples/Makefile    Thu Jul  7 10:46:57 1994
  24528. ***************
  24529. *** 52,61 ****
  24530.   
  24531.   % : %.o
  24532.       gnatbl $@.ali -o $@ $($@_DEP)
  24533. !     ./$@
  24534.   
  24535.   
  24536.   clean : force
  24537. !     @/bin/rm -f *.$o *.ali b_*.c *.s $(LIST_EXEC)
  24538.   
  24539.   force :
  24540. --- 52,61 ----
  24541.   
  24542.   % : %.o
  24543.       gnatbl $@.ali -o $@ $($@_DEP)
  24544. ! #    ./$@
  24545.   
  24546.   
  24547.   clean : force
  24548. !     rm -f *.$o *.ali b_*.c *.s $(LIST_EXEC)
  24549.   
  24550.   force :
  24551. diff -rc --new-file /src/baseline/gnat-1.80/src/Makefile.os2 gnat-1.80/src/Makefile.os2
  24552. *** /src/baseline/gnat-1.80/src/Makefile.os2    Fri Jun 10 15:44:44 1994
  24553. --- gnat-1.80/src/Makefile.os2    Thu Jun 23 14:52:13 1994
  24554. ***************
  24555. *** 561,566 ****
  24556. --- 561,567 ----
  24557.   a-textio.obj \
  24558.   a-teioau.obj calendar.obj interfac.obj ioexcept.obj \
  24559.   i-c.obj \
  24560. + i-cstrin.obj \
  24561.   system.obj \
  24562.   s-addima.obj \
  24563.   s-pooglo.obj \
  24564. ***************
  24565. *** 723,731 ****
  24566.     s-posrte.ads s-posrte.adb \
  24567.     s-postim.ads s-postim.adb \
  24568.     s-pthrea.ads s-pthrea.adb \
  24569. -   s-reatim.ads s-reatim.adb \
  24570. -   s-retico.ads s-retico.adb \
  24571. -   s-retide.ads s-retide.adb \
  24572.     s-secsta.ads s-secsta.adb \
  24573.     s-stalib.ads \
  24574.     s-std.ads s-std.adb \
  24575. --- 724,729 ----
  24576. ***************
  24577. *** 935,941 ****
  24578.   # File containing patches to be applied.
  24579.   PATCH_FILE = patches-gcc258.os2
  24580.   FILES_TO_BE_PATCHED = gcc.c cccp.c toplev.c tree.c stor-layout.c varasm.c \
  24581. !   $(srcdir)\config\i386\os2.h $(srcdir)\config\i386\xm-os2.h
  24582.   !IFDEF PATCH_FILE
  24583.   $(FILES_TO_BE_PATCHED): $(PATCH_FILE)
  24584.       $(PATCH) < $(PATCH_FILE)
  24585. --- 933,940 ----
  24586.   # File containing patches to be applied.
  24587.   PATCH_FILE = patches-gcc258.os2
  24588.   FILES_TO_BE_PATCHED = gcc.c cccp.c toplev.c tree.c stor-layout.c varasm.c \
  24589. !   $(srcdir)\config\i386\os2.h $(srcdir)\config\i386\xm-os2.h \
  24590. !   $(srcdir)\config\i386\i386.h
  24591.   !IFDEF PATCH_FILE
  24592.   $(FILES_TO_BE_PATCHED): $(PATCH_FILE)
  24593.       $(PATCH) < $(PATCH_FILE)
  24594. diff -rc --new-file /src/baseline/gnat-1.80/src/README.OS2 gnat-1.80/src/README.OS2
  24595. *** /src/baseline/gnat-1.80/src/README.OS2    Fri Jun 10 15:44:53 1994
  24596. --- gnat-1.80/src/README.OS2    Thu Jun 23 14:56:10 1994
  24597. ***************
  24598. *** 13,26 ****
  24599.   2) Make the root directory of the drive on which you installed the executables
  24600.      of GNAT for OS/2 the current directory.
  24601.   
  24602. ! 3) Unzip the file containing the latest version of the sources for GNAT
  24603. !    (available at the ftp site mentioned above) with the command
  24604. !       UNZIP drive:path\zipfilename
  24605. !    where "drive" and "path" is the drive and path in which the file
  24606. !    zipfilename resides.  This will create a directory called
  24607. !    gnat-version_number, where version_number is the version number of the GNAT
  24608. !    sources.  This directory will contain all the source code for GNAT.
  24609. !    (If you are reading this file, you have presumably already done this step.)
  24610.   
  24611.   4) Copy the sources for GNAT to the directory in which the sources for gcc
  24612.      reside with the command
  24613. --- 13,22 ----
  24614.   2) Make the root directory of the drive on which you installed the executables
  24615.      of GNAT for OS/2 the current directory.
  24616.   
  24617. ! 3) To unpack the file containing the latest version of the sources for GNAT
  24618. !    (available at the ftp site mentioned above), follow the instructions in the
  24619. !    README file available at the same ftp site.  (If you are reading this file,
  24620. !    you have presumably already done this step.)
  24621.   
  24622.   4) Copy the sources for GNAT to the directory in which the sources for gcc
  24623.      reside with the command
  24624. diff -rc --new-file /src/baseline/gnat-1.80/src/alloc.ads gnat-1.80/src/alloc.ads
  24625. *** /src/baseline/gnat-1.80/src/alloc.ads    Fri Jun 10 15:42:40 1994
  24626. --- gnat-1.80/src/alloc.ads    Wed Jul  6 16:56:49 1994
  24627. ***************
  24628. *** 75,81 ****
  24629.      Alloc_Nodes_Initial : constant := 8_000;
  24630.      --  Initial allocation in nodes for tree (Atree)
  24631.   
  24632. !    Alloc_Nodes_Increment : constant := 200;
  24633.      --  Incremental allocation for nodes table (Atree)
  24634.   
  24635.      Alloc_String_Chars_Initial : constant := 64_000;
  24636. --- 75,81 ----
  24637.      Alloc_Nodes_Initial : constant := 8_000;
  24638.      --  Initial allocation in nodes for tree (Atree)
  24639.   
  24640. !    Alloc_Nodes_Increment : constant := 150;
  24641.      --  Incremental allocation for nodes table (Atree)
  24642.   
  24643.      Alloc_String_Chars_Initial : constant := 64_000;
  24644. diff -rc --new-file /src/baseline/gnat-1.80/src/atree.adb gnat-1.80/src/atree.adb
  24645. *** /src/baseline/gnat-1.80/src/atree.adb    Fri Jun 10 15:42:42 1994
  24646. --- gnat-1.80/src/atree.adb    Wed Jul  6 16:56:58 1994
  24647. ***************
  24648. *** 1147,2813 ****
  24649.   
  24650.      package body Unchecked_Access is
  24651.   
  24652. !       function Field1 (N : Node_Id) return Union_Id is
  24653.         begin
  24654.            pragma Assert (N in Nodes.First .. Nodes.Last);
  24655. !          return Nodes.Table (N).Field1;
  24656. !       end Field1;
  24657.   
  24658. !       function Field2 (N : Node_Id) return Union_Id is
  24659.         begin
  24660.            pragma Assert (N in Nodes.First .. Nodes.Last);
  24661. !          return Nodes.Table (N).Field2;
  24662. !       end Field2;
  24663.   
  24664. !       function Field3 (N : Node_Id) return Union_Id is
  24665.         begin
  24666.            pragma Assert (N in Nodes.First .. Nodes.Last);
  24667. !          return Nodes.Table (N).Field3;
  24668. !       end Field3;
  24669.   
  24670. !       function Field4 (N : Node_Id) return Union_Id is
  24671.         begin
  24672.            pragma Assert (N in Nodes.First .. Nodes.Last);
  24673. !          return Nodes.Table (N).Field4;
  24674. !       end Field4;
  24675.   
  24676. !       function Field5 (N : Node_Id) return Union_Id is
  24677.         begin
  24678.            pragma Assert (N in Nodes.First .. Nodes.Last);
  24679. !          return Nodes.Table (N).Field5;
  24680. !       end Field5;
  24681.   
  24682. !       function Field6 (N : Node_Id) return Union_Id is
  24683.         begin
  24684.            pragma Assert (Nkind (N) in N_Entity);
  24685. !          return Nodes.Table (N + 1).Field6;
  24686. !       end Field6;
  24687.   
  24688. !       function Field7 (N : Node_Id) return Union_Id is
  24689.         begin
  24690.            pragma Assert (Nkind (N) in N_Entity);
  24691. !          return Nodes.Table (N + 1).Field7;
  24692. !       end Field7;
  24693.   
  24694. !       function Field8 (N : Node_Id) return Union_Id is
  24695.         begin
  24696.            pragma Assert (Nkind (N) in N_Entity);
  24697. !          return Nodes.Table (N + 1).Field8;
  24698. !       end Field8;
  24699.   
  24700. !       function Field9 (N : Node_Id) return Union_Id is
  24701.         begin
  24702.            pragma Assert (Nkind (N) in N_Entity);
  24703. !          return Nodes.Table (N + 1).Field9;
  24704. !       end Field9;
  24705.   
  24706. !       function Field10 (N : Node_Id) return Union_Id is
  24707.         begin
  24708.            pragma Assert (Nkind (N) in N_Entity);
  24709. !          return Nodes.Table (N + 1).Field10;
  24710. !       end Field10;
  24711.   
  24712. !       function Field11 (N : Node_Id) return Union_Id is
  24713.         begin
  24714.            pragma Assert (Nkind (N) in N_Entity);
  24715. !          return Nodes.Table (N + 1).Field11;
  24716. !       end Field11;
  24717.   
  24718. !       function Field12 (N : Node_Id) return Union_Id is
  24719.         begin
  24720.            pragma Assert (Nkind (N) in N_Entity);
  24721. !          return Nodes.Table (N + 1).Field12;
  24722. !       end Field12;
  24723.   
  24724. !       function Field13 (N : Node_Id) return Union_Id is
  24725.         begin
  24726.            pragma Assert (Nkind (N) in N_Entity);
  24727. !          return Nodes.Table (N + 2).Field6;
  24728. !       end Field13;
  24729.   
  24730. !       function Field14 (N : Node_Id) return Union_Id is
  24731.         begin
  24732.            pragma Assert (Nkind (N) in N_Entity);
  24733. !          return Nodes.Table (N + 2).Field7;
  24734. !       end Field14;
  24735.   
  24736. !       function Field15 (N : Node_Id) return Union_Id is
  24737.         begin
  24738.            pragma Assert (Nkind (N) in N_Entity);
  24739. !          return Nodes.Table (N + 2).Field8;
  24740. !       end Field15;
  24741.   
  24742. !       function Field16 (N : Node_Id) return Union_Id is
  24743.         begin
  24744.            pragma Assert (Nkind (N) in N_Entity);
  24745. !          return Nodes.Table (N + 2).Field9;
  24746. !       end Field16;
  24747.   
  24748. !       function Field17 (N : Node_Id) return Union_Id is
  24749.         begin
  24750.            pragma Assert (Nkind (N) in N_Entity);
  24751. !          return Nodes.Table (N + 2).Field10;
  24752. !       end Field17;
  24753.   
  24754. !       function Field18 (N : Node_Id) return Union_Id is
  24755.         begin
  24756.            pragma Assert (Nkind (N) in N_Entity);
  24757. !          return Nodes.Table (N + 2).Field11;
  24758. !       end Field18;
  24759.   
  24760. !       function Field19 (N : Node_Id) return Union_Id is
  24761.         begin
  24762.            pragma Assert (Nkind (N) in N_Entity);
  24763. !          return Nodes.Table (N + 2).Field12;
  24764. !       end Field19;
  24765.   
  24766. !       function Node1 (N : Node_Id) return Node_Id is
  24767.         begin
  24768.            pragma Assert (N in Nodes.First .. Nodes.Last);
  24769. !          return Node_Id (Nodes.Table (N).Field1);
  24770. !       end Node1;
  24771.   
  24772. !       function Node2 (N : Node_Id) return Node_Id is
  24773.         begin
  24774.            pragma Assert (N in Nodes.First .. Nodes.Last);
  24775. !          return Node_Id (Nodes.Table (N).Field2);
  24776. !       end Node2;
  24777.   
  24778. !       function Node3 (N : Node_Id) return Node_Id is
  24779.         begin
  24780.            pragma Assert (N in Nodes.First .. Nodes.Last);
  24781. !          return Node_Id (Nodes.Table (N).Field3);
  24782. !       end Node3;
  24783.   
  24784. !       function Node4 (N : Node_Id) return Node_Id is
  24785.         begin
  24786.            pragma Assert (N in Nodes.First .. Nodes.Last);
  24787. !          return Node_Id (Nodes.Table (N).Field4);
  24788. !       end Node4;
  24789.   
  24790. !       function Node5 (N : Node_Id) return Node_Id is
  24791.         begin
  24792.            pragma Assert (N in Nodes.First .. Nodes.Last);
  24793. !          return Node_Id (Nodes.Table (N).Field5);
  24794. !       end Node5;
  24795.   
  24796. !       function Node6 (N : Node_Id) return Node_Id is
  24797.         begin
  24798.            pragma Assert (Nkind (N) in N_Entity);
  24799. !          return Node_Id (Nodes.Table (N + 1).Field6);
  24800. !       end Node6;
  24801.   
  24802. !       function Node7 (N : Node_Id) return Node_Id is
  24803.         begin
  24804.            pragma Assert (Nkind (N) in N_Entity);
  24805. !          return Node_Id (Nodes.Table (N + 1).Field7);
  24806. !       end Node7;
  24807.   
  24808. !       function Node8 (N : Node_Id) return Node_Id is
  24809.         begin
  24810.            pragma Assert (Nkind (N) in N_Entity);
  24811. !          return Node_Id (Nodes.Table (N + 1).Field8);
  24812. !       end Node8;
  24813.   
  24814. !       function Node9 (N : Node_Id) return Node_Id is
  24815.         begin
  24816.            pragma Assert (Nkind (N) in N_Entity);
  24817. !          return Node_Id (Nodes.Table (N + 1).Field9);
  24818. !       end Node9;
  24819.   
  24820. !       function Node10 (N : Node_Id) return Node_Id is
  24821.         begin
  24822.            pragma Assert (Nkind (N) in N_Entity);
  24823. !          return Node_Id (Nodes.Table (N + 1).Field10);
  24824. !       end Node10;
  24825.   
  24826. !       function Node11 (N : Node_Id) return Node_Id is
  24827.         begin
  24828.            pragma Assert (Nkind (N) in N_Entity);
  24829. !          return Node_Id (Nodes.Table (N + 1).Field11);
  24830. !       end Node11;
  24831.   
  24832. !       function Node12 (N : Node_Id) return Node_Id is
  24833.         begin
  24834.            pragma Assert (Nkind (N) in N_Entity);
  24835. !          return Node_Id (Nodes.Table (N + 1).Field12);
  24836. !       end Node12;
  24837.   
  24838. !       function Node13 (N : Node_Id) return Node_Id is
  24839.         begin
  24840.            pragma Assert (Nkind (N) in N_Entity);
  24841. !          return Node_Id (Nodes.Table (N + 2).Field6);
  24842. !       end Node13;
  24843.   
  24844. !       function Node14 (N : Node_Id) return Node_Id is
  24845.         begin
  24846.            pragma Assert (Nkind (N) in N_Entity);
  24847. !          return Node_Id (Nodes.Table (N + 2).Field7);
  24848. !       end Node14;
  24849.   
  24850. !       function Node15 (N : Node_Id) return Node_Id is
  24851.         begin
  24852.            pragma Assert (Nkind (N) in N_Entity);
  24853. !          return Node_Id (Nodes.Table (N + 2).Field8);
  24854. !       end Node15;
  24855.   
  24856. !       function Node16 (N : Node_Id) return Node_Id is
  24857.         begin
  24858.            pragma Assert (Nkind (N) in N_Entity);
  24859. !          return Node_Id (Nodes.Table (N + 2).Field9);
  24860. !       end Node16;
  24861.   
  24862. !       function Node17 (N : Node_Id) return Node_Id is
  24863.         begin
  24864.            pragma Assert (Nkind (N) in N_Entity);
  24865. !          return Node_Id (Nodes.Table (N + 2).Field10);
  24866. !       end Node17;
  24867.   
  24868. !       function Node18 (N : Node_Id) return Node_Id is
  24869.         begin
  24870.            pragma Assert (Nkind (N) in N_Entity);
  24871. !          return Node_Id (Nodes.Table (N + 2).Field11);
  24872. !       end Node18;
  24873.   
  24874. !       function Node19 (N : Node_Id) return Node_Id is
  24875.         begin
  24876.            pragma Assert (Nkind (N) in N_Entity);
  24877. !          return Node_Id (Nodes.Table (N + 2).Field12);
  24878. !       end Node19;
  24879.   
  24880. !       function List1 (N : Node_Id) return List_Id is
  24881.         begin
  24882.            pragma Assert (N in Nodes.First .. Nodes.Last);
  24883. !          return List_Id (Nodes.Table (N).Field1);
  24884. !       end List1;
  24885.   
  24886. !       function List2 (N : Node_Id) return List_Id is
  24887.         begin
  24888.            pragma Assert (N in Nodes.First .. Nodes.Last);
  24889. !          return List_Id (Nodes.Table (N).Field2);
  24890. !       end List2;
  24891.   
  24892. !       function List3 (N : Node_Id) return List_Id is
  24893.         begin
  24894.            pragma Assert (N in Nodes.First .. Nodes.Last);
  24895. !          return List_Id (Nodes.Table (N).Field3);
  24896. !       end List3;
  24897.   
  24898. !       function List4 (N : Node_Id) return List_Id is
  24899.         begin
  24900.            pragma Assert (N in Nodes.First .. Nodes.Last);
  24901. !          return List_Id (Nodes.Table (N).Field4);
  24902. !       end List4;
  24903.   
  24904. !       function List5 (N : Node_Id) return List_Id is
  24905.         begin
  24906.            pragma Assert (N in Nodes.First .. Nodes.Last);
  24907. !          return List_Id (Nodes.Table (N).Field5);
  24908. !       end List5;
  24909.   
  24910. !       function Elist6 (N : Node_Id) return Elist_Id is
  24911.         begin
  24912.            pragma Assert (Nkind (N) in N_Entity);
  24913. !          return Elist_Id (Nodes.Table (N + 1).Field6);
  24914. !       end Elist6;
  24915.   
  24916. !       function Elist13 (N : Node_Id) return Elist_Id is
  24917.         begin
  24918.            pragma Assert (Nkind (N) in N_Entity);
  24919. !          return Elist_Id (Nodes.Table (N + 2).Field6);
  24920. !       end Elist13;
  24921. !       function Name1 (N : Node_Id) return Name_Id is
  24922. !       begin
  24923. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  24924. !          return Name_Id (Nodes.Table (N).Field1);
  24925. !       end Name1;
  24926.   
  24927. !       function Name2 (N : Node_Id) return Name_Id is
  24928.         begin
  24929.            pragma Assert (N in Nodes.First .. Nodes.Last);
  24930. !          return Name_Id (Nodes.Table (N).Field2);
  24931. !       end Name2;
  24932.   
  24933. !       function Str3 (N : Node_Id) return String_Id is
  24934.         begin
  24935.            pragma Assert (N in Nodes.First .. Nodes.Last);
  24936. !          return String_Id (Nodes.Table (N).Field3);
  24937. !       end Str3;
  24938.   
  24939. !       function Char_Code2 (N : Node_Id) return Char_Code is
  24940.         begin
  24941.            pragma Assert (N in Nodes.First .. Nodes.Last);
  24942. !          return Char_Code (Nodes.Table (N).Field2 - Char_Code_Bias);
  24943. !       end Char_Code2;
  24944.   
  24945. !       function Uint3 (N : Node_Id) return Uint is
  24946.         begin
  24947.            pragma Assert (N in Nodes.First .. Nodes.Last);
  24948. !          return Uint (Nodes.Table (N).Field3);
  24949. !       end Uint3;
  24950.   
  24951. !       function Uint4 (N : Node_Id) return Uint is
  24952.         begin
  24953.            pragma Assert (N in Nodes.First .. Nodes.Last);
  24954. !          return Uint (Nodes.Table (N).Field4);
  24955. !       end Uint4;
  24956.   
  24957. !       function Uint9 (N : Node_Id) return Uint is
  24958.         begin
  24959.            pragma Assert (Nkind (N) in N_Entity);
  24960. !          return Uint (Nodes.Table (N + 1).Field9);
  24961. !       end Uint9;
  24962.   
  24963. !       function Uint11 (N : Node_Id) return Uint is
  24964.         begin
  24965.            pragma Assert (Nkind (N) in N_Entity);
  24966. !          return Uint (Nodes.Table (N + 1).Field11);
  24967. !       end Uint11;
  24968.   
  24969. !       function Uint12 (N : Node_Id) return Uint is
  24970.         begin
  24971.            pragma Assert (Nkind (N) in N_Entity);
  24972. !          return Uint (Nodes.Table (N + 1).Field12);
  24973. !       end Uint12;
  24974.   
  24975. !       function Uint15 (N : Node_Id) return Uint is
  24976.         begin
  24977.            pragma Assert (Nkind (N) in N_Entity);
  24978. !          return Uint (Nodes.Table (N + 2).Field8);
  24979. !       end Uint15;
  24980.   
  24981. !       function Ureal3 (N : Node_Id) return Ureal is
  24982.         begin
  24983.            pragma Assert (N in Nodes.First .. Nodes.Last);
  24984. !          return Ureal (Nodes.Table (N).Field3);
  24985. !       end Ureal3;
  24986.   
  24987. !       function Ureal6 (N : Node_Id) return Ureal is
  24988.         begin
  24989.            pragma Assert (Nkind (N) in N_Entity);
  24990. !          return Ureal (Nodes.Table (N + 1).Field6);
  24991. !       end Ureal6;
  24992.   
  24993. !       function Ureal7 (N : Node_Id) return Ureal is
  24994.         begin
  24995.            pragma Assert (Nkind (N) in N_Entity);
  24996. !          return Ureal (Nodes.Table (N + 1).Field7);
  24997. !       end Ureal7;
  24998.   
  24999. !       function Flag1 (N : Node_Id) return Boolean is
  25000.         begin
  25001.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25002. !          return Nodes.Table (N).Flag1;
  25003. !       end Flag1;
  25004.   
  25005. !       function Flag2 (N : Node_Id) return Boolean is
  25006.         begin
  25007.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25008. !          return Nodes.Table (N).Flag2;
  25009. !       end Flag2;
  25010.   
  25011. !       function Flag3 (N : Node_Id) return Boolean is
  25012.         begin
  25013.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25014. !          return Nodes.Table (N).Flag3;
  25015. !       end Flag3;
  25016.   
  25017. !       function Flag4 (N : Node_Id) return Boolean is
  25018.         begin
  25019.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25020. !          return Nodes.Table (N).Flag4;
  25021. !       end Flag4;
  25022.   
  25023. !       function Flag5 (N : Node_Id) return Boolean is
  25024.         begin
  25025.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25026. !          return Nodes.Table (N).Flag5;
  25027. !       end Flag5;
  25028.   
  25029. !       function Flag6 (N : Node_Id) return Boolean is
  25030.         begin
  25031.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25032. !          return Nodes.Table (N).Flag6;
  25033. !       end Flag6;
  25034.   
  25035. !       function Flag7 (N : Node_Id) return Boolean is
  25036.         begin
  25037.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25038. !          return Nodes.Table (N).Flag7;
  25039. !       end Flag7;
  25040.   
  25041. !       function Flag8 (N : Node_Id) return Boolean is
  25042.         begin
  25043.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25044. !          return Nodes.Table (N).Flag8;
  25045. !       end Flag8;
  25046.   
  25047. !       function Flag9 (N : Node_Id) return Boolean is
  25048.         begin
  25049.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25050. !          return Nodes.Table (N).Flag9;
  25051. !       end Flag9;
  25052.   
  25053. !       function Flag10 (N : Node_Id) return Boolean is
  25054.         begin
  25055.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25056. !          return Nodes.Table (N).Flag10;
  25057. !       end Flag10;
  25058.   
  25059. !       function Flag11 (N : Node_Id) return Boolean is
  25060.         begin
  25061.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25062. !          return Nodes.Table (N).Flag11;
  25063. !       end Flag11;
  25064.   
  25065. !       function Flag12 (N : Node_Id) return Boolean is
  25066.         begin
  25067.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25068. !          return Nodes.Table (N).Flag12;
  25069. !       end Flag12;
  25070.   
  25071. !       function Flag13 (N : Node_Id) return Boolean is
  25072.         begin
  25073.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25074. !          return Nodes.Table (N).Flag13;
  25075. !       end Flag13;
  25076.   
  25077. !       function Flag14 (N : Node_Id) return Boolean is
  25078.         begin
  25079.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25080. !          return Nodes.Table (N).Flag14;
  25081. !       end Flag14;
  25082.   
  25083. !       function Flag15 (N : Node_Id) return Boolean is
  25084.         begin
  25085.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25086. !          return Nodes.Table (N).Flag15;
  25087. !       end Flag15;
  25088.   
  25089. !       function Flag16 (N : Node_Id) return Boolean is
  25090.         begin
  25091.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25092. !          return Nodes.Table (N).Flag16;
  25093. !       end Flag16;
  25094.   
  25095. !       function Flag17 (N : Node_Id) return Boolean is
  25096.         begin
  25097.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25098. !          return Nodes.Table (N).Flag17;
  25099. !       end Flag17;
  25100.   
  25101. !       function Flag18 (N : Node_Id) return Boolean is
  25102.         begin
  25103.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25104. !          return Nodes.Table (N).Flag18;
  25105. !       end Flag18;
  25106.   
  25107. !       function Flag19 (N : Node_Id) return Boolean is
  25108.         begin
  25109. !          pragma Assert (Nkind (N) in N_Entity);
  25110. !          return Nodes.Table (N + 1).In_List;
  25111. !       end Flag19;
  25112.   
  25113. !       function Flag20 (N : Node_Id) return Boolean is
  25114.         begin
  25115.            pragma Assert (Nkind (N) in N_Entity);
  25116. !          return Nodes.Table (N + 1).Rewrite_Sub;
  25117. !       end Flag20;
  25118.   
  25119. !       function Flag21 (N : Node_Id) return Boolean is
  25120.         begin
  25121.            pragma Assert (Nkind (N) in N_Entity);
  25122. !          return Nodes.Table (N + 1).Rewrite_Ins;
  25123. !       end Flag21;
  25124.   
  25125. !       function Flag22 (N : Node_Id) return Boolean is
  25126.         begin
  25127.            pragma Assert (Nkind (N) in N_Entity);
  25128. !          return Nodes.Table (N + 1).Flag1;
  25129. !       end Flag22;
  25130.   
  25131. !       function Flag23 (N : Node_Id) return Boolean is
  25132.         begin
  25133.            pragma Assert (Nkind (N) in N_Entity);
  25134. !          return Nodes.Table (N + 1).Flag2;
  25135. !       end Flag23;
  25136.   
  25137. !       function Flag24 (N : Node_Id) return Boolean is
  25138.         begin
  25139.            pragma Assert (Nkind (N) in N_Entity);
  25140. !          return Nodes.Table (N + 1).Flag3;
  25141. !       end Flag24;
  25142.   
  25143. !       function Flag25 (N : Node_Id) return Boolean is
  25144.         begin
  25145.            pragma Assert (Nkind (N) in N_Entity);
  25146. !          return Nodes.Table (N + 1).Flag4;
  25147. !       end Flag25;
  25148.   
  25149. !       function Flag26 (N : Node_Id) return Boolean is
  25150.         begin
  25151.            pragma Assert (Nkind (N) in N_Entity);
  25152. !          return Nodes.Table (N + 1).Flag5;
  25153. !       end Flag26;
  25154. !       function Flag27 (N : Node_Id) return Boolean is
  25155. !       begin
  25156. !          pragma Assert (Nkind (N) in N_Entity);
  25157. !          return Nodes.Table (N + 1).Flag6;
  25158. !       end Flag27;
  25159.   
  25160. !       function Flag28 (N : Node_Id) return Boolean is
  25161.         begin
  25162.            pragma Assert (Nkind (N) in N_Entity);
  25163. !          return Nodes.Table (N + 1).Flag7;
  25164. !       end Flag28;
  25165.   
  25166. !       function Flag29 (N : Node_Id) return Boolean is
  25167.         begin
  25168.            pragma Assert (Nkind (N) in N_Entity);
  25169. !          return Nodes.Table (N + 1).Flag8;
  25170. !       end Flag29;
  25171.   
  25172. !       function Flag30 (N : Node_Id) return Boolean is
  25173.         begin
  25174.            pragma Assert (Nkind (N) in N_Entity);
  25175. !          return Nodes.Table (N + 1).Flag9;
  25176. !       end Flag30;
  25177.   
  25178. !       function Flag31 (N : Node_Id) return Boolean is
  25179.         begin
  25180.            pragma Assert (Nkind (N) in N_Entity);
  25181. !          return Nodes.Table (N + 1).Flag10;
  25182. !       end Flag31;
  25183.   
  25184. !       function Flag32 (N : Node_Id) return Boolean is
  25185.         begin
  25186.            pragma Assert (Nkind (N) in N_Entity);
  25187. !          return Nodes.Table (N + 1).Flag11;
  25188. !       end Flag32;
  25189.   
  25190. !       function Flag33 (N : Node_Id) return Boolean is
  25191.         begin
  25192.            pragma Assert (Nkind (N) in N_Entity);
  25193. !          return Nodes.Table (N + 1).Flag12;
  25194. !       end Flag33;
  25195.   
  25196. !       function Flag34 (N : Node_Id) return Boolean is
  25197.         begin
  25198.            pragma Assert (Nkind (N) in N_Entity);
  25199. !          return Nodes.Table (N + 1).Flag13;
  25200. !       end Flag34;
  25201.   
  25202. !       function Flag35 (N : Node_Id) return Boolean is
  25203.         begin
  25204.            pragma Assert (Nkind (N) in N_Entity);
  25205. !          return Nodes.Table (N + 1).Flag14;
  25206. !       end Flag35;
  25207.   
  25208. !       function Flag36 (N : Node_Id) return Boolean is
  25209.         begin
  25210.            pragma Assert (Nkind (N) in N_Entity);
  25211. !          return Nodes.Table (N + 1).Flag15;
  25212. !       end Flag36;
  25213.   
  25214. !       function Flag37 (N : Node_Id) return Boolean is
  25215.         begin
  25216.            pragma Assert (Nkind (N) in N_Entity);
  25217. !          return Nodes.Table (N + 1).Flag16;
  25218. !       end Flag37;
  25219.   
  25220. !       function Flag38 (N : Node_Id) return Boolean is
  25221.         begin
  25222.            pragma Assert (Nkind (N) in N_Entity);
  25223. !          return Nodes.Table (N + 1).Flag17;
  25224. !       end Flag38;
  25225.   
  25226. !       function Flag39 (N : Node_Id) return Boolean is
  25227.         begin
  25228.            pragma Assert (Nkind (N) in N_Entity);
  25229. !          return Nodes.Table (N + 1).Flag18;
  25230. !       end Flag39;
  25231.   
  25232. !       function Flag40 (N : Node_Id) return Boolean is
  25233.         begin
  25234.            pragma Assert (Nkind (N) in N_Entity);
  25235. !          return Nodes.Table (N + 2).In_List;
  25236. !       end Flag40;
  25237.   
  25238. !       function Flag41 (N : Node_Id) return Boolean is
  25239.         begin
  25240.            pragma Assert (Nkind (N) in N_Entity);
  25241. !          return Nodes.Table (N + 2).Rewrite_Sub;
  25242. !       end Flag41;
  25243.   
  25244. !       function Flag42 (N : Node_Id) return Boolean is
  25245.         begin
  25246.            pragma Assert (Nkind (N) in N_Entity);
  25247. !          return Nodes.Table (N + 2).Rewrite_Ins;
  25248. !       end Flag42;
  25249.   
  25250. !       function Flag43 (N : Node_Id) return Boolean is
  25251.         begin
  25252.            pragma Assert (Nkind (N) in N_Entity);
  25253. !          return Nodes.Table (N + 2).Flag1;
  25254. !       end Flag43;
  25255.   
  25256. !       function Flag44 (N : Node_Id) return Boolean is
  25257.         begin
  25258.            pragma Assert (Nkind (N) in N_Entity);
  25259. !          return Nodes.Table (N + 2).Flag2;
  25260. !       end Flag44;
  25261.   
  25262. !       function Flag45 (N : Node_Id) return Boolean is
  25263.         begin
  25264.            pragma Assert (Nkind (N) in N_Entity);
  25265. !          return Nodes.Table (N + 2).Flag3;
  25266. !       end Flag45;
  25267.   
  25268. !       function Flag46 (N : Node_Id) return Boolean is
  25269.         begin
  25270.            pragma Assert (Nkind (N) in N_Entity);
  25271. !          return Nodes.Table (N + 2).Flag4;
  25272. !       end Flag46;
  25273.   
  25274. !       function Flag47 (N : Node_Id) return Boolean is
  25275.         begin
  25276.            pragma Assert (Nkind (N) in N_Entity);
  25277. !          return Nodes.Table (N + 2).Flag5;
  25278. !       end Flag47;
  25279.   
  25280. !       function Flag48 (N : Node_Id) return Boolean is
  25281.         begin
  25282.            pragma Assert (Nkind (N) in N_Entity);
  25283. !          return Nodes.Table (N + 2).Flag6;
  25284. !       end Flag48;
  25285.   
  25286. !       function Flag49 (N : Node_Id) return Boolean is
  25287.         begin
  25288.            pragma Assert (Nkind (N) in N_Entity);
  25289. !          return Nodes.Table (N + 2).Flag7;
  25290. !       end Flag49;
  25291.   
  25292. !       function Flag50 (N : Node_Id) return Boolean is
  25293.         begin
  25294.            pragma Assert (Nkind (N) in N_Entity);
  25295. !          return Nodes.Table (N + 2).Flag8;
  25296. !       end Flag50;
  25297.   
  25298. !       function Flag51 (N : Node_Id) return Boolean is
  25299.         begin
  25300.            pragma Assert (Nkind (N) in N_Entity);
  25301. !          return Nodes.Table (N + 2).Flag9;
  25302. !       end Flag51;
  25303.   
  25304. !       function Flag52 (N : Node_Id) return Boolean is
  25305.         begin
  25306.            pragma Assert (Nkind (N) in N_Entity);
  25307. !          return Nodes.Table (N + 2).Flag10;
  25308. !       end Flag52;
  25309.   
  25310. !       function Flag53 (N : Node_Id) return Boolean is
  25311.         begin
  25312.            pragma Assert (Nkind (N) in N_Entity);
  25313. !          return Nodes.Table (N + 2).Flag11;
  25314. !       end Flag53;
  25315.   
  25316. !       function Flag54 (N : Node_Id) return Boolean is
  25317.         begin
  25318.            pragma Assert (Nkind (N) in N_Entity);
  25319. !          return Nodes.Table (N + 2).Flag12;
  25320. !       end Flag54;
  25321.   
  25322. !       function Flag55 (N : Node_Id) return Boolean is
  25323.         begin
  25324.            pragma Assert (Nkind (N) in N_Entity);
  25325. !          return Nodes.Table (N + 2).Flag13;
  25326. !       end Flag55;
  25327.   
  25328. !       function Flag56 (N : Node_Id) return Boolean is
  25329.         begin
  25330.            pragma Assert (Nkind (N) in N_Entity);
  25331. !          return Nodes.Table (N + 2).Flag14;
  25332. !       end Flag56;
  25333.   
  25334. !       function Flag57 (N : Node_Id) return Boolean is
  25335.         begin
  25336.            pragma Assert (Nkind (N) in N_Entity);
  25337. !          return Nodes.Table (N + 2).Flag15;
  25338. !       end Flag57;
  25339.   
  25340. !       function Flag58 (N : Node_Id) return Boolean is
  25341.         begin
  25342.            pragma Assert (Nkind (N) in N_Entity);
  25343. !          return Nodes.Table (N + 2).Flag16;
  25344. !       end Flag58;
  25345.   
  25346. !       function Flag59 (N : Node_Id) return Boolean is
  25347.         begin
  25348.            pragma Assert (Nkind (N) in N_Entity);
  25349. !          return Nodes.Table (N + 2).Flag17;
  25350. !       end Flag59;
  25351.   
  25352. !       function Flag60 (N : Node_Id) return Boolean is
  25353.         begin
  25354.            pragma Assert (Nkind (N) in N_Entity);
  25355. !          return Nodes.Table (N + 2).Flag18;
  25356. !       end Flag60;
  25357.   
  25358. !       function Flag61 (N : Node_Id) return Boolean is
  25359.         begin
  25360.            pragma Assert (Nkind (N) in N_Entity);
  25361. !          return Nodes.Table (N + 1).Pflag1;
  25362. !       end Flag61;
  25363.   
  25364. !       function Flag62 (N : Node_Id) return Boolean is
  25365.         begin
  25366.            pragma Assert (Nkind (N) in N_Entity);
  25367. !          return Nodes.Table (N + 1).Pflag2;
  25368. !       end Flag62;
  25369.   
  25370. !       function Flag63 (N : Node_Id) return Boolean is
  25371.         begin
  25372.            pragma Assert (Nkind (N) in N_Entity);
  25373. !          return Nodes.Table (N + 2).Pflag1;
  25374. !       end Flag63;
  25375.   
  25376. !       function Flag64 (N : Node_Id) return Boolean is
  25377.         begin
  25378.            pragma Assert (Nkind (N) in N_Entity);
  25379. !          return Nodes.Table (N + 2).Pflag2;
  25380. !       end Flag64;
  25381.   
  25382. !       function Flag65 (N : Node_Id) return Boolean is
  25383.         begin
  25384.            pragma Assert (Nkind (N) in N_Entity);
  25385. !          return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag65;
  25386. !       end Flag65;
  25387.   
  25388. !       function Flag66 (N : Node_Id) return Boolean is
  25389.         begin
  25390.            pragma Assert (Nkind (N) in N_Entity);
  25391. !          return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag66;
  25392. !       end Flag66;
  25393.   
  25394. !       function Flag67 (N : Node_Id) return Boolean is
  25395.         begin
  25396.            pragma Assert (Nkind (N) in N_Entity);
  25397. !          return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag67;
  25398. !       end Flag67;
  25399.   
  25400. !       function Flag68 (N : Node_Id) return Boolean is
  25401.         begin
  25402.            pragma Assert (Nkind (N) in N_Entity);
  25403. !          return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag68;
  25404. !       end Flag68;
  25405.   
  25406. !       function Flag69 (N : Node_Id) return Boolean is
  25407.         begin
  25408.            pragma Assert (Nkind (N) in N_Entity);
  25409. !          return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag69;
  25410. !       end Flag69;
  25411.   
  25412. !       function Flag70 (N : Node_Id) return Boolean is
  25413.         begin
  25414.            pragma Assert (Nkind (N) in N_Entity);
  25415. !          return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag70;
  25416. !       end Flag70;
  25417.   
  25418. !       function Flag71 (N : Node_Id) return Boolean is
  25419.         begin
  25420.            pragma Assert (Nkind (N) in N_Entity);
  25421. !          return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag71;
  25422. !       end Flag71;
  25423.   
  25424. !       function Flag72 (N : Node_Id) return Boolean is
  25425.         begin
  25426.            pragma Assert (Nkind (N) in N_Entity);
  25427. !          return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag72;
  25428. !       end Flag72;
  25429.   
  25430. !       procedure Set_Nkind (N : Node_Id; Val : Node_Kind) is
  25431.         begin
  25432.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25433. !          Nodes.Table (N).Nkind := Val;
  25434. !       end Set_Nkind;
  25435.   
  25436. !       procedure Set_Field1 (N : Node_Id; Val : Union_Id) is
  25437.         begin
  25438.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25439. !          Nodes.Table (N).Field1 := Val;
  25440. !       end Set_Field1;
  25441.   
  25442. !       procedure Set_Field2 (N : Node_Id; Val : Union_Id) is
  25443.         begin
  25444.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25445. !          Nodes.Table (N).Field2 := Val;
  25446. !       end Set_Field2;
  25447.   
  25448. !       procedure Set_Field3 (N : Node_Id; Val : Union_Id) is
  25449.         begin
  25450.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25451. !          Nodes.Table (N).Field3 := Val;
  25452. !       end Set_Field3;
  25453.   
  25454. !       procedure Set_Field4 (N : Node_Id; Val : Union_Id) is
  25455.         begin
  25456.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25457. !          Nodes.Table (N).Field4 := Val;
  25458. !       end Set_Field4;
  25459.   
  25460. !       procedure Set_Field5 (N : Node_Id; Val : Union_Id) is
  25461.         begin
  25462.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25463. !          Nodes.Table (N).Field5 := Val;
  25464. !       end Set_Field5;
  25465.   
  25466. !       procedure Set_Field6 (N : Node_Id; Val : Union_Id) is
  25467.         begin
  25468.            pragma Assert (Nkind (N) in N_Entity);
  25469. !          Nodes.Table (N + 1).Field6 := Val;
  25470. !       end Set_Field6;
  25471.   
  25472. !       procedure Set_Field7 (N : Node_Id; Val : Union_Id) is
  25473.         begin
  25474.            pragma Assert (Nkind (N) in N_Entity);
  25475. !          Nodes.Table (N + 1).Field7 := Val;
  25476. !       end Set_Field7;
  25477.   
  25478. !       procedure Set_Field8 (N : Node_Id; Val : Union_Id) is
  25479.         begin
  25480.            pragma Assert (Nkind (N) in N_Entity);
  25481. !          Nodes.Table (N + 1).Field8 := Val;
  25482. !       end Set_Field8;
  25483.   
  25484. !       procedure Set_Field9 (N : Node_Id; Val : Union_Id) is
  25485.         begin
  25486.            pragma Assert (Nkind (N) in N_Entity);
  25487. !          Nodes.Table (N + 1).Field9 := Val;
  25488. !       end Set_Field9;
  25489.   
  25490. !       procedure Set_Field10 (N : Node_Id; Val : Union_Id) is
  25491.         begin
  25492.            pragma Assert (Nkind (N) in N_Entity);
  25493. !          Nodes.Table (N + 1).Field10 := Val;
  25494. !       end Set_Field10;
  25495.   
  25496. !       procedure Set_Field11 (N : Node_Id; Val : Union_Id) is
  25497.         begin
  25498.            pragma Assert (Nkind (N) in N_Entity);
  25499. !          Nodes.Table (N + 1).Field11 := Val;
  25500. !       end Set_Field11;
  25501.   
  25502. !       procedure Set_Field12 (N : Node_Id; Val : Union_Id) is
  25503.         begin
  25504.            pragma Assert (Nkind (N) in N_Entity);
  25505. !          Nodes.Table (N + 1).Field12 := Val;
  25506. !       end Set_Field12;
  25507.   
  25508. !       procedure Set_Field13 (N : Node_Id; Val : Union_Id) is
  25509.         begin
  25510.            pragma Assert (Nkind (N) in N_Entity);
  25511. !          Nodes.Table (N + 2).Field6 := Val;
  25512. !       end Set_Field13;
  25513.   
  25514. !       procedure Set_Field14 (N : Node_Id; Val : Union_Id) is
  25515.         begin
  25516.            pragma Assert (Nkind (N) in N_Entity);
  25517. !          Nodes.Table (N + 2).Field7 := Val;
  25518. !       end Set_Field14;
  25519.   
  25520. !       procedure Set_Field15 (N : Node_Id; Val : Union_Id) is
  25521.         begin
  25522.            pragma Assert (Nkind (N) in N_Entity);
  25523. !          Nodes.Table (N + 2).Field8 := Val;
  25524. !       end Set_Field15;
  25525.   
  25526. !       procedure Set_Field16 (N : Node_Id; Val : Union_Id) is
  25527.         begin
  25528.            pragma Assert (Nkind (N) in N_Entity);
  25529. !          Nodes.Table (N + 2).Field9 := Val;
  25530. !       end Set_Field16;
  25531.   
  25532. !       procedure Set_Field17 (N : Node_Id; Val : Union_Id) is
  25533.         begin
  25534.            pragma Assert (Nkind (N) in N_Entity);
  25535. !          Nodes.Table (N + 2).Field10 := Val;
  25536. !       end Set_Field17;
  25537.   
  25538. !       procedure Set_Field18 (N : Node_Id; Val : Union_Id) is
  25539.         begin
  25540.            pragma Assert (Nkind (N) in N_Entity);
  25541. !          Nodes.Table (N + 2).Field11 := Val;
  25542. !       end Set_Field18;
  25543.   
  25544. !       procedure Set_Field19 (N : Node_Id; Val : Union_Id) is
  25545.         begin
  25546.            pragma Assert (Nkind (N) in N_Entity);
  25547. !          Nodes.Table (N + 2).Field12 := Val;
  25548. !       end Set_Field19;
  25549.   
  25550. !       procedure Set_Node1 (N : Node_Id; Val : Node_Id) is
  25551.         begin
  25552.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25553. !          Nodes.Table (N).Field1 := Union_Id (Val);
  25554. !       end Set_Node1;
  25555.   
  25556. !       procedure Set_Node2 (N : Node_Id; Val : Node_Id) is
  25557.         begin
  25558.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25559. !          Nodes.Table (N).Field2 := Union_Id (Val);
  25560. !       end Set_Node2;
  25561.   
  25562. !       procedure Set_Node3 (N : Node_Id; Val : Node_Id) is
  25563.         begin
  25564.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25565. !          Nodes.Table (N).Field3 := Union_Id (Val);
  25566. !       end Set_Node3;
  25567.   
  25568. !       procedure Set_Node4 (N : Node_Id; Val : Node_Id) is
  25569.         begin
  25570.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25571. !          Nodes.Table (N).Field4 := Union_Id (Val);
  25572. !       end Set_Node4;
  25573.   
  25574. !       procedure Set_Node5 (N : Node_Id; Val : Node_Id) is
  25575.         begin
  25576.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25577. !          Nodes.Table (N).Field5 := Union_Id (Val);
  25578. !       end Set_Node5;
  25579.   
  25580. !       procedure Set_Node6 (N : Node_Id; Val : Node_Id) is
  25581.         begin
  25582.            pragma Assert (Nkind (N) in N_Entity);
  25583. !          Nodes.Table (N + 1).Field6 := Union_Id (Val);
  25584. !       end Set_Node6;
  25585.   
  25586. !       procedure Set_Node7 (N : Node_Id; Val : Node_Id) is
  25587.         begin
  25588.            pragma Assert (Nkind (N) in N_Entity);
  25589. !          Nodes.Table (N + 1).Field7 := Union_Id (Val);
  25590. !       end Set_Node7;
  25591.   
  25592. !       procedure Set_Node8 (N : Node_Id; Val : Node_Id) is
  25593.         begin
  25594.            pragma Assert (Nkind (N) in N_Entity);
  25595. !          Nodes.Table (N + 1).Field8 := Union_Id (Val);
  25596. !       end Set_Node8;
  25597.   
  25598. !       procedure Set_Node9 (N : Node_Id; Val : Node_Id) is
  25599.         begin
  25600.            pragma Assert (Nkind (N) in N_Entity);
  25601. !          Nodes.Table (N + 1).Field9 := Union_Id (Val);
  25602. !       end Set_Node9;
  25603.   
  25604. !       procedure Set_Node10 (N : Node_Id; Val : Node_Id) is
  25605.         begin
  25606.            pragma Assert (Nkind (N) in N_Entity);
  25607. !          Nodes.Table (N + 1).Field10 := Union_Id (Val);
  25608. !       end Set_Node10;
  25609.   
  25610. !       procedure Set_Node11 (N : Node_Id; Val : Node_Id) is
  25611.         begin
  25612.            pragma Assert (Nkind (N) in N_Entity);
  25613. !          Nodes.Table (N + 1).Field11 := Union_Id (Val);
  25614. !       end Set_Node11;
  25615.   
  25616. !       procedure Set_Node12 (N : Node_Id; Val : Node_Id) is
  25617.         begin
  25618.            pragma Assert (Nkind (N) in N_Entity);
  25619. !          Nodes.Table (N + 1).Field12 := Union_Id (Val);
  25620. !       end Set_Node12;
  25621.   
  25622. !       procedure Set_Node13 (N : Node_Id; Val : Node_Id) is
  25623.         begin
  25624.            pragma Assert (Nkind (N) in N_Entity);
  25625. !          Nodes.Table (N + 2).Field6 := Union_Id (Val);
  25626. !       end Set_Node13;
  25627.   
  25628. !       procedure Set_Node14 (N : Node_Id; Val : Node_Id) is
  25629.         begin
  25630.            pragma Assert (Nkind (N) in N_Entity);
  25631. !          Nodes.Table (N + 2).Field7 := Union_Id (Val);
  25632. !       end Set_Node14;
  25633.   
  25634. !       procedure Set_Node15 (N : Node_Id; Val : Node_Id) is
  25635.         begin
  25636.            pragma Assert (Nkind (N) in N_Entity);
  25637. !          Nodes.Table (N + 2).Field8 := Union_Id (Val);
  25638. !       end Set_Node15;
  25639.   
  25640. !       procedure Set_Node16 (N : Node_Id; Val : Node_Id) is
  25641.         begin
  25642.            pragma Assert (Nkind (N) in N_Entity);
  25643. !          Nodes.Table (N + 2).Field9 := Union_Id (Val);
  25644. !       end Set_Node16;
  25645.   
  25646. !       procedure Set_Node17 (N : Node_Id; Val : Node_Id) is
  25647.         begin
  25648.            pragma Assert (Nkind (N) in N_Entity);
  25649. !          Nodes.Table (N + 2).Field10 := Union_Id (Val);
  25650. !       end Set_Node17;
  25651.   
  25652. !       procedure Set_Node18 (N : Node_Id; Val : Node_Id) is
  25653.         begin
  25654.            pragma Assert (Nkind (N) in N_Entity);
  25655. !          Nodes.Table (N + 2).Field11 := Union_Id (Val);
  25656. !       end Set_Node18;
  25657.   
  25658. !       procedure Set_Node19 (N : Node_Id; Val : Node_Id) is
  25659.         begin
  25660.            pragma Assert (Nkind (N) in N_Entity);
  25661. !          Nodes.Table (N + 2).Field12 := Union_Id (Val);
  25662. !       end Set_Node19;
  25663.   
  25664. !       procedure Set_List1 (N : Node_Id; Val : List_Id) is
  25665.         begin
  25666.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25667. !          Nodes.Table (N).Field1 := Union_Id (Val);
  25668. !       end Set_List1;
  25669.   
  25670. !       procedure Set_List2 (N : Node_Id; Val : List_Id) is
  25671.         begin
  25672.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25673. !          Nodes.Table (N).Field2 := Union_Id (Val);
  25674. !       end Set_List2;
  25675.   
  25676. !       procedure Set_List3 (N : Node_Id; Val : List_Id) is
  25677.         begin
  25678.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25679. !          Nodes.Table (N).Field3 := Union_Id (Val);
  25680. !       end Set_List3;
  25681.   
  25682. !       procedure Set_List4 (N : Node_Id; Val : List_Id) is
  25683.         begin
  25684.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25685. !          Nodes.Table (N).Field4 := Union_Id (Val);
  25686. !       end Set_List4;
  25687.   
  25688. !       procedure Set_List5 (N : Node_Id; Val : List_Id) is
  25689.         begin
  25690.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25691. !          Nodes.Table (N).Field5 := Union_Id (Val);
  25692. !       end Set_List5;
  25693.   
  25694. !       procedure Set_Elist6 (N : Node_Id; Val : Elist_Id) is
  25695.         begin
  25696.            pragma Assert (Nkind (N) in N_Entity);
  25697. !          Nodes.Table (N + 1).Field6 := Union_Id (Val);
  25698. !       end Set_Elist6;
  25699.   
  25700. !       procedure Set_Elist13 (N : Node_Id; Val : Elist_Id) is
  25701.         begin
  25702.            pragma Assert (Nkind (N) in N_Entity);
  25703. !          Nodes.Table (N + 2).Field6 := Union_Id (Val);
  25704. !       end Set_Elist13;
  25705.   
  25706. !       procedure Set_Name1 (N : Node_Id; Val : Name_Id) is
  25707.         begin
  25708.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25709. !          Nodes.Table (N).Field1 := Union_Id (Val);
  25710. !       end Set_Name1;
  25711.   
  25712. !       procedure Set_Name2 (N : Node_Id; Val : Name_Id) is
  25713.         begin
  25714.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25715. !          Nodes.Table (N).Field2 := Union_Id (Val);
  25716. !       end Set_Name2;
  25717.   
  25718. !       procedure Set_Str3 (N : Node_Id; Val : String_Id) is
  25719.         begin
  25720.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25721. !          Nodes.Table (N).Field3 := Union_Id (Val);
  25722. !       end Set_Str3;
  25723.   
  25724. !       procedure Set_Uint3 (N : Node_Id; Val : Uint) is
  25725.         begin
  25726.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25727. !          Nodes.Table (N).Field3 := Union_Id (Val);
  25728. !       end Set_Uint3;
  25729.   
  25730. !       procedure Set_Uint4 (N : Node_Id; Val : Uint) is
  25731.         begin
  25732.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25733. !          Nodes.Table (N).Field4 := Union_Id (Val);
  25734. !       end Set_Uint4;
  25735.   
  25736. !       procedure Set_Uint9 (N : Node_Id; Val : Uint) is
  25737.         begin
  25738.            pragma Assert (Nkind (N) in N_Entity);
  25739. !          Nodes.Table (N + 1).Field9 := Union_Id (Val);
  25740. !       end Set_Uint9;
  25741.   
  25742. !       procedure Set_Uint11 (N : Node_Id; Val : Uint) is
  25743.         begin
  25744.            pragma Assert (Nkind (N) in N_Entity);
  25745. !          Nodes.Table (N + 1).Field11 := Union_Id (Val);
  25746. !       end Set_Uint11;
  25747.   
  25748. !       procedure Set_Uint12 (N : Node_Id; Val : Uint) is
  25749.         begin
  25750.            pragma Assert (Nkind (N) in N_Entity);
  25751. !          Nodes.Table (N + 1).Field12 := Union_Id (Val);
  25752. !       end Set_Uint12;
  25753.   
  25754. !       procedure Set_Uint15 (N : Node_Id; Val : Uint) is
  25755.         begin
  25756.            pragma Assert (Nkind (N) in N_Entity);
  25757. !          Nodes.Table (N + 2).Field8 := Union_Id (Val);
  25758. !       end Set_Uint15;
  25759.   
  25760. !       procedure Set_Ureal3 (N : Node_Id; Val : Ureal) is
  25761.         begin
  25762.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25763. !          Nodes.Table (N).Field3 := Union_Id (Val);
  25764. !       end Set_Ureal3;
  25765.   
  25766. !       procedure Set_Ureal6 (N : Node_Id; Val : Ureal) is
  25767.         begin
  25768.            pragma Assert (Nkind (N) in N_Entity);
  25769. !          Nodes.Table (N + 1).Field6 := Union_Id (Val);
  25770. !       end Set_Ureal6;
  25771.   
  25772. !       procedure Set_Ureal7 (N : Node_Id; Val : Ureal) is
  25773.         begin
  25774.            pragma Assert (Nkind (N) in N_Entity);
  25775. !          Nodes.Table (N + 1).Field7 := Union_Id (Val);
  25776. !       end Set_Ureal7;
  25777. !       procedure Set_Char_Code2 (N : Node_Id; Val : Char_Code) is
  25778. !       begin
  25779. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  25780. !          Nodes.Table (N).Field2 := Union_Id (Val) + Char_Code_Bias;
  25781. !       end Set_Char_Code2;
  25782. !       procedure Set_Flag1 (N : Node_Id; Val : Boolean) is
  25783. !       begin
  25784. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  25785. !          Nodes.Table (N).Flag1 := Val;
  25786. !       end Set_Flag1;
  25787.   
  25788. !       procedure Set_Flag2 (N : Node_Id; Val : Boolean) is
  25789.         begin
  25790.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25791. !          Nodes.Table (N).Flag2 := Val;
  25792. !       end Set_Flag2;
  25793.   
  25794. !       procedure Set_Flag3 (N : Node_Id; Val : Boolean) is
  25795.         begin
  25796.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25797. !          Nodes.Table (N).Flag3 := Val;
  25798. !       end Set_Flag3;
  25799.   
  25800. !       procedure Set_Flag4 (N : Node_Id; Val : Boolean) is
  25801.         begin
  25802.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25803. !          Nodes.Table (N).Flag4 := Val;
  25804. !       end Set_Flag4;
  25805.   
  25806. !       procedure Set_Flag5 (N : Node_Id; Val : Boolean) is
  25807.         begin
  25808.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25809. !          Nodes.Table (N).Flag5 := Val;
  25810. !       end Set_Flag5;
  25811.   
  25812. !       procedure Set_Flag6 (N : Node_Id; Val : Boolean) is
  25813.         begin
  25814.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25815. !          Nodes.Table (N).Flag6 := Val;
  25816. !       end Set_Flag6;
  25817.   
  25818. !       procedure Set_Flag7 (N : Node_Id; Val : Boolean) is
  25819.         begin
  25820.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25821. !          Nodes.Table (N).Flag7 := Val;
  25822. !       end Set_Flag7;
  25823.   
  25824. !       procedure Set_Flag8 (N : Node_Id; Val : Boolean) is
  25825.         begin
  25826.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25827. !          Nodes.Table (N).Flag8 := Val;
  25828. !       end Set_Flag8;
  25829.   
  25830. !       procedure Set_Flag9 (N : Node_Id; Val : Boolean) is
  25831.         begin
  25832.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25833. !          Nodes.Table (N).Flag9 := Val;
  25834. !       end Set_Flag9;
  25835.   
  25836. !       procedure Set_Flag10 (N : Node_Id; Val : Boolean) is
  25837.         begin
  25838.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25839. !          Nodes.Table (N).Flag10 := Val;
  25840. !       end Set_Flag10;
  25841.   
  25842. !       procedure Set_Flag11 (N : Node_Id; Val : Boolean) is
  25843.         begin
  25844.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25845. !          Nodes.Table (N).Flag11 := Val;
  25846. !       end Set_Flag11;
  25847.   
  25848. !       procedure Set_Flag12 (N : Node_Id; Val : Boolean) is
  25849.         begin
  25850.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25851. !          Nodes.Table (N).Flag12 := Val;
  25852. !       end Set_Flag12;
  25853.   
  25854. !       procedure Set_Flag13 (N : Node_Id; Val : Boolean) is
  25855.         begin
  25856.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25857. !          Nodes.Table (N).Flag13 := Val;
  25858. !       end Set_Flag13;
  25859.   
  25860. !       procedure Set_Flag14 (N : Node_Id; Val : Boolean) is
  25861.         begin
  25862.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25863. !          Nodes.Table (N).Flag14 := Val;
  25864. !       end Set_Flag14;
  25865.   
  25866. !       procedure Set_Flag15 (N : Node_Id; Val : Boolean) is
  25867.         begin
  25868.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25869. !          Nodes.Table (N).Flag15 := Val;
  25870. !       end Set_Flag15;
  25871.   
  25872. !       procedure Set_Flag16 (N : Node_Id; Val : Boolean) is
  25873.         begin
  25874.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25875. !          Nodes.Table (N).Flag16 := Val;
  25876. !       end Set_Flag16;
  25877.   
  25878. !       procedure Set_Flag17 (N : Node_Id; Val : Boolean) is
  25879.         begin
  25880.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25881. !          Nodes.Table (N).Flag17 := Val;
  25882. !       end Set_Flag17;
  25883.   
  25884. !       procedure Set_Flag18 (N : Node_Id; Val : Boolean) is
  25885.         begin
  25886.            pragma Assert (N in Nodes.First .. Nodes.Last);
  25887. !          Nodes.Table (N).Flag18 := Val;
  25888. !       end Set_Flag18;
  25889.   
  25890. !       procedure Set_Flag19 (N : Node_Id; Val : Boolean) is
  25891.         begin
  25892. !          pragma Assert (Nkind (N) in N_Entity);
  25893. !          Nodes.Table (N + 1).In_List := Val;
  25894. !       end Set_Flag19;
  25895.   
  25896. !       procedure Set_Flag20 (N : Node_Id; Val : Boolean) is
  25897.         begin
  25898.            pragma Assert (Nkind (N) in N_Entity);
  25899. !          Nodes.Table (N + 1).Rewrite_Sub := Val;
  25900. !       end Set_Flag20;
  25901.   
  25902. !       procedure Set_Flag21 (N : Node_Id; Val : Boolean) is
  25903.         begin
  25904.            pragma Assert (Nkind (N) in N_Entity);
  25905. !          Nodes.Table (N + 1).Rewrite_Ins := Val;
  25906. !       end Set_Flag21;
  25907.   
  25908. !       procedure Set_Flag22 (N : Node_Id; Val : Boolean) is
  25909.         begin
  25910.            pragma Assert (Nkind (N) in N_Entity);
  25911. !          Nodes.Table (N + 1).Flag1 := Val;
  25912. !       end Set_Flag22;
  25913.   
  25914. !       procedure Set_Flag23 (N : Node_Id; Val : Boolean) is
  25915.         begin
  25916.            pragma Assert (Nkind (N) in N_Entity);
  25917. !          Nodes.Table (N + 1).Flag2 := Val;
  25918. !       end Set_Flag23;
  25919.   
  25920. !       procedure Set_Flag24 (N : Node_Id; Val : Boolean) is
  25921.         begin
  25922.            pragma Assert (Nkind (N) in N_Entity);
  25923. !          Nodes.Table (N + 1).Flag3 := Val;
  25924. !       end Set_Flag24;
  25925.   
  25926. !       procedure Set_Flag25 (N : Node_Id; Val : Boolean) is
  25927.         begin
  25928.            pragma Assert (Nkind (N) in N_Entity);
  25929. !          Nodes.Table (N + 1).Flag4 := Val;
  25930. !       end Set_Flag25;
  25931.   
  25932. !       procedure Set_Flag26 (N : Node_Id; Val : Boolean) is
  25933.         begin
  25934.            pragma Assert (Nkind (N) in N_Entity);
  25935. !          Nodes.Table (N + 1).Flag5 := Val;
  25936. !       end Set_Flag26;
  25937.   
  25938. !       procedure Set_Flag27 (N : Node_Id; Val : Boolean) is
  25939.         begin
  25940.            pragma Assert (Nkind (N) in N_Entity);
  25941. !          Nodes.Table (N + 1).Flag6 := Val;
  25942. !       end Set_Flag27;
  25943.   
  25944. !       procedure Set_Flag28 (N : Node_Id; Val : Boolean) is
  25945.         begin
  25946.            pragma Assert (Nkind (N) in N_Entity);
  25947. !          Nodes.Table (N + 1).Flag7 := Val;
  25948. !       end Set_Flag28;
  25949.   
  25950. !       procedure Set_Flag29 (N : Node_Id; Val : Boolean) is
  25951.         begin
  25952.            pragma Assert (Nkind (N) in N_Entity);
  25953. !          Nodes.Table (N + 1).Flag8 := Val;
  25954. !       end Set_Flag29;
  25955.   
  25956. !       procedure Set_Flag30 (N : Node_Id; Val : Boolean) is
  25957.         begin
  25958.            pragma Assert (Nkind (N) in N_Entity);
  25959. !          Nodes.Table (N + 1).Flag9 := Val;
  25960. !       end Set_Flag30;
  25961.   
  25962. !       procedure Set_Flag31 (N : Node_Id; Val : Boolean) is
  25963.         begin
  25964.            pragma Assert (Nkind (N) in N_Entity);
  25965. !          Nodes.Table (N + 1).Flag10 := Val;
  25966. !       end Set_Flag31;
  25967.   
  25968. !       procedure Set_Flag32 (N : Node_Id; Val : Boolean) is
  25969.         begin
  25970.            pragma Assert (Nkind (N) in N_Entity);
  25971. !          Nodes.Table (N + 1).Flag11 := Val;
  25972. !       end Set_Flag32;
  25973.   
  25974. !       procedure Set_Flag33 (N : Node_Id; Val : Boolean) is
  25975.         begin
  25976.            pragma Assert (Nkind (N) in N_Entity);
  25977. !          Nodes.Table (N + 1).Flag12 := Val;
  25978. !       end Set_Flag33;
  25979.   
  25980. !       procedure Set_Flag34 (N : Node_Id; Val : Boolean) is
  25981.         begin
  25982.            pragma Assert (Nkind (N) in N_Entity);
  25983. !          Nodes.Table (N + 1).Flag13 := Val;
  25984. !       end Set_Flag34;
  25985.   
  25986. !       procedure Set_Flag35 (N : Node_Id; Val : Boolean) is
  25987.         begin
  25988.            pragma Assert (Nkind (N) in N_Entity);
  25989. !          Nodes.Table (N + 1).Flag14 := Val;
  25990. !       end Set_Flag35;
  25991.   
  25992. !       procedure Set_Flag36 (N : Node_Id; Val : Boolean) is
  25993.         begin
  25994.            pragma Assert (Nkind (N) in N_Entity);
  25995. !          Nodes.Table (N + 1).Flag15 := Val;
  25996. !       end Set_Flag36;
  25997.   
  25998. !       procedure Set_Flag37 (N : Node_Id; Val : Boolean) is
  25999.         begin
  26000.            pragma Assert (Nkind (N) in N_Entity);
  26001. !          Nodes.Table (N + 1).Flag16 := Val;
  26002. !       end Set_Flag37;
  26003.   
  26004. !       procedure Set_Flag38 (N : Node_Id; Val : Boolean) is
  26005.         begin
  26006.            pragma Assert (Nkind (N) in N_Entity);
  26007. !          Nodes.Table (N + 1).Flag17 := Val;
  26008. !       end Set_Flag38;
  26009.   
  26010. !       procedure Set_Flag39 (N : Node_Id; Val : Boolean) is
  26011.         begin
  26012.            pragma Assert (Nkind (N) in N_Entity);
  26013. !          Nodes.Table (N + 1).Flag18 := Val;
  26014. !       end Set_Flag39;
  26015.   
  26016. !       procedure Set_Flag40 (N : Node_Id; Val : Boolean) is
  26017.         begin
  26018.            pragma Assert (Nkind (N) in N_Entity);
  26019. !          Nodes.Table (N + 2).In_List := Val;
  26020. !       end Set_Flag40;
  26021.   
  26022. !       procedure Set_Flag41 (N : Node_Id; Val : Boolean) is
  26023.         begin
  26024.            pragma Assert (Nkind (N) in N_Entity);
  26025. !          Nodes.Table (N + 2).Rewrite_Sub := Val;
  26026. !       end Set_Flag41;
  26027.   
  26028. !       procedure Set_Flag42 (N : Node_Id; Val : Boolean) is
  26029.         begin
  26030.            pragma Assert (Nkind (N) in N_Entity);
  26031. !          Nodes.Table (N + 2).Rewrite_Ins := Val;
  26032. !       end Set_Flag42;
  26033.   
  26034. !       procedure Set_Flag43 (N : Node_Id; Val : Boolean) is
  26035.         begin
  26036.            pragma Assert (Nkind (N) in N_Entity);
  26037. !          Nodes.Table (N + 2).Flag1 := Val;
  26038. !       end Set_Flag43;
  26039.   
  26040. !       procedure Set_Flag44 (N : Node_Id; Val : Boolean) is
  26041.         begin
  26042.            pragma Assert (Nkind (N) in N_Entity);
  26043. !          Nodes.Table (N + 2).Flag2 := Val;
  26044. !       end Set_Flag44;
  26045.   
  26046. !       procedure Set_Flag45 (N : Node_Id; Val : Boolean) is
  26047.         begin
  26048.            pragma Assert (Nkind (N) in N_Entity);
  26049. !          Nodes.Table (N + 2).Flag3 := Val;
  26050. !       end Set_Flag45;
  26051.   
  26052. !       procedure Set_Flag46 (N : Node_Id; Val : Boolean) is
  26053.         begin
  26054.            pragma Assert (Nkind (N) in N_Entity);
  26055. !          Nodes.Table (N + 2).Flag4 := Val;
  26056. !       end Set_Flag46;
  26057.   
  26058. !       procedure Set_Flag47 (N : Node_Id; Val : Boolean) is
  26059.         begin
  26060.            pragma Assert (Nkind (N) in N_Entity);
  26061. !          Nodes.Table (N + 2).Flag5 := Val;
  26062. !       end Set_Flag47;
  26063.   
  26064. !       procedure Set_Flag48 (N : Node_Id; Val : Boolean) is
  26065.         begin
  26066.            pragma Assert (Nkind (N) in N_Entity);
  26067. !          Nodes.Table (N + 2).Flag6 := Val;
  26068. !       end Set_Flag48;
  26069.   
  26070. !       procedure Set_Flag49 (N : Node_Id; Val : Boolean) is
  26071.         begin
  26072.            pragma Assert (Nkind (N) in N_Entity);
  26073. !          Nodes.Table (N + 2).Flag7 := Val;
  26074. !       end Set_Flag49;
  26075.   
  26076. !       procedure Set_Flag50 (N : Node_Id; Val : Boolean) is
  26077.         begin
  26078.            pragma Assert (Nkind (N) in N_Entity);
  26079. !          Nodes.Table (N + 2).Flag8 := Val;
  26080. !       end Set_Flag50;
  26081.   
  26082. !       procedure Set_Flag51 (N : Node_Id; Val : Boolean) is
  26083.         begin
  26084.            pragma Assert (Nkind (N) in N_Entity);
  26085. !          Nodes.Table (N + 2).Flag9 := Val;
  26086. !       end Set_Flag51;
  26087.   
  26088. !       procedure Set_Flag52 (N : Node_Id; Val : Boolean) is
  26089.         begin
  26090.            pragma Assert (Nkind (N) in N_Entity);
  26091. !          Nodes.Table (N + 2).Flag10 := Val;
  26092. !       end Set_Flag52;
  26093.   
  26094. !       procedure Set_Flag53 (N : Node_Id; Val : Boolean) is
  26095.         begin
  26096.            pragma Assert (Nkind (N) in N_Entity);
  26097. !          Nodes.Table (N + 2).Flag11 := Val;
  26098. !       end Set_Flag53;
  26099.   
  26100. !       procedure Set_Flag54 (N : Node_Id; Val : Boolean) is
  26101.         begin
  26102.            pragma Assert (Nkind (N) in N_Entity);
  26103. !          Nodes.Table (N + 2).Flag12 := Val;
  26104. !       end Set_Flag54;
  26105.   
  26106. !       procedure Set_Flag55 (N : Node_Id; Val : Boolean) is
  26107.         begin
  26108.            pragma Assert (Nkind (N) in N_Entity);
  26109. !          Nodes.Table (N + 2).Flag13 := Val;
  26110. !       end Set_Flag55;
  26111.   
  26112. !       procedure Set_Flag56 (N : Node_Id; Val : Boolean) is
  26113.         begin
  26114.            pragma Assert (Nkind (N) in N_Entity);
  26115. !          Nodes.Table (N + 2).Flag14 := Val;
  26116. !       end Set_Flag56;
  26117.   
  26118. !       procedure Set_Flag57 (N : Node_Id; Val : Boolean) is
  26119.         begin
  26120.            pragma Assert (Nkind (N) in N_Entity);
  26121. !          Nodes.Table (N + 2).Flag15 := Val;
  26122. !       end Set_Flag57;
  26123.   
  26124. !       procedure Set_Flag58 (N : Node_Id; Val : Boolean) is
  26125.         begin
  26126.            pragma Assert (Nkind (N) in N_Entity);
  26127. !          Nodes.Table (N + 2).Flag16 := Val;
  26128. !       end Set_Flag58;
  26129.   
  26130. !       procedure Set_Flag59 (N : Node_Id; Val : Boolean) is
  26131.         begin
  26132.            pragma Assert (Nkind (N) in N_Entity);
  26133. !          Nodes.Table (N + 2).Flag17 := Val;
  26134. !       end Set_Flag59;
  26135.   
  26136. !       procedure Set_Flag60 (N : Node_Id; Val : Boolean) is
  26137.         begin
  26138.            pragma Assert (Nkind (N) in N_Entity);
  26139. !          Nodes.Table (N + 2).Flag18 := Val;
  26140. !       end Set_Flag60;
  26141.   
  26142. !       procedure Set_Flag61 (N : Node_Id; Val : Boolean) is
  26143.         begin
  26144.            pragma Assert (Nkind (N) in N_Entity);
  26145. !          Nodes.Table (N + 1).Pflag1 := Val;
  26146. !       end Set_Flag61;
  26147.   
  26148. !       procedure Set_Flag62 (N : Node_Id; Val : Boolean) is
  26149.         begin
  26150.            pragma Assert (Nkind (N) in N_Entity);
  26151. !          Nodes.Table (N + 1).Pflag2 := Val;
  26152. !       end Set_Flag62;
  26153.   
  26154. !       procedure Set_Flag63 (N : Node_Id; Val : Boolean) is
  26155.         begin
  26156.            pragma Assert (Nkind (N) in N_Entity);
  26157. !          Nodes.Table (N + 2).Pflag1 := Val;
  26158. !       end Set_Flag63;
  26159.   
  26160. !       procedure Set_Flag64 (N : Node_Id; Val : Boolean) is
  26161.         begin
  26162.            pragma Assert (Nkind (N) in N_Entity);
  26163. !          Nodes.Table (N + 2).Pflag2 := Val;
  26164. !       end Set_Flag64;
  26165.   
  26166. !       procedure Set_Flag65 (N : Node_Id; Val : Boolean) is
  26167.         begin
  26168.            pragma Assert (Nkind (N) in N_Entity);
  26169. !          To_Flag_Byte_Ptr
  26170. !            (Node_Kind_Ptr'
  26171. !              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag65 := Val;
  26172. !       end Set_Flag65;
  26173.   
  26174. !       procedure Set_Flag66 (N : Node_Id; Val : Boolean) is
  26175.         begin
  26176.            pragma Assert (Nkind (N) in N_Entity);
  26177. !          To_Flag_Byte_Ptr
  26178.              (Node_Kind_Ptr'
  26179. !              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag66 := Val;
  26180. !       end Set_Flag66;
  26181.   
  26182. !       procedure Set_Flag67 (N : Node_Id; Val : Boolean) is
  26183.         begin
  26184.            pragma Assert (Nkind (N) in N_Entity);
  26185. !          To_Flag_Byte_Ptr
  26186.              (Node_Kind_Ptr'
  26187. !              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag67 := Val;
  26188. !       end Set_Flag67;
  26189.   
  26190. !       procedure Set_Flag68 (N : Node_Id; Val : Boolean) is
  26191.         begin
  26192.            pragma Assert (Nkind (N) in N_Entity);
  26193. !          To_Flag_Byte_Ptr
  26194.              (Node_Kind_Ptr'
  26195. !              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag68 := Val;
  26196. !       end Set_Flag68;
  26197.   
  26198. !       procedure Set_Flag69 (N : Node_Id; Val : Boolean) is
  26199.         begin
  26200.            pragma Assert (Nkind (N) in N_Entity);
  26201. !          To_Flag_Byte_Ptr
  26202.              (Node_Kind_Ptr'
  26203. !              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag69 := Val;
  26204. !       end Set_Flag69;
  26205.   
  26206. !       procedure Set_Flag70 (N : Node_Id; Val : Boolean) is
  26207.         begin
  26208.            pragma Assert (Nkind (N) in N_Entity);
  26209. !          To_Flag_Byte_Ptr
  26210.              (Node_Kind_Ptr'
  26211. !              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag70 := Val;
  26212. !       end Set_Flag70;
  26213.   
  26214. !       procedure Set_Flag71 (N : Node_Id; Val : Boolean) is
  26215.         begin
  26216.            pragma Assert (Nkind (N) in N_Entity);
  26217. !          To_Flag_Byte_Ptr
  26218.              (Node_Kind_Ptr'
  26219. !              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag71 := Val;
  26220. !       end Set_Flag71;
  26221.   
  26222. !       procedure Set_Flag72 (N : Node_Id; Val : Boolean) is
  26223.         begin
  26224.            pragma Assert (Nkind (N) in N_Entity);
  26225. !          To_Flag_Byte_Ptr
  26226.              (Node_Kind_Ptr'
  26227. !              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag72 := Val;
  26228. !       end Set_Flag72;
  26229. !       procedure Set_Node1_With_Parent (N : Node_Id; Val : Node_Id) is
  26230. !       begin
  26231. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  26232. !          if Val > Error then Set_Parent (Val, N); end if;
  26233. !          Set_Node1 (N, Val);
  26234. !       end Set_Node1_With_Parent;
  26235. !       procedure Set_Node2_With_Parent (N : Node_Id; Val : Node_Id) is
  26236. !       begin
  26237. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  26238. !          if Val > Error then Set_Parent (Val, N); end if;
  26239. !          Set_Node2 (N, Val);
  26240. !       end Set_Node2_With_Parent;
  26241. !       procedure Set_Node3_With_Parent (N : Node_Id; Val : Node_Id) is
  26242. !       begin
  26243. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  26244. !          if Val > Error then Set_Parent (Val, N); end if;
  26245. !          Set_Node3 (N, Val);
  26246. !       end Set_Node3_With_Parent;
  26247. !       procedure Set_Node4_With_Parent (N : Node_Id; Val : Node_Id) is
  26248. !       begin
  26249. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  26250. !          if Val > Error then Set_Parent (Val, N); end if;
  26251. !          Set_Node4 (N, Val);
  26252. !       end Set_Node4_With_Parent;
  26253. !       procedure Set_Node5_With_Parent (N : Node_Id; Val : Node_Id) is
  26254. !       begin
  26255. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  26256. !          if Val > Error then Set_Parent (Val, N); end if;
  26257. !          Set_Node5 (N, Val);
  26258. !       end Set_Node5_With_Parent;
  26259. !       procedure Set_List1_With_Parent (N : Node_Id; Val : List_Id) is
  26260. !       begin
  26261. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  26262. !          if Val /= No_List and then Val /= Error_List then
  26263. !             Set_Parent (Val, N);
  26264. !          end if;
  26265. !          Set_List1 (N, Val);
  26266. !       end Set_List1_With_Parent;
  26267. !       procedure Set_List2_With_Parent (N : Node_Id; Val : List_Id) is
  26268. !       begin
  26269. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  26270. !          if Val /= No_List and then Val /= Error_List then
  26271. !             Set_Parent (Val, N);
  26272. !          end if;
  26273. !          Set_List2 (N, Val);
  26274. !       end Set_List2_With_Parent;
  26275. !       procedure Set_List3_With_Parent (N : Node_Id; Val : List_Id) is
  26276. !       begin
  26277. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  26278. !          if Val /= No_List and then Val /= Error_List then
  26279. !             Set_Parent (Val, N);
  26280. !          end if;
  26281. !          Set_List3 (N, Val);
  26282. !       end Set_List3_With_Parent;
  26283. !       procedure Set_List4_With_Parent (N : Node_Id; Val : List_Id) is
  26284. !       begin
  26285. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  26286. !          if Val /= No_List and then Val /= Error_List then
  26287. !             Set_Parent (Val, N);
  26288. !          end if;
  26289. !          Set_List4 (N, Val);
  26290. !       end Set_List4_With_Parent;
  26291.   
  26292. !       procedure Set_List5_With_Parent (N : Node_Id; Val : List_Id) is
  26293.         begin
  26294. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  26295. !          if Val /= No_List and then Val /= Error_List then
  26296. !             Set_Parent (Val, N);
  26297. !          end if;
  26298. !          Set_List5 (N, Val);
  26299. !       end Set_List5_With_Parent;
  26300.   
  26301.      end Unchecked_Access;
  26302.   
  26303. --- 1147,2848 ----
  26304.   
  26305.      package body Unchecked_Access is
  26306.   
  26307. !       procedure Set_Nkind (N : Node_Id; Val : Node_Kind) is
  26308.         begin
  26309.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26310. !          Nodes.Table (N).Nkind := Val;
  26311. !       end Set_Nkind;
  26312.   
  26313. !       procedure Set_Field1 (N : Node_Id; Val : Union_Id) is
  26314.         begin
  26315.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26316. !          Nodes.Table (N).Field1 := Val;
  26317. !       end Set_Field1;
  26318.   
  26319. !       procedure Set_Field2 (N : Node_Id; Val : Union_Id) is
  26320.         begin
  26321.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26322. !          Nodes.Table (N).Field2 := Val;
  26323. !       end Set_Field2;
  26324.   
  26325. !       procedure Set_Field3 (N : Node_Id; Val : Union_Id) is
  26326.         begin
  26327.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26328. !          Nodes.Table (N).Field3 := Val;
  26329. !       end Set_Field3;
  26330.   
  26331. !       procedure Set_Field4 (N : Node_Id; Val : Union_Id) is
  26332.         begin
  26333.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26334. !          Nodes.Table (N).Field4 := Val;
  26335. !       end Set_Field4;
  26336.   
  26337. !       procedure Set_Field5 (N : Node_Id; Val : Union_Id) is
  26338. !       begin
  26339. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  26340. !          Nodes.Table (N).Field5 := Val;
  26341. !       end Set_Field5;
  26342. !       procedure Set_Field6 (N : Node_Id; Val : Union_Id) is
  26343.         begin
  26344.            pragma Assert (Nkind (N) in N_Entity);
  26345. !          Nodes.Table (N + 1).Field6 := Val;
  26346. !       end Set_Field6;
  26347.   
  26348. !       procedure Set_Field7 (N : Node_Id; Val : Union_Id) is
  26349.         begin
  26350.            pragma Assert (Nkind (N) in N_Entity);
  26351. !          Nodes.Table (N + 1).Field7 := Val;
  26352. !       end Set_Field7;
  26353.   
  26354. !       procedure Set_Field8 (N : Node_Id; Val : Union_Id) is
  26355.         begin
  26356.            pragma Assert (Nkind (N) in N_Entity);
  26357. !          Nodes.Table (N + 1).Field8 := Val;
  26358. !       end Set_Field8;
  26359.   
  26360. !       procedure Set_Field9 (N : Node_Id; Val : Union_Id) is
  26361.         begin
  26362.            pragma Assert (Nkind (N) in N_Entity);
  26363. !          Nodes.Table (N + 1).Field9 := Val;
  26364. !       end Set_Field9;
  26365.   
  26366. !       procedure Set_Field10 (N : Node_Id; Val : Union_Id) is
  26367.         begin
  26368.            pragma Assert (Nkind (N) in N_Entity);
  26369. !          Nodes.Table (N + 1).Field10 := Val;
  26370. !       end Set_Field10;
  26371.   
  26372. !       procedure Set_Field11 (N : Node_Id; Val : Union_Id) is
  26373.         begin
  26374.            pragma Assert (Nkind (N) in N_Entity);
  26375. !          Nodes.Table (N + 1).Field11 := Val;
  26376. !       end Set_Field11;
  26377.   
  26378. !       procedure Set_Field12 (N : Node_Id; Val : Union_Id) is
  26379.         begin
  26380.            pragma Assert (Nkind (N) in N_Entity);
  26381. !          Nodes.Table (N + 1).Field12 := Val;
  26382. !       end Set_Field12;
  26383.   
  26384. !       procedure Set_Field13 (N : Node_Id; Val : Union_Id) is
  26385.         begin
  26386.            pragma Assert (Nkind (N) in N_Entity);
  26387. !          Nodes.Table (N + 2).Field6 := Val;
  26388. !       end Set_Field13;
  26389.   
  26390. !       procedure Set_Field14 (N : Node_Id; Val : Union_Id) is
  26391.         begin
  26392.            pragma Assert (Nkind (N) in N_Entity);
  26393. !          Nodes.Table (N + 2).Field7 := Val;
  26394. !       end Set_Field14;
  26395.   
  26396. !       procedure Set_Field15 (N : Node_Id; Val : Union_Id) is
  26397.         begin
  26398.            pragma Assert (Nkind (N) in N_Entity);
  26399. !          Nodes.Table (N + 2).Field8 := Val;
  26400. !       end Set_Field15;
  26401.   
  26402. !       procedure Set_Field16 (N : Node_Id; Val : Union_Id) is
  26403.         begin
  26404.            pragma Assert (Nkind (N) in N_Entity);
  26405. !          Nodes.Table (N + 2).Field9 := Val;
  26406. !       end Set_Field16;
  26407.   
  26408. !       procedure Set_Field17 (N : Node_Id; Val : Union_Id) is
  26409.         begin
  26410.            pragma Assert (Nkind (N) in N_Entity);
  26411. !          Nodes.Table (N + 2).Field10 := Val;
  26412. !       end Set_Field17;
  26413.   
  26414. !       procedure Set_Field18 (N : Node_Id; Val : Union_Id) is
  26415.         begin
  26416.            pragma Assert (Nkind (N) in N_Entity);
  26417. !          Nodes.Table (N + 2).Field11 := Val;
  26418. !       end Set_Field18;
  26419.   
  26420. !       procedure Set_Field19 (N : Node_Id; Val : Union_Id) is
  26421.         begin
  26422.            pragma Assert (Nkind (N) in N_Entity);
  26423. !          Nodes.Table (N + 2).Field12 := Val;
  26424. !       end Set_Field19;
  26425.   
  26426. !       procedure Set_Node1 (N : Node_Id; Val : Node_Id) is
  26427.         begin
  26428.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26429. !          Nodes.Table (N).Field1 := Union_Id (Val);
  26430. !       end Set_Node1;
  26431.   
  26432. !       procedure Set_Node2 (N : Node_Id; Val : Node_Id) is
  26433.         begin
  26434.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26435. !          Nodes.Table (N).Field2 := Union_Id (Val);
  26436. !       end Set_Node2;
  26437.   
  26438. !       procedure Set_Node3 (N : Node_Id; Val : Node_Id) is
  26439.         begin
  26440.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26441. !          Nodes.Table (N).Field3 := Union_Id (Val);
  26442. !       end Set_Node3;
  26443.   
  26444. !       procedure Set_Node4 (N : Node_Id; Val : Node_Id) is
  26445.         begin
  26446.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26447. !          Nodes.Table (N).Field4 := Union_Id (Val);
  26448. !       end Set_Node4;
  26449.   
  26450. !       procedure Set_Node5 (N : Node_Id; Val : Node_Id) is
  26451.         begin
  26452.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26453. !          Nodes.Table (N).Field5 := Union_Id (Val);
  26454. !       end Set_Node5;
  26455.   
  26456. !       procedure Set_Node6 (N : Node_Id; Val : Node_Id) is
  26457.         begin
  26458.            pragma Assert (Nkind (N) in N_Entity);
  26459. !          Nodes.Table (N + 1).Field6 := Union_Id (Val);
  26460. !       end Set_Node6;
  26461.   
  26462. !       procedure Set_Node7 (N : Node_Id; Val : Node_Id) is
  26463.         begin
  26464.            pragma Assert (Nkind (N) in N_Entity);
  26465. !          Nodes.Table (N + 1).Field7 := Union_Id (Val);
  26466. !       end Set_Node7;
  26467.   
  26468. !       procedure Set_Node8 (N : Node_Id; Val : Node_Id) is
  26469.         begin
  26470.            pragma Assert (Nkind (N) in N_Entity);
  26471. !          Nodes.Table (N + 1).Field8 := Union_Id (Val);
  26472. !       end Set_Node8;
  26473.   
  26474. !       procedure Set_Node9 (N : Node_Id; Val : Node_Id) is
  26475.         begin
  26476.            pragma Assert (Nkind (N) in N_Entity);
  26477. !          Nodes.Table (N + 1).Field9 := Union_Id (Val);
  26478. !       end Set_Node9;
  26479.   
  26480. !       procedure Set_Node10 (N : Node_Id; Val : Node_Id) is
  26481.         begin
  26482.            pragma Assert (Nkind (N) in N_Entity);
  26483. !          Nodes.Table (N + 1).Field10 := Union_Id (Val);
  26484. !       end Set_Node10;
  26485.   
  26486. !       procedure Set_Node11 (N : Node_Id; Val : Node_Id) is
  26487.         begin
  26488.            pragma Assert (Nkind (N) in N_Entity);
  26489. !          Nodes.Table (N + 1).Field11 := Union_Id (Val);
  26490. !       end Set_Node11;
  26491.   
  26492. !       procedure Set_Node12 (N : Node_Id; Val : Node_Id) is
  26493.         begin
  26494.            pragma Assert (Nkind (N) in N_Entity);
  26495. !          Nodes.Table (N + 1).Field12 := Union_Id (Val);
  26496. !       end Set_Node12;
  26497.   
  26498. !       procedure Set_Node13 (N : Node_Id; Val : Node_Id) is
  26499.         begin
  26500.            pragma Assert (Nkind (N) in N_Entity);
  26501. !          Nodes.Table (N + 2).Field6 := Union_Id (Val);
  26502. !       end Set_Node13;
  26503.   
  26504. !       procedure Set_Node14 (N : Node_Id; Val : Node_Id) is
  26505.         begin
  26506.            pragma Assert (Nkind (N) in N_Entity);
  26507. !          Nodes.Table (N + 2).Field7 := Union_Id (Val);
  26508. !       end Set_Node14;
  26509.   
  26510. !       procedure Set_Node15 (N : Node_Id; Val : Node_Id) is
  26511.         begin
  26512.            pragma Assert (Nkind (N) in N_Entity);
  26513. !          Nodes.Table (N + 2).Field8 := Union_Id (Val);
  26514. !       end Set_Node15;
  26515.   
  26516. !       procedure Set_Node16 (N : Node_Id; Val : Node_Id) is
  26517.         begin
  26518.            pragma Assert (Nkind (N) in N_Entity);
  26519. !          Nodes.Table (N + 2).Field9 := Union_Id (Val);
  26520. !       end Set_Node16;
  26521.   
  26522. !       procedure Set_Node17 (N : Node_Id; Val : Node_Id) is
  26523.         begin
  26524.            pragma Assert (Nkind (N) in N_Entity);
  26525. !          Nodes.Table (N + 2).Field10 := Union_Id (Val);
  26526. !       end Set_Node17;
  26527.   
  26528. !       procedure Set_Node18 (N : Node_Id; Val : Node_Id) is
  26529.         begin
  26530.            pragma Assert (Nkind (N) in N_Entity);
  26531. !          Nodes.Table (N + 2).Field11 := Union_Id (Val);
  26532. !       end Set_Node18;
  26533.   
  26534. !       procedure Set_Node19 (N : Node_Id; Val : Node_Id) is
  26535.         begin
  26536.            pragma Assert (Nkind (N) in N_Entity);
  26537. !          Nodes.Table (N + 2).Field12 := Union_Id (Val);
  26538. !       end Set_Node19;
  26539.   
  26540. !       procedure Set_List1 (N : Node_Id; Val : List_Id) is
  26541.         begin
  26542.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26543. !          Nodes.Table (N).Field1 := Union_Id (Val);
  26544. !       end Set_List1;
  26545.   
  26546. !       procedure Set_List2 (N : Node_Id; Val : List_Id) is
  26547.         begin
  26548.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26549. !          Nodes.Table (N).Field2 := Union_Id (Val);
  26550. !       end Set_List2;
  26551.   
  26552. !       procedure Set_List3 (N : Node_Id; Val : List_Id) is
  26553.         begin
  26554.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26555. !          Nodes.Table (N).Field3 := Union_Id (Val);
  26556. !       end Set_List3;
  26557.   
  26558. !       procedure Set_List4 (N : Node_Id; Val : List_Id) is
  26559.         begin
  26560.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26561. !          Nodes.Table (N).Field4 := Union_Id (Val);
  26562. !       end Set_List4;
  26563.   
  26564. !       procedure Set_List5 (N : Node_Id; Val : List_Id) is
  26565.         begin
  26566.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26567. !          Nodes.Table (N).Field5 := Union_Id (Val);
  26568. !       end Set_List5;
  26569.   
  26570. !       procedure Set_Elist6 (N : Node_Id; Val : Elist_Id) is
  26571.         begin
  26572.            pragma Assert (Nkind (N) in N_Entity);
  26573. !          Nodes.Table (N + 1).Field6 := Union_Id (Val);
  26574. !       end Set_Elist6;
  26575.   
  26576. !       procedure Set_Elist13 (N : Node_Id; Val : Elist_Id) is
  26577.         begin
  26578.            pragma Assert (Nkind (N) in N_Entity);
  26579. !          Nodes.Table (N + 2).Field6 := Union_Id (Val);
  26580. !       end Set_Elist13;
  26581.   
  26582. !       procedure Set_Name1 (N : Node_Id; Val : Name_Id) is
  26583.         begin
  26584.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26585. !          Nodes.Table (N).Field1 := Union_Id (Val);
  26586. !       end Set_Name1;
  26587.   
  26588. !       procedure Set_Name2 (N : Node_Id; Val : Name_Id) is
  26589.         begin
  26590.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26591. !          Nodes.Table (N).Field2 := Union_Id (Val);
  26592. !       end Set_Name2;
  26593.   
  26594. !       procedure Set_Str3 (N : Node_Id; Val : String_Id) is
  26595.         begin
  26596.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26597. !          Nodes.Table (N).Field3 := Union_Id (Val);
  26598. !       end Set_Str3;
  26599.   
  26600. !       procedure Set_Uint3 (N : Node_Id; Val : Uint) is
  26601.         begin
  26602.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26603. !          Nodes.Table (N).Field3 := Union_Id (Val);
  26604. !       end Set_Uint3;
  26605.   
  26606. !       procedure Set_Uint4 (N : Node_Id; Val : Uint) is
  26607.         begin
  26608.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26609. !          Nodes.Table (N).Field4 := Union_Id (Val);
  26610. !       end Set_Uint4;
  26611.   
  26612. !       procedure Set_Uint9 (N : Node_Id; Val : Uint) is
  26613.         begin
  26614.            pragma Assert (Nkind (N) in N_Entity);
  26615. !          Nodes.Table (N + 1).Field9 := Union_Id (Val);
  26616. !       end Set_Uint9;
  26617.   
  26618. !       procedure Set_Uint11 (N : Node_Id; Val : Uint) is
  26619.         begin
  26620.            pragma Assert (Nkind (N) in N_Entity);
  26621. !          Nodes.Table (N + 1).Field11 := Union_Id (Val);
  26622. !       end Set_Uint11;
  26623.   
  26624. !       procedure Set_Uint12 (N : Node_Id; Val : Uint) is
  26625.         begin
  26626.            pragma Assert (Nkind (N) in N_Entity);
  26627. !          Nodes.Table (N + 1).Field12 := Union_Id (Val);
  26628. !       end Set_Uint12;
  26629.   
  26630. !       procedure Set_Uint15 (N : Node_Id; Val : Uint) is
  26631.         begin
  26632.            pragma Assert (Nkind (N) in N_Entity);
  26633. !          Nodes.Table (N + 2).Field8 := Union_Id (Val);
  26634. !       end Set_Uint15;
  26635.   
  26636. !       procedure Set_Ureal3 (N : Node_Id; Val : Ureal) is
  26637.         begin
  26638.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26639. !          Nodes.Table (N).Field3 := Union_Id (Val);
  26640. !       end Set_Ureal3;
  26641.   
  26642. !       procedure Set_Ureal6 (N : Node_Id; Val : Ureal) is
  26643.         begin
  26644.            pragma Assert (Nkind (N) in N_Entity);
  26645. !          Nodes.Table (N + 1).Field6 := Union_Id (Val);
  26646. !       end Set_Ureal6;
  26647.   
  26648. !       procedure Set_Ureal7 (N : Node_Id; Val : Ureal) is
  26649.         begin
  26650.            pragma Assert (Nkind (N) in N_Entity);
  26651. !          Nodes.Table (N + 1).Field7 := Union_Id (Val);
  26652. !       end Set_Ureal7;
  26653.   
  26654. !       procedure Set_Char_Code2 (N : Node_Id; Val : Char_Code) is
  26655.         begin
  26656.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26657. !          Nodes.Table (N).Field2 := Union_Id (Val) + Char_Code_Bias;
  26658. !       end Set_Char_Code2;
  26659.   
  26660. !       procedure Set_Flag1 (N : Node_Id; Val : Boolean) is
  26661.         begin
  26662.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26663. !          Nodes.Table (N).Flag1 := Val;
  26664. !       end Set_Flag1;
  26665.   
  26666. !       procedure Set_Flag2 (N : Node_Id; Val : Boolean) is
  26667.         begin
  26668.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26669. !          Nodes.Table (N).Flag2 := Val;
  26670. !       end Set_Flag2;
  26671.   
  26672. !       procedure Set_Flag3 (N : Node_Id; Val : Boolean) is
  26673.         begin
  26674.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26675. !          Nodes.Table (N).Flag3 := Val;
  26676. !       end Set_Flag3;
  26677.   
  26678. !       procedure Set_Flag4 (N : Node_Id; Val : Boolean) is
  26679.         begin
  26680.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26681. !          Nodes.Table (N).Flag4 := Val;
  26682. !       end Set_Flag4;
  26683.   
  26684. !       procedure Set_Flag5 (N : Node_Id; Val : Boolean) is
  26685.         begin
  26686.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26687. !          Nodes.Table (N).Flag5 := Val;
  26688. !       end Set_Flag5;
  26689.   
  26690. !       procedure Set_Flag6 (N : Node_Id; Val : Boolean) is
  26691.         begin
  26692.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26693. !          Nodes.Table (N).Flag6 := Val;
  26694. !       end Set_Flag6;
  26695.   
  26696. !       procedure Set_Flag7 (N : Node_Id; Val : Boolean) is
  26697.         begin
  26698.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26699. !          Nodes.Table (N).Flag7 := Val;
  26700. !       end Set_Flag7;
  26701.   
  26702. !       procedure Set_Flag8 (N : Node_Id; Val : Boolean) is
  26703.         begin
  26704.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26705. !          Nodes.Table (N).Flag8 := Val;
  26706. !       end Set_Flag8;
  26707.   
  26708. !       procedure Set_Flag9 (N : Node_Id; Val : Boolean) is
  26709.         begin
  26710.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26711. !          Nodes.Table (N).Flag9 := Val;
  26712. !       end Set_Flag9;
  26713.   
  26714. !       procedure Set_Flag10 (N : Node_Id; Val : Boolean) is
  26715.         begin
  26716.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26717. !          Nodes.Table (N).Flag10 := Val;
  26718. !       end Set_Flag10;
  26719.   
  26720. !       procedure Set_Flag11 (N : Node_Id; Val : Boolean) is
  26721.         begin
  26722.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26723. !          Nodes.Table (N).Flag11 := Val;
  26724. !       end Set_Flag11;
  26725.   
  26726. !       procedure Set_Flag12 (N : Node_Id; Val : Boolean) is
  26727.         begin
  26728.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26729. !          Nodes.Table (N).Flag12 := Val;
  26730. !       end Set_Flag12;
  26731.   
  26732. !       procedure Set_Flag13 (N : Node_Id; Val : Boolean) is
  26733.         begin
  26734.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26735. !          Nodes.Table (N).Flag13 := Val;
  26736. !       end Set_Flag13;
  26737.   
  26738. !       procedure Set_Flag14 (N : Node_Id; Val : Boolean) is
  26739.         begin
  26740.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26741. !          Nodes.Table (N).Flag14 := Val;
  26742. !       end Set_Flag14;
  26743.   
  26744. !       procedure Set_Flag15 (N : Node_Id; Val : Boolean) is
  26745.         begin
  26746.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26747. !          Nodes.Table (N).Flag15 := Val;
  26748. !       end Set_Flag15;
  26749.   
  26750. !       procedure Set_Flag16 (N : Node_Id; Val : Boolean) is
  26751.         begin
  26752.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26753. !          Nodes.Table (N).Flag16 := Val;
  26754. !       end Set_Flag16;
  26755.   
  26756. !       procedure Set_Flag17 (N : Node_Id; Val : Boolean) is
  26757.         begin
  26758.            pragma Assert (N in Nodes.First .. Nodes.Last);
  26759. !          Nodes.Table (N).Flag17 := Val;
  26760. !       end Set_Flag17;
  26761.   
  26762. !       procedure Set_Flag18 (N : Node_Id; Val : Boolean) is
  26763.         begin
  26764. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  26765. !          Nodes.Table (N).Flag18 := Val;
  26766. !       end Set_Flag18;
  26767.   
  26768. !       procedure Set_Flag19 (N : Node_Id; Val : Boolean) is
  26769.         begin
  26770.            pragma Assert (Nkind (N) in N_Entity);
  26771. !          Nodes.Table (N + 1).In_List := Val;
  26772. !       end Set_Flag19;
  26773.   
  26774. !       procedure Set_Flag20 (N : Node_Id; Val : Boolean) is
  26775.         begin
  26776.            pragma Assert (Nkind (N) in N_Entity);
  26777. !          Nodes.Table (N + 1).Rewrite_Sub := Val;
  26778. !       end Set_Flag20;
  26779.   
  26780. !       procedure Set_Flag21 (N : Node_Id; Val : Boolean) is
  26781.         begin
  26782.            pragma Assert (Nkind (N) in N_Entity);
  26783. !          Nodes.Table (N + 1).Rewrite_Ins := Val;
  26784. !       end Set_Flag21;
  26785.   
  26786. !       procedure Set_Flag22 (N : Node_Id; Val : Boolean) is
  26787.         begin
  26788.            pragma Assert (Nkind (N) in N_Entity);
  26789. !          Nodes.Table (N + 1).Flag1 := Val;
  26790. !       end Set_Flag22;
  26791.   
  26792. !       procedure Set_Flag23 (N : Node_Id; Val : Boolean) is
  26793.         begin
  26794.            pragma Assert (Nkind (N) in N_Entity);
  26795. !          Nodes.Table (N + 1).Flag2 := Val;
  26796. !       end Set_Flag23;
  26797.   
  26798. !       procedure Set_Flag24 (N : Node_Id; Val : Boolean) is
  26799.         begin
  26800.            pragma Assert (Nkind (N) in N_Entity);
  26801. !          Nodes.Table (N + 1).Flag3 := Val;
  26802. !       end Set_Flag24;
  26803.   
  26804. !       procedure Set_Flag25 (N : Node_Id; Val : Boolean) is
  26805.         begin
  26806.            pragma Assert (Nkind (N) in N_Entity);
  26807. !          Nodes.Table (N + 1).Flag4 := Val;
  26808. !       end Set_Flag25;
  26809.   
  26810. !       procedure Set_Flag26 (N : Node_Id; Val : Boolean) is
  26811.         begin
  26812.            pragma Assert (Nkind (N) in N_Entity);
  26813. !          Nodes.Table (N + 1).Flag5 := Val;
  26814. !       end Set_Flag26;
  26815.   
  26816. !       procedure Set_Flag27 (N : Node_Id; Val : Boolean) is
  26817.         begin
  26818.            pragma Assert (Nkind (N) in N_Entity);
  26819. !          Nodes.Table (N + 1).Flag6 := Val;
  26820. !       end Set_Flag27;
  26821.   
  26822. !       procedure Set_Flag28 (N : Node_Id; Val : Boolean) is
  26823.         begin
  26824.            pragma Assert (Nkind (N) in N_Entity);
  26825. !          Nodes.Table (N + 1).Flag7 := Val;
  26826. !       end Set_Flag28;
  26827.   
  26828. !       procedure Set_Flag29 (N : Node_Id; Val : Boolean) is
  26829.         begin
  26830.            pragma Assert (Nkind (N) in N_Entity);
  26831. !          Nodes.Table (N + 1).Flag8 := Val;
  26832. !       end Set_Flag29;
  26833.   
  26834. !       procedure Set_Flag30 (N : Node_Id; Val : Boolean) is
  26835.         begin
  26836.            pragma Assert (Nkind (N) in N_Entity);
  26837. !          Nodes.Table (N + 1).Flag9 := Val;
  26838. !       end Set_Flag30;
  26839.   
  26840. !       procedure Set_Flag31 (N : Node_Id; Val : Boolean) is
  26841.         begin
  26842.            pragma Assert (Nkind (N) in N_Entity);
  26843. !          Nodes.Table (N + 1).Flag10 := Val;
  26844. !       end Set_Flag31;
  26845.   
  26846. !       procedure Set_Flag32 (N : Node_Id; Val : Boolean) is
  26847.         begin
  26848.            pragma Assert (Nkind (N) in N_Entity);
  26849. !          Nodes.Table (N + 1).Flag11 := Val;
  26850. !       end Set_Flag32;
  26851.   
  26852. !       procedure Set_Flag33 (N : Node_Id; Val : Boolean) is
  26853.         begin
  26854.            pragma Assert (Nkind (N) in N_Entity);
  26855. !          Nodes.Table (N + 1).Flag12 := Val;
  26856. !       end Set_Flag33;
  26857.   
  26858. !       procedure Set_Flag34 (N : Node_Id; Val : Boolean) is
  26859.         begin
  26860.            pragma Assert (Nkind (N) in N_Entity);
  26861. !          Nodes.Table (N + 1).Flag13 := Val;
  26862. !       end Set_Flag34;
  26863.   
  26864. !       procedure Set_Flag35 (N : Node_Id; Val : Boolean) is
  26865.         begin
  26866.            pragma Assert (Nkind (N) in N_Entity);
  26867. !          Nodes.Table (N + 1).Flag14 := Val;
  26868. !       end Set_Flag35;
  26869.   
  26870. !       procedure Set_Flag36 (N : Node_Id; Val : Boolean) is
  26871.         begin
  26872.            pragma Assert (Nkind (N) in N_Entity);
  26873. !          Nodes.Table (N + 1).Flag15 := Val;
  26874. !       end Set_Flag36;
  26875.   
  26876. !       procedure Set_Flag37 (N : Node_Id; Val : Boolean) is
  26877.         begin
  26878.            pragma Assert (Nkind (N) in N_Entity);
  26879. !          Nodes.Table (N + 1).Flag16 := Val;
  26880. !       end Set_Flag37;
  26881.   
  26882. !       procedure Set_Flag38 (N : Node_Id; Val : Boolean) is
  26883.         begin
  26884.            pragma Assert (Nkind (N) in N_Entity);
  26885. !          Nodes.Table (N + 1).Flag17 := Val;
  26886. !       end Set_Flag38;
  26887.   
  26888. !       procedure Set_Flag39 (N : Node_Id; Val : Boolean) is
  26889.         begin
  26890.            pragma Assert (Nkind (N) in N_Entity);
  26891. !          Nodes.Table (N + 1).Flag18 := Val;
  26892. !       end Set_Flag39;
  26893.   
  26894. !       procedure Set_Flag40 (N : Node_Id; Val : Boolean) is
  26895.         begin
  26896.            pragma Assert (Nkind (N) in N_Entity);
  26897. !          Nodes.Table (N + 2).In_List := Val;
  26898. !       end Set_Flag40;
  26899.   
  26900. !       procedure Set_Flag41 (N : Node_Id; Val : Boolean) is
  26901.         begin
  26902.            pragma Assert (Nkind (N) in N_Entity);
  26903. !          Nodes.Table (N + 2).Rewrite_Sub := Val;
  26904. !       end Set_Flag41;
  26905.   
  26906. !       procedure Set_Flag42 (N : Node_Id; Val : Boolean) is
  26907.         begin
  26908.            pragma Assert (Nkind (N) in N_Entity);
  26909. !          Nodes.Table (N + 2).Rewrite_Ins := Val;
  26910. !       end Set_Flag42;
  26911.   
  26912. !       procedure Set_Flag43 (N : Node_Id; Val : Boolean) is
  26913.         begin
  26914.            pragma Assert (Nkind (N) in N_Entity);
  26915. !          Nodes.Table (N + 2).Flag1 := Val;
  26916. !       end Set_Flag43;
  26917.   
  26918. !       procedure Set_Flag44 (N : Node_Id; Val : Boolean) is
  26919.         begin
  26920.            pragma Assert (Nkind (N) in N_Entity);
  26921. !          Nodes.Table (N + 2).Flag2 := Val;
  26922. !       end Set_Flag44;
  26923.   
  26924. !       procedure Set_Flag45 (N : Node_Id; Val : Boolean) is
  26925.         begin
  26926.            pragma Assert (Nkind (N) in N_Entity);
  26927. !          Nodes.Table (N + 2).Flag3 := Val;
  26928. !       end Set_Flag45;
  26929.   
  26930. !       procedure Set_Flag46 (N : Node_Id; Val : Boolean) is
  26931.         begin
  26932.            pragma Assert (Nkind (N) in N_Entity);
  26933. !          Nodes.Table (N + 2).Flag4 := Val;
  26934. !       end Set_Flag46;
  26935.   
  26936. !       procedure Set_Flag47 (N : Node_Id; Val : Boolean) is
  26937.         begin
  26938.            pragma Assert (Nkind (N) in N_Entity);
  26939. !          Nodes.Table (N + 2).Flag5 := Val;
  26940. !       end Set_Flag47;
  26941.   
  26942. !       procedure Set_Flag48 (N : Node_Id; Val : Boolean) is
  26943.         begin
  26944.            pragma Assert (Nkind (N) in N_Entity);
  26945. !          Nodes.Table (N + 2).Flag6 := Val;
  26946. !       end Set_Flag48;
  26947.   
  26948. !       procedure Set_Flag49 (N : Node_Id; Val : Boolean) is
  26949.         begin
  26950.            pragma Assert (Nkind (N) in N_Entity);
  26951. !          Nodes.Table (N + 2).Flag7 := Val;
  26952. !       end Set_Flag49;
  26953.   
  26954. !       procedure Set_Flag50 (N : Node_Id; Val : Boolean) is
  26955.         begin
  26956.            pragma Assert (Nkind (N) in N_Entity);
  26957. !          Nodes.Table (N + 2).Flag8 := Val;
  26958. !       end Set_Flag50;
  26959.   
  26960. !       procedure Set_Flag51 (N : Node_Id; Val : Boolean) is
  26961.         begin
  26962.            pragma Assert (Nkind (N) in N_Entity);
  26963. !          Nodes.Table (N + 2).Flag9 := Val;
  26964. !       end Set_Flag51;
  26965.   
  26966. !       procedure Set_Flag52 (N : Node_Id; Val : Boolean) is
  26967.         begin
  26968.            pragma Assert (Nkind (N) in N_Entity);
  26969. !          Nodes.Table (N + 2).Flag10 := Val;
  26970. !       end Set_Flag52;
  26971.   
  26972. !       procedure Set_Flag53 (N : Node_Id; Val : Boolean) is
  26973.         begin
  26974.            pragma Assert (Nkind (N) in N_Entity);
  26975. !          Nodes.Table (N + 2).Flag11 := Val;
  26976. !       end Set_Flag53;
  26977.   
  26978. !       procedure Set_Flag54 (N : Node_Id; Val : Boolean) is
  26979.         begin
  26980.            pragma Assert (Nkind (N) in N_Entity);
  26981. !          Nodes.Table (N + 2).Flag12 := Val;
  26982. !       end Set_Flag54;
  26983.   
  26984. !       procedure Set_Flag55 (N : Node_Id; Val : Boolean) is
  26985.         begin
  26986.            pragma Assert (Nkind (N) in N_Entity);
  26987. !          Nodes.Table (N + 2).Flag13 := Val;
  26988. !       end Set_Flag55;
  26989.   
  26990. !       procedure Set_Flag56 (N : Node_Id; Val : Boolean) is
  26991.         begin
  26992.            pragma Assert (Nkind (N) in N_Entity);
  26993. !          Nodes.Table (N + 2).Flag14 := Val;
  26994. !       end Set_Flag56;
  26995.   
  26996. !       procedure Set_Flag57 (N : Node_Id; Val : Boolean) is
  26997.         begin
  26998.            pragma Assert (Nkind (N) in N_Entity);
  26999. !          Nodes.Table (N + 2).Flag15 := Val;
  27000. !       end Set_Flag57;
  27001.   
  27002. !       procedure Set_Flag58 (N : Node_Id; Val : Boolean) is
  27003.         begin
  27004.            pragma Assert (Nkind (N) in N_Entity);
  27005. !          Nodes.Table (N + 2).Flag16 := Val;
  27006. !       end Set_Flag58;
  27007.   
  27008. !       procedure Set_Flag59 (N : Node_Id; Val : Boolean) is
  27009.         begin
  27010.            pragma Assert (Nkind (N) in N_Entity);
  27011. !          Nodes.Table (N + 2).Flag17 := Val;
  27012. !       end Set_Flag59;
  27013.   
  27014. !       procedure Set_Flag60 (N : Node_Id; Val : Boolean) is
  27015.         begin
  27016.            pragma Assert (Nkind (N) in N_Entity);
  27017. !          Nodes.Table (N + 2).Flag18 := Val;
  27018. !       end Set_Flag60;
  27019.   
  27020. !       procedure Set_Flag61 (N : Node_Id; Val : Boolean) is
  27021.         begin
  27022.            pragma Assert (Nkind (N) in N_Entity);
  27023. !          Nodes.Table (N + 1).Pflag1 := Val;
  27024. !       end Set_Flag61;
  27025.   
  27026. !       procedure Set_Flag62 (N : Node_Id; Val : Boolean) is
  27027.         begin
  27028.            pragma Assert (Nkind (N) in N_Entity);
  27029. !          Nodes.Table (N + 1).Pflag2 := Val;
  27030. !       end Set_Flag62;
  27031.   
  27032. !       procedure Set_Flag63 (N : Node_Id; Val : Boolean) is
  27033.         begin
  27034.            pragma Assert (Nkind (N) in N_Entity);
  27035. !          Nodes.Table (N + 2).Pflag1 := Val;
  27036. !       end Set_Flag63;
  27037.   
  27038. !       procedure Set_Flag64 (N : Node_Id; Val : Boolean) is
  27039.         begin
  27040.            pragma Assert (Nkind (N) in N_Entity);
  27041. !          Nodes.Table (N + 2).Pflag2 := Val;
  27042. !       end Set_Flag64;
  27043.   
  27044. !       procedure Set_Flag65 (N : Node_Id; Val : Boolean) is
  27045.         begin
  27046.            pragma Assert (Nkind (N) in N_Entity);
  27047. !          To_Flag_Byte_Ptr
  27048. !            (Node_Kind_Ptr'
  27049. !              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag65 := Val;
  27050. !       end Set_Flag65;
  27051.   
  27052. !       procedure Set_Flag66 (N : Node_Id; Val : Boolean) is
  27053.         begin
  27054.            pragma Assert (Nkind (N) in N_Entity);
  27055. !          To_Flag_Byte_Ptr
  27056. !            (Node_Kind_Ptr'
  27057. !              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag66 := Val;
  27058. !       end Set_Flag66;
  27059.   
  27060. !       procedure Set_Flag67 (N : Node_Id; Val : Boolean) is
  27061.         begin
  27062.            pragma Assert (Nkind (N) in N_Entity);
  27063. !          To_Flag_Byte_Ptr
  27064. !            (Node_Kind_Ptr'
  27065. !              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag67 := Val;
  27066. !       end Set_Flag67;
  27067.   
  27068. !       procedure Set_Flag68 (N : Node_Id; Val : Boolean) is
  27069.         begin
  27070.            pragma Assert (Nkind (N) in N_Entity);
  27071. !          To_Flag_Byte_Ptr
  27072. !            (Node_Kind_Ptr'
  27073. !              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag68 := Val;
  27074. !       end Set_Flag68;
  27075.   
  27076. !       procedure Set_Flag69 (N : Node_Id; Val : Boolean) is
  27077.         begin
  27078.            pragma Assert (Nkind (N) in N_Entity);
  27079. !          To_Flag_Byte_Ptr
  27080. !            (Node_Kind_Ptr'
  27081. !              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag69 := Val;
  27082. !       end Set_Flag69;
  27083.   
  27084. !       procedure Set_Flag70 (N : Node_Id; Val : Boolean) is
  27085.         begin
  27086.            pragma Assert (Nkind (N) in N_Entity);
  27087. !          To_Flag_Byte_Ptr
  27088. !            (Node_Kind_Ptr'
  27089. !              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag70 := Val;
  27090. !       end Set_Flag70;
  27091.   
  27092. !       procedure Set_Flag71 (N : Node_Id; Val : Boolean) is
  27093. !       begin
  27094. !          pragma Assert (Nkind (N) in N_Entity);
  27095. !          To_Flag_Byte_Ptr
  27096. !            (Node_Kind_Ptr'
  27097. !              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag71 := Val;
  27098. !       end Set_Flag71;
  27099. !       procedure Set_Flag72 (N : Node_Id; Val : Boolean) is
  27100. !       begin
  27101. !          pragma Assert (Nkind (N) in N_Entity);
  27102. !          To_Flag_Byte_Ptr
  27103. !            (Node_Kind_Ptr'
  27104. !              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag72 := Val;
  27105. !       end Set_Flag72;
  27106. !       procedure Set_Node1_With_Parent (N : Node_Id; Val : Node_Id) is
  27107.         begin
  27108.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27109. !          if Val > Error then Set_Parent (Val, N); end if;
  27110. !          Set_Node1 (N, Val);
  27111. !       end Set_Node1_With_Parent;
  27112.   
  27113. !       procedure Set_Node2_With_Parent (N : Node_Id; Val : Node_Id) is
  27114.         begin
  27115.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27116. !          if Val > Error then Set_Parent (Val, N); end if;
  27117. !          Set_Node2 (N, Val);
  27118. !       end Set_Node2_With_Parent;
  27119.   
  27120. !       procedure Set_Node3_With_Parent (N : Node_Id; Val : Node_Id) is
  27121.         begin
  27122.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27123. !          if Val > Error then Set_Parent (Val, N); end if;
  27124. !          Set_Node3 (N, Val);
  27125. !       end Set_Node3_With_Parent;
  27126.   
  27127. !       procedure Set_Node4_With_Parent (N : Node_Id; Val : Node_Id) is
  27128.         begin
  27129.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27130. !          if Val > Error then Set_Parent (Val, N); end if;
  27131. !          Set_Node4 (N, Val);
  27132. !       end Set_Node4_With_Parent;
  27133.   
  27134. !       procedure Set_Node5_With_Parent (N : Node_Id; Val : Node_Id) is
  27135.         begin
  27136.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27137. !          if Val > Error then Set_Parent (Val, N); end if;
  27138. !          Set_Node5 (N, Val);
  27139. !       end Set_Node5_With_Parent;
  27140.   
  27141. !       procedure Set_List1_With_Parent (N : Node_Id; Val : List_Id) is
  27142.         begin
  27143.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27144. !          if Val /= No_List and then Val /= Error_List then
  27145. !             Set_Parent (Val, N);
  27146. !          end if;
  27147. !          Set_List1 (N, Val);
  27148. !       end Set_List1_With_Parent;
  27149.   
  27150. !       procedure Set_List2_With_Parent (N : Node_Id; Val : List_Id) is
  27151. !       begin
  27152. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  27153. !          if Val /= No_List and then Val /= Error_List then
  27154. !             Set_Parent (Val, N);
  27155. !          end if;
  27156. !          Set_List2 (N, Val);
  27157. !       end Set_List2_With_Parent;
  27158. !       procedure Set_List3_With_Parent (N : Node_Id; Val : List_Id) is
  27159. !       begin
  27160. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  27161. !          if Val /= No_List and then Val /= Error_List then
  27162. !             Set_Parent (Val, N);
  27163. !          end if;
  27164. !          Set_List3 (N, Val);
  27165. !       end Set_List3_With_Parent;
  27166. !       procedure Set_List4_With_Parent (N : Node_Id; Val : List_Id) is
  27167. !       begin
  27168. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  27169. !          if Val /= No_List and then Val /= Error_List then
  27170. !             Set_Parent (Val, N);
  27171. !          end if;
  27172. !          Set_List4 (N, Val);
  27173. !       end Set_List4_With_Parent;
  27174. !       procedure Set_List5_With_Parent (N : Node_Id; Val : List_Id) is
  27175. !       begin
  27176. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  27177. !          if Val /= No_List and then Val /= Error_List then
  27178. !             Set_Parent (Val, N);
  27179. !          end if;
  27180. !          Set_List5 (N, Val);
  27181. !       end Set_List5_With_Parent;
  27182. !       function Field1 (N : Node_Id) return Union_Id is
  27183. !       begin
  27184. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  27185. !          return Nodes.Table (N).Field1;
  27186. !       end Field1;
  27187. !       function Field2 (N : Node_Id) return Union_Id is
  27188. !       begin
  27189. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  27190. !          return Nodes.Table (N).Field2;
  27191. !       end Field2;
  27192. !       function Field3 (N : Node_Id) return Union_Id is
  27193. !       begin
  27194. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  27195. !          return Nodes.Table (N).Field3;
  27196. !       end Field3;
  27197. !       function Field4 (N : Node_Id) return Union_Id is
  27198. !       begin
  27199. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  27200. !          return Nodes.Table (N).Field4;
  27201. !       end Field4;
  27202. !       function Field5 (N : Node_Id) return Union_Id is
  27203. !       begin
  27204. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  27205. !          return Nodes.Table (N).Field5;
  27206. !       end Field5;
  27207. !       function Field6 (N : Node_Id) return Union_Id is
  27208.         begin
  27209.            pragma Assert (Nkind (N) in N_Entity);
  27210. !          return Nodes.Table (N + 1).Field6;
  27211. !       end Field6;
  27212.   
  27213. !       function Field7 (N : Node_Id) return Union_Id is
  27214.         begin
  27215.            pragma Assert (Nkind (N) in N_Entity);
  27216. !          return Nodes.Table (N + 1).Field7;
  27217. !       end Field7;
  27218.   
  27219. !       function Field8 (N : Node_Id) return Union_Id is
  27220.         begin
  27221.            pragma Assert (Nkind (N) in N_Entity);
  27222. !          return Nodes.Table (N + 1).Field8;
  27223. !       end Field8;
  27224.   
  27225. !       function Field9 (N : Node_Id) return Union_Id is
  27226.         begin
  27227.            pragma Assert (Nkind (N) in N_Entity);
  27228. !          return Nodes.Table (N + 1).Field9;
  27229. !       end Field9;
  27230.   
  27231. !       function Field10 (N : Node_Id) return Union_Id is
  27232.         begin
  27233.            pragma Assert (Nkind (N) in N_Entity);
  27234. !          return Nodes.Table (N + 1).Field10;
  27235. !       end Field10;
  27236.   
  27237. !       function Field11 (N : Node_Id) return Union_Id is
  27238.         begin
  27239.            pragma Assert (Nkind (N) in N_Entity);
  27240. !          return Nodes.Table (N + 1).Field11;
  27241. !       end Field11;
  27242.   
  27243. !       function Field12 (N : Node_Id) return Union_Id is
  27244.         begin
  27245.            pragma Assert (Nkind (N) in N_Entity);
  27246. !          return Nodes.Table (N + 1).Field12;
  27247. !       end Field12;
  27248.   
  27249. !       function Field13 (N : Node_Id) return Union_Id is
  27250.         begin
  27251.            pragma Assert (Nkind (N) in N_Entity);
  27252. !          return Nodes.Table (N + 2).Field6;
  27253. !       end Field13;
  27254.   
  27255. !       function Field14 (N : Node_Id) return Union_Id is
  27256.         begin
  27257.            pragma Assert (Nkind (N) in N_Entity);
  27258. !          return Nodes.Table (N + 2).Field7;
  27259. !       end Field14;
  27260.   
  27261. !       function Field15 (N : Node_Id) return Union_Id is
  27262.         begin
  27263.            pragma Assert (Nkind (N) in N_Entity);
  27264. !          return Nodes.Table (N + 2).Field8;
  27265. !       end Field15;
  27266.   
  27267. !       function Field16 (N : Node_Id) return Union_Id is
  27268.         begin
  27269.            pragma Assert (Nkind (N) in N_Entity);
  27270. !          return Nodes.Table (N + 2).Field9;
  27271. !       end Field16;
  27272.   
  27273. !       function Field17 (N : Node_Id) return Union_Id is
  27274.         begin
  27275.            pragma Assert (Nkind (N) in N_Entity);
  27276. !          return Nodes.Table (N + 2).Field10;
  27277. !       end Field17;
  27278.   
  27279. !       function Field18 (N : Node_Id) return Union_Id is
  27280.         begin
  27281.            pragma Assert (Nkind (N) in N_Entity);
  27282. !          return Nodes.Table (N + 2).Field11;
  27283. !       end Field18;
  27284.   
  27285. !       function Field19 (N : Node_Id) return Union_Id is
  27286.         begin
  27287.            pragma Assert (Nkind (N) in N_Entity);
  27288. !          return Nodes.Table (N + 2).Field12;
  27289. !       end Field19;
  27290.   
  27291. !       function Node1 (N : Node_Id) return Node_Id is
  27292.         begin
  27293.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27294. !          return Node_Id (Nodes.Table (N).Field1);
  27295. !       end Node1;
  27296.   
  27297. !       function Node2 (N : Node_Id) return Node_Id is
  27298.         begin
  27299.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27300. !          return Node_Id (Nodes.Table (N).Field2);
  27301. !       end Node2;
  27302.   
  27303. !       function Node3 (N : Node_Id) return Node_Id is
  27304.         begin
  27305.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27306. !          return Node_Id (Nodes.Table (N).Field3);
  27307. !       end Node3;
  27308.   
  27309. !       function Node4 (N : Node_Id) return Node_Id is
  27310.         begin
  27311.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27312. !          return Node_Id (Nodes.Table (N).Field4);
  27313. !       end Node4;
  27314.   
  27315. !       function Node5 (N : Node_Id) return Node_Id is
  27316.         begin
  27317.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27318. !          return Node_Id (Nodes.Table (N).Field5);
  27319. !       end Node5;
  27320.   
  27321. !       function Node6 (N : Node_Id) return Node_Id is
  27322.         begin
  27323.            pragma Assert (Nkind (N) in N_Entity);
  27324. !          return Node_Id (Nodes.Table (N + 1).Field6);
  27325. !       end Node6;
  27326.   
  27327. !       function Node7 (N : Node_Id) return Node_Id is
  27328.         begin
  27329.            pragma Assert (Nkind (N) in N_Entity);
  27330. !          return Node_Id (Nodes.Table (N + 1).Field7);
  27331. !       end Node7;
  27332.   
  27333. !       function Node8 (N : Node_Id) return Node_Id is
  27334.         begin
  27335.            pragma Assert (Nkind (N) in N_Entity);
  27336. !          return Node_Id (Nodes.Table (N + 1).Field8);
  27337. !       end Node8;
  27338.   
  27339. !       function Node9 (N : Node_Id) return Node_Id is
  27340.         begin
  27341.            pragma Assert (Nkind (N) in N_Entity);
  27342. !          return Node_Id (Nodes.Table (N + 1).Field9);
  27343. !       end Node9;
  27344.   
  27345. !       function Node10 (N : Node_Id) return Node_Id is
  27346.         begin
  27347.            pragma Assert (Nkind (N) in N_Entity);
  27348. !          return Node_Id (Nodes.Table (N + 1).Field10);
  27349. !       end Node10;
  27350.   
  27351. !       function Node11 (N : Node_Id) return Node_Id is
  27352.         begin
  27353.            pragma Assert (Nkind (N) in N_Entity);
  27354. !          return Node_Id (Nodes.Table (N + 1).Field11);
  27355. !       end Node11;
  27356.   
  27357. !       function Node12 (N : Node_Id) return Node_Id is
  27358.         begin
  27359.            pragma Assert (Nkind (N) in N_Entity);
  27360. !          return Node_Id (Nodes.Table (N + 1).Field12);
  27361. !       end Node12;
  27362.   
  27363. !       function Node13 (N : Node_Id) return Node_Id is
  27364.         begin
  27365.            pragma Assert (Nkind (N) in N_Entity);
  27366. !          return Node_Id (Nodes.Table (N + 2).Field6);
  27367. !       end Node13;
  27368.   
  27369. !       function Node14 (N : Node_Id) return Node_Id is
  27370.         begin
  27371.            pragma Assert (Nkind (N) in N_Entity);
  27372. !          return Node_Id (Nodes.Table (N + 2).Field7);
  27373. !       end Node14;
  27374.   
  27375. !       function Node15 (N : Node_Id) return Node_Id is
  27376.         begin
  27377.            pragma Assert (Nkind (N) in N_Entity);
  27378. !          return Node_Id (Nodes.Table (N + 2).Field8);
  27379. !       end Node15;
  27380.   
  27381. !       function Node16 (N : Node_Id) return Node_Id is
  27382.         begin
  27383.            pragma Assert (Nkind (N) in N_Entity);
  27384. !          return Node_Id (Nodes.Table (N + 2).Field9);
  27385. !       end Node16;
  27386.   
  27387. !       function Node17 (N : Node_Id) return Node_Id is
  27388.         begin
  27389.            pragma Assert (Nkind (N) in N_Entity);
  27390. !          return Node_Id (Nodes.Table (N + 2).Field10);
  27391. !       end Node17;
  27392.   
  27393. !       function Node18 (N : Node_Id) return Node_Id is
  27394.         begin
  27395.            pragma Assert (Nkind (N) in N_Entity);
  27396. !          return Node_Id (Nodes.Table (N + 2).Field11);
  27397. !       end Node18;
  27398.   
  27399. !       function Node19 (N : Node_Id) return Node_Id is
  27400.         begin
  27401.            pragma Assert (Nkind (N) in N_Entity);
  27402. !          return Node_Id (Nodes.Table (N + 2).Field12);
  27403. !       end Node19;
  27404.   
  27405. !       function List1 (N : Node_Id) return List_Id is
  27406.         begin
  27407.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27408. !          return List_Id (Nodes.Table (N).Field1);
  27409. !       end List1;
  27410.   
  27411. !       function List2 (N : Node_Id) return List_Id is
  27412.         begin
  27413.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27414. !          return List_Id (Nodes.Table (N).Field2);
  27415. !       end List2;
  27416.   
  27417. !       function List3 (N : Node_Id) return List_Id is
  27418.         begin
  27419.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27420. !          return List_Id (Nodes.Table (N).Field3);
  27421. !       end List3;
  27422.   
  27423. !       function List4 (N : Node_Id) return List_Id is
  27424.         begin
  27425.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27426. !          return List_Id (Nodes.Table (N).Field4);
  27427. !       end List4;
  27428.   
  27429. !       function List5 (N : Node_Id) return List_Id is
  27430.         begin
  27431.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27432. !          return List_Id (Nodes.Table (N).Field5);
  27433. !       end List5;
  27434.   
  27435. !       function Elist6 (N : Node_Id) return Elist_Id is
  27436.         begin
  27437.            pragma Assert (Nkind (N) in N_Entity);
  27438. !          return Elist_Id (Nodes.Table (N + 1).Field6);
  27439. !       end Elist6;
  27440.   
  27441. !       function Elist13 (N : Node_Id) return Elist_Id is
  27442.         begin
  27443.            pragma Assert (Nkind (N) in N_Entity);
  27444. !          return Elist_Id (Nodes.Table (N + 2).Field6);
  27445. !       end Elist13;
  27446.   
  27447. !       function Name1 (N : Node_Id) return Name_Id is
  27448.         begin
  27449.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27450. !          return Name_Id (Nodes.Table (N).Field1);
  27451. !       end Name1;
  27452.   
  27453. !       function Name2 (N : Node_Id) return Name_Id is
  27454.         begin
  27455.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27456. !          return Name_Id (Nodes.Table (N).Field2);
  27457. !       end Name2;
  27458.   
  27459. !       function Str3 (N : Node_Id) return String_Id is
  27460.         begin
  27461.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27462. !          return String_Id (Nodes.Table (N).Field3);
  27463. !       end Str3;
  27464.   
  27465. !       function Char_Code2 (N : Node_Id) return Char_Code is
  27466.         begin
  27467.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27468. !          return Char_Code (Nodes.Table (N).Field2 - Char_Code_Bias);
  27469. !       end Char_Code2;
  27470.   
  27471. !       function Uint3 (N : Node_Id) return Uint is
  27472.         begin
  27473.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27474. !          return Uint (Nodes.Table (N).Field3);
  27475. !       end Uint3;
  27476.   
  27477. !       function Uint4 (N : Node_Id) return Uint is
  27478. !       begin
  27479. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  27480. !          return Uint (Nodes.Table (N).Field4);
  27481. !       end Uint4;
  27482. !       function Uint9 (N : Node_Id) return Uint is
  27483.         begin
  27484.            pragma Assert (Nkind (N) in N_Entity);
  27485. !          return Uint (Nodes.Table (N + 1).Field9);
  27486. !       end Uint9;
  27487.   
  27488. !       function Uint11 (N : Node_Id) return Uint is
  27489.         begin
  27490.            pragma Assert (Nkind (N) in N_Entity);
  27491. !          return Uint (Nodes.Table (N + 1).Field11);
  27492. !       end Uint11;
  27493.   
  27494. !       function Uint12 (N : Node_Id) return Uint is
  27495.         begin
  27496.            pragma Assert (Nkind (N) in N_Entity);
  27497. !          return Uint (Nodes.Table (N + 1).Field12);
  27498. !       end Uint12;
  27499.   
  27500. !       function Uint15 (N : Node_Id) return Uint is
  27501.         begin
  27502.            pragma Assert (Nkind (N) in N_Entity);
  27503. !          return Uint (Nodes.Table (N + 2).Field8);
  27504. !       end Uint15;
  27505.   
  27506. !       function Ureal3 (N : Node_Id) return Ureal is
  27507.         begin
  27508.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27509. !          return Ureal (Nodes.Table (N).Field3);
  27510. !       end Ureal3;
  27511.   
  27512. !       function Ureal6 (N : Node_Id) return Ureal is
  27513.         begin
  27514.            pragma Assert (Nkind (N) in N_Entity);
  27515. !          return Ureal (Nodes.Table (N + 1).Field6);
  27516. !       end Ureal6;
  27517.   
  27518. !       function Ureal7 (N : Node_Id) return Ureal is
  27519.         begin
  27520.            pragma Assert (Nkind (N) in N_Entity);
  27521. !          return Ureal (Nodes.Table (N + 1).Field7);
  27522. !       end Ureal7;
  27523.   
  27524. !       function Flag1 (N : Node_Id) return Boolean is
  27525.         begin
  27526.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27527. !          return Nodes.Table (N).Flag1;
  27528. !       end Flag1;
  27529.   
  27530. !       function Flag2 (N : Node_Id) return Boolean is
  27531.         begin
  27532.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27533. !          return Nodes.Table (N).Flag2;
  27534. !       end Flag2;
  27535.   
  27536. !       function Flag3 (N : Node_Id) return Boolean is
  27537.         begin
  27538.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27539. !          return Nodes.Table (N).Flag3;
  27540. !       end Flag3;
  27541.   
  27542. !       function Flag4 (N : Node_Id) return Boolean is
  27543.         begin
  27544.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27545. !          return Nodes.Table (N).Flag4;
  27546. !       end Flag4;
  27547.   
  27548. !       function Flag5 (N : Node_Id) return Boolean is
  27549.         begin
  27550.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27551. !          return Nodes.Table (N).Flag5;
  27552. !       end Flag5;
  27553.   
  27554. !       function Flag6 (N : Node_Id) return Boolean is
  27555.         begin
  27556.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27557. !          return Nodes.Table (N).Flag6;
  27558. !       end Flag6;
  27559.   
  27560. !       function Flag7 (N : Node_Id) return Boolean is
  27561.         begin
  27562.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27563. !          return Nodes.Table (N).Flag7;
  27564. !       end Flag7;
  27565.   
  27566. !       function Flag8 (N : Node_Id) return Boolean is
  27567.         begin
  27568.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27569. !          return Nodes.Table (N).Flag8;
  27570. !       end Flag8;
  27571.   
  27572. !       function Flag9 (N : Node_Id) return Boolean is
  27573.         begin
  27574.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27575. !          return Nodes.Table (N).Flag9;
  27576. !       end Flag9;
  27577.   
  27578. !       function Flag10 (N : Node_Id) return Boolean is
  27579.         begin
  27580.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27581. !          return Nodes.Table (N).Flag10;
  27582. !       end Flag10;
  27583.   
  27584. !       function Flag11 (N : Node_Id) return Boolean is
  27585.         begin
  27586.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27587. !          return Nodes.Table (N).Flag11;
  27588. !       end Flag11;
  27589.   
  27590. !       function Flag12 (N : Node_Id) return Boolean is
  27591.         begin
  27592.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27593. !          return Nodes.Table (N).Flag12;
  27594. !       end Flag12;
  27595.   
  27596. !       function Flag13 (N : Node_Id) return Boolean is
  27597.         begin
  27598.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27599. !          return Nodes.Table (N).Flag13;
  27600. !       end Flag13;
  27601.   
  27602. !       function Flag14 (N : Node_Id) return Boolean is
  27603.         begin
  27604.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27605. !          return Nodes.Table (N).Flag14;
  27606. !       end Flag14;
  27607.   
  27608. !       function Flag15 (N : Node_Id) return Boolean is
  27609.         begin
  27610.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27611. !          return Nodes.Table (N).Flag15;
  27612. !       end Flag15;
  27613.   
  27614. !       function Flag16 (N : Node_Id) return Boolean is
  27615.         begin
  27616.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27617. !          return Nodes.Table (N).Flag16;
  27618. !       end Flag16;
  27619.   
  27620. !       function Flag17 (N : Node_Id) return Boolean is
  27621.         begin
  27622.            pragma Assert (N in Nodes.First .. Nodes.Last);
  27623. !          return Nodes.Table (N).Flag17;
  27624. !       end Flag17;
  27625.   
  27626. !       function Flag18 (N : Node_Id) return Boolean is
  27627.         begin
  27628. !          pragma Assert (N in Nodes.First .. Nodes.Last);
  27629. !          return Nodes.Table (N).Flag18;
  27630. !       end Flag18;
  27631.   
  27632. !       function Flag19 (N : Node_Id) return Boolean is
  27633.         begin
  27634.            pragma Assert (Nkind (N) in N_Entity);
  27635. !          return Nodes.Table (N + 1).In_List;
  27636. !       end Flag19;
  27637.   
  27638. !       function Flag20 (N : Node_Id) return Boolean is
  27639.         begin
  27640.            pragma Assert (Nkind (N) in N_Entity);
  27641. !          return Nodes.Table (N + 1).Rewrite_Sub;
  27642. !       end Flag20;
  27643.   
  27644. !       function Flag21 (N : Node_Id) return Boolean is
  27645.         begin
  27646.            pragma Assert (Nkind (N) in N_Entity);
  27647. !          return Nodes.Table (N + 1).Rewrite_Ins;
  27648. !       end Flag21;
  27649.   
  27650. !       function Flag22 (N : Node_Id) return Boolean is
  27651.         begin
  27652.            pragma Assert (Nkind (N) in N_Entity);
  27653. !          return Nodes.Table (N + 1).Flag1;
  27654. !       end Flag22;
  27655.   
  27656. !       function Flag23 (N : Node_Id) return Boolean is
  27657.         begin
  27658.            pragma Assert (Nkind (N) in N_Entity);
  27659. !          return Nodes.Table (N + 1).Flag2;
  27660. !       end Flag23;
  27661.   
  27662. !       function Flag24 (N : Node_Id) return Boolean is
  27663.         begin
  27664.            pragma Assert (Nkind (N) in N_Entity);
  27665. !          return Nodes.Table (N + 1).Flag3;
  27666. !       end Flag24;
  27667.   
  27668. !       function Flag25 (N : Node_Id) return Boolean is
  27669.         begin
  27670.            pragma Assert (Nkind (N) in N_Entity);
  27671. !          return Nodes.Table (N + 1).Flag4;
  27672. !       end Flag25;
  27673.   
  27674. !       function Flag26 (N : Node_Id) return Boolean is
  27675.         begin
  27676.            pragma Assert (Nkind (N) in N_Entity);
  27677. !          return Nodes.Table (N + 1).Flag5;
  27678. !       end Flag26;
  27679.   
  27680. !       function Flag27 (N : Node_Id) return Boolean is
  27681.         begin
  27682.            pragma Assert (Nkind (N) in N_Entity);
  27683. !          return Nodes.Table (N + 1).Flag6;
  27684. !       end Flag27;
  27685.   
  27686. !       function Flag28 (N : Node_Id) return Boolean is
  27687.         begin
  27688.            pragma Assert (Nkind (N) in N_Entity);
  27689. !          return Nodes.Table (N + 1).Flag7;
  27690. !       end Flag28;
  27691.   
  27692. !       function Flag29 (N : Node_Id) return Boolean is
  27693.         begin
  27694.            pragma Assert (Nkind (N) in N_Entity);
  27695. !          return Nodes.Table (N + 1).Flag8;
  27696. !       end Flag29;
  27697.   
  27698. !       function Flag30 (N : Node_Id) return Boolean is
  27699.         begin
  27700.            pragma Assert (Nkind (N) in N_Entity);
  27701. !          return Nodes.Table (N + 1).Flag9;
  27702. !       end Flag30;
  27703.   
  27704. !       function Flag31 (N : Node_Id) return Boolean is
  27705.         begin
  27706.            pragma Assert (Nkind (N) in N_Entity);
  27707. !          return Nodes.Table (N + 1).Flag10;
  27708. !       end Flag31;
  27709.   
  27710. !       function Flag32 (N : Node_Id) return Boolean is
  27711.         begin
  27712.            pragma Assert (Nkind (N) in N_Entity);
  27713. !          return Nodes.Table (N + 1).Flag11;
  27714. !       end Flag32;
  27715.   
  27716. !       function Flag33 (N : Node_Id) return Boolean is
  27717.         begin
  27718.            pragma Assert (Nkind (N) in N_Entity);
  27719. !          return Nodes.Table (N + 1).Flag12;
  27720. !       end Flag33;
  27721.   
  27722. !       function Flag34 (N : Node_Id) return Boolean is
  27723.         begin
  27724.            pragma Assert (Nkind (N) in N_Entity);
  27725. !          return Nodes.Table (N + 1).Flag13;
  27726. !       end Flag34;
  27727.   
  27728. !       function Flag35 (N : Node_Id) return Boolean is
  27729.         begin
  27730.            pragma Assert (Nkind (N) in N_Entity);
  27731. !          return Nodes.Table (N + 1).Flag14;
  27732. !       end Flag35;
  27733.   
  27734. !       function Flag36 (N : Node_Id) return Boolean is
  27735.         begin
  27736.            pragma Assert (Nkind (N) in N_Entity);
  27737. !          return Nodes.Table (N + 1).Flag15;
  27738. !       end Flag36;
  27739.   
  27740. !       function Flag37 (N : Node_Id) return Boolean is
  27741.         begin
  27742.            pragma Assert (Nkind (N) in N_Entity);
  27743. !          return Nodes.Table (N + 1).Flag16;
  27744. !       end Flag37;
  27745.   
  27746. !       function Flag38 (N : Node_Id) return Boolean is
  27747.         begin
  27748.            pragma Assert (Nkind (N) in N_Entity);
  27749. !          return Nodes.Table (N + 1).Flag17;
  27750. !       end Flag38;
  27751.   
  27752. !       function Flag39 (N : Node_Id) return Boolean is
  27753.         begin
  27754.            pragma Assert (Nkind (N) in N_Entity);
  27755. !          return Nodes.Table (N + 1).Flag18;
  27756. !       end Flag39;
  27757.   
  27758. !       function Flag40 (N : Node_Id) return Boolean is
  27759.         begin
  27760.            pragma Assert (Nkind (N) in N_Entity);
  27761. !          return Nodes.Table (N + 2).In_List;
  27762. !       end Flag40;
  27763.   
  27764. !       function Flag41 (N : Node_Id) return Boolean is
  27765.         begin
  27766.            pragma Assert (Nkind (N) in N_Entity);
  27767. !          return Nodes.Table (N + 2).Rewrite_Sub;
  27768. !       end Flag41;
  27769.   
  27770. !       function Flag42 (N : Node_Id) return Boolean is
  27771.         begin
  27772.            pragma Assert (Nkind (N) in N_Entity);
  27773. !          return Nodes.Table (N + 2).Rewrite_Ins;
  27774. !       end Flag42;
  27775.   
  27776. !       function Flag43 (N : Node_Id) return Boolean is
  27777.         begin
  27778.            pragma Assert (Nkind (N) in N_Entity);
  27779. !          return Nodes.Table (N + 2).Flag1;
  27780. !       end Flag43;
  27781.   
  27782. !       function Flag44 (N : Node_Id) return Boolean is
  27783.         begin
  27784.            pragma Assert (Nkind (N) in N_Entity);
  27785. !          return Nodes.Table (N + 2).Flag2;
  27786. !       end Flag44;
  27787.   
  27788. !       function Flag45 (N : Node_Id) return Boolean is
  27789.         begin
  27790.            pragma Assert (Nkind (N) in N_Entity);
  27791. !          return Nodes.Table (N + 2).Flag3;
  27792. !       end Flag45;
  27793.   
  27794. !       function Flag46 (N : Node_Id) return Boolean is
  27795.         begin
  27796.            pragma Assert (Nkind (N) in N_Entity);
  27797. !          return Nodes.Table (N + 2).Flag4;
  27798. !       end Flag46;
  27799.   
  27800. !       function Flag47 (N : Node_Id) return Boolean is
  27801.         begin
  27802.            pragma Assert (Nkind (N) in N_Entity);
  27803. !          return Nodes.Table (N + 2).Flag5;
  27804. !       end Flag47;
  27805.   
  27806. !       function Flag48 (N : Node_Id) return Boolean is
  27807.         begin
  27808.            pragma Assert (Nkind (N) in N_Entity);
  27809. !          return Nodes.Table (N + 2).Flag6;
  27810. !       end Flag48;
  27811.   
  27812. !       function Flag49 (N : Node_Id) return Boolean is
  27813.         begin
  27814.            pragma Assert (Nkind (N) in N_Entity);
  27815. !          return Nodes.Table (N + 2).Flag7;
  27816. !       end Flag49;
  27817.   
  27818. !       function Flag50 (N : Node_Id) return Boolean is
  27819.         begin
  27820.            pragma Assert (Nkind (N) in N_Entity);
  27821. !          return Nodes.Table (N + 2).Flag8;
  27822. !       end Flag50;
  27823.   
  27824. !       function Flag51 (N : Node_Id) return Boolean is
  27825.         begin
  27826.            pragma Assert (Nkind (N) in N_Entity);
  27827. !          return Nodes.Table (N + 2).Flag9;
  27828. !       end Flag51;
  27829.   
  27830. !       function Flag52 (N : Node_Id) return Boolean is
  27831.         begin
  27832.            pragma Assert (Nkind (N) in N_Entity);
  27833. !          return Nodes.Table (N + 2).Flag10;
  27834. !       end Flag52;
  27835.   
  27836. !       function Flag53 (N : Node_Id) return Boolean is
  27837.         begin
  27838.            pragma Assert (Nkind (N) in N_Entity);
  27839. !          return Nodes.Table (N + 2).Flag11;
  27840. !       end Flag53;
  27841.   
  27842. !       function Flag54 (N : Node_Id) return Boolean is
  27843.         begin
  27844.            pragma Assert (Nkind (N) in N_Entity);
  27845. !          return Nodes.Table (N + 2).Flag12;
  27846. !       end Flag54;
  27847.   
  27848. !       function Flag55 (N : Node_Id) return Boolean is
  27849.         begin
  27850.            pragma Assert (Nkind (N) in N_Entity);
  27851. !          return Nodes.Table (N + 2).Flag13;
  27852. !       end Flag55;
  27853.   
  27854. !       function Flag56 (N : Node_Id) return Boolean is
  27855.         begin
  27856.            pragma Assert (Nkind (N) in N_Entity);
  27857. !          return Nodes.Table (N + 2).Flag14;
  27858. !       end Flag56;
  27859.   
  27860. !       function Flag57 (N : Node_Id) return Boolean is
  27861.         begin
  27862.            pragma Assert (Nkind (N) in N_Entity);
  27863. !          return Nodes.Table (N + 2).Flag15;
  27864. !       end Flag57;
  27865.   
  27866. !       function Flag58 (N : Node_Id) return Boolean is
  27867.         begin
  27868.            pragma Assert (Nkind (N) in N_Entity);
  27869. !          return Nodes.Table (N + 2).Flag16;
  27870. !       end Flag58;
  27871.   
  27872. !       function Flag59 (N : Node_Id) return Boolean is
  27873.         begin
  27874.            pragma Assert (Nkind (N) in N_Entity);
  27875. !          return Nodes.Table (N + 2).Flag17;
  27876. !       end Flag59;
  27877.   
  27878. !       function Flag60 (N : Node_Id) return Boolean is
  27879.         begin
  27880.            pragma Assert (Nkind (N) in N_Entity);
  27881. !          return Nodes.Table (N + 2).Flag18;
  27882. !       end Flag60;
  27883.   
  27884. !       function Flag61 (N : Node_Id) return Boolean is
  27885.         begin
  27886.            pragma Assert (Nkind (N) in N_Entity);
  27887. !          return Nodes.Table (N + 1).Pflag1;
  27888. !       end Flag61;
  27889.   
  27890. !       function Flag62 (N : Node_Id) return Boolean is
  27891.         begin
  27892.            pragma Assert (Nkind (N) in N_Entity);
  27893. !          return Nodes.Table (N + 1).Pflag2;
  27894. !       end Flag62;
  27895.   
  27896. !       function Flag63 (N : Node_Id) return Boolean is
  27897.         begin
  27898.            pragma Assert (Nkind (N) in N_Entity);
  27899. !          return Nodes.Table (N + 2).Pflag1;
  27900. !       end Flag63;
  27901.   
  27902. !       function Flag64 (N : Node_Id) return Boolean is
  27903.         begin
  27904.            pragma Assert (Nkind (N) in N_Entity);
  27905. !          return Nodes.Table (N + 2).Pflag2;
  27906. !       end Flag64;
  27907.   
  27908. !       function Flag65 (N : Node_Id) return Boolean is
  27909.         begin
  27910. + --         pragma Assert (Nkind (N) in N_Entity);
  27911. + --         return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag65;
  27912.            pragma Assert (Nkind (N) in N_Entity);
  27913. !          return  To_Flag_Byte_Ptr
  27914.              (Node_Kind_Ptr'
  27915. !              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag65;
  27916. !       end Flag65;
  27917.   
  27918. !       function Flag66 (N : Node_Id) return Boolean is
  27919.         begin
  27920. + --         pragma Assert (Nkind (N) in N_Entity);
  27921. + --         return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag66;
  27922.            pragma Assert (Nkind (N) in N_Entity);
  27923. !          return To_Flag_Byte_Ptr
  27924.              (Node_Kind_Ptr'
  27925. !              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag66;
  27926. !       end Flag66;
  27927.   
  27928. !       function Flag67 (N : Node_Id) return Boolean is
  27929.         begin
  27930. + --         pragma Assert (Nkind (N) in N_Entity);
  27931. + --         return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag67;
  27932.            pragma Assert (Nkind (N) in N_Entity);
  27933. !          return To_Flag_Byte_Ptr
  27934.              (Node_Kind_Ptr'
  27935. !              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag67;
  27936. !       end Flag67;
  27937.   
  27938. !       function Flag68 (N : Node_Id) return Boolean is
  27939.         begin
  27940. + --         pragma Assert (Nkind (N) in N_Entity);
  27941. + --         return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag68;
  27942.            pragma Assert (Nkind (N) in N_Entity);
  27943. !          return To_Flag_Byte_Ptr
  27944.              (Node_Kind_Ptr'
  27945. !              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag68;
  27946. !       end Flag68;
  27947.   
  27948. !       function Flag69 (N : Node_Id) return Boolean is
  27949.         begin
  27950. + --         pragma Assert (Nkind (N) in N_Entity);
  27951. + --         return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag69;
  27952.            pragma Assert (Nkind (N) in N_Entity);
  27953. !          return To_Flag_Byte_Ptr
  27954.              (Node_Kind_Ptr'
  27955. !              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag69;
  27956. !       end Flag69;
  27957.   
  27958. !       function Flag70 (N : Node_Id) return Boolean is
  27959.         begin
  27960. + --         pragma Assert (Nkind (N) in N_Entity);
  27961. + --         return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag70;
  27962.            pragma Assert (Nkind (N) in N_Entity);
  27963. !          return To_Flag_Byte_Ptr
  27964.              (Node_Kind_Ptr'
  27965. !              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag70;
  27966. !       end Flag70;
  27967.   
  27968. !       function Flag71 (N : Node_Id) return Boolean is
  27969.         begin
  27970. + --         pragma Assert (Nkind (N) in N_Entity);
  27971. + --         return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag71;
  27972.            pragma Assert (Nkind (N) in N_Entity);
  27973. !          return To_Flag_Byte_Ptr
  27974.              (Node_Kind_Ptr'
  27975. !              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag71;
  27976. !       end Flag71;
  27977.   
  27978. !       function Flag72 (N : Node_Id) return Boolean is
  27979.         begin
  27980. ! --         pragma Assert (Nkind (N) in N_Entity);
  27981. ! --         return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag72;
  27982. !          pragma Assert (Nkind (N) in N_Entity);
  27983. !          return To_Flag_Byte_Ptr
  27984. !            (Node_Kind_Ptr'
  27985. !              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag72;
  27986. !       end Flag72;
  27987.   
  27988.      end Unchecked_Access;
  27989.   
  27990. diff -rc --new-file /src/baseline/gnat-1.80/src/bindgen.adb gnat-1.80/src/bindgen.adb
  27991. *** /src/baseline/gnat-1.80/src/bindgen.adb    Fri Jun 10 15:42:28 1994
  27992. --- gnat-1.80/src/bindgen.adb    Wed Jul  6 16:57:06 1994
  27993. ***************
  27994. *** 252,260 ****
  27995.         end;
  27996.   
  27997.         --  Generate main
  27998.   
  27999.         if ALIs.Table (ALIs.First).Main_Program = Proc then
  28000. !          Write_Binder_Info ("void main (argc, argv)");
  28001.         else
  28002.            Write_Binder_Info ("int main (argc, argv)");
  28003.         end if;
  28004. --- 252,262 ----
  28005.         end;
  28006.   
  28007.         --  Generate main
  28008. +       --  Note:  main() should always be return type int, so I've hacked
  28009. +       --  this code to meet that ANSI requirement.  -fnf
  28010.   
  28011.         if ALIs.Table (ALIs.First).Main_Program = Proc then
  28012. !          Write_Binder_Info ("int main (argc, argv)");
  28013.         else
  28014.            Write_Binder_Info ("int main (argc, argv)");
  28015.         end if;
  28016. diff -rc --new-file /src/baseline/gnat-1.80/src/gnatbl.c gnat-1.80/src/gnatbl.c
  28017. *** /src/baseline/gnat-1.80/src/gnatbl.c    Fri Jun 10 15:42:23 1994
  28018. --- gnat-1.80/src/gnatbl.c    Wed Jul  6 16:57:25 1994
  28019. ***************
  28020. *** 51,56 ****
  28021. --- 51,60 ----
  28022.   #define DIR_SEPARATOR '/'
  28023.   #endif
  28024.   
  28025. + #if __amigados__
  28026. + #define fork vfork    /* AmigaDOS doesn't have a true fork() */
  28027. + #endif
  28028.   static void proc_bind_file (char *aliname);
  28029.   static int is_regular_file (char *name);
  28030.   static void port_spawn (char *args[]);
  28031. ***************
  28032. *** 207,212 ****
  28033. --- 211,223 ----
  28034.     strcpy (tmppathval, ".;");
  28035.     pathval = strcat (tmppathval, pathval);
  28036.   #endif
  28037. + #if defined(__amigados__)
  28038. +   /* Provide a default PATH if not was found.  Perhaps this should be
  28039. +      done for all machines using a value derived from $(bindir) in the
  28040. +      Makefile? */
  28041. +   if (!pathval)
  28042. +     pathval = "/gnu/bin";
  28043. + #endif
  28044.   
  28045.     process_args (&argc , argv);
  28046.   
  28047. ***************
  28048. *** 400,412 ****
  28049.   #else
  28050.     pid = fork ();
  28051.     if (pid == -1) {
  28052. !     fprintf (stderr, "Error starting %s\n", args [0]);
  28053.       exit (1);
  28054.     }
  28055.     if (pid == 0) {
  28056.       /* The child */
  28057.       execv (args [0], args);
  28058. !     fprintf (stderr, "Failed to exec %s\n", args [0]);
  28059.       exit (1);
  28060.     }
  28061.   
  28062. --- 411,423 ----
  28063.   #else
  28064.     pid = fork ();
  28065.     if (pid == -1) {
  28066. !     fprintf (stderr, "Error starting %s, fork() failed\n", args [0]);
  28067.       exit (1);
  28068.     }
  28069.     if (pid == 0) {
  28070.       /* The child */
  28071.       execv (args [0], args);
  28072. !     fprintf (stderr, "Failed to exec %s, execv() failed\n", args [0]);
  28073.       exit (1);
  28074.     }
  28075.   
  28076. diff -rc --new-file /src/baseline/gnat-1.80/src/patches-gcc258.os2 gnat-1.80/src/patches-gcc258.os2
  28077. *** /src/baseline/gnat-1.80/src/patches-gcc258.os2    Fri Jun 10 15:44:45 1994
  28078. --- gnat-1.80/src/patches-gcc258.os2    Thu Jun 23 14:54:05 1994
  28079. ***************
  28080. *** 1,5 ****
  28081.   *** gcc.c.old    Thu Dec 23 17:50:02 1993
  28082. ! --- gcc.c    Mon Jan 24 19:16:34 1994
  28083.   ***************
  28084.   *** 34,40 ****
  28085.   --- 34,42 ----
  28086. --- 1,5 ----
  28087.   *** gcc.c.old    Thu Dec 23 17:50:02 1993
  28088. ! --- gcc.c    Sat Jun 11 03:05:52 1994
  28089.   ***************
  28090.   *** 34,40 ****
  28091.   --- 34,42 ----
  28092. ***************
  28093. *** 387,392 ****
  28094. --- 387,438 ----
  28095.           if (access (name, mode))
  28096.         {
  28097.   ***************
  28098. + *** 2131,2134 ****
  28099. + --- 2258,2289 ----
  28100. +   
  28101. +     temp = getenv ("COMPILER_PATH");
  28102. + + #ifdef OS2
  28103. + +   {
  28104. + +     /* Append current directory and value of PATH environment variable to
  28105. + +        COMPILER_PATH.  */
  28106. + +     char *newtemp, *path;
  28107. + +     /* Make sure string pointed to by temp is not overwritten by call to getenv
  28108. + +        below.  */
  28109. + +     if (temp) newtemp = strdup (temp);
  28110. + +     if (newtemp) {
  28111. + +       temp = newtemp;
  28112. + +       path = getenv ("PATH");
  28113. + +       newtemp = malloc ((temp?strlen(temp):0) + (path?strlen(path):0) + 4);
  28114. + +       if (newtemp) {
  28115. + +         int lastchar;
  28116. + +         if (temp) strcpy (newtemp, temp);
  28117. + +         else *newtemp = '\0';
  28118. + +         temp = newtemp;
  28119. + +         lastchar = strlen (temp);
  28120. + +         if (lastchar > 0 && temp[lastchar-1] != PATH_SEPARATOR)
  28121. + +           temp[lastchar++] = PATH_SEPARATOR;
  28122. + +         temp[lastchar++] = '.';
  28123. + +         temp[lastchar++] = PATH_SEPARATOR;
  28124. + +         temp[lastchar++] = '\0';
  28125. + +         if (path) strcat (temp, path);
  28126. + +       }
  28127. + +     }
  28128. + +   }
  28129. + + #endif
  28130. +     if (temp)
  28131. +       {
  28132. + ***************
  28133. + *** 2422,2427 ****
  28134. + --- 2577,2584 ----
  28135. +     /* Use 2 as fourth arg meaning try just the machine as a suffix,
  28136. +        as well as trying the machine and the version.  */
  28137. + + #ifndef OS2
  28138. +     add_prefix (&exec_prefix, standard_exec_prefix, 0, 2, NULL_PTR);
  28139. +     add_prefix (&exec_prefix, standard_exec_prefix_1, 0, 2, NULL_PTR);
  28140. + + #endif
  28141. +   
  28142. +     add_prefix (&startfile_prefix, standard_exec_prefix, 0, 1, NULL_PTR);
  28143. + ***************
  28144.   *** 3689,3695 ****
  28145.   --- 3816,3826 ----
  28146.       char *p;
  28147. ***************
  28148. *** 481,487 ****
  28149.     
  28150.     /* More 'friendly' abort that prints the line and file.
  28151.   *** cccp.c.old    Fri Nov  5 17:28:28 1993
  28152. ! --- cccp.c    Wed Dec  1 18:16:51 1993
  28153.   ***************
  28154.   *** 1091,1097 ****
  28155.   --- 1091,1101 ----
  28156. --- 527,556 ----
  28157.     
  28158.     /* More 'friendly' abort that prints the line and file.
  28159.   *** cccp.c.old    Fri Nov  5 17:28:28 1993
  28160. ! --- cccp.c    Sat Jun 11 03:38:50 1994
  28161. ! ***************
  28162. ! *** 570,573 ****
  28163. ! --- 570,574 ----
  28164. !       { TOOL_INCLUDE_DIR, 0},
  28165. !   #else /* not CROSS_COMPILE */
  28166. ! + #ifndef OS2
  28167. !       /* This should be /use/local/include and should come before
  28168. !          the fixincludes-fixed header files.  */
  28169. ! ***************
  28170. ! *** 579,587 ****
  28171. ! --- 580,591 ----
  28172. !          the files that we fix.  */
  28173. !       { GCC_INCLUDE_DIR, 0},
  28174. ! + #endif
  28175. !       /* Some systems have an extra dir of include files.  */
  28176. !   #ifdef SYSTEM_INCLUDE_DIR
  28177. !       { SYSTEM_INCLUDE_DIR, 0},
  28178. !   #endif
  28179. ! + #ifndef OS2
  28180. !       { STANDARD_INCLUDE_DIR, 0},
  28181. ! + #endif
  28182. !   #endif /* not CROSS_COMPILE */
  28183. !       { 0, 0}
  28184.   ***************
  28185.   *** 1091,1097 ****
  28186.   --- 1091,1101 ----
  28187. ***************
  28188. *** 513,519 ****
  28189.     
  28190.     #ifdef RLIMIT_STACK
  28191.   *** tree.c.old    Fri Feb  4 07:32:25 1994
  28192. ! --- tree.c    Mon Feb  7 17:09:52 1994
  28193.   *************** int_fits_type_p (c, type)
  28194.   *** 3607,3617 ****
  28195.     {
  28196. --- 582,608 ----
  28197.     
  28198.     #ifdef RLIMIT_STACK
  28199.   *** tree.c.old    Fri Feb  4 07:32:25 1994
  28200. ! --- tree.c    Tue Jun  7 06:43:25 1994
  28201. ! *************** staticp (arg)
  28202. ! *** 1827,1832 ****
  28203. !     switch (TREE_CODE (arg))
  28204. !       {
  28205. ! -     case VAR_DECL:
  28206. !       case FUNCTION_DECL:
  28207. !         return TREE_STATIC (arg) || DECL_EXTERNAL (arg);
  28208. !   
  28209. ! --- 1827,1837 ----
  28210. !     switch (TREE_CODE (arg))
  28211. !       {
  28212. !       case FUNCTION_DECL:
  28213. ! +       /* Nested functions aren't static.  Since taking their address
  28214. ! +      involves a trampoline.  */
  28215. ! +       if (decl_function_context (arg) != 0)
  28216. ! +     return 0;
  28217. ! +       /* ... fall through ... */
  28218. ! +     case VAR_DECL:
  28219. !         return TREE_STATIC (arg) || DECL_EXTERNAL (arg);
  28220. !   
  28221.   *************** int_fits_type_p (c, type)
  28222.   *** 3607,3617 ****
  28223.     {
  28224. ***************
  28225. *** 527,533 ****
  28226.   !         && (TREE_INT_CST_HIGH (c) >= 0 || !TREE_UNSIGNED (TREE_TYPE (c))));
  28227.     }
  28228.     
  28229. ! --- 3607,3619 ----
  28230.     {
  28231.       if (TREE_UNSIGNED (type))
  28232.   !     return (! (TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST
  28233. --- 616,622 ----
  28234.   !         && (TREE_INT_CST_HIGH (c) >= 0 || !TREE_UNSIGNED (TREE_TYPE (c))));
  28235.     }
  28236.     
  28237. ! --- 3612,3624 ----
  28238.     {
  28239.       if (TREE_UNSIGNED (type))
  28240.   !     return (! (TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST
  28241. ***************
  28242. *** 570,576 ****
  28243.   *** varasm.c.old        Sun Feb 27 08:51:17 1994
  28244.   --- varasm.c    Tue Mar  1 18:22:54 1994
  28245.   *************** output_constant (exp, size)
  28246. ! *** 3324,3327 ****
  28247.   --- 3324,3338 ----
  28248.         return;
  28249.     
  28250. --- 659,665 ----
  28251.   *** varasm.c.old        Sun Feb 27 08:51:17 1994
  28252.   --- varasm.c    Tue Mar  1 18:22:54 1994
  28253.   *************** output_constant (exp, size)
  28254. ! *** 3270,3273 ****
  28255.   --- 3324,3338 ----
  28256.         return;
  28257.     
  28258. ***************
  28259. *** 588,594 ****
  28260.       /* Allow a constructor with no elements for any data type.
  28261.          This means to fill the space with zeros.  */
  28262.   *************** output_constant (exp, size)
  28263. ! *** 3334,3343 ****
  28264.           return;
  28265.         }
  28266.   - 
  28267. --- 677,683 ----
  28268.       /* Allow a constructor with no elements for any data type.
  28269.          This means to fill the space with zeros.  */
  28270.   *************** output_constant (exp, size)
  28271. ! *** 3280,3289 ****
  28272.           return;
  28273.         }
  28274.   - 
  28275. ***************
  28276. *** 601,631 ****
  28277.       switch (code)
  28278.   --- 3345,3348 ----
  28279.   *** config/i386/os2.h.old    Mon Jan 24 19:59:36 1994
  28280. ! --- config/i386/os2.h    Thu Feb 17 21:25:54 1994
  28281.   *************** the Free Software Foundation, 675 Mass A
  28282. ! *** 23,26 ****
  28283. ! --- 23,32 ----
  28284.     #define DEFAULT_TARGET_MACHINE "i386-os2"
  28285.     #endif
  28286. ! + #ifndef LINK_SPEC
  28287. ! + #define LINK_SPEC "/st:1048576/pm:vio/noi/a:16/e/bas:65536/nol"
  28288. ! + #endif
  28289. ! + #ifndef LIB_SPEC
  28290. ! + #define LIB_SPEC "libc"
  28291. ! + #endif
  28292. !   #ifndef STARTFILE_SPEC
  28293. !   #define STARTFILE_SPEC ""
  28294. ! *************** the Free Software Foundation, 675 Mass A
  28295. ! *** 34,41 ****
  28296. !   #ifndef LOCAL_INCLUDE_DIR
  28297. !   #define LOCAL_INCLUDE_DIR "\\gcc\\include"
  28298. ! - #endif
  28299. ! - 
  28300. ! - #ifndef PATH_SEPARATOR
  28301. ! - #define PATH_SEPARATOR ';'
  28302.     #endif
  28303.     
  28304. - --- 40,43 ----
  28305.   *** config/i386/xm-os2.h.old    Thu Nov 04 14:59:30 1993
  28306.   --- config/i386/xm-os2.h    Fri Feb 18 03:28:50 1994
  28307.   ***************
  28308. --- 690,730 ----
  28309.       switch (code)
  28310.   --- 3345,3348 ----
  28311.   *** config/i386/os2.h.old    Mon Jan 24 19:59:36 1994
  28312. ! --- config/i386/os2.h    Sat Jun 11 04:09:00 1994
  28313.   *************** the Free Software Foundation, 675 Mass A
  28314. ! *** 23,41 ****
  28315.     #define DEFAULT_TARGET_MACHINE "i386-os2"
  28316.     #endif
  28317. ! ! #ifndef STARTFILE_SPEC
  28318. ! ! #define STARTFILE_SPEC ""
  28319. ! ! #endif
  28320. ! ! #ifndef MD_EXEC_PREFIX
  28321. ! ! #define MD_EXEC_PREFIX "\\gcc\\bin\\"
  28322. !   #endif
  28323. ! ! #ifndef STANDARD_STARTFILE_PREFIX
  28324. ! ! #define STANDARD_STARTFILE_PREFIX "\\gcc\\lib\\"
  28325. !   #endif
  28326. ! ! #ifndef LOCAL_INCLUDE_DIR
  28327. ! ! #define LOCAL_INCLUDE_DIR "\\gcc\\include"
  28328. ! ! #endif
  28329. ! ! 
  28330. ! ! #ifndef PATH_SEPARATOR
  28331. ! ! #define PATH_SEPARATOR ';'
  28332. !   #endif
  28333. !   
  28334. ! --- 23,34 ----
  28335. !   #define DEFAULT_TARGET_MACHINE "i386-os2"
  28336. !   #endif
  28337. ! ! #ifndef LINK_SPEC
  28338. ! ! #define LINK_SPEC "/st:1048576/pm:vio/noi/a:16/e/bas:65536/nol"
  28339. !   #endif
  28340. ! ! #ifndef LIB_SPEC
  28341. ! ! #define LIB_SPEC "libgcc libc"
  28342. !   #endif
  28343. ! ! #ifndef STARTFILE_SPEC
  28344. ! ! #define STARTFILE_SPEC ""
  28345.     #endif
  28346.     
  28347.   *** config/i386/xm-os2.h.old    Thu Nov 04 14:59:30 1993
  28348.   --- config/i386/xm-os2.h    Fri Feb 18 03:28:50 1994
  28349.   ***************
  28350. ***************
  28351. *** 652,654 ****
  28352. --- 751,772 ----
  28353.   + #endif
  28354.     
  28355.     #define EXECUTABLE_SUFFIX ".exe"
  28356. + *** config/i386/i386.h.old  Mon Apr 25 14:43:48 1994
  28357. + --- config/i386/i386.h      Tue May  3 19:16:46 1994
  28358. + ***************
  28359. + *** 254,257 ****
  28360. + --- 254,267 ----
  28361. +   {  1, 1, 1, 0, 0, 0, 0, 1, 1,  1,  1,  1,  1,  1,  1,  1,  1 }
  28362. +   
  28363. + + /* Order in which to allocate registers.  First allocate registers
  28364. + +    for which no insn operand demands that register, next those that are
  28365. + +    demanded by the least number of insns.  List frame pointer late and fixed 
  28366. + +    egisters last.  Note that, in general, we want to put nonsaved registers
  28367. + +    late, but we put bx relatively early since it is not demanded by
  28368. + +    any insn operand.  */
  28369. + + #define REG_ALLOC_ORDER \
  28370. + + /*si,di,bx,cx,dx,ax,bp,sp,st,st1,st2,st3,st4,st5,st6,st7,arg*/ \
  28371. + + {  4, 5, 3, 2, 1, 0, 6, 7, 8,  9, 10, 11, 12, 13, 14, 15, 16}
  28372. + + 
  28373. +   /* Macro to conditionally modify fixed_regs/call_used_regs.  */
  28374. +   #define CONDITIONAL_REGISTER_USAGE            \
  28375. diff -rc --new-file /src/baseline/gnat-1.80/src/s-reatim.adb gnat-1.80/src/s-reatim.adb
  28376. *** /src/baseline/gnat-1.80/src/s-reatim.adb    Thu Jan  1 00:00:00 1970
  28377. --- gnat-1.80/src/s-reatim.adb    Mon Jul  4 16:30:25 1994
  28378. ***************
  28379. *** 0 ****
  28380. --- 1,382 ----
  28381. + ------------------------------------------------------------------------------
  28382. + --                                                                          --
  28383. + --                 GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS               --
  28384. + --                                                                          --
  28385. + --                      S Y S T E M . R E A L _ T I M E                     --
  28386. + --                                                                          --
  28387. + --                                  B o d y                                 --
  28388. + --                                                                          --
  28389. + --                             $Revision: 1.7 $                             --
  28390. + --                                                                          --
  28391. + --           Copyright (c) 1991,1992,1993, FSU, All Rights Reserved         --
  28392. + --                                                                          --
  28393. + --  GNARL is free software; you can redistribute it and/or modify it  under --
  28394. + --  terms  of  the  GNU  Library General Public License as published by the --
  28395. + --  Free Software Foundation; either version 2,  or  (at  your  option) any --
  28396. + --  later  version.   GNARL is distributed in the hope that it will be use- --
  28397. + --  ful, but but WITHOUT ANY WARRANTY; without even the implied warranty of --
  28398. + --  MERCHANTABILITY  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Gen- --
  28399. + --  eral Library Public License for more details.  You should have received --
  28400. + --  a  copy of the GNU Library General Public License along with GNARL; see --
  28401. + --  file COPYING. If not, write to the Free Software Foundation,  675  Mass --
  28402. + --  Ave, Cambridge, MA 02139, USA.                                          --
  28403. + --                                                                          --
  28404. + ------------------------------------------------------------------------------
  28405. + pragma Checks_On;
  28406. + --  We require checks on for this body, because we rely on the constraint
  28407. + --  error to keep System.Real_Time.Time values within representable range.
  28408. + with System.Compiler_Exceptions;
  28409. + --  Uses, function Current_Exceptions
  28410. + with System.Task_Timer_Service;
  28411. + --  Uses, object Objects
  28412. + --        procedure Service_Entries
  28413. + with System.Tasking;
  28414. + with Unchecked_Conversion;
  28415. + package body System.Real_Time is
  28416. +    use Task_Clock;
  28417. +    --  Using it for arithmetic operations
  28418. +    use Tasking.Protected_Objects;
  28419. +    use Tasking;
  28420. +    package Timer renames System.Task_Timer_Service.Timer;
  28421. +    function To_Access is new
  28422. +      Unchecked_Conversion (System.Address, Protection_Access);
  28423. +    -----------
  28424. +    -- Clock --
  28425. +    -----------
  28426. +    function Clock return Time is
  28427. +    begin
  28428. +       return Time (Task_Clock.Machine_Specifics.Clock);
  28429. +    end Clock;
  28430. +    ---------
  28431. +    -- "<" --
  28432. +    ---------
  28433. +    function "<" (Left, Right : Time) return Boolean is
  28434. +    begin
  28435. +       return Task_Clock.Stimespec (Left) < Task_Clock.Stimespec (Right);
  28436. +    end "<";
  28437. +    function "<" (Left, Right : Time_Span) return Boolean is
  28438. +    begin
  28439. +       return Task_Clock.Stimespec (Left) < Task_Clock.Stimespec (Right);
  28440. +    end "<";
  28441. +    ---------
  28442. +    -- ">" --
  28443. +    ---------
  28444. +    function ">" (Left, Right : Time) return Boolean is
  28445. +    begin
  28446. +       return Right < Left;
  28447. +    end ">";
  28448. +    function ">" (Left, Right : Time_Span) return Boolean is
  28449. +    begin
  28450. +       return Right < Left;
  28451. +    end ">";
  28452. +    ----------
  28453. +    -- "<=" --
  28454. +    ----------
  28455. +    function "<=" (Left, Right : Time) return Boolean is
  28456. +    begin
  28457. +       return not (Left > Right);
  28458. +    end "<=";
  28459. +    function "<=" (Left, Right : Time_Span) return Boolean is
  28460. +    begin
  28461. +       return not (Left > Right);
  28462. +    end "<=";
  28463. +    ----------
  28464. +    -- ">=" --
  28465. +    ----------
  28466. +    function ">=" (Left, Right : Time) return Boolean is
  28467. +    begin
  28468. +       return not (Left < Right);
  28469. +    end ">=";
  28470. +    function ">=" (Left, Right : Time_Span) return Boolean is
  28471. +    begin
  28472. +       return not (Left < Right);
  28473. +    end ">=";
  28474. +    ---------
  28475. +    -- "+" --
  28476. +    ---------
  28477. +    --  Note that Constraint_Error may be propagated
  28478. +    function "+" (Left : Time; Right : Time_Span) return Time is
  28479. +    begin
  28480. +       return Time (Task_Clock.Stimespec (Left) + Task_Clock.Stimespec (Right));
  28481. +    end "+";
  28482. +    function "+"  (Left : Time_Span; Right : Time) return Time is
  28483. +    begin
  28484. +       return Right + Left;
  28485. +    end "+";
  28486. +    function "+"  (Left, Right : Time_Span) return Time_Span is
  28487. +    begin
  28488. +       return Time_Span (Time (Right) + Left);
  28489. +    end "+";
  28490. +    ---------
  28491. +    -- "-" --
  28492. +    ---------
  28493. +    --  Note that Constraint_Error may be propagated
  28494. +    function "-"  (Left : Time; Right : Time_Span) return Time is
  28495. +    begin
  28496. +       return Time (Task_Clock.Stimespec (Left) - Task_Clock.Stimespec (Right));
  28497. +    end "-";
  28498. +    function "-"  (Left, Right : Time) return Time_Span is
  28499. +    begin
  28500. +       return Time_Span (Left - Time_Span (Right));
  28501. +    end "-";
  28502. +    function "-"  (Left, Right : Time_Span) return Time_Span is
  28503. +    begin
  28504. +       return Time_Span (Time (Left) - Right);
  28505. +    end "-";
  28506. +    function "-"  (Right : Time_Span) return Time_Span is
  28507. +    begin
  28508. +       return Time_Span (-(Task_Clock.Stimespec (Right)));
  28509. +    end "-";
  28510. +    ---------
  28511. +    -- "/" --
  28512. +    ---------
  28513. +    --  Note that Constraint_Error may be propagated
  28514. +    function "/"  (Left, Right : Time_Span) return integer is
  28515. +       Temp_TV : Task_Clock.Stimespec;
  28516. +    begin
  28517. +       Temp_TV := Task_Clock.Stimespec (Left) / Task_Clock.Stimespec (Right);
  28518. +       if not (Temp_TV < Task_Clock.Stimespec_Zero)  then
  28519. +          return Task_Clock.Stimespec_Seconds (Temp_TV);
  28520. +       end if;
  28521. +       Temp_TV := -Temp_TV;
  28522. +       return -Task_Clock.Stimespec_Seconds (Temp_TV);
  28523. +    end "/";
  28524. +    function "/"  (Left : Time_Span; Right : Integer) return Time_Span is
  28525. +    begin
  28526. +       return Time_Span (Task_Clock.Stimespec (Left) / Right);
  28527. +    end "/";
  28528. +    ---------
  28529. +    -- "*" --
  28530. +    ---------
  28531. +    --  Note that Constraint_Error may be propagated
  28532. +    function "*"  (Left : Time_Span; Right : Integer) return Time_Span is
  28533. +    begin
  28534. +       return Time_Span (Task_Clock.Stimespec (Left) * Right);
  28535. +    end "*";
  28536. +    function "*"  (Left : Integer; Right : Time_Span) return Time_Span is
  28537. +    begin
  28538. +       return Right * Left;
  28539. +    end "*";
  28540. +    -----------
  28541. +    -- "abs" --
  28542. +    -----------
  28543. +    --  Note that Constraint_Error may be propagated
  28544. +    function "abs" (Right : Time_Span) return Time_Span is
  28545. +    begin
  28546. +       if Right < Time_Span_Zero then
  28547. +          return -Right;
  28548. +       end if;
  28549. +       return Right;
  28550. +    end "abs";
  28551. +    -----------------
  28552. +    -- To_Duration --
  28553. +    -----------------
  28554. +    function To_Duration (FD : Time_Span) return Duration is
  28555. +    begin
  28556. +       return Task_Clock.Stimespec_To_Duration (Task_Clock.Stimespec (FD));
  28557. +    end To_Duration;
  28558. +    ------------------
  28559. +    -- To_Time_Span --
  28560. +    ------------------
  28561. +    function To_Time_Span (D : Duration) return Time_Span is
  28562. +    begin
  28563. +       return Time_Span (Task_Clock.Duration_To_Stimespec (D));
  28564. +    end To_Time_Span;
  28565. +    -----------------
  28566. +    -- Nanoseconds --
  28567. +    -----------------
  28568. +    function Nanoseconds (NS : integer) return Time_Span is
  28569. +    begin
  28570. +       return Time_Span_Unit * NS;
  28571. +    end Nanoseconds;
  28572. +    ------------------
  28573. +    -- Microseconds --
  28574. +    ------------------
  28575. +    function Microseconds  (US : integer) return Time_Span is
  28576. +    begin
  28577. +       return Nanoseconds (US) * 1000;
  28578. +    end Microseconds;
  28579. +    -------------------
  28580. +    --  Milliseconds --
  28581. +    -------------------
  28582. +    function Milliseconds (MS : integer) return Time_Span is
  28583. +    begin
  28584. +       return Microseconds (MS) * 1000;
  28585. +    end Milliseconds;
  28586. +    ------------------
  28587. +    -- Delay_Object --
  28588. +    ------------------
  28589. +    --  Hand translated code will be provided here
  28590. +    --  until the GNAT compiler can accomodate the protected objects. ???
  28591. +    package body Delay_Object is
  28592. +       procedure Service_Entries (Pending_Serviced : out Boolean) is
  28593. +          P : System.Address;
  28594. +          subtype PO_Entry_Index is Protected_Entry_Index
  28595. +            range Null_Protected_Entry .. 1;
  28596. +          Barriers : Barrier_Vector (1 .. 1)  :=  (others => true);
  28597. +          --  No barriers. always true barrier
  28598. +          E : PO_Entry_Index;
  28599. +          PS : Boolean;
  28600. +          Cumulative_PS : Boolean := False;
  28601. +       begin
  28602. +          loop
  28603. +             --  Get the next queued entry or the pending call
  28604. +             --  (if no barriers are true)
  28605. +             Next_Entry_Call (To_Access (Object'Address), Barriers, P, E);
  28606. +             begin
  28607. +                case E is
  28608. +                   when Null_Protected_Entry =>  --  no call to serve
  28609. +                      exit;
  28610. +                   when 1 =>
  28611. +                      --  Lock the object before requeueing
  28612. +                      Lock (To_Access (Timer.Object'Address));
  28613. +                   --  9X code ???
  28614. +                   --  requeue Timer.Enqueue (clock.Clock+Time (FD)) with abort;
  28615. +                      begin
  28616. +                         Requeue_Protected_Entry (
  28617. +                           Object => To_Access (Object'Address),
  28618. +                           New_Object => To_Access (Timer.Object'Address),
  28619. +                           E => 1,
  28620. +                           With_Abort => true);
  28621. +                         --  Requeue on the timer for the service. Parameter is
  28622. +                         --  passed along as Object.Call_In_Progress.Param
  28623. +                         Timer.Service_Entries (PS);
  28624. +                      --  Neither Requeue nor Service_Entries should raise
  28625. +                      --  an exception; the exception should be saved. ???
  28626. + --                   exception
  28627. + --                      when others =>
  28628. + --                         Timer.Service_Entries(PS);
  28629. + --                         raise;
  28630. +                      end;
  28631. +                end case;
  28632. +             exception
  28633. +                when others =>
  28634. +                   Tasking.Protected_Objects.Exceptional_Complete_Entry_Body (
  28635. +                     Object => To_Access (Object'Address),
  28636. +                     Ex => Compiler_Exceptions.Current_Exception,
  28637. +                     Pending_Serviced => PS);
  28638. +             end;
  28639. +             Cumulative_PS := Cumulative_PS or PS;
  28640. +          end loop;
  28641. +          Pending_Serviced := Cumulative_PS;
  28642. +       end Service_Entries;
  28643. +    begin
  28644. +       Initialize_Protection (
  28645. +         To_Access (Object'Address),
  28646. +         Tasking.Unspecified_Priority);
  28647. +    end Delay_Object;
  28648. +    -----------
  28649. +    -- Split --
  28650. +    -----------
  28651. +    --  D is nonnegative Time_Span
  28652. +    procedure Split (T : Time; S : out Seconds; D : out Time_Span) is
  28653. +       Temp_S : Seconds;
  28654. +    begin
  28655. +       Temp_S :=
  28656. +         Seconds (Task_Clock.Stimespec_Seconds (Task_Clock.Stimespec (T)));
  28657. +       S := Temp_S;
  28658. +       D := Time_Span (T) -
  28659. +            (integer (Temp_S) * Time_Span (Task_Clock.Stimespec_Sec_Unit));
  28660. +    end Split;
  28661. +    -------------
  28662. +    -- Time_Of --
  28663. +    -------------
  28664. +    function Time_Of (S : Seconds; D : Time_Span) return Time is
  28665. +    begin
  28666. +       return Time (integer (S) *
  28667. +             Time_Span (Task_Clock.Stimespec_Sec_Unit) + D);
  28668. +    end Time_Of;
  28669. + end System.Real_Time;
  28670. diff -rc --new-file /src/baseline/gnat-1.80/src/s-reatim.ads gnat-1.80/src/s-reatim.ads
  28671. *** /src/baseline/gnat-1.80/src/s-reatim.ads    Thu Jan  1 00:00:00 1970
  28672. --- gnat-1.80/src/s-reatim.ads    Mon Jul  4 16:30:26 1994
  28673. ***************
  28674. *** 0 ****
  28675. --- 1,158 ----
  28676. + ------------------------------------------------------------------------------
  28677. + --                                                                          --
  28678. + --                 GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS               --
  28679. + --                                                                          --
  28680. + --                      S Y S T E M . R E A L _ T I M E                     --
  28681. + --                                                                          --
  28682. + --                                  S p e c                                 --
  28683. + --                                                                          --
  28684. + --                             $Revision: 1.8 $                             --
  28685. + --                                                                          --
  28686. + --           Copyright (c) 1991,1992,1993, FSU, All Rights Reserved         --
  28687. + --                                                                          --
  28688. + --  GNARL is free software; you can redistribute it and/or modify it  under --
  28689. + --  terms  of  the  GNU  Library General Public License as published by the --
  28690. + --  Free Software Foundation; either version 2,  or  (at  your  option) any --
  28691. + --  later  version.   GNARL is distributed in the hope that it will be use- --
  28692. + --  ful, but but WITHOUT ANY WARRANTY; without even the implied warranty of --
  28693. + --  MERCHANTABILITY  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Gen- --
  28694. + --  eral Library Public License for more details.  You should have received --
  28695. + --  a  copy of the GNU Library General Public License along with GNARL; see --
  28696. + --  file COPYING. If not, write to the Free Software Foundation,  675  Mass --
  28697. + --  Ave, Cambridge, MA 02139, USA.                                          --
  28698. + --                                                                          --
  28699. + ------------------------------------------------------------------------------
  28700. + with System.Task_Clock;
  28701. + with System.Task_Clock.Machine_Specifics;
  28702. + with System.Tasking.Protected_Objects;
  28703. + package System.Real_Time is
  28704. + --  The following part should be private. For now, they are public
  28705. + --  (compiler error) ???
  28706. + --  private
  28707. +    type Time is new Task_Clock.Stimespec;
  28708. +    Time_First : constant Time := Time (Task_Clock.Stimespec_First);
  28709. +    Time_Last :  constant Time := Time (Task_Clock.Stimespec_Last);
  28710. +    type Time_Span is new Task_Clock.Stimespec;
  28711. +    Time_Span_First : constant Time_Span :=
  28712. +      Time_Span (Task_Clock.Stimespec_First);
  28713. +    Time_Span_Last :  constant Time_Span :=
  28714. +      Time_Span (Task_Clock.Stimespec_Last);
  28715. +    Time_Span_Zero :  constant Time_Span :=
  28716. +      Time_Span (Task_Clock.Stimespec_Zero);
  28717. +    Time_Span_Unit :  constant Time_Span :=
  28718. +      Time_Span (Task_Clock.Stimespec_Unit);
  28719. +    Tick :           constant Time_Span :=
  28720. +      Time_Span (Task_Clock.Machine_Specifics.Stimespec_Ticks);
  28721. + --   Following has to be re-activated once the private part is used. ???
  28722. + --   type Time is private;
  28723. + --   Time_First : constant Time;
  28724. + --   Time_Last :  constant Time;
  28725. + --   type Time_Span is private;
  28726. + --   Time_Span_First : constant Time_Span;
  28727. + --   Time_Span_Last :  constant Time_Span;
  28728. + --   Time_Span_Zero :  constant Time_Span;
  28729. + --   Time_Span_Unit :  constant Time_Span;
  28730. + --   Ticks :           constant Time_Span;
  28731. +    Time_Unit : constant := 10#1.0#E-9;
  28732. +    function Clock return Time;
  28733. +    function "+"  (Left : Time;      Right : Time_Span) return Time;
  28734. +    function "+"  (Left : Time_Span; Right : Time)      return Time;
  28735. +    function "-"  (Left : Time;      Right : Time_Span) return Time;
  28736. +    function "-"  (Left,             Right : Time)      return Time_Span;
  28737. +    function "<"  (Left, Right : Time) return Boolean;
  28738. +    function "<=" (Left, Right : Time) return Boolean;
  28739. +    function ">"  (Left, Right : Time) return Boolean;
  28740. +    function ">=" (Left, Right : Time) return Boolean;
  28741. +    function "+"  (Left, Right : Time_Span) return Time_Span;
  28742. +    function "-"  (Left, Right : Time_Span) return Time_Span;
  28743. +    function "-"  (Right : Time_Span) return Time_Span;
  28744. +    function "/"  (Left, Right : Time_Span) return Integer;
  28745. +    function "/"  (Left : Time_Span; Right : Integer) return Time_Span;
  28746. +    function "*"  (Left : Time_Span; Right : Integer) return Time_Span;
  28747. +    function "*"  (Left : Integer; Right : Time_Span) return Time_Span;
  28748. +    function "<"  (Left, Right : Time_Span) return Boolean;
  28749. +    function "<=" (Left, Right : Time_Span) return Boolean;
  28750. +    function ">"  (Left, Right : Time_Span) return Boolean;
  28751. +    function ">=" (Left, Right : Time_Span) return Boolean;
  28752. +    function "abs" (Right : Time_Span) return Time_Span;
  28753. +    function To_Duration (FD : Time_Span) return Duration;
  28754. +    function To_Time_Span (D : Duration) return Time_Span;
  28755. +    function Nanoseconds  (NS : integer) return Time_Span;
  28756. +    function Microseconds (US : integer) return Time_Span;
  28757. +    function Milliseconds (MS : integer) return Time_Span;
  28758. + --  Hand translation code will be provided here for now.
  28759. + --  Until the GNAT compiler can accomodate the protected objects. ???
  28760. +    package Delay_Object is
  28761. +       Object : aliased Tasking.Protection (Num_Entries => 1);
  28762. +       type Params is record
  28763. +          Param : Time_Span;
  28764. +       end record;
  28765. +       procedure Service_Entries (Pending_Serviced : out Boolean);
  28766. +    end Delay_Object;
  28767. +    type Seconds is new integer range -integer'Last .. integer'Last;
  28768. +    --  Seconds is signed entity
  28769. +    procedure Split (T : Time; S : out Seconds; D : out Time_Span);
  28770. +    function Time_Of (S : Seconds; D : Time_Span) return Time;
  28771. + --  private
  28772. + --   type Time is new Task_Clock.Stimespec;
  28773. + --   Time_First : constant Time := Time (Task_Clock.Stimespec_First);
  28774. + --   Time_Last :  constant Time := Time (Task_Clock.Stimespec_Last);
  28775. + --   type Time_Span is new Task_Clock.Stimespec;
  28776. + --   Time_Span_First : constant Time_Span :=
  28777. + --     Time_Span (Task_Clock.Stimespec_First);
  28778. + --   Time_Span_Last :  constant Time_Span :=
  28779. + --     Time_Span (Task_Clock.Stimespec_Last);
  28780. + --   Time_Span_Zero :  constant Time_Span :=
  28781. + --     Time_Span (Task_Clock.Stimespec_Zero);
  28782. + --   Time_Span_Unit :  constant Time_Span :=
  28783. + --     Time_Span (Task_Clock.Stimespec_Unit);
  28784. + --   Ticks :           constant Time_Span :=
  28785. + --     Time_Span (Task_Clock.Stimespec_Ticks);
  28786. + end System.Real_Time;
  28787. diff -rc --new-file /src/baseline/gnat-1.80/src/s-retico.adb gnat-1.80/src/s-retico.adb
  28788. *** /src/baseline/gnat-1.80/src/s-retico.adb    Thu Jan  1 00:00:00 1970
  28789. --- gnat-1.80/src/s-retico.adb    Mon Jul  4 16:30:56 1994
  28790. ***************
  28791. *** 0 ****
  28792. --- 1,76 ----
  28793. + ------------------------------------------------------------------------------
  28794. + --                                                                          --
  28795. + --                 GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS               --
  28796. + --                                                                          --
  28797. + --                 S Y S T E M . R E A L _ T I M E . C O N V                --
  28798. + --                                                                          --
  28799. + --                                  B o d y                                 --
  28800. + --                                                                          --
  28801. + --                             $Revision: 1.4 $                             --
  28802. + --                                                                          --
  28803. + --           Copyright (c) 1991,1992,1993, FSU, All Rights Reserved         --
  28804. + --                                                                          --
  28805. + --  GNARL is free software; you can redistribute it and/or modify it  under --
  28806. + --  terms  of  the  GNU  Library General Public License as published by the --
  28807. + --  Free Software Foundation; either version 2,  or  (at  your  option) any --
  28808. + --  later  version.   GNARL is distributed in the hope that it will be use- --
  28809. + --  ful, but but WITHOUT ANY WARRANTY; without even the implied warranty of --
  28810. + --  MERCHANTABILITY  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Gen- --
  28811. + --  eral Library Public License for more details.  You should have received --
  28812. + --  a  copy of the GNU Library General Public License along with GNARL; see --
  28813. + --  file COPYING. If not, write to the Free Software Foundation,  675  Mass --
  28814. + --  Ave, Cambridge, MA 02139, USA.                                          --
  28815. + --                                                                          --
  28816. + ------------------------------------------------------------------------------
  28817. + package body System.Real_Time.Conv is
  28818. +    -----------------------
  28819. +    -- Time_To_Stimespec --
  28820. +    -----------------------
  28821. +    function Time_To_Stimespec
  28822. +      (T    : Real_Time.time)
  28823. +       return Task_Clock.Stimespec
  28824. +    is
  28825. +    begin
  28826. +       return Task_Clock.Stimespec (T);
  28827. +    end  Time_To_Stimespec;
  28828. +    -----------------------
  28829. +    -- Stimespec_To_Time --
  28830. +    -----------------------
  28831. +    function Stimespec_To_Time
  28832. +      (T    : Task_Clock.Stimespec)
  28833. +       return Real_Time.Time
  28834. +    is
  28835. +    begin
  28836. +       return Real_Time.Time (T);
  28837. +    end Stimespec_To_Time;
  28838. +    ----------------------------
  28839. +    -- Time_Span_To_Stimespec --
  28840. +    ----------------------------
  28841. +    function Time_Span_To_Stimespec
  28842. +      (T    : Real_Time.Time_Span)
  28843. +       return Task_Clock.Stimespec
  28844. +    is
  28845. +    begin
  28846. +       return Task_Clock.Stimespec (T);
  28847. +    end  Time_Span_To_Stimespec;
  28848. +    ----------------------------
  28849. +    -- Stimespec_To_Time_Span --
  28850. +    ----------------------------
  28851. +    function Stimespec_To_Time_Span
  28852. +      (T    : Task_Clock.Stimespec)
  28853. +       return Real_Time.Time_Span
  28854. +    is
  28855. +    begin
  28856. +       return Real_Time.Time_Span (T);
  28857. +    end Stimespec_To_Time_Span;
  28858. + end System.Real_Time.Conv;
  28859. diff -rc --new-file /src/baseline/gnat-1.80/src/s-retico.ads gnat-1.80/src/s-retico.ads
  28860. *** /src/baseline/gnat-1.80/src/s-retico.ads    Thu Jan  1 00:00:00 1970
  28861. --- gnat-1.80/src/s-retico.ads    Mon Jul  4 16:30:57 1994
  28862. ***************
  28863. *** 0 ****
  28864. --- 1,50 ----
  28865. + ------------------------------------------------------------------------------
  28866. + --                                                                          --
  28867. + --                 GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS               --
  28868. + --                                                                          --
  28869. + --                 S Y S T E M . R E A L _ T I M E . C O N V                --
  28870. + --                                                                          --
  28871. + --                                  S p e c                                 --
  28872. + --                                                                          --
  28873. + --                             $Revision: 1.4 $                             --
  28874. + --                                                                          --
  28875. + --           Copyright (c) 1991,1992,1993, FSU, All Rights Reserved         --
  28876. + --                                                                          --
  28877. + --  GNARL is free software; you can redistribute it and/or modify it  under --
  28878. + --  terms  of  the  GNU  Library General Public License as published by the --
  28879. + --  Free Software Foundation; either version 2, or  (at  your  option)  any --
  28880. + --  later  version.   GNARL is distributed in the hope that it will be use- --
  28881. + --  ful, but but WITHOUT ANY WARRANTY; without even the implied warranty of --
  28882. + --  MERCHANTABILITY  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Gen- --
  28883. + --  eral Library Public License for more details.  You should have received --
  28884. + --  a  copy of the GNU Library General Public License along with GNARL; see --
  28885. + --  file COPYING. If not, write to the Free Software Foundation,  675  Mass --
  28886. + --  Ave, Cambridge, MA 02139, USA.                                          --
  28887. + --                                                                          --
  28888. + ------------------------------------------------------------------------------
  28889. + --  Provides conversion between Task_Clock.time and Real_Time.Time
  28890. + --  and Real_Time.Time_Span
  28891. + with System.Task_Clock;
  28892. + --  Uses, Type : Stimespec
  28893. + package System.Real_Time.Conv is
  28894. +    function Time_To_Stimespec
  28895. +      (T    : Real_Time.time)
  28896. +       return Task_Clock.Stimespec;
  28897. +    function Stimespec_To_Time
  28898. +      (T    : Task_Clock.Stimespec)
  28899. +       return Real_Time.Time;
  28900. +    function Time_Span_To_Stimespec
  28901. +      (T    : Real_Time.Time_Span)
  28902. +       return Task_Clock.Stimespec;
  28903. +    function Stimespec_To_Time_Span
  28904. +      (T   : Task_Clock.Stimespec)
  28905. +       return Real_Time.Time_Span;
  28906. + end System.Real_Time.Conv;
  28907. diff -rc --new-file /src/baseline/gnat-1.80/src/s-retide.adb gnat-1.80/src/s-retide.adb
  28908. *** /src/baseline/gnat-1.80/src/s-retide.adb    Thu Jan  1 00:00:00 1970
  28909. --- gnat-1.80/src/s-retide.adb    Mon Jul  4 16:31:28 1994
  28910. ***************
  28911. *** 0 ****
  28912. --- 1,134 ----
  28913. + ------------------------------------------------------------------------------
  28914. + --                                                                          --
  28915. + --                 GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS               --
  28916. + --                                                                          --
  28917. + --               S Y S T E M . R E A L _ T I M E . D E L A Y S              --
  28918. + --                                                                          --
  28919. + --                                  B o d y                                 --
  28920. + --                                                                          --
  28921. + --                             $Revision: 1.4 $                             --
  28922. + --                                                                          --
  28923. + --           Copyright (c) 1991,1992,1993, FSU, All Rights Reserved         --
  28924. + --                                                                          --
  28925. + --  GNARL is free software; you can redistribute it and/or modify it  under --
  28926. + --  terms  of  the  GNU  Library General Public License as published by the --
  28927. + --  Free Software Foundation; either version 2, or  (at  your  option)  any --
  28928. + --  later  version.   GNARL is distributed in the hope that it will be use- --
  28929. + --  ful, but but WITHOUT ANY WARRANTY; without even the implied warranty of --
  28930. + --  MERCHANTABILITY  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Gen- --
  28931. + --  eral Library Public License for more details.  You should have received --
  28932. + --  a  copy of the GNU Library General Public License along with GNARL; see --
  28933. + --  file COPYING. If not, write to the Free Software Foundation,  675  Mass --
  28934. + --  Ave, Cambridge, MA 02139, USA.                                          --
  28935. + --                                                                          --
  28936. + ------------------------------------------------------------------------------
  28937. + with System.Compiler_Exceptions;
  28938. + --  Uses, function Current_Exceptions
  28939. + with System.Task_Timer_Service;
  28940. + --  Uses, object Objects
  28941. + --        procedure Service_Entries
  28942. + with System.Tasking;
  28943. + with Unchecked_Conversion;
  28944. + package body System.Real_Time.Delays is
  28945. +    use Tasking.Protected_Objects;
  28946. +    use Tasking;
  28947. +    package Timer renames System.Task_Timer_Service.Timer;
  28948. +    function To_Access is new
  28949. +      Unchecked_Conversion (System.Address, Protection_Access);
  28950. +    package body Delay_Until_Object is
  28951. +       procedure Service_Entries (Pending_Serviced : out Boolean) is
  28952. +          P : System.Address;
  28953. +          subtype PO_Entry_Index is Protected_Entry_Index
  28954. +            range Null_Protected_Entry .. 1;
  28955. +          Barriers : Tasking.Barrier_Vector (1 .. 1)  := (others => true);
  28956. +          --  No barriers. always true barrier
  28957. +          E : PO_Entry_Index;
  28958. +          PS : Boolean;
  28959. +          Cumulative_PS : Boolean := False;
  28960. +       begin
  28961. +          loop
  28962. +             --  Get the next queued entry or the pending call
  28963. +             --  (if no barriers are true)
  28964. +             Tasking.Protected_Objects.Next_Entry_Call
  28965. +               (To_Access (Object'Address), Barriers, P, E);
  28966. +             begin
  28967. +                case E is
  28968. +                   --  No pending call to serve
  28969. +                   when Null_Protected_Entry =>
  28970. +                      exit;
  28971. +                   --  Call to be served
  28972. +                   when 1 =>
  28973. +                      --  Lock the object before requeueing
  28974. +                      Tasking.Protected_Objects.Lock
  28975. +                        (To_Access (Timer.Object'Address));
  28976. +                      begin
  28977. +                         --  Requeue on the timer for the service. Parameter is
  28978. +                         --  passed along as Object.Call_In_Progress.Param
  28979. +                         Requeue_Protected_Entry (
  28980. +                           Object => To_Access (Object'Address),
  28981. +                           New_Object => To_Access (Timer.Object'Address),
  28982. +                           E => 3,
  28983. +                           With_Abort => True);
  28984. +                         Timer.Service_Entries (PS);
  28985. +                         Tasking.Protected_Objects.Unlock
  28986. +                           (To_Access (Timer.Object'Address));
  28987. +                      --  Neither Requeue nor Service_Entries should raise
  28988. +                      --  an exception; the exception should be saved. ???
  28989. + --                   exception
  28990. + --                      when others =>
  28991. + --                         Timer.Service_Entries;
  28992. + --                         raise;
  28993. +                      end;
  28994. +                end case;
  28995. +             exception
  28996. +                when others =>
  28997. +                   Tasking.Protected_Objects.Exceptional_Complete_Entry_Body (
  28998. +                     Object => To_Access (Object'Address),
  28999. +                     Ex => Compiler_Exceptions.Current_Exception,
  29000. +                     Pending_Serviced => PS);
  29001. +             end;
  29002. +             Cumulative_PS := Cumulative_PS or PS;
  29003. +          end loop;
  29004. +          Pending_Serviced := Cumulative_PS;
  29005. +       end Service_Entries;
  29006. +    --  Initialization for package body of Delay_Until_Object
  29007. +    begin
  29008. +       Initialize_Protection
  29009. +         (To_Access (Object'Address), Tasking.Unspecified_Priority);
  29010. +    end Delay_Until_Object;
  29011. + end System.Real_Time.Delays;
  29012. diff -rc --new-file /src/baseline/gnat-1.80/src/s-retide.ads gnat-1.80/src/s-retide.ads
  29013. *** /src/baseline/gnat-1.80/src/s-retide.ads    Thu Jan  1 00:00:00 1970
  29014. --- gnat-1.80/src/s-retide.ads    Mon Jul  4 16:31:28 1994
  29015. ***************
  29016. *** 0 ****
  29017. --- 1,45 ----
  29018. + ------------------------------------------------------------------------------
  29019. + --                                                                          --
  29020. + --                 GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS               --
  29021. + --                                                                          --
  29022. + --               S Y S T E M . R E A L _ T I M E . D E L A Y S              --
  29023. + --                                                                          --
  29024. + --                                  S p e c                                 --
  29025. + --                                                                          --
  29026. + --                             $Revision: 1.5 $                             --
  29027. + --                                                                          --
  29028. + --           Copyright (c) 1991,1992,1993, FSU, All Rights Reserved         --
  29029. + --                                                                          --
  29030. + --  GNARL is free software; you can redistribute it and/or modify it  under --
  29031. + --  terms  of  the  GNU  Library General Public License as published by the --
  29032. + --  Free Software Foundation; either version 2, or  (at  your  option)  any --
  29033. + --  later  version.   GNARL is distributed in the hope that it will be use- --
  29034. + --  ful, but but WITHOUT ANY WARRANTY; without even the implied warranty of --
  29035. + --  MERCHANTABILITY  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Gen- --
  29036. + --  eral Library Public License for more details.  You should have received --
  29037. + --  a  copy of the GNU Library General Public License along with GNARL; see --
  29038. + --  file COPYING. If not, write to the Free Software Foundation,  675  Mass --
  29039. + --  Ave, Cambridge, MA 02139, USA.                                          --
  29040. + --                                                                          --
  29041. + ------------------------------------------------------------------------------
  29042. + --  Implements real_time.time delays using a protected object
  29043. + with System.Tasking.Protected_Objects;
  29044. + --  Uses, type:  Protection
  29045. + package System.Real_Time.Delays is
  29046. +    package Delay_Until_Object is
  29047. +       Object : aliased Tasking.Protection (Num_Entries => 1);
  29048. +       type Params is record
  29049. +          Param : Real_Time.Time;
  29050. +       end record;
  29051. +       procedure Service_Entries (Pending_Serviced : out Boolean);
  29052. +    end Delay_Until_Object;
  29053. + end System.Real_Time.Delays;
  29054. diff -rc --new-file /src/baseline/gnat-1.80/src/s-taruty.adb gnat-1.80/src/s-taruty.adb
  29055. *** /src/baseline/gnat-1.80/src/s-taruty.adb    Thu Jan  1 00:00:00 1970
  29056. --- gnat-1.80/src/s-taruty.adb    Mon Jul  4 16:32:01 1994
  29057. ***************
  29058. *** 0 ****
  29059. --- 1,69 ----
  29060. + ------------------------------------------------------------------------------
  29061. + --                                                                          --
  29062. + --                 GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS               --
  29063. + --                                                                          --
  29064. + --          S Y S T E M . T A S K I N G . R U N T Y P E _ T Y P E S         --
  29065. + --                                                                          --
  29066. + --                                  S p e c                                 --
  29067. + --                                                                          --
  29068. + --                             $Revision: 1.4 $                            --
  29069. + --                                                                          --
  29070. + --           Copyright (c) 1991,1992,1993, FSU, All Rights Reserved         --
  29071. + --                                                                          --
  29072. + --  GNARL is free software; you can redistribute it and/or modify it  under --
  29073. + --  terms  of  the  GNU  Library General Public License as published by the --
  29074. + --  Free Software Foundation; either version 2,  or (at  your  option)  any --
  29075. + --  later  version.   GNARL is distributed in the hope that it will be use- --
  29076. + --  ful, but but WITHOUT ANY WARRANTY; without even the implied warranty of --
  29077. + --  MERCHANTABILITY  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Gen- --
  29078. + --  eral Library Public License for more details.  You should have received --
  29079. + --  a  copy of the GNU Library General Public License along with GNARL; see --
  29080. + --  file COPYING. If not, write to the Free Software Foundation,  675  Mass --
  29081. + --  Ave, Cambridge, MA 02139, USA.                                          --
  29082. + --                                                                          --
  29083. + ------------------------------------------------------------------------------
  29084. + with System.Task_Primitives;  use System.Task_Primitives;
  29085. + package body System.Tasking.Runtime_Types is
  29086. +    ------------------------------------
  29087. +    -- Vulnerable_Complete_Activation --
  29088. +    ------------------------------------
  29089. +    --  WARNING : Only call this procedure with priority already boosted.
  29090. +    --  That's why the name has "Vulnerable" in it.
  29091. +    procedure Vulnerable_Complete_Activation
  29092. +      (T : ATCB_Ptr)
  29093. +    is
  29094. +       This_Task : ATCB_Ptr := ID_To_ATCB (Self);
  29095. +       Activator : ATCB_Ptr;
  29096. +    begin
  29097. +       Activator := T.Activator;
  29098. +       --  Decrement the count of tasks to be activated by the activator and
  29099. +       --  wake it up so it can check to see if all tasks have been activated.
  29100. +       --  Note that the locks of the activator and created task are locked
  29101. +       --  here.  This is necessary because C.Stage and
  29102. +       --  T.Activation_Count have to be synchronized.  This is also
  29103. +       --  done in Activate_Tasks and Init_Abortion.  So long as the
  29104. +       --  activator lock is always locked first, this cannot lead to deadlock.
  29105. +       Write_Lock (Activator.L);
  29106. +       Write_Lock (T.L);
  29107. +       if T.Stage = Can_Activate then
  29108. +          T.Stage := Active;
  29109. +          Activator.Activation_Count := Activator.Activation_Count - 1;
  29110. +       end if;
  29111. +       Unlock (T.L);
  29112. +       Cond_Signal (Activator.Cond);
  29113. +       Unlock (Activator.L);
  29114. +    end Vulnerable_Complete_Activation;
  29115. + end System.Tasking.Runtime_Types;
  29116. diff -rc --new-file /src/baseline/gnat-1.80/src/s-taruty.ads gnat-1.80/src/s-taruty.ads
  29117. *** /src/baseline/gnat-1.80/src/s-taruty.ads    Thu Jan  1 00:00:00 1970
  29118. --- gnat-1.80/src/s-taruty.ads    Mon Jul  4 16:32:01 1994
  29119. ***************
  29120. *** 0 ****
  29121. --- 1,406 ----
  29122. + ------------------------------------------------------------------------------
  29123. + --                                                                          --
  29124. + --                 GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS               --
  29125. + --                                                                          --
  29126. + --          S Y S T E M . T A S K I N G . R U N T Y P E _ T Y P E S         --
  29127. + --                                                                          --
  29128. + --                                  S p e c                                 --
  29129. + --                                                                          --
  29130. + --                             $Revision: 1.6 $                             --
  29131. + --                                                                          --
  29132. + --           Copyright (c) 1991,1992,1993, FSU, All Rights Reserved         --
  29133. + --                                                                          --
  29134. + --  GNARL is free software; you can redistribute it and/or modify it  under --
  29135. + --  terms  of  the  GNU  Library General Public License as published by the --
  29136. + --  Free Software Foundation; either version 2,  or (at  your  option)  any --
  29137. + --  later  version.   GNARL is distributed in the hope that it will be use- --
  29138. + --  ful, but but WITHOUT ANY WARRANTY; without even the implied warranty of --
  29139. + --  MERCHANTABILITY  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Gen- --
  29140. + --  eral Library Public License for more details.  You should have received --
  29141. + --  a  copy of the GNU Library General Public License along with GNARL; see --
  29142. + --  file COPYING. If not, write to the Free Software Foundation,  675  Mass --
  29143. + --  Ave, Cambridge, MA 02139, USA.                                          --
  29144. + --                                                                          --
  29145. + ------------------------------------------------------------------------------
  29146. + with Unchecked_Conversion;
  29147. + package System.Tasking.Runtime_Types is
  29148. +    --  Entry queue related types
  29149. +    type Server_Kind is (Task_Server, PO_Server);
  29150. +    type Server_Record (Kind : Server_Kind := Task_Server) is record
  29151. +       case Kind is
  29152. +          when Task_Server =>
  29153. +             Called_Task : Task_ID;
  29154. +             Acceptor_Prev_Call : Entry_Call_Link;
  29155. +             Acceptor_Prev_Priority : Rendezvous_Priority;
  29156. +             --  For a task servicing a task entry call,
  29157. +             --  information about the most recent prior call being serviced.
  29158. +             --   Not used for protected entry calls;
  29159. +             --  this function should be performed by GNULLI ceiling locking.
  29160. +          when PO_Server =>
  29161. +             Called_PO : Protection_Access;
  29162. +       end case;
  29163. +    end record;
  29164. +    --  Protected Objects related definitions
  29165. +    Null_PO : constant Protection_Access := null;
  29166. +    --  ATCB type defintions
  29167. +    type Ada_Task_Control_Block (Entry_Num : Task_Entry_Index);
  29168. +    type ATCB_Ptr is access Ada_Task_Control_Block;
  29169. +    All_Tasks_List : ATCB_Ptr;
  29170. +    All_Tasks_L : Task_Primitives.Lock;
  29171. +    function ID_To_ATCB is new
  29172. +      Unchecked_Conversion (Task_ID, ATCB_Ptr);
  29173. +    function ATCB_To_ID is new
  29174. +      Unchecked_Conversion (ATCB_Ptr, Task_ID);
  29175. +    function ATCB_To_Address is new
  29176. +      Unchecked_Conversion (ATCB_Ptr, System.Address);
  29177. +    type Task_Stage is (
  29178. +       Created,
  29179. +       --  Task has been created but has not begun activation.
  29180. +       Can_Activate,
  29181. +       --  Task has begin activation.
  29182. +       Active,
  29183. +       --  Task has completed activation and is executing the task body.
  29184. +       Await_Dependents,
  29185. +       --  Task is waiting for all of its dependents to become passive (be
  29186. +       --  complete, terminated, or be waiting on a terminate alternative).
  29187. +       Passive,
  29188. +       --  The task is passive.
  29189. +       Completing,
  29190. +       --  The task is committed to becoming complete, but has not yet
  29191. +       --  satisfied all of the conditions for completion.  This
  29192. +       --  acts as a claim to completion; once Stage is set to this value,
  29193. +       --  no other task can continue with completion.
  29194. +       Complete,
  29195. +       --  The task is complete.  The task and all of its dependents are
  29196. +       --  passive; some dependents may still be waiting on terminate
  29197. +       --  alternatives.
  29198. +       Terminated);
  29199. +       --  The task is terminated.  All dependents waiting on terminate
  29200. +       --  alternatives have been awakened and have terminated themselves.
  29201. +    type Accepting_State is (
  29202. +       Not_Accepting,   --  task is not ready to accept any entry call
  29203. +       Trivial_Accept,   --  "accept E;"
  29204. +       Simple_Accept,    --  "accept E do ... end E;"
  29205. +       Select_Wait);     --  most general case
  29206. +    type Entry_Call_Array is array (ATC_Level_Index) of
  29207. +      aliased Entry_Call_Record;
  29208. +    type Entry_Queue_Array is array (Task_Entry_Index range <>) of Entry_Queue;
  29209. +    --  Notes on protection (synchronization) of TRTS data structures.
  29210. +    --  Any field of the TCB can be written by the activator of a task when the
  29211. +    --  task is created, since no other task can access the new task's
  29212. +    --  state until creation is complete.
  29213. +    --  The protection for each field is described in a comment starting with
  29214. +    --  "Protection:".
  29215. +    --  When a lock is used to protect an ATCB field, this lock is simply named.
  29216. +    --  Some protection is described in terms of tasks related to the
  29217. +    --  ATCB being protected.  These are:
  29218. +    --    Self: The task which is controlled by this ATCB.
  29219. +    --    Acceptor: A task accepting a call from Self.
  29220. +    --    Caller: A task calling an entry of Self.
  29221. +    --    Parent: The task executing the master on which Self depends.
  29222. +    --    Dependent: A task dependent on Self.
  29223. +    --    Activator: The task that created Self and initiated its activation.
  29224. +    --    Created: A task created and activated by Self.
  29225. +    type Ada_Task_Control_Block (Entry_Num : Task_Entry_Index) is record
  29226. +       LL_TCB : aliased Task_Primitives.Task_Control_Block;
  29227. +       --  Control block used by the underlying low-level tasking service
  29228. +       --  (GNULLI).
  29229. +       --  Protection: This is used only by the GNULLI implementation, which
  29230. +       --  takes care of all of its synchronization.
  29231. +       Task_Entry_Point : Init_State;
  29232. +       --  Information needed to call the procedure containing the code for
  29233. +       --  the body of this task.
  29234. +       --  Protection: Part of the synchronization between Self and
  29235. +       --  Activator.  Activator writes it, once, before Self starts
  29236. +       --  executing.  Self reads it, once, as part of its execution.
  29237. +       Task_Arg : System.Address;
  29238. +       --  The argument to to task procedure.  Currently unused; this will
  29239. +       --  provide a handle for discriminant information.
  29240. +       --  Protection: Part of the synchronization between Self and
  29241. +       --  Activator.  Activator writes it, once, before Self starts
  29242. +       --  executing.  Thereafter, Self only reads it.
  29243. +       Stack_Size : Size_Type;
  29244. +       --  Requested stack size.
  29245. +       --  Protection: Only used by Self.
  29246. +       Current_Priority : System.Priority;
  29247. +       --  Active priority, except that the effects of protected object
  29248. +       --  priority ceilings are not reflected.  This only reflects explicit
  29249. +       --  priority changes and priority inherited through task activation
  29250. +       --  and rendezvous.
  29251. +       --  Ada 9X notes: In Ada 9X, this field will be transferred to the
  29252. +       --  Priority field of an Entry_Calls componant when an entry call
  29253. +       --  is initiated.  The Priority of the Entry_Calls componant will not
  29254. +       --  change for the duration of the call.  The accepting task can
  29255. +       --  use it to boost its own priority without fear of its changing in
  29256. +       --  the meantime.
  29257. +       --  This can safely be used in the priority ordering
  29258. +       --  of entry queues.  Once a call is queued, its priority does not
  29259. +       --  change.
  29260. +       --  Since an entry call cannot be made while executing
  29261. +       --  a protected action, the priority of a task will never reflect a
  29262. +       --  priority ceiling change at the point of an entry call.
  29263. +       --  Protection: Only written by Self, and only accessed when Acceptor
  29264. +       --  accepts an entry or when Created activates, at which points Self is
  29265. +       --  suspended.
  29266. +       L : Task_Primitives.Lock;
  29267. +       --  General purpose lock; protects most fields in the ATCB.
  29268. +       Compiler_Data : System.Address;
  29269. +       --  Untyped task-specific data needed by the compiler to store
  29270. +       --  per-task structures.
  29271. +       --  Protection: Only accessed by Self.
  29272. +       --  the following declarations are for Rendezvous
  29273. +       Cond : Task_Primitives.Condition_Variable;
  29274. +       Rend_Cond : Task_Primitives.Condition_Variable;
  29275. +       --  Rend_Cond is used by the task owning this ATCB for waits involved in
  29276. +       --  rendezvous, and Cond is used for all other waits.  There is currently
  29277. +       --  no overlap in the use of these condition variables; see comment to
  29278. +       --  Abort_Tasks in Task_Stages.
  29279. +       --  Protection: Condition variables are always associated with a lock.
  29280. +       --  The runtime places no restrictions on which lock is used, except
  29281. +       --  that it must protection the condition opon which the task is waiting.
  29282. +       --  Currently, Cond is always associated with Self.L, and Rend_Cond
  29283. +       --  is always associated with Acceptor.L.
  29284. +       All_Tasks_Link : ATCB_Ptr;
  29285. +       --  Used to link this task to the list of all tasks in the system.
  29286. +       --  Protection: All_Tasks.L.
  29287. +       Activation_Link : ATCB_Ptr;
  29288. +       --  Used to link this task to a list of tasks to be activated.
  29289. +       --  Protection: Only used by Activator.
  29290. +       Open_Accepts : Accept_List_Access;
  29291. +       --  This points to the Open_Accepts array of accept alternatives passed
  29292. +       --  to the RTS by the compiler-generated code to Selective_Wait.
  29293. +       --  Protection: Self.L.
  29294. +       Exception_To_Raise : Exception_ID;
  29295. +       Exception_Address : System.Address;
  29296. +       --  An exception which should be raised by this task when it regains
  29297. +       --  control, and the address at which it should be raised.
  29298. +       --  Protection: Read only by Self, under circumstances where it will
  29299. +       --  be notified by the writer when it is safe to read it:
  29300. +       --  1. Written by Acceptor, when Self is suspended.
  29301. +       --  2. Written by Notify_Exception, executed by Self through a
  29302. +       --     synchronous signal handler, which redirects control to a
  29303. +       --     routine to read it and raise the exception.
  29304. +       Chosen_Index : Select_Index;
  29305. +       --  The index in Open_Accepts of the entry call accepted by a selective
  29306. +       --  wait executed by this task.
  29307. +       --  Protection: Written by both Self and Caller.  Usually protected
  29308. +       --  by Self.L.  However, once the selection is known to have been
  29309. +       --  written it can be accessed without protection.  This happens
  29310. +       --  after Self has updated it itself using information from a suspended
  29311. +       --  Caller, or after Caller has updated it and awakened Self.
  29312. +       Call : Entry_Call_Link;
  29313. +       --  The entry call that has been accepted by this task.
  29314. +       --  Protection: Self.L.  Self will modify this field
  29315. +       --  when Self.Accepting is False, and will not need the mutex to do so.
  29316. +       --  Once a task sets Stage=Completing, no other task can access this
  29317. +       --  field.
  29318. +       --  The following fields are used to manage the task's life cycle.
  29319. +       Activator : ATCB_Ptr;
  29320. +       --  The task that created this task, either by declaring it as a task
  29321. +       --  object or by executing a task allocator.
  29322. +       --  Protection: Set by Activator before Self is activated, and
  29323. +       --  read after Self is activated.
  29324. +       Parent : ATCB_Ptr;
  29325. +       Master_of_Task : Master_ID;
  29326. +       --  The task executing the master of this task, and the ID of this task's
  29327. +       --  master (unique only among masters currently active within Parent).
  29328. +       --  Protection: Set by Activator before Self is activated, and
  29329. +       --  read after Self is activated.
  29330. +       Master_Within : Master_ID;
  29331. +       --  The ID of the master currently executing within this task; that is,
  29332. +       --  the most deeply nested currently active master.
  29333. +       --  Protection: Only written by Self, and only read by Self or by
  29334. +       --  dependents when Self is attempting to exit a master.  Since Self
  29335. +       --  will not write this field until the master is complete, the
  29336. +       --  synchronization should be adequate to prevent races.
  29337. +       Activation_Count : Integer;
  29338. +       --  This is the number of tasks that this task is activating, i.e. the
  29339. +       --  children that have started activation but have not completed it.
  29340. +       --  Protection: Self.L and Created.L.  Both mutexes must be locked,
  29341. +       --  since Self.Activation_Count and Created.Stage must be synchronized.
  29342. +       Awake_Count : Integer;
  29343. +       --  Number of tasks dependent on this task (including this task) that are
  29344. +       --  still "awake": not terminated and not waiting on a terminate
  29345. +       --  alternative.
  29346. +       --  Protection: Self.L.  Parent.L must also be locked when this is
  29347. +       --  updated, so that it can be synchronized with
  29348. +       --  Parent.Awaited_Dependent_Count, except under special circumstances
  29349. +       --  where we know that the two can be out of sync without allowing the
  29350. +       --  parent to terminate before its dependents.
  29351. +       Awaited_Dependent_Count : Integer;
  29352. +       --  This is the awake count of a master being completed by this task.
  29353. +       --  Protection: Self.L.  Dependent.L must also be locked so that
  29354. +       --  this field and Dependent.Awake_Count can be synchronized, except
  29355. +       --  under special circumstances where we know that the two can be out
  29356. +       --  of sync without allowing the parent to terminate before its
  29357. +       --  dependents.
  29358. +       Terminating_Dependent_Count : Integer;
  29359. +       --  This is the count of tasks dependent on a master being completed by
  29360. +       --  this task which are waiting on a terminate alternative.  Only valid
  29361. +       --  when there none of the dependents are awake.
  29362. +       --  Protection: Self.L.
  29363. +       Pending_ATC_Level : ATC_Level_Base;
  29364. +       --  The ATC level to which this task is currently being aborted.
  29365. +       --  Protection: Self.L.
  29366. +       ATC_Nesting_Level : ATC_Level;
  29367. +       --  The dynamic level of ATC nesting (currently executing nested
  29368. +       --  asynchronous select statements) in this task.
  29369. +       --  Protection: This is only used by Self.  However, decrementing it
  29370. +       --  in effect deallocates an Entry_Calls componant, and care must be
  29371. +       --  taken that all references to that componant are eliminated before
  29372. +       --  doing the decrement.  This in turn will probably required locking
  29373. +       --  a protected object (for a protected entry call) or the Acceptor's
  29374. +       --  lock (for a task entry call).  However, ATC_Nesting_Level itself can
  29375. +       --  be accessed without a lock.
  29376. +       Deferral_Level : Natural;
  29377. +       --  This is the number of times that Defer_Abortion has been called by
  29378. +       --  this task without a matching Undefer_Abortion call.  Abortion is
  29379. +       --  only allowed when this zero.
  29380. +       --  Protection: Only updated by Self; access assumed to be atomic.
  29381. +       Elaborated : Access_Boolean;
  29382. +       --  Pointer to a flag indicating that this task's body has been
  29383. +       --  elaborted.  The flag is created and managed by the
  29384. +       --  compiler-generated code.
  29385. +       --  Protection: The field itself is only accessed by Activator.  The flag
  29386. +       --  that it points to is updated by Master and read by Activator; access
  29387. +       --  is assumed to be atomic.
  29388. +       Stage : Task_Stage;
  29389. +       --  The general stage of the task in it's life cycle.
  29390. +       --  Protection: Self.L.
  29391. +       --  beginning of flags
  29392. +       Cancel_Was_Successful : Boolean;
  29393. +       --  This indicates that the last attempt to cancel an entry call was
  29394. +       --  successful.  It needs to be accurate between a call to
  29395. +       --  *Cancel_*_Entry_Call and the following call to Complete_*_Entry_Call.
  29396. +       --  These calls cannot be nested; that is, there can be no intervening
  29397. +       --  *Cancel_*_Entry_Call, so this single field is adequate.
  29398. +       --  Protection: Accessed only by Self.
  29399. +       Accepting : Accepting_State;
  29400. +       --  The ability of this task to accept an entry call.
  29401. +       --  Protection: Self.L.
  29402. +       Aborting : Boolean;
  29403. +       --  Self is in the process of aborting. While set, prevents multiple
  29404. +       --  abortion signals from being sent by different aborter while abortion
  29405. +       --  is acted upon. This is essential since an aborter which calls
  29406. +       --  Abort_To_Level could set the Pending_ATC_Level to yet a lower level
  29407. +       --  (than the current level), may be preempted and would send the
  29408. +       --  abortion signal when resuming execution. At this point, the abortee
  29409. +       --  may have completed abortion to the proper level such that the
  29410. +       --  signal (and resulting abortion exception) are not handled anymore.
  29411. +       --  In other words, the flag prevents a race between multiple aborters
  29412. +       --  and the abortee.
  29413. +       --  Protection: Self.L.
  29414. +       Suspended_Abortably : Boolean;
  29415. +       --  Task is suspended with (low-level) abortion deferred, but is
  29416. +       --  abortable.  This means that the task must be awakened to perform
  29417. +       --  its own abortion.
  29418. +       --  Protection: Self.L.
  29419. +       --  end of flags
  29420. +       Entry_Calls : Entry_Call_Array;
  29421. +       --  An array of Ada 9X entry calls.
  29422. +       --  Protection: The elements of this array are on entry call queues
  29423. +       --  associated with protected objects or task entries, and are protected
  29424. +       --  by the protected object lock or Acceptor.L, respecively.
  29425. +       Entry_Queues : Entry_Queue_Array (1 .. Entry_Num);
  29426. +       --  An array of task entry queues.
  29427. +       --  Protection: Self.L.  Once a task has set Self.Stage to Completing, it
  29428. +       --  has exclusive access to this field.
  29429. +       Aborter_Link : ATCB_Ptr;
  29430. +       --  Link to the list of tasks which tries to abort this task but
  29431. +       --  blocked by another aborter who has already been aborting the task.
  29432. +    end record;
  29433. +    --  The following record holds the information used to initialize a task
  29434. +    type ATCB_Init is record
  29435. +       Task_Entry_Point : Init_State;
  29436. +       Task_Arg         : System.Address;
  29437. +       Stack_Size       : Size_Type;
  29438. +       Activator        : ATCB_Ptr;
  29439. +       Parent           : ATCB_Ptr;
  29440. +       Master_of_Task   : Master_ID;
  29441. +       Elaborated       : Access_Boolean;
  29442. +       Entry_Num        : Task_Entry_Index;
  29443. +    end record;
  29444. +    procedure Vulnerable_Complete_Activation
  29445. +      (T : ATCB_Ptr);
  29446. +    --  Completes the activation by signalling its children.
  29447. +    --  Does not defer abortion (unlike Complete_Activation) and assumes
  29448. +    --  that priority is already boosted.
  29449. + end System.Tasking.Runtime_Types;
  29450. diff -rc --new-file /src/baseline/gnat-1.80/src/threads/src/Makefile gnat-1.80/src/threads/src/Makefile
  29451. *** /src/baseline/gnat-1.80/src/threads/src/Makefile    Fri Apr 29 15:46:52 1994
  29452. --- gnat-1.80/src/threads/src/Makefile    Wed Jul  6 16:58:33 1994
  29453. ***************
  29454. *** 136,142 ****
  29455.   COMP_C2  = $(CC) $(INC1) $(INC2) $(CCFLAGS2) -c $*.c
  29456.   
  29457.   AR     = ar
  29458. ! RANLIB = /usr/bin/ranlib
  29459.   
  29460.   LINTFLAGS = -u $(CFLAGS)
  29461.   
  29462. --- 136,142 ----
  29463.   COMP_C2  = $(CC) $(INC1) $(INC2) $(CCFLAGS2) -c $*.c
  29464.   
  29465.   AR     = ar
  29466. ! RANLIB = /bin/ranlib
  29467.   
  29468.   LINTFLAGS = -u $(CFLAGS)
  29469.   
  29470. diff -rc --new-file /src/baseline/gnat-1.80/src/uintp.adb gnat-1.80/src/uintp.adb
  29471. *** /src/baseline/gnat-1.80/src/uintp.adb    Fri Jun 10 15:43:45 1994
  29472. --- gnat-1.80/src/uintp.adb    Wed Jul  6 16:57:40 1994
  29473. ***************
  29474. *** 231,236 ****
  29475. --- 231,238 ----
  29476.   
  29477.      procedure Init_Operand (UI : Uint; Vec : out UI_Vector) is
  29478.         Loc : Int;
  29479. + --    AmigaDOS hack
  29480. +       tempa : Int;
  29481.   
  29482.      begin
  29483.         if UI <= Uint_Direct_Last then
  29484. ***************
  29485. *** 239,245 ****
  29486.            Loc := Uints.Table (UI).Loc;
  29487.   
  29488.            for J in 1 .. Uints.Table (UI).Length loop
  29489. !             Vec (J) := Udigits.Table (Loc + J - 1);
  29490.            end loop;
  29491.         end if;
  29492.      end Init_Operand;
  29493. --- 241,249 ----
  29494.            Loc := Uints.Table (UI).Loc;
  29495.   
  29496.            for J in 1 .. Uints.Table (UI).Length loop
  29497. ! --          AmigaDOS hack
  29498. !             tempa := Loc + J - 1;
  29499. !             Vec (J) := Udigits.Table (tempa);
  29500.            end loop;
  29501.         end if;
  29502.      end Init_Operand;
  29503. ***************
  29504. *** 693,698 ****
  29505. --- 697,704 ----
  29506.            declare
  29507.               Length : Int := Uints.Table (Right).Length;
  29508.               Loc    : Int := Uints.Table (Right).Loc;
  29509. + --          AmigaDOS hack
  29510. +             tempa, tempb : Int;
  29511.   
  29512.            begin
  29513.               Uints.Increment_Last;
  29514. ***************
  29515. *** 704,710 ****
  29516.   
  29517.               for Idx in 2 .. Length loop
  29518.                  Udigits.Increment_Last;
  29519. !                Udigits.Table (Udigits.Last) := Udigits.Table (Loc + Idx - 1);
  29520.               end loop;
  29521.   
  29522.               return Uints.Last;
  29523. --- 710,719 ----
  29524.   
  29525.               for Idx in 2 .. Length loop
  29526.                  Udigits.Increment_Last;
  29527. ! --             AmigaDOS hack
  29528. !                tempa := Udigits.Last;
  29529. !                tempb := Loc + Idx - 1;
  29530. !                Udigits.Table (tempa) := Udigits.Table (tempb);
  29531.               end loop;
  29532.   
  29533.               return Uints.Last;
  29534.