Browse Source

Big commit, change the properties of a lot of text file to use native eol, and force all of the documentation files to user CRLF eol. Remove some artefacts from CVS (.cvsignores file and a CVSROOT folder) and add svn:keywords to all files in the repository

git-svn-id: file:///var/svn/tigccpp/trunk@1307 9552661e-59e3-4036-b4f2-dbe53926924f
godzil 15 years ago
parent
commit
a3a29558e2
100 changed files with 7750 additions and 8122 deletions
  1. 0 13
      CVSROOT/checkoutlist
  2. 0 15
      CVSROOT/commitinfo
  3. 0 11
      CVSROOT/config
  4. 0 23
      CVSROOT/cvswrappers
  5. 0 21
      CVSROOT/editinfo
  6. 0 26
      CVSROOT/loginfo
  7. 0 26
      CVSROOT/modules
  8. 0 12
      CVSROOT/notify
  9. 0 13
      CVSROOT/rcsinfo
  10. 0 20
      CVSROOT/taginfo
  11. 0 21
      CVSROOT/verifymsg
  12. 0 14
      ktigcc/.cvsignore
  13. 59 59
      tigcc/archive/flashos.tpr
  14. 32 32
      tigcc/archive/startup/_flash_os_header.s
  15. 445 445
      tigcc/archive/tigcc.tpr
  16. 24 24
      tigcc/doc/System/Include/Include.hsi
  17. 14 14
      tigcc/doc/System/Include/minams.chk
  18. 26 26
      tigcc/doc/System/Info/a68k/a68k.hss
  19. 26 26
      tigcc/doc/System/Info/a68k/contact.hss
  20. 0 134
      tigcc/doc/System/Info/a68k/directives.hss
  21. 284 284
      tigcc/doc/System/Info/a68k/exts.hss
  22. 34 34
      tigcc/doc/System/Info/a68k/filenames.hss
  23. 55 55
      tigcc/doc/System/Info/a68k/files.hss
  24. 940 940
      tigcc/doc/System/Info/a68k/history.hss
  25. 36 36
      tigcc/doc/System/Info/a68k/intro.hss
  26. 47 47
      tigcc/doc/System/Info/a68k/restrictions.hss
  27. 98 98
      tigcc/doc/System/Info/a68k/smallcode.hss
  28. 73 73
      tigcc/doc/System/Info/a68k/tech.hss
  29. 265 265
      tigcc/doc/System/Info/a68k/usage.hss
  30. 0 23
      tigcc/doc/System/Info/asminfo/asminfo.hss
  31. 962 962
      tigcc/doc/System/Info/comopts/SEC10.hss
  32. 525 525
      tigcc/doc/System/Info/comopts/SEC11.hss
  33. 23 23
      tigcc/doc/System/Info/comopts/SEC12.hss
  34. 70 70
      tigcc/doc/System/Info/comopts/SEC14.hss
  35. 22 22
      tigcc/doc/System/Info/comopts/SEC15.hss
  36. 82 82
      tigcc/doc/System/Info/comopts/SEC16.hss
  37. 61 61
      tigcc/doc/System/Info/comopts/SEC3.hss
  38. 141 141
      tigcc/doc/System/Info/comopts/SEC4.hss
  39. 305 305
      tigcc/doc/System/Info/comopts/SEC44.hss
  40. 158 158
      tigcc/doc/System/Info/comopts/SEC45.hss
  41. 211 211
      tigcc/doc/System/Info/comopts/SEC6.hss
  42. 774 774
      tigcc/doc/System/Info/comopts/SEC8.hss
  43. 93 93
      tigcc/doc/System/Info/comopts/SEC9.hss
  44. 85 85
      tigcc/doc/System/Info/comopts/comopts.hss
  45. 24 24
      tigcc/doc/System/Info/comopts/history.hss
  46. 29 29
      tigcc/doc/System/Info/contact/contact.hss
  47. 50 50
      tigcc/doc/System/Info/copyright/copyright.hss
  48. 18 18
      tigcc/doc/System/Info/cpp/SEC10.hss
  49. 92 92
      tigcc/doc/System/Info/cpp/SEC11.hss
  50. 39 39
      tigcc/doc/System/Info/cpp/SEC12.hss
  51. 86 86
      tigcc/doc/System/Info/cpp/SEC12a.hss
  52. 95 95
      tigcc/doc/System/Info/cpp/SEC13.hss
  53. 11 11
      tigcc/doc/System/Info/cpp/SEC14.hss
  54. 9 9
      tigcc/doc/System/Info/cpp/SEC15.hss
  55. 6 6
      tigcc/doc/System/Info/cpp/SEC15_BASE_FILE.hss
  56. 8 8
      tigcc/doc/System/Info/cpp/SEC15_CHAR_BIT.hss
  57. 10 10
      tigcc/doc/System/Info/cpp/SEC15_CHAR_UNSIGNED.hss
  58. 12 12
      tigcc/doc/System/Info/cpp/SEC15_DATE.hss
  59. 9 9
      tigcc/doc/System/Info/cpp/SEC15_FILE.hss
  60. 32 32
      tigcc/doc/System/Info/cpp/SEC15_GNUC.hss
  61. 8 8
      tigcc/doc/System/Info/cpp/SEC15_GNUC_MINOR.hss
  62. 13 13
      tigcc/doc/System/Info/cpp/SEC15_GNUC_PATCHLEVEL.hss
  63. 9 9
      tigcc/doc/System/Info/cpp/SEC15_INCLUDE_LEVEL.hss
  64. 11 11
      tigcc/doc/System/Info/cpp/SEC15_INT_SHORT.hss
  65. 35 35
      tigcc/doc/System/Info/cpp/SEC15_LINE.hss
  66. 13 13
      tigcc/doc/System/Info/cpp/SEC15_MAX.hss
  67. 7 7
      tigcc/doc/System/Info/cpp/SEC15_NO_INLINE.hss
  68. 12 12
      tigcc/doc/System/Info/cpp/SEC15_OPTIMIZE.hss
  69. 6 6
      tigcc/doc/System/Info/cpp/SEC15_OPTIMIZE_SIZE.hss
  70. 10 10
      tigcc/doc/System/Info/cpp/SEC15_REGISTER_PREFIX.hss
  71. 11 11
      tigcc/doc/System/Info/cpp/SEC15_STDC.hss
  72. 7 7
      tigcc/doc/System/Info/cpp/SEC15_STDC_HOSTED.hss
  73. 15 15
      tigcc/doc/System/Info/cpp/SEC15_STDC_VERSION.hss
  74. 10 10
      tigcc/doc/System/Info/cpp/SEC15_STRICT_ANSI.hss
  75. 11 11
      tigcc/doc/System/Info/cpp/SEC15_TIME.hss
  76. 13 13
      tigcc/doc/System/Info/cpp/SEC15_USER_LABEL_PREFIX.hss
  77. 8 8
      tigcc/doc/System/Info/cpp/SEC15_VERSION.hss
  78. 9 9
      tigcc/doc/System/Info/cpp/SEC15a.hss
  79. 37 37
      tigcc/doc/System/Info/cpp/SEC16.hss
  80. 72 72
      tigcc/doc/System/Info/cpp/SEC17.hss
  81. 72 72
      tigcc/doc/System/Info/cpp/SEC18.hss
  82. 58 58
      tigcc/doc/System/Info/cpp/SEC19.hss
  83. 52 52
      tigcc/doc/System/Info/cpp/SEC2.hss
  84. 35 35
      tigcc/doc/System/Info/cpp/SEC20.hss
  85. 8 8
      tigcc/doc/System/Info/cpp/SEC22.hss
  86. 27 27
      tigcc/doc/System/Info/cpp/SEC23.hss
  87. 45 45
      tigcc/doc/System/Info/cpp/SEC24.hss
  88. 49 49
      tigcc/doc/System/Info/cpp/SEC25.hss
  89. 52 52
      tigcc/doc/System/Info/cpp/SEC26.hss
  90. 55 55
      tigcc/doc/System/Info/cpp/SEC27.hss
  91. 84 84
      tigcc/doc/System/Info/cpp/SEC28.hss
  92. 144 144
      tigcc/doc/System/Info/cpp/SEC3.hss
  93. 22 22
      tigcc/doc/System/Info/cpp/SEC30.hss
  94. 33 33
      tigcc/doc/System/Info/cpp/SEC31.hss
  95. 35 35
      tigcc/doc/System/Info/cpp/SEC32.hss
  96. 7 7
      tigcc/doc/System/Info/cpp/SEC33.hss
  97. 71 71
      tigcc/doc/System/Info/cpp/SEC34.hss
  98. 18 18
      tigcc/doc/System/Info/cpp/SEC35.hss
  99. 40 40
      tigcc/doc/System/Info/cpp/SEC36.hss
  100. 26 26
      tigcc/doc/System/Info/cpp/SEC37.hss

+ 0 - 13
CVSROOT/checkoutlist

@@ -1,13 +0,0 @@
-# The "checkoutlist" file is used to support additional version controlled
-# administrative files in $CVSROOT/CVSROOT, such as template files.
-#
-# The first entry on a line is a filename which will be checked out from
-# the corresponding RCS file in the $CVSROOT/CVSROOT directory.
-# The remainder of the line is an error message to use if the file cannot
-# be checked out.
-#
-# File format:
-#
-#	[<whitespace>]<filename><whitespace><error message><end-of-line>
-#
-# comment lines begin with '#'

+ 0 - 15
CVSROOT/commitinfo

@@ -1,15 +0,0 @@
-# The "commitinfo" file is used to control pre-commit checks.
-# The filter on the right is invoked with the repository and a list 
-# of files to check.  A non-zero exit of the filter program will 
-# cause the commit to be aborted.
-#
-# The first entry on a line is a regular expression which is tested
-# against the directory that the change is being committed to, relative
-# to the $CVSROOT.  For the first match that is found, then the remainder
-# of the line is the name of the filter to run.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name "ALL" appears as a regular expression it is always used
-# in addition to the first matching regex or "DEFAULT".

+ 0 - 11
CVSROOT/config

@@ -1,11 +0,0 @@
-# Set this to "no" if pserver shouldn't check system users/passwords
-#SystemAuth=no
-
-# Set `PreservePermissions' to `yes' to save file status information
-# in the repository.
-#PreservePermissions=no
-
-# Set `TopLevelAdmin' to `yes' to create a CVS directory at the top
-# level of the new working directory when using the `cvs checkout'
-# command.
-#TopLevelAdmin=no

+ 0 - 23
CVSROOT/cvswrappers

@@ -1,23 +0,0 @@
-# This file affects handling of files based on their names.
-#
-# The -t/-f options allow one to treat directories of files
-# as a single file, or to transform a file in other ways on
-# its way in and out of CVS.
-#
-# The -m option specifies whether CVS attempts to merge files.
-#
-# The -k option specifies keyword expansion (e.g. -kb for binary).
-#
-# Format of wrapper file ($CVSROOT/CVSROOT/cvswrappers or .cvswrappers)
-#
-#  wildcard	[option value][option value]...
-#
-#  where option is one of
-#  -f		from cvs filter		value: path to filter
-#  -t		to cvs filter		value: path to filter
-#  -m		update methodology	value: MERGE or COPY
-#  -k		expansion mode		value: b, o, kkv, &c
-#
-#  and value is a single-quote delimited value.
-# For example:
-#*.gif -k 'b'

+ 0 - 21
CVSROOT/editinfo

@@ -1,21 +0,0 @@
-# The "editinfo" file is used to allow verification of logging
-# information.  It works best when a template (as specified in the
-# rcsinfo file) is provided for the logging procedure.  Given a
-# template with locations for, a bug-id number, a list of people who
-# reviewed the code before it can be checked in, and an external
-# process to catalog the differences that were code reviewed, the
-# following test can be applied to the code:
-#
-#   Making sure that the entered bug-id number is correct.
-#   Validating that the code that was reviewed is indeed the code being
-#       checked in (using the bug-id number or a seperate review
-#       number to identify this particular code set.).
-#
-# If any of the above test failed, then the commit would be aborted.
-#
-# Actions such as mailing a copy of the report to each reviewer are
-# better handled by an entry in the loginfo file.
-#
-# One thing that should be noted is the the ALL keyword is not
-# supported.  There can be only one entry that matches a given
-# repository.

+ 0 - 26
CVSROOT/loginfo

@@ -1,26 +0,0 @@
-# The "loginfo" file controls where "cvs commit" log information
-# is sent.  The first entry on a line is a regular expression which must match
-# the directory that the change is being made to, relative to the
-# $CVSROOT.  If a match is found, then the remainder of the line is a filter
-# program that should expect log information on its standard input.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name ALL appears as a regular expression it is always used
-# in addition to the first matching regex or DEFAULT.
-#
-# You may specify a format string as part of the
-# filter.  The string is composed of a `%' followed
-# by a single format character, or followed by a set of format
-# characters surrounded by `{' and `}' as separators.  The format
-# characters are:
-#
-#   s = file name
-#   V = old version number (pre-checkin)
-#   v = new version number (post-checkin)
-#
-# For example:
-#DEFAULT (echo ""; id; echo %s; date; cat) >> $CVSROOT/CVSROOT/commitlog
-# or
-#DEFAULT (echo ""; id; echo %{sVv}; date; cat) >> $CVSROOT/CVSROOT/commitlog

+ 0 - 26
CVSROOT/modules

@@ -1,26 +0,0 @@
-# Three different line formats are valid:
-#	key	-a    aliases...
-#	key [options] directory
-#	key [options] directory files...
-#
-# Where "options" are composed of:
-#	-i prog		Run "prog" on "cvs commit" from top-level of module.
-#	-o prog		Run "prog" on "cvs checkout" of module.
-#	-e prog		Run "prog" on "cvs export" of module.
-#	-t prog		Run "prog" on "cvs rtag" of module.
-#	-u prog		Run "prog" on "cvs update" of module.
-#	-d dir		Place module in directory "dir" instead of module name.
-#	-l		Top-level directory only -- do not recurse.
-#
-# NOTE:  If you change any of the "Run" options above, you'll have to
-# release and re-checkout any working directories of these modules.
-#
-# And "directory" is a path to a directory relative to $CVSROOT.
-#
-# The "-a" option specifies an alias.  An alias is interpreted as if
-# everything on the right of the "-a" had been typed on the command line.
-#
-# You can encode a module within a module by using the special '&'
-# character to interpose another module into the current module.  This
-# can be useful for creating a module that consists of many directories
-# spread out over the entire source repository.

+ 0 - 12
CVSROOT/notify

@@ -1,12 +0,0 @@
-# The "notify" file controls where notifications from watches set by
-# "cvs watch add" or "cvs edit" are sent.  The first entry on a line is
-# a regular expression which is tested against the directory that the
-# change is being made to, relative to the $CVSROOT.  If it matches,
-# then the remainder of the line is a filter program that should contain
-# one occurrence of %s for the user to notify, and information on its
-# standard input.
-#
-# "ALL" or "DEFAULT" can be used in place of the regular expression.
-#
-# For example:
-#ALL mail %s -s "CVS notification"

+ 0 - 13
CVSROOT/rcsinfo

@@ -1,13 +0,0 @@
-# The "rcsinfo" file is used to control templates with which the editor
-# is invoked on commit and import.
-#
-# The first entry on a line is a regular expression which is tested
-# against the directory that the change is being made to, relative to the
-# $CVSROOT.  For the first match that is found, then the remainder of the
-# line is the name of the file that contains the template.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name "ALL" appears as a regular expression it is always used
-# in addition to the first matching regex or "DEFAULT".

+ 0 - 20
CVSROOT/taginfo

@@ -1,20 +0,0 @@
-# The "taginfo" file is used to control pre-tag checks.
-# The filter on the right is invoked with the following arguments:
-#
-# $1 -- tagname
-# $2 -- operation "add" for tag, "mov" for tag -F, and "del" for tag -d
-# $3 -- repository
-# $4->  file revision [file revision ...]
-#
-# A non-zero exit of the filter program will cause the tag to be aborted.
-#
-# The first entry on a line is a regular expression which is tested
-# against the directory that the change is being committed to, relative
-# to the $CVSROOT.  For the first match that is found, then the remainder
-# of the line is the name of the filter to run.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name "ALL" appears as a regular expression it is always used
-# in addition to the first matching regex or "DEFAULT".

+ 0 - 21
CVSROOT/verifymsg

@@ -1,21 +0,0 @@
-# The "verifymsg" file is used to allow verification of logging
-# information.  It works best when a template (as specified in the
-# rcsinfo file) is provided for the logging procedure.  Given a
-# template with locations for, a bug-id number, a list of people who
-# reviewed the code before it can be checked in, and an external
-# process to catalog the differences that were code reviewed, the
-# following test can be applied to the code:
-#
-#   Making sure that the entered bug-id number is correct.
-#   Validating that the code that was reviewed is indeed the code being
-#       checked in (using the bug-id number or a seperate review
-#       number to identify this particular code set.).
-#
-# If any of the above test failed, then the commit would be aborted.
-#
-# Actions such as mailing a copy of the report to each reviewer are
-# better handled by an entry in the loginfo file.
-#
-# One thing that should be noted is the the ALL keyword is not
-# supported.  There can be only one entry that matches a given
-# repository.

+ 0 - 14
ktigcc/.cvsignore

@@ -1,14 +0,0 @@
-ktigcc
-Makefile
-*.rpm
-ticalc
-TODO.tasks
-*.tar.bz2
-*.tar.gz
-.anjuta
-.tm_project2.cache
-.moc
-.obj
-.ui
-.gdbtkinit
-qrc_icons.cpp

+ 59 - 59
tigcc/archive/flashos.tpr

@@ -1,59 +1,59 @@
-[Settings]
-Archive=1
-Fargo=0
-Use Data Variable=0
-Data Variable=
-Copy Data Variable=1
-Copy Data Variable if Archived=1
-Pack=0
-Packed Variable=
-Project Name=flashos
-GCC Switches=-Os -Wall -W -Wwrite-strings
-GNU Assembler Switches=
-Assembler Switches=-g -t
-Debug Info=0
-Standard Library=1
-Optimize NOPs=1
-Optimize Returns=1
-Optimize Branches=1
-Optimize Moves=1
-Optimize Tests=1
-Optimize Calculations=1
-Remove Unused Sections=1
-Cut Unused Ranges=1
-Binary Output=0
-Command Line=
-Post-Build Process=
-Flash OS=0
-Initialize BSS=1
-Reorder Sections=1
-Merge Constants=1
-
-[Library Options]
-Use TI-89=1
-Use TI-92 Plus=1
-Use V200=1
-Optimize Calc Consts=0
-Use Kernel=0
-Use PreOS=0
-Minimum AMS Version Defined=1
-Minimum AMS Version=1.00
-Unofficial OS Support=0
-Reloc Format=AMS
-ROM Call Format=Direct
-BSS Ref Format=Kernel
-Data Ref Format=Kernel
-Use F-Line Jumps=0
-Use 4-Byte F-Line Jumps=0
-Optimize ROM Calls=0
-Use Internal F-Line Emulator=0
-Use Return Value=0
-Enable Error Return=0
-Save Screen=1
-
-[File Editing]
-Open File=
-
-[Included Files]
-GNU Assembler File 1=startup/_flash_os_header.s
-
+[Settings]
+Archive=1
+Fargo=0
+Use Data Variable=0
+Data Variable=
+Copy Data Variable=1
+Copy Data Variable if Archived=1
+Pack=0
+Packed Variable=
+Project Name=flashos
+GCC Switches=-Os -Wall -W -Wwrite-strings
+GNU Assembler Switches=
+Assembler Switches=-g -t
+Debug Info=0
+Standard Library=1
+Optimize NOPs=1
+Optimize Returns=1
+Optimize Branches=1
+Optimize Moves=1
+Optimize Tests=1
+Optimize Calculations=1
+Remove Unused Sections=1
+Cut Unused Ranges=1
+Binary Output=0
+Command Line=
+Post-Build Process=
+Flash OS=0
+Initialize BSS=1
+Reorder Sections=1
+Merge Constants=1
+
+[Library Options]
+Use TI-89=1
+Use TI-92 Plus=1
+Use V200=1
+Optimize Calc Consts=0
+Use Kernel=0
+Use PreOS=0
+Minimum AMS Version Defined=1
+Minimum AMS Version=1.00
+Unofficial OS Support=0
+Reloc Format=AMS
+ROM Call Format=Direct
+BSS Ref Format=Kernel
+Data Ref Format=Kernel
+Use F-Line Jumps=0
+Use 4-Byte F-Line Jumps=0
+Optimize ROM Calls=0
+Use Internal F-Line Emulator=0
+Use Return Value=0
+Enable Error Return=0
+Save Screen=1
+
+[File Editing]
+Open File=
+
+[Included Files]
+GNU Assembler File 1=startup/_flash_os_header.s
+

+ 32 - 32
tigcc/archive/startup/_flash_os_header.s

@@ -1,32 +1,32 @@
-| Flash OS Update Header
-| The format of this header is documented in TIBFormat.txt of PedroM.
-
-	.xdef __flash_os_header
-
-| Fixed TIB header.
-.section _stl1, "d"
-__tib_header:
-	.word 0x800f                 | Flash OS header
-	.long __ld_program_size+(__tib_header-.) | The encapsulated bytes which follow
-	.word 0x8011                 | First Part of the Product ID
-	.byte __ld_hardware_id       | CALC: $03 for TI-89 / $01 for TI-92+ / $08 for Voyage 200 / $09 for TI-89 Titanium
-	.word 0x8021                 | Third part of Product ID
-	.byte 0x03                   | Default 03. 06 for 2.02 / 1 for 1.01, etc
-	.word 0x8032                 | Fourth part of Product ID
-	.word 0x384F                 | 0038 / 004F (???)
-	.word 0x80A1                 | Second part of Product ID
-	.byte 0x02                   | Version identifier (HW1: >=0, HW2:>=1, V200 or HW3:>=2)
-	.word 0x804D                 | Product Name
-	.byte 0x1D                   | 29: Size of the next field, a non zero terminated string.
-	.ascii "Advanced Mathematics Software" | This should be user-settable at some point...
-	.word 0x0326                 | Product Code ?
-	.word 0x0904                 | Date Stamp.
-        .long __ld_link_time_timestamp
-	.word 0x020D                 | Signature follows
-	.byte 0x40                   | Encrypted TI Date Stamp Signature
-	.space 64                    | Dummy signature for First Encryption - 64 NULL Chars
-	.word 0x807F                 | Actual Flash OS code
-	.long __ld_program_size+(__tib_header-.) | Size
-	.long 0xCCCCCCCC             | Start of OS code (End of Header)
-	.even
- __tib_header_end:
+| Flash OS Update Header
+| The format of this header is documented in TIBFormat.txt of PedroM.
+
+	.xdef __flash_os_header
+
+| Fixed TIB header.
+.section _stl1, "d"
+__tib_header:
+	.word 0x800f                 | Flash OS header
+	.long __ld_program_size+(__tib_header-.) | The encapsulated bytes which follow
+	.word 0x8011                 | First Part of the Product ID
+	.byte __ld_hardware_id       | CALC: $03 for TI-89 / $01 for TI-92+ / $08 for Voyage 200 / $09 for TI-89 Titanium
+	.word 0x8021                 | Third part of Product ID
+	.byte 0x03                   | Default 03. 06 for 2.02 / 1 for 1.01, etc
+	.word 0x8032                 | Fourth part of Product ID
+	.word 0x384F                 | 0038 / 004F (???)
+	.word 0x80A1                 | Second part of Product ID
+	.byte 0x02                   | Version identifier (HW1: >=0, HW2:>=1, V200 or HW3:>=2)
+	.word 0x804D                 | Product Name
+	.byte 0x1D                   | 29: Size of the next field, a non zero terminated string.
+	.ascii "Advanced Mathematics Software" | This should be user-settable at some point...
+	.word 0x0326                 | Product Code ?
+	.word 0x0904                 | Date Stamp.
+        .long __ld_link_time_timestamp
+	.word 0x020D                 | Signature follows
+	.byte 0x40                   | Encrypted TI Date Stamp Signature
+	.space 64                    | Dummy signature for First Encryption - 64 NULL Chars
+	.word 0x807F                 | Actual Flash OS code
+	.long __ld_program_size+(__tib_header-.) | Size
+	.long 0xCCCCCCCC             | Start of OS code (End of Header)
+	.even
+ __tib_header_end:

+ 445 - 445
tigcc/archive/tigcc.tpr

@@ -1,445 +1,445 @@
-[Settings]
-Archive=1
-Pack=0
-Packed Variable=
-Project Name=TIGCCLib
-GCC Switches=-Os -Wall -W -Wwrite-strings -fomit-frame-pointer -D_GENERIC_ARCHIVE
-Assembler Switches=-g -t
-GNU Assembler Switches=
-Debug Info=0
-Standard Library=0
-Command Line=
-Post-Build Process=
-Use Data Variable=0
-Data Variable=
-Copy Data Variable=1
-Copy Data Variable if Archived=1
-Optimize NOPs=1
-Optimize Returns=1
-Optimize Branches=1
-Optimize Moves=1
-Optimize Tests=1
-Optimize Calculations=1
-Remove Unused Sections=1
-Binary Output=0
-Fargo=0
-Flash OS=0
-Cut Unused Ranges=1
-Reorder Sections=1
-Merge Constants=1
-Initialize BSS=1
-
-[Library Options]
-Use TI-89=0
-Use TI-92 Plus=0
-Use V200=0
-Optimize Calc Consts=0
-Use Kernel=0
-Use PreOS=0
-Minimum AMS Version Defined=0
-Minimum AMS Version=1.00
-Unofficial OS Support=0
-Reloc Format=AMS
-ROM Call Format=Direct
-BSS Ref Format=Kernel
-Data Ref Format=Kernel
-Use F-Line Jumps=0
-Use 4-Byte F-Line Jumps=0
-Use Internal F-Line Emulator=0
-Use Return Value=0
-Enable Error Return=0
-Save Screen=0
-Optimize ROM Calls=0
-
-[File Editing]
-Open File=
-
-[Included Files]
-C File 1=qsort.c
-C File 2=bsearch.c
-C File 3=atoi.c
-C File 4=atol.c
-C File 5=strtol.c
-C File 6=strtoul.c
-C File 7=fopen.c
-C File 8=fclose.c
-C File 9=ftell.c
-C File 10=fseek.c
-C File 11=fputc.c
-C File 12=fgetc.c
-C File 13=fwrite.c
-C File 14=fread.c
-C File 15=fgets.c
-C File 16=rename.c
-C File 17=unlink.c
-C File 18=tmpnam.c
-C File 19=fsetbufsize.c
-C File 20=sprite8.c
-C File 21=sprite16.c
-C File 22=sprite32.c
-C File 23=pushfifonode.c
-C File 24=homestorepair.c
-C File 25=dll.c
-C File 26=grayversion.c
-C File 27=findprogramvar.c
-GNU Assembler File 1=bzero.s
-GNU Assembler File 2=bcopy.s
-GNU Assembler File 3=memcpy.s
-GNU Assembler File 4=memmove.s
-GNU Assembler File 5=memset.s
-GNU Assembler File 6=mulsi.s
-GNU Assembler File 7=divsi.s
-GNU Assembler File 8=udivsi.s
-GNU Assembler File 9=modsi.s
-GNU Assembler File 10=umodsi.s
-GNU Assembler File 11=diventry.s
-GNU Assembler File 12=muldi.s
-GNU Assembler File 13=ashldi.s
-GNU Assembler File 14=ashrdi.s
-GNU Assembler File 15=lshrdi.s
-GNU Assembler File 16=divdi.s
-GNU Assembler File 17=udivdi.s
-GNU Assembler File 18=moddi.s
-GNU Assembler File 19=umoddi.s
-GNU Assembler File 20=addbf.s
-GNU Assembler File 21=subbf.s
-GNU Assembler File 22=mulbf.s
-GNU Assembler File 23=divbf.s
-GNU Assembler File 24=negbf.s
-GNU Assembler File 25=floatbf.s
-GNU Assembler File 26=ufloatbf.s
-GNU Assembler File 27=fixbf.s
-GNU Assembler File 28=cmpbf.s
-GNU Assembler File 29=fpentry.s
-GNU Assembler File 30=fpcall.s
-GNU Assembler File 31=bc.s
-GNU Assembler File 32=gray.s
-GNU Assembler File 33=rand.s
-GNU Assembler File 34=realloc.s
-GNU Assembler File 35=calloc.s
-GNU Assembler File 36=clrscr.s
-GNU Assembler File 37=printf.s
-GNU Assembler File 38=fprintf.s
-GNU Assembler File 39=cbprintf.s
-GNU Assembler File 40=fputchar.s
-GNU Assembler File 41=puts.s
-GNU Assembler File 42=strputchar.s
-GNU Assembler File 43=fputs.s
-GNU Assembler File 44=fscanf.s
-GNU Assembler File 45=cbscanf.s
-GNU Assembler File 46=sscanf.s
-GNU Assembler File 47=fgetchar.s
-GNU Assembler File 48=fgetchrc.s
-GNU Assembler File 49=gets.s
-GNU Assembler File 50=getsn.s
-GNU Assembler File 51=atof.s
-GNU Assembler File 52=push_shortint.s
-GNU Assembler File 53=push_longint.s
-GNU Assembler File 54=push_longlongint.s
-GNU Assembler File 55=nocallback.s
-GNU Assembler File 56=kbd_queue.s
-GNU Assembler File 57=registertimer.s
-GNU Assembler File 58=freetimer.s
-GNU Assembler File 59=getappid.s
-GNU Assembler File 60=enter_ghost_space.s
-GNU Assembler File 61=enter_ghost_space_1.s
-GNU Assembler File 62=enter_ghost_space_2.s
-GNU Assembler File 63=hw_version.s
-GNU Assembler File 64=exit.s
-GNU Assembler File 65=atexit.s
-GNU Assembler File 66=assert.s
-GNU Assembler File 67=rowread.s
-GNU Assembler File 68=isextalnum.s
-GNU Assembler File 69=isextpunct.s
-GNU Assembler File 70=homestore.s
-GNU Assembler File 71=dummyhandler.s
-GNU Assembler File 72=malloc_throw.s
-GNU Assembler File 73=calloc_throw.s
-GNU Assembler File 74=realloc_throw.s
-GNU Assembler File 75=hrealloc_throw.s
-GNU Assembler File 76=loaddll_throw.s
-GNU Assembler File 77=gray_throw.s
-GNU Assembler File 78=prgstart.s
-GNU Assembler File 79=trampoffset.s
-GNU Assembler File 80=startup\_kernel_program_header.s
-GNU Assembler File 80 Folder=startup
-GNU Assembler File 81=startup\_preos_program_header.s
-GNU Assembler File 81 Folder=startup
-GNU Assembler File 82=startup\_kernel_library_header.s
-GNU Assembler File 82 Folder=startup
-GNU Assembler File 83=startup\_preos_library_header.s
-GNU Assembler File 83 Folder=startup
-GNU Assembler File 84=startup\_kernel_program_stub.s
-GNU Assembler File 84 Folder=startup
-GNU Assembler File 85=startup\_preos_program_stub.s
-GNU Assembler File 85 Folder=startup
-GNU Assembler File 86=startup\_kernel_library_stub.s
-GNU Assembler File 86 Folder=startup
-GNU Assembler File 87=startup\_kernel_bss_table.s
-GNU Assembler File 87 Folder=startup
-GNU Assembler File 88=startup\_kernel_export_table.s
-GNU Assembler File 88 Folder=startup
-GNU Assembler File 89=startup\_nostub_comment_header.s
-GNU Assembler File 89 Folder=startup
-GNU Assembler File 90=startup\_startup_entry_point.s
-GNU Assembler File 90 Folder=startup
-GNU Assembler File 91=startup\_execute_in_ghost_space.s
-GNU Assembler File 91 Folder=startup
-GNU Assembler File 92=startup\_kernel_format_relocs.s
-GNU Assembler File 92 Folder=startup
-GNU Assembler File 93=startup\_compressed_format_relocs.s
-GNU Assembler File 93 Folder=startup
-GNU Assembler File 94=startup\_mlink_format_relocs.s
-GNU Assembler File 94 Folder=startup
-GNU Assembler File 95=startup\_get_jump_table.s
-GNU Assembler File 95 Folder=startup
-GNU Assembler File 96=startup\_detect_calc.s
-GNU Assembler File 96 Folder=startup
-GNU Assembler File 97=startup\_fill_calculator_var.s
-GNU Assembler File 97 Folder=startup
-GNU Assembler File 98=startup\_test_for_89.s
-GNU Assembler File 98 Folder=startup
-GNU Assembler File 99=startup\_test_for_92p.s
-GNU Assembler File 99 Folder=startup
-GNU Assembler File 100=startup\_test_for_v200.s
-GNU Assembler File 100 Folder=startup
-GNU Assembler File 101=startup\_test_for_any_calc.s
-GNU Assembler File 101 Folder=startup
-GNU Assembler File 102=startup\_test_for_specific_calc_1.s
-GNU Assembler File 102 Folder=startup
-GNU Assembler File 103=startup\_test_for_specific_calc_2.s
-GNU Assembler File 103 Folder=startup
-GNU Assembler File 104=startup\_test_against_specific_calc_1.s
-GNU Assembler File 104 Folder=startup
-GNU Assembler File 105=startup\_test_against_specific_calc_2.s
-GNU Assembler File 105 Folder=startup
-GNU Assembler File 106=startup\_wrong_calc.s
-GNU Assembler File 106 Folder=startup
-GNU Assembler File 107=startup\_calc_is_ok_1.s
-GNU Assembler File 107 Folder=startup
-GNU Assembler File 108=startup\_reject_unofficial_os_1.s
-GNU Assembler File 108 Folder=startup
-GNU Assembler File 109=startup\_reject_unofficial_os_2.s
-GNU Assembler File 109 Folder=startup
-GNU Assembler File 110=startup\_reject_unofficial_os_3.s
-GNU Assembler File 110 Folder=startup
-GNU Assembler File 111=startup\_compare_ams_1_01.s
-GNU Assembler File 111 Folder=startup
-GNU Assembler File 112=startup\_compare_ams_1_05.s
-GNU Assembler File 112 Folder=startup
-GNU Assembler File 113=startup\_compare_ams_2_00.s
-GNU Assembler File 113 Folder=startup
-GNU Assembler File 114=startup\_compare_ams_2_01.s
-GNU Assembler File 114 Folder=startup
-GNU Assembler File 115=startup\_compare_ams_2_02.s
-GNU Assembler File 115 Folder=startup
-GNU Assembler File 116=startup\_compare_ams_2_03.s
-GNU Assembler File 116 Folder=startup
-GNU Assembler File 117=startup\_compare_ams_2_04.s
-GNU Assembler File 117 Folder=startup
-GNU Assembler File 118=startup\_compare_ams_2_05.s
-GNU Assembler File 118 Folder=startup
-GNU Assembler File 119=startup\_compare_ams_2_07.s
-GNU Assembler File 119 Folder=startup
-GNU Assembler File 120=startup\_compare_ams_2_08.s
-GNU Assembler File 120 Folder=startup
-GNU Assembler File 121=startup\_compare_ams_2_09.s
-GNU Assembler File 121 Folder=startup
-GNU Assembler File 122=startup\_compare_ams_3_00.s
-GNU Assembler File 122 Folder=startup
-GNU Assembler File 123=startup\_detect_ams.s
-GNU Assembler File 123 Folder=startup
-GNU Assembler File 124=startup\_ams_too_low.s
-GNU Assembler File 124 Folder=startup
-GNU Assembler File 125=startup\_nostub_failure_message.s
-GNU Assembler File 125 Folder=startup
-GNU Assembler File 126=startup\_kernel_failure_message.s
-GNU Assembler File 126 Folder=startup
-GNU Assembler File 127=startup\_ams_version_is_ok.s
-GNU Assembler File 127 Folder=startup
-GNU Assembler File 128=startup\_detect_ams_1_05.s
-GNU Assembler File 128 Folder=startup
-GNU Assembler File 129=startup\_detect_ams_2_03.s
-GNU Assembler File 129 Folder=startup
-GNU Assembler File 130=startup\_detect_ams_2_08.s
-GNU Assembler File 130 Folder=startup
-GNU Assembler File 131=startup\_detect_ams_2_09.s
-GNU Assembler File 131 Folder=startup
-GNU Assembler File 132=startup\_calc_is_ok_2.s
-GNU Assembler File 132 Folder=startup
-GNU Assembler File 133=startup\_reg_relative_a2.s
-GNU Assembler File 133 Folder=startup
-GNU Assembler File 134=startup\_reg_relative_a3.s
-GNU Assembler File 134 Folder=startup
-GNU Assembler File 135=startup\_reg_relative_a4.s
-GNU Assembler File 135 Folder=startup
-GNU Assembler File 136=startup\_reg_relative_a5.s
-GNU Assembler File 136 Folder=startup
-GNU Assembler File 137=startup\_complex_main_support_file.s
-GNU Assembler File 137 Folder=startup
-GNU Assembler File 138=startup\_save_all_regs.s
-GNU Assembler File 138 Folder=startup
-GNU Assembler File 139=startup\_save_d3d5.s
-GNU Assembler File 139 Folder=startup
-GNU Assembler File 140=startup\_save_d3d5_a5.s
-GNU Assembler File 140 Folder=startup
-GNU Assembler File 141=startup\_save_a5.s
-GNU Assembler File 141 Folder=startup
-GNU Assembler File 142=startup\_optimize_rom_calls.s
-GNU Assembler File 142 Folder=startup
-GNU Assembler File 143=startup\_set_file_in_use_bit.s
-GNU Assembler File 143 Folder=startup
-GNU Assembler File 144=startup\_kernel_format_rom_calls.s
-GNU Assembler File 144 Folder=startup
-GNU Assembler File 145=startup\_compressed_format_rom_calls.s
-GNU Assembler File 145 Folder=startup
-GNU Assembler File 146=startup\_mlink_format_rom_calls.s
-GNU Assembler File 146 Folder=startup
-GNU Assembler File 147=startup\_kernel_format_data_var.s
-GNU Assembler File 147 Folder=startup
-GNU Assembler File 148=startup\_kernel_format_data_var_test.s
-GNU Assembler File 148 Folder=startup
-GNU Assembler File 149=startup\_kernel_format_data_var_copy.s
-GNU Assembler File 149 Folder=startup
-GNU Assembler File 150=startup\_kernel_format_data_var_direct.s
-GNU Assembler File 150 Folder=startup
-GNU Assembler File 151=startup\_kernel_format_data_var_msg.s
-GNU Assembler File 151 Folder=startup
-GNU Assembler File 152=startup\_compressed_format_data_var.s
-GNU Assembler File 152 Folder=startup
-GNU Assembler File 153=startup\_compressed_format_data_var_test.s
-GNU Assembler File 153 Folder=startup
-GNU Assembler File 154=startup\_compressed_format_data_var_copy.s
-GNU Assembler File 154 Folder=startup
-GNU Assembler File 155=startup\_compressed_format_data_var_direct.s
-GNU Assembler File 155 Folder=startup
-GNU Assembler File 156=startup\_compressed_format_data_var_msg.s
-GNU Assembler File 156 Folder=startup
-GNU Assembler File 157=startup\_mlink_format_data_var.s
-GNU Assembler File 157 Folder=startup
-GNU Assembler File 158=startup\_mlink_format_data_var_test.s
-GNU Assembler File 158 Folder=startup
-GNU Assembler File 159=startup\_mlink_format_data_var_copy.s
-GNU Assembler File 159 Folder=startup
-GNU Assembler File 160=startup\_mlink_format_data_var_direct.s
-GNU Assembler File 160 Folder=startup
-GNU Assembler File 161=startup\_mlink_format_data_var_msg.s
-GNU Assembler File 161 Folder=startup
-GNU Assembler File 162=startup\_data_var_name_start.s
-GNU Assembler File 162 Folder=startup
-GNU Assembler File 163=startup\_data_var_msg.s
-GNU Assembler File 163 Folder=startup
-GNU Assembler File 164=startup\_kernel_format_bss.s
-GNU Assembler File 164 Folder=startup
-GNU Assembler File 165=startup\_compressed_format_bss.s
-GNU Assembler File 165 Folder=startup
-GNU Assembler File 166=startup\_mlink_format_bss.s
-GNU Assembler File 166 Folder=startup
-GNU Assembler File 167=startup\_out_of_memory.s
-GNU Assembler File 167 Folder=startup
-GNU Assembler File 168=startup\_error_msg.s
-GNU Assembler File 168 Folder=startup
-GNU Assembler File 169=startup\_nostub_error_msg.s
-GNU Assembler File 169 Folder=startup
-GNU Assembler File 170=startup\_kernel_error_msg.s
-GNU Assembler File 170 Folder=startup
-GNU Assembler File 171=startup\_smart_error_msg.s
-GNU Assembler File 171 Folder=startup
-GNU Assembler File 172=startup\_save_screen.s
-GNU Assembler File 172 Folder=startup
-GNU Assembler File 173=startup\_save_screen_1.s
-GNU Assembler File 173 Folder=startup
-GNU Assembler File 174=startup\_save_screen_2.s
-GNU Assembler File 174 Folder=startup
-GNU Assembler File 175=startup\_fline_internal_emulator.s
-GNU Assembler File 175 Folder=startup
-GNU Assembler File 176=startup\_fline_internal_emulator_1_r.s
-GNU Assembler File 176 Folder=startup
-GNU Assembler File 177=startup\_fline_internal_emulator_1_j4.s
-GNU Assembler File 177 Folder=startup
-GNU Assembler File 178=startup\_fline_internal_emulator_1_j6.s
-GNU Assembler File 178 Folder=startup
-GNU Assembler File 179=startup\_fline_internal_emulator_2_j6.s
-GNU Assembler File 179 Folder=startup
-GNU Assembler File 180=startup\_fline_internal_emulator_2_r.s
-GNU Assembler File 180 Folder=startup
-GNU Assembler File 181=startup\_fline_internal_emulator_3_j6.s
-GNU Assembler File 181 Folder=startup
-GNU Assembler File 182=startup\_fline_internal_emulator_3_r_j6.s
-GNU Assembler File 182 Folder=startup
-GNU Assembler File 183=startup\_fline_internal_emulator_3_j4.s
-GNU Assembler File 183 Folder=startup
-GNU Assembler File 184=startup\_fline_internal_emulator_3_r_j4.s
-GNU Assembler File 184 Folder=startup
-GNU Assembler File 185=startup\_fline_internal_emulator_3_r.s
-GNU Assembler File 185 Folder=startup
-GNU Assembler File 186=startup\_fline_internal_emulator_4_j6.s
-GNU Assembler File 186 Folder=startup
-GNU Assembler File 187=startup\_fline_internal_emulator_4_j6_u.s
-GNU Assembler File 187 Folder=startup
-GNU Assembler File 188=startup\_fline_internal_emulator_4_j6_s.s
-GNU Assembler File 188 Folder=startup
-GNU Assembler File 189=startup\_fline_internal_emulator_4_j4.s
-GNU Assembler File 189 Folder=startup
-GNU Assembler File 190=startup\_fline_internal_emulator_4_j4_u.s
-GNU Assembler File 190 Folder=startup
-GNU Assembler File 191=startup\_fline_internal_emulator_4_j4_s.s
-GNU Assembler File 191 Folder=startup
-GNU Assembler File 192=startup\_fline_internal_emulator_4_r.s
-GNU Assembler File 192 Folder=startup
-GNU Assembler File 193=startup\_constructed_jsr.s
-GNU Assembler File 193 Folder=startup
-GNU Assembler File 194=startup\_constructed_jmp.s
-GNU Assembler File 194 Folder=startup
-GNU Assembler File 195=startup\_error_return_support.s
-GNU Assembler File 195 Folder=startup
-GNU Assembler File 196=startup\_error_return_support_ams_1.s
-GNU Assembler File 196 Folder=startup
-GNU Assembler File 197=startup\_error_return_support_ams_x.s
-GNU Assembler File 197 Folder=startup
-GNU Assembler File 198=startup\_initialize_bss.s
-GNU Assembler File 198 Folder=startup
-GNU Assembler File 199=startup\_initialize_bss_1.s
-GNU Assembler File 199 Folder=startup
-GNU Assembler File 200=startup\_initialize_bss_2.s
-GNU Assembler File 200 Folder=startup
-GNU Assembler File 201=startup\_handle_constructors.s
-GNU Assembler File 201 Folder=startup
-GNU Assembler File 202=startup\_save_all_registers_main.s
-GNU Assembler File 202 Folder=startup
-GNU Assembler File 203=startup\_save_the_sp.s
-GNU Assembler File 203 Folder=startup
-GNU Assembler File 204=startup\_save_the_sp_complex.s
-GNU Assembler File 204 Folder=startup
-GNU Assembler File 205=startup\_call_user_main.s
-GNU Assembler File 205 Folder=startup
-GNU Assembler File 206=startup\_simple_main_jump.s
-GNU Assembler File 206 Folder=startup
-GNU Assembler File 207=startup\_handle_destructors.s
-GNU Assembler File 207 Folder=startup
-GNU Assembler File 208=startup\_nostub_retval.s
-GNU Assembler File 208 Folder=startup
-GNU Assembler File 209=startup\_nostub_retval_var.s
-GNU Assembler File 209 Folder=startup
-GNU Assembler File 210=startup\_kernel_retval.s
-GNU Assembler File 210 Folder=startup
-GNU Assembler File 211=startup\_kernel_retval_var.s
-GNU Assembler File 211 Folder=startup
-GNU Assembler File 212=startup\_return_from_program.s
-GNU Assembler File 212 Folder=startup
-GNU Assembler File 213=startup\_call_function_vector.s
-GNU Assembler File 213 Folder=startup
-GNU Assembler File 214=startup\_compressed_format_decoding.s
-GNU Assembler File 214 Folder=startup
-GNU Assembler File 215=startup\_mlink_format_decoding.s
-GNU Assembler File 215 Folder=startup
-GNU Assembler File 216=startup\_calculator.s
-GNU Assembler File 216 Folder=startup
-GNU Assembler File 217=startup\_save_sp.s
-GNU Assembler File 217 Folder=startup
-GNU Assembler File 218=startup\_reference_symbols.s
-GNU Assembler File 218 Folder=startup
-Text File 1=License.txt
-Text File 2=startup\Startup.txt
-Text File 2 Folder=startup
-
+[Settings]
+Archive=1
+Pack=0
+Packed Variable=
+Project Name=TIGCCLib
+GCC Switches=-Os -Wall -W -Wwrite-strings -fomit-frame-pointer -D_GENERIC_ARCHIVE
+Assembler Switches=-g -t
+GNU Assembler Switches=
+Debug Info=0
+Standard Library=0
+Command Line=
+Post-Build Process=
+Use Data Variable=0
+Data Variable=
+Copy Data Variable=1
+Copy Data Variable if Archived=1
+Optimize NOPs=1
+Optimize Returns=1
+Optimize Branches=1
+Optimize Moves=1
+Optimize Tests=1
+Optimize Calculations=1
+Remove Unused Sections=1
+Binary Output=0
+Fargo=0
+Flash OS=0
+Cut Unused Ranges=1
+Reorder Sections=1
+Merge Constants=1
+Initialize BSS=1
+
+[Library Options]
+Use TI-89=0
+Use TI-92 Plus=0
+Use V200=0
+Optimize Calc Consts=0
+Use Kernel=0
+Use PreOS=0
+Minimum AMS Version Defined=0
+Minimum AMS Version=1.00
+Unofficial OS Support=0
+Reloc Format=AMS
+ROM Call Format=Direct
+BSS Ref Format=Kernel
+Data Ref Format=Kernel
+Use F-Line Jumps=0
+Use 4-Byte F-Line Jumps=0
+Use Internal F-Line Emulator=0
+Use Return Value=0
+Enable Error Return=0
+Save Screen=0
+Optimize ROM Calls=0
+
+[File Editing]
+Open File=
+
+[Included Files]
+C File 1=qsort.c
+C File 2=bsearch.c
+C File 3=atoi.c
+C File 4=atol.c
+C File 5=strtol.c
+C File 6=strtoul.c
+C File 7=fopen.c
+C File 8=fclose.c
+C File 9=ftell.c
+C File 10=fseek.c
+C File 11=fputc.c
+C File 12=fgetc.c
+C File 13=fwrite.c
+C File 14=fread.c
+C File 15=fgets.c
+C File 16=rename.c
+C File 17=unlink.c
+C File 18=tmpnam.c
+C File 19=fsetbufsize.c
+C File 20=sprite8.c
+C File 21=sprite16.c
+C File 22=sprite32.c
+C File 23=pushfifonode.c
+C File 24=homestorepair.c
+C File 25=dll.c
+C File 26=grayversion.c
+C File 27=findprogramvar.c
+GNU Assembler File 1=bzero.s
+GNU Assembler File 2=bcopy.s
+GNU Assembler File 3=memcpy.s
+GNU Assembler File 4=memmove.s
+GNU Assembler File 5=memset.s
+GNU Assembler File 6=mulsi.s
+GNU Assembler File 7=divsi.s
+GNU Assembler File 8=udivsi.s
+GNU Assembler File 9=modsi.s
+GNU Assembler File 10=umodsi.s
+GNU Assembler File 11=diventry.s
+GNU Assembler File 12=muldi.s
+GNU Assembler File 13=ashldi.s
+GNU Assembler File 14=ashrdi.s
+GNU Assembler File 15=lshrdi.s
+GNU Assembler File 16=divdi.s
+GNU Assembler File 17=udivdi.s
+GNU Assembler File 18=moddi.s
+GNU Assembler File 19=umoddi.s
+GNU Assembler File 20=addbf.s
+GNU Assembler File 21=subbf.s
+GNU Assembler File 22=mulbf.s
+GNU Assembler File 23=divbf.s
+GNU Assembler File 24=negbf.s
+GNU Assembler File 25=floatbf.s
+GNU Assembler File 26=ufloatbf.s
+GNU Assembler File 27=fixbf.s
+GNU Assembler File 28=cmpbf.s
+GNU Assembler File 29=fpentry.s
+GNU Assembler File 30=fpcall.s
+GNU Assembler File 31=bc.s
+GNU Assembler File 32=gray.s
+GNU Assembler File 33=rand.s
+GNU Assembler File 34=realloc.s
+GNU Assembler File 35=calloc.s
+GNU Assembler File 36=clrscr.s
+GNU Assembler File 37=printf.s
+GNU Assembler File 38=fprintf.s
+GNU Assembler File 39=cbprintf.s
+GNU Assembler File 40=fputchar.s
+GNU Assembler File 41=puts.s
+GNU Assembler File 42=strputchar.s
+GNU Assembler File 43=fputs.s
+GNU Assembler File 44=fscanf.s
+GNU Assembler File 45=cbscanf.s
+GNU Assembler File 46=sscanf.s
+GNU Assembler File 47=fgetchar.s
+GNU Assembler File 48=fgetchrc.s
+GNU Assembler File 49=gets.s
+GNU Assembler File 50=getsn.s
+GNU Assembler File 51=atof.s
+GNU Assembler File 52=push_shortint.s
+GNU Assembler File 53=push_longint.s
+GNU Assembler File 54=push_longlongint.s
+GNU Assembler File 55=nocallback.s
+GNU Assembler File 56=kbd_queue.s
+GNU Assembler File 57=registertimer.s
+GNU Assembler File 58=freetimer.s
+GNU Assembler File 59=getappid.s
+GNU Assembler File 60=enter_ghost_space.s
+GNU Assembler File 61=enter_ghost_space_1.s
+GNU Assembler File 62=enter_ghost_space_2.s
+GNU Assembler File 63=hw_version.s
+GNU Assembler File 64=exit.s
+GNU Assembler File 65=atexit.s
+GNU Assembler File 66=assert.s
+GNU Assembler File 67=rowread.s
+GNU Assembler File 68=isextalnum.s
+GNU Assembler File 69=isextpunct.s
+GNU Assembler File 70=homestore.s
+GNU Assembler File 71=dummyhandler.s
+GNU Assembler File 72=malloc_throw.s
+GNU Assembler File 73=calloc_throw.s
+GNU Assembler File 74=realloc_throw.s
+GNU Assembler File 75=hrealloc_throw.s
+GNU Assembler File 76=loaddll_throw.s
+GNU Assembler File 77=gray_throw.s
+GNU Assembler File 78=prgstart.s
+GNU Assembler File 79=trampoffset.s
+GNU Assembler File 80=startup\_kernel_program_header.s
+GNU Assembler File 80 Folder=startup
+GNU Assembler File 81=startup\_preos_program_header.s
+GNU Assembler File 81 Folder=startup
+GNU Assembler File 82=startup\_kernel_library_header.s
+GNU Assembler File 82 Folder=startup
+GNU Assembler File 83=startup\_preos_library_header.s
+GNU Assembler File 83 Folder=startup
+GNU Assembler File 84=startup\_kernel_program_stub.s
+GNU Assembler File 84 Folder=startup
+GNU Assembler File 85=startup\_preos_program_stub.s
+GNU Assembler File 85 Folder=startup
+GNU Assembler File 86=startup\_kernel_library_stub.s
+GNU Assembler File 86 Folder=startup
+GNU Assembler File 87=startup\_kernel_bss_table.s
+GNU Assembler File 87 Folder=startup
+GNU Assembler File 88=startup\_kernel_export_table.s
+GNU Assembler File 88 Folder=startup
+GNU Assembler File 89=startup\_nostub_comment_header.s
+GNU Assembler File 89 Folder=startup
+GNU Assembler File 90=startup\_startup_entry_point.s
+GNU Assembler File 90 Folder=startup
+GNU Assembler File 91=startup\_execute_in_ghost_space.s
+GNU Assembler File 91 Folder=startup
+GNU Assembler File 92=startup\_kernel_format_relocs.s
+GNU Assembler File 92 Folder=startup
+GNU Assembler File 93=startup\_compressed_format_relocs.s
+GNU Assembler File 93 Folder=startup
+GNU Assembler File 94=startup\_mlink_format_relocs.s
+GNU Assembler File 94 Folder=startup
+GNU Assembler File 95=startup\_get_jump_table.s
+GNU Assembler File 95 Folder=startup
+GNU Assembler File 96=startup\_detect_calc.s
+GNU Assembler File 96 Folder=startup
+GNU Assembler File 97=startup\_fill_calculator_var.s
+GNU Assembler File 97 Folder=startup
+GNU Assembler File 98=startup\_test_for_89.s
+GNU Assembler File 98 Folder=startup
+GNU Assembler File 99=startup\_test_for_92p.s
+GNU Assembler File 99 Folder=startup
+GNU Assembler File 100=startup\_test_for_v200.s
+GNU Assembler File 100 Folder=startup
+GNU Assembler File 101=startup\_test_for_any_calc.s
+GNU Assembler File 101 Folder=startup
+GNU Assembler File 102=startup\_test_for_specific_calc_1.s
+GNU Assembler File 102 Folder=startup
+GNU Assembler File 103=startup\_test_for_specific_calc_2.s
+GNU Assembler File 103 Folder=startup
+GNU Assembler File 104=startup\_test_against_specific_calc_1.s
+GNU Assembler File 104 Folder=startup
+GNU Assembler File 105=startup\_test_against_specific_calc_2.s
+GNU Assembler File 105 Folder=startup
+GNU Assembler File 106=startup\_wrong_calc.s
+GNU Assembler File 106 Folder=startup
+GNU Assembler File 107=startup\_calc_is_ok_1.s
+GNU Assembler File 107 Folder=startup
+GNU Assembler File 108=startup\_reject_unofficial_os_1.s
+GNU Assembler File 108 Folder=startup
+GNU Assembler File 109=startup\_reject_unofficial_os_2.s
+GNU Assembler File 109 Folder=startup
+GNU Assembler File 110=startup\_reject_unofficial_os_3.s
+GNU Assembler File 110 Folder=startup
+GNU Assembler File 111=startup\_compare_ams_1_01.s
+GNU Assembler File 111 Folder=startup
+GNU Assembler File 112=startup\_compare_ams_1_05.s
+GNU Assembler File 112 Folder=startup
+GNU Assembler File 113=startup\_compare_ams_2_00.s
+GNU Assembler File 113 Folder=startup
+GNU Assembler File 114=startup\_compare_ams_2_01.s
+GNU Assembler File 114 Folder=startup
+GNU Assembler File 115=startup\_compare_ams_2_02.s
+GNU Assembler File 115 Folder=startup
+GNU Assembler File 116=startup\_compare_ams_2_03.s
+GNU Assembler File 116 Folder=startup
+GNU Assembler File 117=startup\_compare_ams_2_04.s
+GNU Assembler File 117 Folder=startup
+GNU Assembler File 118=startup\_compare_ams_2_05.s
+GNU Assembler File 118 Folder=startup
+GNU Assembler File 119=startup\_compare_ams_2_07.s
+GNU Assembler File 119 Folder=startup
+GNU Assembler File 120=startup\_compare_ams_2_08.s
+GNU Assembler File 120 Folder=startup
+GNU Assembler File 121=startup\_compare_ams_2_09.s
+GNU Assembler File 121 Folder=startup
+GNU Assembler File 122=startup\_compare_ams_3_00.s
+GNU Assembler File 122 Folder=startup
+GNU Assembler File 123=startup\_detect_ams.s
+GNU Assembler File 123 Folder=startup
+GNU Assembler File 124=startup\_ams_too_low.s
+GNU Assembler File 124 Folder=startup
+GNU Assembler File 125=startup\_nostub_failure_message.s
+GNU Assembler File 125 Folder=startup
+GNU Assembler File 126=startup\_kernel_failure_message.s
+GNU Assembler File 126 Folder=startup
+GNU Assembler File 127=startup\_ams_version_is_ok.s
+GNU Assembler File 127 Folder=startup
+GNU Assembler File 128=startup\_detect_ams_1_05.s
+GNU Assembler File 128 Folder=startup
+GNU Assembler File 129=startup\_detect_ams_2_03.s
+GNU Assembler File 129 Folder=startup
+GNU Assembler File 130=startup\_detect_ams_2_08.s
+GNU Assembler File 130 Folder=startup
+GNU Assembler File 131=startup\_detect_ams_2_09.s
+GNU Assembler File 131 Folder=startup
+GNU Assembler File 132=startup\_calc_is_ok_2.s
+GNU Assembler File 132 Folder=startup
+GNU Assembler File 133=startup\_reg_relative_a2.s
+GNU Assembler File 133 Folder=startup
+GNU Assembler File 134=startup\_reg_relative_a3.s
+GNU Assembler File 134 Folder=startup
+GNU Assembler File 135=startup\_reg_relative_a4.s
+GNU Assembler File 135 Folder=startup
+GNU Assembler File 136=startup\_reg_relative_a5.s
+GNU Assembler File 136 Folder=startup
+GNU Assembler File 137=startup\_complex_main_support_file.s
+GNU Assembler File 137 Folder=startup
+GNU Assembler File 138=startup\_save_all_regs.s
+GNU Assembler File 138 Folder=startup
+GNU Assembler File 139=startup\_save_d3d5.s
+GNU Assembler File 139 Folder=startup
+GNU Assembler File 140=startup\_save_d3d5_a5.s
+GNU Assembler File 140 Folder=startup
+GNU Assembler File 141=startup\_save_a5.s
+GNU Assembler File 141 Folder=startup
+GNU Assembler File 142=startup\_optimize_rom_calls.s
+GNU Assembler File 142 Folder=startup
+GNU Assembler File 143=startup\_set_file_in_use_bit.s
+GNU Assembler File 143 Folder=startup
+GNU Assembler File 144=startup\_kernel_format_rom_calls.s
+GNU Assembler File 144 Folder=startup
+GNU Assembler File 145=startup\_compressed_format_rom_calls.s
+GNU Assembler File 145 Folder=startup
+GNU Assembler File 146=startup\_mlink_format_rom_calls.s
+GNU Assembler File 146 Folder=startup
+GNU Assembler File 147=startup\_kernel_format_data_var.s
+GNU Assembler File 147 Folder=startup
+GNU Assembler File 148=startup\_kernel_format_data_var_test.s
+GNU Assembler File 148 Folder=startup
+GNU Assembler File 149=startup\_kernel_format_data_var_copy.s
+GNU Assembler File 149 Folder=startup
+GNU Assembler File 150=startup\_kernel_format_data_var_direct.s
+GNU Assembler File 150 Folder=startup
+GNU Assembler File 151=startup\_kernel_format_data_var_msg.s
+GNU Assembler File 151 Folder=startup
+GNU Assembler File 152=startup\_compressed_format_data_var.s
+GNU Assembler File 152 Folder=startup
+GNU Assembler File 153=startup\_compressed_format_data_var_test.s
+GNU Assembler File 153 Folder=startup
+GNU Assembler File 154=startup\_compressed_format_data_var_copy.s
+GNU Assembler File 154 Folder=startup
+GNU Assembler File 155=startup\_compressed_format_data_var_direct.s
+GNU Assembler File 155 Folder=startup
+GNU Assembler File 156=startup\_compressed_format_data_var_msg.s
+GNU Assembler File 156 Folder=startup
+GNU Assembler File 157=startup\_mlink_format_data_var.s
+GNU Assembler File 157 Folder=startup
+GNU Assembler File 158=startup\_mlink_format_data_var_test.s
+GNU Assembler File 158 Folder=startup
+GNU Assembler File 159=startup\_mlink_format_data_var_copy.s
+GNU Assembler File 159 Folder=startup
+GNU Assembler File 160=startup\_mlink_format_data_var_direct.s
+GNU Assembler File 160 Folder=startup
+GNU Assembler File 161=startup\_mlink_format_data_var_msg.s
+GNU Assembler File 161 Folder=startup
+GNU Assembler File 162=startup\_data_var_name_start.s
+GNU Assembler File 162 Folder=startup
+GNU Assembler File 163=startup\_data_var_msg.s
+GNU Assembler File 163 Folder=startup
+GNU Assembler File 164=startup\_kernel_format_bss.s
+GNU Assembler File 164 Folder=startup
+GNU Assembler File 165=startup\_compressed_format_bss.s
+GNU Assembler File 165 Folder=startup
+GNU Assembler File 166=startup\_mlink_format_bss.s
+GNU Assembler File 166 Folder=startup
+GNU Assembler File 167=startup\_out_of_memory.s
+GNU Assembler File 167 Folder=startup
+GNU Assembler File 168=startup\_error_msg.s
+GNU Assembler File 168 Folder=startup
+GNU Assembler File 169=startup\_nostub_error_msg.s
+GNU Assembler File 169 Folder=startup
+GNU Assembler File 170=startup\_kernel_error_msg.s
+GNU Assembler File 170 Folder=startup
+GNU Assembler File 171=startup\_smart_error_msg.s
+GNU Assembler File 171 Folder=startup
+GNU Assembler File 172=startup\_save_screen.s
+GNU Assembler File 172 Folder=startup
+GNU Assembler File 173=startup\_save_screen_1.s
+GNU Assembler File 173 Folder=startup
+GNU Assembler File 174=startup\_save_screen_2.s
+GNU Assembler File 174 Folder=startup
+GNU Assembler File 175=startup\_fline_internal_emulator.s
+GNU Assembler File 175 Folder=startup
+GNU Assembler File 176=startup\_fline_internal_emulator_1_r.s
+GNU Assembler File 176 Folder=startup
+GNU Assembler File 177=startup\_fline_internal_emulator_1_j4.s
+GNU Assembler File 177 Folder=startup
+GNU Assembler File 178=startup\_fline_internal_emulator_1_j6.s
+GNU Assembler File 178 Folder=startup
+GNU Assembler File 179=startup\_fline_internal_emulator_2_j6.s
+GNU Assembler File 179 Folder=startup
+GNU Assembler File 180=startup\_fline_internal_emulator_2_r.s
+GNU Assembler File 180 Folder=startup
+GNU Assembler File 181=startup\_fline_internal_emulator_3_j6.s
+GNU Assembler File 181 Folder=startup
+GNU Assembler File 182=startup\_fline_internal_emulator_3_r_j6.s
+GNU Assembler File 182 Folder=startup
+GNU Assembler File 183=startup\_fline_internal_emulator_3_j4.s
+GNU Assembler File 183 Folder=startup
+GNU Assembler File 184=startup\_fline_internal_emulator_3_r_j4.s
+GNU Assembler File 184 Folder=startup
+GNU Assembler File 185=startup\_fline_internal_emulator_3_r.s
+GNU Assembler File 185 Folder=startup
+GNU Assembler File 186=startup\_fline_internal_emulator_4_j6.s
+GNU Assembler File 186 Folder=startup
+GNU Assembler File 187=startup\_fline_internal_emulator_4_j6_u.s
+GNU Assembler File 187 Folder=startup
+GNU Assembler File 188=startup\_fline_internal_emulator_4_j6_s.s
+GNU Assembler File 188 Folder=startup
+GNU Assembler File 189=startup\_fline_internal_emulator_4_j4.s
+GNU Assembler File 189 Folder=startup
+GNU Assembler File 190=startup\_fline_internal_emulator_4_j4_u.s
+GNU Assembler File 190 Folder=startup
+GNU Assembler File 191=startup\_fline_internal_emulator_4_j4_s.s
+GNU Assembler File 191 Folder=startup
+GNU Assembler File 192=startup\_fline_internal_emulator_4_r.s
+GNU Assembler File 192 Folder=startup
+GNU Assembler File 193=startup\_constructed_jsr.s
+GNU Assembler File 193 Folder=startup
+GNU Assembler File 194=startup\_constructed_jmp.s
+GNU Assembler File 194 Folder=startup
+GNU Assembler File 195=startup\_error_return_support.s
+GNU Assembler File 195 Folder=startup
+GNU Assembler File 196=startup\_error_return_support_ams_1.s
+GNU Assembler File 196 Folder=startup
+GNU Assembler File 197=startup\_error_return_support_ams_x.s
+GNU Assembler File 197 Folder=startup
+GNU Assembler File 198=startup\_initialize_bss.s
+GNU Assembler File 198 Folder=startup
+GNU Assembler File 199=startup\_initialize_bss_1.s
+GNU Assembler File 199 Folder=startup
+GNU Assembler File 200=startup\_initialize_bss_2.s
+GNU Assembler File 200 Folder=startup
+GNU Assembler File 201=startup\_handle_constructors.s
+GNU Assembler File 201 Folder=startup
+GNU Assembler File 202=startup\_save_all_registers_main.s
+GNU Assembler File 202 Folder=startup
+GNU Assembler File 203=startup\_save_the_sp.s
+GNU Assembler File 203 Folder=startup
+GNU Assembler File 204=startup\_save_the_sp_complex.s
+GNU Assembler File 204 Folder=startup
+GNU Assembler File 205=startup\_call_user_main.s
+GNU Assembler File 205 Folder=startup
+GNU Assembler File 206=startup\_simple_main_jump.s
+GNU Assembler File 206 Folder=startup
+GNU Assembler File 207=startup\_handle_destructors.s
+GNU Assembler File 207 Folder=startup
+GNU Assembler File 208=startup\_nostub_retval.s
+GNU Assembler File 208 Folder=startup
+GNU Assembler File 209=startup\_nostub_retval_var.s
+GNU Assembler File 209 Folder=startup
+GNU Assembler File 210=startup\_kernel_retval.s
+GNU Assembler File 210 Folder=startup
+GNU Assembler File 211=startup\_kernel_retval_var.s
+GNU Assembler File 211 Folder=startup
+GNU Assembler File 212=startup\_return_from_program.s
+GNU Assembler File 212 Folder=startup
+GNU Assembler File 213=startup\_call_function_vector.s
+GNU Assembler File 213 Folder=startup
+GNU Assembler File 214=startup\_compressed_format_decoding.s
+GNU Assembler File 214 Folder=startup
+GNU Assembler File 215=startup\_mlink_format_decoding.s
+GNU Assembler File 215 Folder=startup
+GNU Assembler File 216=startup\_calculator.s
+GNU Assembler File 216 Folder=startup
+GNU Assembler File 217=startup\_save_sp.s
+GNU Assembler File 217 Folder=startup
+GNU Assembler File 218=startup\_reference_symbols.s
+GNU Assembler File 218 Folder=startup
+Text File 1=License.txt
+Text File 2=startup\Startup.txt
+Text File 2 Folder=startup
+

+ 24 - 24
tigcc/doc/System/Include/Include.hsi

@@ -1,24 +1,24 @@
-[Top]
-TIGCC uses a special library of header files, due to a very specific method of calling
-TIOS functions. This library is written in such a way that it can be used for producing
-both "nostub" programs (i.e. programs which does not need any kernel) or "Doors"
-(kernel-based) programs. The user may select whether a "nostub" or "Doors" program will be created.
-All functions in this library are based only on <I>legal</I> TIOS calls
-(i.e. calls which have an entry in the TIOS jump table), so they will probably work
-with any version of the TIOS. And, in this release of the library a lot of "standard"
-functions defined in ANSI C are also implemented, so this release is highly "ANSI
-compatible" (in addition to lot of TI-specific functions).
-<BR><BR>
-Functions and data types are grouped in different header files, depending on their
-purpose (note that some functions and data types are defined in more than one
-header file). Click on a header file name for the description of all functions and
-data types defined in this header file.
-
-[Bottom]
-<B>Note:</B> This library is <B>not</B> compatible with the <CODE>romcalls.h</CODE>
-header file which comes with very old versions of the TIGCC compiler.
-Include the <A HREF="$$LINK(tigcclib.h/)">tigcclib.h</A> header file instead. Also, note that this
-library depends strongly on <A HREF="$$INFOLINK(gnuexts)">GNU C extensions</A>, so it is not portable
-to other compilers. That's why this library can not be used for compiling programs using the
-<B>'-ansi'</B> command switch, which disables the use of GNU extensions and allows only
-ANSI-proposed features (except if each extensions is marked as such).
+[Top]
+TIGCC uses a special library of header files, due to a very specific method of calling
+TIOS functions. This library is written in such a way that it can be used for producing
+both "nostub" programs (i.e. programs which does not need any kernel) or "Doors"
+(kernel-based) programs. The user may select whether a "nostub" or "Doors" program will be created.
+All functions in this library are based only on <I>legal</I> TIOS calls
+(i.e. calls which have an entry in the TIOS jump table), so they will probably work
+with any version of the TIOS. And, in this release of the library a lot of "standard"
+functions defined in ANSI C are also implemented, so this release is highly "ANSI
+compatible" (in addition to lot of TI-specific functions).
+<BR><BR>
+Functions and data types are grouped in different header files, depending on their
+purpose (note that some functions and data types are defined in more than one
+header file). Click on a header file name for the description of all functions and
+data types defined in this header file.
+
+[Bottom]
+<B>Note:</B> This library is <B>not</B> compatible with the <CODE>romcalls.h</CODE>
+header file which comes with very old versions of the TIGCC compiler.
+Include the <A HREF="$$LINK(tigcclib.h/)">tigcclib.h</A> header file instead. Also, note that this
+library depends strongly on <A HREF="$$INFOLINK(gnuexts)">GNU C extensions</A>, so it is not portable
+to other compilers. That's why this library can not be used for compiling programs using the
+<B>'-ansi'</B> command switch, which disables the use of GNU extensions and allows only
+ANSI-proposed features (except if each extensions is marked as such).

+ 14 - 14
tigcc/doc/System/Include/minams.chk

@@ -1,14 +1,14 @@
-1.00=$2AC
-1.01=$3CC
-1.05=$3CC
-2.00=$508
-2.01=$508
-2.02=$5B7
-2.03=$5B7
-2.04=$5E2
-2.05=$5EF
-2.07=$607
-2.08=$607
-2.09=$607
-3.00=$608
-3.01=$608
+1.00=$2AC
+1.01=$3CC
+1.05=$3CC
+2.00=$508
+2.01=$508
+2.02=$5B7
+2.03=$5B7
+2.04=$5E2
+2.05=$5EF
+2.07=$607
+2.08=$607
+2.09=$607
+3.00=$608
+3.01=$608

+ 26 - 26
tigcc/doc/System/Info/a68k/a68k.hss

@@ -1,26 +1,26 @@
-[Main]
-Title=The A68k Assembler
-Subsections=intro, restrictions, exts, directives, smallcode, files, filenames, usage, tech, contact, history
-Index=A68k
-
-[Top]
-In addition to the <A HREF="$$INFOLINK(gnuasm)">GNU Assembler</A>, the TIGCC package also includes
-the A68k assembler by Charlie Gibbs (slightly modified Amiga version). Although TIGCC also includes the GNU assembler used by GCC, A68k is included here because almost all assembly programs
-for the TI-89 and TI-92+ are created just with this assembler, so including it in the package
-allows compiling existing ASM programs as well, and because, while it is inferior to the GNU assembler in some aspects, it also has its advantages, mainly easier syntax, but also support for
-binary include files for example. As this part of the TIGCC package was developed
-completely independently of the rest of the TIGCC project (and long before the TIGCC project was
-even started), it is somewhat inconsistent with the rest of the project, but some effort has been made to integrate it into TIGCC. For example, you can now call a function from a static library using a simple <CODE>bsr</CODE> or <CODE>jsr</CODE> instruction.
-<BR><BR>
-This assembler comes with its own set of header files. All of them are included mainly for
-compatibility reasons (note that some of them are deprecated, obsolete, inconsistent
-or even obscure), so they will not be described here. Information about them may be
-found in various ASM tutorials for TI-89 and TI-92+ (also deprecated, but note that
-nearly 95% of all ASM programs for TI-89 and TI-92+ are written using a now deprecated
-way, because a lot of information about the system was not available at the time
-when these programs were created). We recommend using only <CODE>OS.h</CODE>, which contains a
-list of equates for <CODE>ROM_CALL</CODE>s (but the <CODE>ROM_CALL</CODE> macros are not very
-optimized and should thus be avoided), and functions from TIGCCLIB, which need no header file at all
-(for example, <CODE>bsr GrayOn</CODE> is enough to call the <A HREF="$$LINK(gray.h/GrayOn)">GrayOn</A> function). What will be presented here is the original A68k documentation, written by Charlie Gibbs himself. We have however annotated it in some places
-to reflect the changes made in recent versions, and we have added 2 chapters: the list of
-supported assembler directives, which was missing, and the history, which was kept in a separate file.
+[Main]
+Title=The A68k Assembler
+Subsections=intro, restrictions, exts, directives, smallcode, files, filenames, usage, tech, contact, history
+Index=A68k
+
+[Top]
+In addition to the <A HREF="$$INFOLINK(gnuasm)">GNU Assembler</A>, the TIGCC package also includes
+the A68k assembler by Charlie Gibbs (slightly modified Amiga version). Although TIGCC also includes the GNU assembler used by GCC, A68k is included here because almost all assembly programs
+for the TI-89 and TI-92+ are created just with this assembler, so including it in the package
+allows compiling existing ASM programs as well, and because, while it is inferior to the GNU assembler in some aspects, it also has its advantages, mainly easier syntax, but also support for
+binary include files for example. As this part of the TIGCC package was developed
+completely independently of the rest of the TIGCC project (and long before the TIGCC project was
+even started), it is somewhat inconsistent with the rest of the project, but some effort has been made to integrate it into TIGCC. For example, you can now call a function from a static library using a simple <CODE>bsr</CODE> or <CODE>jsr</CODE> instruction.
+<BR><BR>
+This assembler comes with its own set of header files. All of them are included mainly for
+compatibility reasons (note that some of them are deprecated, obsolete, inconsistent
+or even obscure), so they will not be described here. Information about them may be
+found in various ASM tutorials for TI-89 and TI-92+ (also deprecated, but note that
+nearly 95% of all ASM programs for TI-89 and TI-92+ are written using a now deprecated
+way, because a lot of information about the system was not available at the time
+when these programs were created). We recommend using only <CODE>OS.h</CODE>, which contains a
+list of equates for <CODE>ROM_CALL</CODE>s (but the <CODE>ROM_CALL</CODE> macros are not very
+optimized and should thus be avoided), and functions from TIGCCLIB, which need no header file at all
+(for example, <CODE>bsr GrayOn</CODE> is enough to call the <A HREF="$$LINK(gray.h/GrayOn)">GrayOn</A> function). What will be presented here is the original A68k documentation, written by Charlie Gibbs himself. We have however annotated it in some places
+to reflect the changes made in recent versions, and we have added 2 chapters: the list of
+supported assembler directives, which was missing, and the history, which was kept in a separate file.

+ 26 - 26
tigcc/doc/System/Info/a68k/contact.hss

@@ -1,26 +1,26 @@
-[Main]
-Title=A68k Contact Information and Bug Reports
-
-[Top]
-And Finally...
-<BR><BR>
-<S>     Please send me any bug reports, flames, etc.  I can be reached
-on Mind Link (604/533-2312), at any meeting of the Commodore
-Computer Club / Panorama (PAcific NORthwest AMiga Association),
-or via Jeff Lydiatt or Larry Phillips.  I don't have the time
-or money to live on Compuserve or BIX, but my Usenet address is
-Charlie_Gibbs@mindlink.UUCP (...uunet!van-bc!rsoft!mindlink!a218).
-<BR><BR>
-<B>
-Charlie Gibbs<BR>
-2121 Rindall Avenue<BR>
-Port Coquitlam, B.C.<BR>
-Canada<BR>
-V3C 1T9<BR>
-</B></S>
-<BR><BR>
-<TABLE><TR><TD><B>(TIGCC)</B></TD><TD>
-Since, as far as we can tell, Charlie Gibbs is no longer
-maintaining A68k since 1991, you are better off filing a bug
-report to Kevin Kofler of the TIGCC team:
-<A HREF="mailto:Kevin@tigcc.ticalc.org">Kevin@tigcc.ticalc.org</A> (or <A HREF="mailto:kevin.kofler@chello.at">kevin.kofler@chello.at</A>)</TD></TR></TABLE>
+[Main]
+Title=A68k Contact Information and Bug Reports
+
+[Top]
+And Finally...
+<BR><BR>
+<S>     Please send me any bug reports, flames, etc.  I can be reached
+on Mind Link (604/533-2312), at any meeting of the Commodore
+Computer Club / Panorama (PAcific NORthwest AMiga Association),
+or via Jeff Lydiatt or Larry Phillips.  I don't have the time
+or money to live on Compuserve or BIX, but my Usenet address is
+Charlie_Gibbs@mindlink.UUCP (...uunet!van-bc!rsoft!mindlink!a218).
+<BR><BR>
+<B>
+Charlie Gibbs<BR>
+2121 Rindall Avenue<BR>
+Port Coquitlam, B.C.<BR>
+Canada<BR>
+V3C 1T9<BR>
+</B></S>
+<BR><BR>
+<TABLE><TR><TD><B>(TIGCC)</B></TD><TD>
+Since, as far as we can tell, Charlie Gibbs is no longer
+maintaining A68k since 1991, you are better off filing a bug
+report to Kevin Kofler of the TIGCC team:
+<A HREF="mailto:Kevin@tigcc.ticalc.org">Kevin@tigcc.ticalc.org</A> (or <A HREF="mailto:kevin.kofler@chello.at">kevin.kofler@chello.at</A>)</TD></TR></TABLE>

File diff suppressed because it is too large
+ 0 - 134
tigcc/doc/System/Info/a68k/directives.hss


+ 284 - 284
tigcc/doc/System/Info/a68k/exts.hss

@@ -1,284 +1,284 @@
-[Main]
-Title=Extensions
-
-[Top]
-Now for the good stuff:
-<UL>
-<LI>
-Labels can be any length that will fit onto one source line
-(currently 127 characters maximum).  Since labels are stored
-on the heap, the number of labels that can be processed is
-limited only by available memory.
-<TABLE><TR><TD><B>(TIGCC)</B></TD><TD>
-The maximum has been increased from 127 to 256 (for
-Win32, starting from 2.71.F3a, for GNU/Linux,
-starting from 2.71.F3c, for all other platforms,
-starting from 2.71.F3s).</TD></TR></TABLE>
-</LI>
-<LI>
-The first character of a label can be <CODE>'@'</CODE> if the next character
-is not numeric (this avoids confusion with octal constants).
-This provides compatibility with the Lattice C compiler.
-</LI>
-<LI>
-Since section data and user macro definitions are stored in
-the symbol table (see above), they too are limited only by
-available memory (actually, there is a hard-coded limit of
-32,767 sections, but I doubt anyone will run into that one).
-</LI>
-<LI>
-The only values a label cannot take are the register names -
-A68k can distinguish between the same name used as a label,
-instruction name or directive, macro name, or section name.
-</LI>
-<LI>
-Section and user macro names appear in the symbol table dump,
-and will also be cross-referenced.  Their names can be the same
-as any label (see above); they will be listed separately.
-</LI>
-<LI>
-<CODE>INCLUDE</CODE>s and macro calls can be nested indefinitely, limited
-only by available memory.  The message "Secondary heap
-overflow - assembly terminated" will be displayed if memory
-is exhausted.  You can increase the size of this heap using
-the <B>'-w'</B> switch (see below).  Recursive macros are supported;
-recursive <CODE>INCLUDE</CODE>s will, of course, result in a loop that
-will be broken only when the heap overflows.
-</LI>
-<LI>
-The <CODE>EVEN</CODE> directive forces alignment on a word (2-byte)
-boundary.  It does the same thing as <CODE>CNOP&nbsp;0,2</CODE>
-(this one is left over from the original code).
-</LI>
-<LI>
-Backward references to labels within the current <CODE>CODE</CODE> section
-will be converted to PC-relative addressing with displacement
-if this mode is legal for the instruction.  This feature is
-disabled by the <B>'-n'</B> switch.
-</LI>
-<LI>
-If a <CODE>MOVEM</CODE> instruction only specifies one register, it is
-converted to the corresponding <CODE>MOVE</CODE> instruction.  Instructions
-such as <CODE>MOVEM&nbsp;D0-D0,<I>label</I></CODE> will not be converted, however.
-This feature is disabled by the <B>'-n'</B> switch.
-<TABLE><TR><TD><B>(TIGCC)</B></TD><TD>
-Starting from v.2.71.F3c, this feature can now also be
-disabled by using the <B>'-rm'</B> switch.</TD></TR></TABLE>
-</LI>
-<LI>
-<CODE>ADD</CODE>, <CODE>SUB</CODE>, and <CODE>MOVE</CODE> instructions will be converted to
-<CODE>ADDQ</CODE>, <CODE>SUBQ</CODE>, and <CODE>MOVEQ</CODE> respectively if possible.
-Instructions coded explicitly (e.g. <CODE>ADDA</CODE> or <CODE>ADDI</CODE>) will not be converted.  This
-feature is disabled by the <B>'-n'</B> switch.
-</LI>
-<LI>
-<CODE>ADD</CODE>, <CODE>CMP</CODE>, <CODE>SUB</CODE>, and <CODE>MOVE</CODE> to an address register are
-converted to <CODE>ADDA</CODE>, <CODE>CMPA</CODE>, <CODE>SUBA</CODE>, and <CODE>MOVEA</CODE>
-respectively, unless (for <CODE>ADD</CODE>, <CODE>SUB</CODE>, or <CODE>MOVE</CODE>)
-they have already been converted to quick form.
-</LI>
-<LI>
-<CODE>ADD</CODE>, <CODE>AND</CODE>, <CODE>CMP</CODE>, <CODE>EOR</CODE>, <CODE>OR</CODE>, and
-<CODE>SUB</CODE> of an immediate value are
-converted to <CODE>ADDI</CODE>, <CODE>ANDI</CODE>, <CODE>CMPI</CODE>, <CODE>EORI</CODE>,
-<CODE>ORI</CODE>, and <CODE>SUBI</CODE> respectively (unless the address register or quick
-conversion above has already been done).
-</LI>
-<LI><BR>
-<TABLE><TR><TD><B>(TIGCC)</B></TD><TD>
-Starting from v.2.71.F3c, <CODE>ADDA</CODE> and <CODE>SUBA</CODE> (or <CODE>ADD</CODE> and <CODE>SUB</CODE>
-to an address register) will now be converted to <CODE>LEA</CODE> if
-possible. This feature can be disabled using the <B>'-n'</B>
-switch (disables all optimizations) or the <B>'-ra'</B> switch
-(disables just this single optimization).</TD></TR></TABLE>
-</LI>
-<LI><BR>
-<TABLE><TR><TD><B>(TIGCC)</B></TD><TD>
-Starting from v.2.71.F3c, <CODE>LEA&nbsp;n(an),an</CODE> will now be converted to <CODE>ADDQ</CODE> or <CODE>SUBQ</CODE> if
-possible. This feature can be disabled using the <B>'-n'</B>
-switch (disables all optimizations) or the <B>'-rl'</B> switch
-(disables just this single optimization).</TD></TR></TABLE>
-</LI>
-<LI>
-If both operands of a <CODE>CMP</CODE> instruction are postincrement mode,
-the instruction is converted to <CODE>CMPM</CODE>.
-</LI>
-<LI>
-Operands of the form <CODE>'0(An)'</CODE> will be treated as <CODE>'(An)'</CODE> except for
-the <CODE>MOVEP</CODE> instruction, which always requires a displacement.
-This feature is disabled by the <B>'-n'</B> switch.
-</LI>
-<LI>
-The <CODE>SECTION</CODE> directive allows a third parameter.  This can be
-specified as either <CODE>CHIP</CODE> or <CODE>FAST</CODE> (upper or lower case).  If
-this parameter is present, the hunk will be written with the
-<CODE>MEMF_CHIP</CODE> or <CODE>MEMF_FAST</CODE> bit set.  This allows you to produce
-"pre-ATOMized" object modules.
-</LI>
-<LI>
-The synonyms <CODE>DATA</CODE> and <CODE>BSS</CODE> are accepted for <CODE>SECTION</CODE> directives
-starting data or <CODE>BSS</CODE> hunks.  The <CODE>CHIP</CODE> and <CODE>FAST</CODE> options (see
-above) can also be used, e.g. <CODE>BSS&nbsp;<I>name</I>,CHIP</CODE>.
-</LI>
-<LI>
-The following synonyms have been implemented for compatibility
-with the Aztec assembler:
-<BR><BR>
-<UL>
-<LI>
-<CODE>CSEG</CODE> is treated the same as <CODE>CODE</CODE> or <CODE>SECTION&nbsp;<I>name</I>,CODE</CODE>.
-</LI>
-<LI>
-<CODE>DSEG</CODE> is treated the same as <CODE>DATA</CODE> or <CODE>SECTION&nbsp;<I>name</I>,DATA</CODE>.
-</LI>
-<LI>
-<CODE>PUBLIC</CODE> is treated as either <CODE>XDEF</CODE> or <CODE>XREF</CODE>, depending on
-whether or not the symbol in question has been defined in the current source module.
-A single <CODE>PUBLIC</CODE> directive can name a mixture of internally- and externally-defined symbols.
-</LI>
-</UL>
-</LI>
-<LI>
-The ability to produce Motorola S-records is retained from the
-original code.  The <B>'-s'</B> switch causes the assembler to produce
-S-format instead of AmigaDOS format.  Relocatable code cannot
-be produced in this format.
-</LI>
-<LI>
-Error messages consist of three parts.
-The position of the offending line is given as a line
-number within the current module.  If the line is within a
-macro expansion or <CODE>INCLUDE</CODE> file, the position of the macro
-call or <CODE>INCLUDE</CODE> statement in the outer module is given as
-well.  This process is repeated until the outermost source
-module is reached.
-Next, the offending source line itself is listed.
-Finally, the errors for that line are displayed.  A flag
-<CODE>'^'</CODE> is placed under the column where the error was detected.
-</LI>
-<LI>
-Named local labels are supported.  These work the same as the
-local labels supported by the Metacomco assembler (<CODE><I>nnn</I>$</CODE>) but
-are formed in the same manner as normal labels, except that
-they must be preceded by a backslash (<CODE>'\'</CODE>).
-</LI>
-<LI>
-The following synonyms have been implemented for compatibility
-with the Assempro assembler:
-<BR><BR>
-<UL>
-<LI>
-<CODE>ENDIF</CODE> is treated the same as <CODE>ENDC</CODE>.
-</LI>
-<LI>
-<CODE>'='</CODE> is treated the same as <CODE>EQU</CODE>.
-</LI>
-<LI>
-<CODE>'|'</CODE> is treated the same as <CODE>'!'</CODE> (logical OR).
-</LI>
-</UL>
-</LI>
-<LI>
-Quotation marks (<CODE>"</CODE>) can be used as string delimiters
-as well as apostrophes (<CODE>'</CODE>).  Any given string must begin
-and end with the same delimiter.  This allows such statements
-as the following:
-<PRE>     MOVEQ   "'",D0
-     DC.B    "This is Charlie's assembler."
-</PRE>
-Note that you can still define an apostrophe within a string
-delimited by apostrophes if you double it, e.g.
-<PRE>     MOVEQ   '''',D0
-     DC.B    'This is Charlie''s assembler.'
-</PRE>
-</LI>
-<LI>
-If any errors are found in the assembly, the object code file
-will be scratched, unless you include the <B>'-k'</B> (keep) flag on
-the command line.
-</LI>
-<LI>
-The symbols <CODE>.A68K</CODE>, <CODE>.a68k</CODE>, <CODE>.a68K</CODE>, and <CODE>.A68k</CODE> are automatically
-defined as <CODE>SET</CODE> symbols having absolute values of 1.
-This enables a source program to determine whether it is
-being assembled by this assembler, and is effectively
-insensitive as to whether or not it is checked in upper case.
-</LI>
-<LI>
-A zeroth positional macro parameter <CODE>'\0'</CODE> is supported.  It
-is replaced by the length of the macro call (<CODE>B</CODE>, <CODE>W</CODE>, or <CODE>L</CODE>,
-defaulting to <CODE>W</CODE>).  For instance, given the macro:
-<PRE>moov MACRO
-     move.\0 \1,\2
-     ENDM
-</PRE>
-the macro call
-<PRE>     moov.l  d0,d1
-</PRE>
-would be expanded as
-<PRE>     move.l  d0,d1
-</PRE>
-</LI>
-<LI>
-If an <CODE>INCLUDE</CODE> file doesn't generate any code and no listing
-file is required (including suppression of the listing using
-<CODE>NOLIST</CODE>), it won't be read again in pass 2.  The statement
-numbers will be bumped to keep in proper alignment.  This
-can really speed up assemblies that <CODE>INCLUDE</CODE> lots of <CODE>EQU</CODE>ates.
-</LI>
-<LI>
-The <CODE>ORG</CODE> directive is supported.  It works like <CODE>RORG</CODE>, except
-that it takes the actual address to be jumped to, rather
-than an offset from the start of the current section.
-The given address must be in the current section.
-As far as A68k is concerned, the only real difference
-between <CODE>ORG</CODE> and <CODE>RORG</CODE> is that the <CODE>ORG</CODE> value must be
-relocatable, while the RORG value must be absolute.
-</LI>
-<LI>
-Branch (<CODE>B<I>cc</I></CODE>, including <CODE>BRA</CODE> and <CODE>BSR</CODE>) instructions will be
-converted to short form if possible.  Shortening a branch
-may bring other branches within range of shortening - this
-can set up a ripple effect, and A68k may not catch all
-branches that could theoretically be optimized.  Any branches
-which A68k misses (there shouldn't be too many under normal
-circumstances) can be displayed by specifying the <B>'-f'</B> switch
-(see below).  Branch optimization is disabled by the <B>'-n'</B> switch.
-</LI>
-<LI>
-The <CODE>INCBIN</CODE> directive allows the contents of any file to be
-included in A68k's object code output.  Its format is the same
-as the <CODE>INCLUDE</CODE> directive, but the file can contain any data
-at all, printable or not.  Rather than being processed as
-source code by the assembler, the entire contents of the file
-is copied directly to the current position in the object code
-output file with no reformatting whatsoever.  The effect is
-the same as if <CODE>DC</CODE> statements whose constants represent the
-file's contents were inserted in place of the <CODE>INCBIN</CODE> directive.
-</LI>
-<LI>
-The opcode <CODE>TTL</CODE> is accepted as a synonym for <CODE>TITLE</CODE>.
-</LI>
-<LI>
-A command-line option <B>'-g'</B> causes A68k to treat any undefined
-symbol as <CODE>XREF</CODE>.
-</LI>
-<LI>
-The register list in a <CODE>MOVEM</CODE> instruction can be an
-immediate operand which specifies the actual mask bits.
-</LI>
-<LI><BR>
-<TABLE><TR><TD><B>(TIGCC)</B></TD><TD>
-The following synonyms are also supported:<BR>
-Starting from 2.71.F3a:
-<UL><LI><CODE>BLO</CODE> = <CODE>BCS</CODE></LI>
-<LI><CODE>BHS</CODE> = <CODE>BCC</CODE></LI>
-<LI><CODE>DBLO</CODE> = <CODE>DBCS</CODE></LI>
-<LI><CODE>DBHS</CODE> = <CODE>DBCC</CODE></LI>
-<LI><CODE>ROLX</CODE> = <CODE>ROXL</CODE></LI>
-<LI><CODE>RORX</CODE> = <CODE>ROXR</CODE></LI></UL>
-Starting from 2.71.F3c:
-<UL><LI><CODE>SLO</CODE> = <CODE>SCS</CODE></LI>
-<LI><CODE>SHS</CODE> = <CODE>SCC</CODE></LI></UL></TD></TR></TABLE>
-</LI>
-</UL>
+[Main]
+Title=Extensions
+
+[Top]
+Now for the good stuff:
+<UL>
+<LI>
+Labels can be any length that will fit onto one source line
+(currently 127 characters maximum).  Since labels are stored
+on the heap, the number of labels that can be processed is
+limited only by available memory.
+<TABLE><TR><TD><B>(TIGCC)</B></TD><TD>
+The maximum has been increased from 127 to 256 (for
+Win32, starting from 2.71.F3a, for GNU/Linux,
+starting from 2.71.F3c, for all other platforms,
+starting from 2.71.F3s).</TD></TR></TABLE>
+</LI>
+<LI>
+The first character of a label can be <CODE>'@'</CODE> if the next character
+is not numeric (this avoids confusion with octal constants).
+This provides compatibility with the Lattice C compiler.
+</LI>
+<LI>
+Since section data and user macro definitions are stored in
+the symbol table (see above), they too are limited only by
+available memory (actually, there is a hard-coded limit of
+32,767 sections, but I doubt anyone will run into that one).
+</LI>
+<LI>
+The only values a label cannot take are the register names -
+A68k can distinguish between the same name used as a label,
+instruction name or directive, macro name, or section name.
+</LI>
+<LI>
+Section and user macro names appear in the symbol table dump,
+and will also be cross-referenced.  Their names can be the same
+as any label (see above); they will be listed separately.
+</LI>
+<LI>
+<CODE>INCLUDE</CODE>s and macro calls can be nested indefinitely, limited
+only by available memory.  The message "Secondary heap
+overflow - assembly terminated" will be displayed if memory
+is exhausted.  You can increase the size of this heap using
+the <B>'-w'</B> switch (see below).  Recursive macros are supported;
+recursive <CODE>INCLUDE</CODE>s will, of course, result in a loop that
+will be broken only when the heap overflows.
+</LI>
+<LI>
+The <CODE>EVEN</CODE> directive forces alignment on a word (2-byte)
+boundary.  It does the same thing as <CODE>CNOP&nbsp;0,2</CODE>
+(this one is left over from the original code).
+</LI>
+<LI>
+Backward references to labels within the current <CODE>CODE</CODE> section
+will be converted to PC-relative addressing with displacement
+if this mode is legal for the instruction.  This feature is
+disabled by the <B>'-n'</B> switch.
+</LI>
+<LI>
+If a <CODE>MOVEM</CODE> instruction only specifies one register, it is
+converted to the corresponding <CODE>MOVE</CODE> instruction.  Instructions
+such as <CODE>MOVEM&nbsp;D0-D0,<I>label</I></CODE> will not be converted, however.
+This feature is disabled by the <B>'-n'</B> switch.
+<TABLE><TR><TD><B>(TIGCC)</B></TD><TD>
+Starting from v.2.71.F3c, this feature can now also be
+disabled by using the <B>'-rm'</B> switch.</TD></TR></TABLE>
+</LI>
+<LI>
+<CODE>ADD</CODE>, <CODE>SUB</CODE>, and <CODE>MOVE</CODE> instructions will be converted to
+<CODE>ADDQ</CODE>, <CODE>SUBQ</CODE>, and <CODE>MOVEQ</CODE> respectively if possible.
+Instructions coded explicitly (e.g. <CODE>ADDA</CODE> or <CODE>ADDI</CODE>) will not be converted.  This
+feature is disabled by the <B>'-n'</B> switch.
+</LI>
+<LI>
+<CODE>ADD</CODE>, <CODE>CMP</CODE>, <CODE>SUB</CODE>, and <CODE>MOVE</CODE> to an address register are
+converted to <CODE>ADDA</CODE>, <CODE>CMPA</CODE>, <CODE>SUBA</CODE>, and <CODE>MOVEA</CODE>
+respectively, unless (for <CODE>ADD</CODE>, <CODE>SUB</CODE>, or <CODE>MOVE</CODE>)
+they have already been converted to quick form.
+</LI>
+<LI>
+<CODE>ADD</CODE>, <CODE>AND</CODE>, <CODE>CMP</CODE>, <CODE>EOR</CODE>, <CODE>OR</CODE>, and
+<CODE>SUB</CODE> of an immediate value are
+converted to <CODE>ADDI</CODE>, <CODE>ANDI</CODE>, <CODE>CMPI</CODE>, <CODE>EORI</CODE>,
+<CODE>ORI</CODE>, and <CODE>SUBI</CODE> respectively (unless the address register or quick
+conversion above has already been done).
+</LI>
+<LI><BR>
+<TABLE><TR><TD><B>(TIGCC)</B></TD><TD>
+Starting from v.2.71.F3c, <CODE>ADDA</CODE> and <CODE>SUBA</CODE> (or <CODE>ADD</CODE> and <CODE>SUB</CODE>
+to an address register) will now be converted to <CODE>LEA</CODE> if
+possible. This feature can be disabled using the <B>'-n'</B>
+switch (disables all optimizations) or the <B>'-ra'</B> switch
+(disables just this single optimization).</TD></TR></TABLE>
+</LI>
+<LI><BR>
+<TABLE><TR><TD><B>(TIGCC)</B></TD><TD>
+Starting from v.2.71.F3c, <CODE>LEA&nbsp;n(an),an</CODE> will now be converted to <CODE>ADDQ</CODE> or <CODE>SUBQ</CODE> if
+possible. This feature can be disabled using the <B>'-n'</B>
+switch (disables all optimizations) or the <B>'-rl'</B> switch
+(disables just this single optimization).</TD></TR></TABLE>
+</LI>
+<LI>
+If both operands of a <CODE>CMP</CODE> instruction are postincrement mode,
+the instruction is converted to <CODE>CMPM</CODE>.
+</LI>
+<LI>
+Operands of the form <CODE>'0(An)'</CODE> will be treated as <CODE>'(An)'</CODE> except for
+the <CODE>MOVEP</CODE> instruction, which always requires a displacement.
+This feature is disabled by the <B>'-n'</B> switch.
+</LI>
+<LI>
+The <CODE>SECTION</CODE> directive allows a third parameter.  This can be
+specified as either <CODE>CHIP</CODE> or <CODE>FAST</CODE> (upper or lower case).  If
+this parameter is present, the hunk will be written with the
+<CODE>MEMF_CHIP</CODE> or <CODE>MEMF_FAST</CODE> bit set.  This allows you to produce
+"pre-ATOMized" object modules.
+</LI>
+<LI>
+The synonyms <CODE>DATA</CODE> and <CODE>BSS</CODE> are accepted for <CODE>SECTION</CODE> directives
+starting data or <CODE>BSS</CODE> hunks.  The <CODE>CHIP</CODE> and <CODE>FAST</CODE> options (see
+above) can also be used, e.g. <CODE>BSS&nbsp;<I>name</I>,CHIP</CODE>.
+</LI>
+<LI>
+The following synonyms have been implemented for compatibility
+with the Aztec assembler:
+<BR><BR>
+<UL>
+<LI>
+<CODE>CSEG</CODE> is treated the same as <CODE>CODE</CODE> or <CODE>SECTION&nbsp;<I>name</I>,CODE</CODE>.
+</LI>
+<LI>
+<CODE>DSEG</CODE> is treated the same as <CODE>DATA</CODE> or <CODE>SECTION&nbsp;<I>name</I>,DATA</CODE>.
+</LI>
+<LI>
+<CODE>PUBLIC</CODE> is treated as either <CODE>XDEF</CODE> or <CODE>XREF</CODE>, depending on
+whether or not the symbol in question has been defined in the current source module.
+A single <CODE>PUBLIC</CODE> directive can name a mixture of internally- and externally-defined symbols.
+</LI>
+</UL>
+</LI>
+<LI>
+The ability to produce Motorola S-records is retained from the
+original code.  The <B>'-s'</B> switch causes the assembler to produce
+S-format instead of AmigaDOS format.  Relocatable code cannot
+be produced in this format.
+</LI>
+<LI>
+Error messages consist of three parts.
+The position of the offending line is given as a line
+number within the current module.  If the line is within a
+macro expansion or <CODE>INCLUDE</CODE> file, the position of the macro
+call or <CODE>INCLUDE</CODE> statement in the outer module is given as
+well.  This process is repeated until the outermost source
+module is reached.
+Next, the offending source line itself is listed.
+Finally, the errors for that line are displayed.  A flag
+<CODE>'^'</CODE> is placed under the column where the error was detected.
+</LI>
+<LI>
+Named local labels are supported.  These work the same as the
+local labels supported by the Metacomco assembler (<CODE><I>nnn</I>$</CODE>) but
+are formed in the same manner as normal labels, except that
+they must be preceded by a backslash (<CODE>'\'</CODE>).
+</LI>
+<LI>
+The following synonyms have been implemented for compatibility
+with the Assempro assembler:
+<BR><BR>
+<UL>
+<LI>
+<CODE>ENDIF</CODE> is treated the same as <CODE>ENDC</CODE>.
+</LI>
+<LI>
+<CODE>'='</CODE> is treated the same as <CODE>EQU</CODE>.
+</LI>
+<LI>
+<CODE>'|'</CODE> is treated the same as <CODE>'!'</CODE> (logical OR).
+</LI>
+</UL>
+</LI>
+<LI>
+Quotation marks (<CODE>"</CODE>) can be used as string delimiters
+as well as apostrophes (<CODE>'</CODE>).  Any given string must begin
+and end with the same delimiter.  This allows such statements
+as the following:
+<PRE>     MOVEQ   "'",D0
+     DC.B    "This is Charlie's assembler."
+</PRE>
+Note that you can still define an apostrophe within a string
+delimited by apostrophes if you double it, e.g.
+<PRE>     MOVEQ   '''',D0
+     DC.B    'This is Charlie''s assembler.'
+</PRE>
+</LI>
+<LI>
+If any errors are found in the assembly, the object code file
+will be scratched, unless you include the <B>'-k'</B> (keep) flag on
+the command line.
+</LI>
+<LI>
+The symbols <CODE>.A68K</CODE>, <CODE>.a68k</CODE>, <CODE>.a68K</CODE>, and <CODE>.A68k</CODE> are automatically
+defined as <CODE>SET</CODE> symbols having absolute values of 1.
+This enables a source program to determine whether it is
+being assembled by this assembler, and is effectively
+insensitive as to whether or not it is checked in upper case.
+</LI>
+<LI>
+A zeroth positional macro parameter <CODE>'\0'</CODE> is supported.  It
+is replaced by the length of the macro call (<CODE>B</CODE>, <CODE>W</CODE>, or <CODE>L</CODE>,
+defaulting to <CODE>W</CODE>).  For instance, given the macro:
+<PRE>moov MACRO
+     move.\0 \1,\2
+     ENDM
+</PRE>
+the macro call
+<PRE>     moov.l  d0,d1
+</PRE>
+would be expanded as
+<PRE>     move.l  d0,d1
+</PRE>
+</LI>
+<LI>
+If an <CODE>INCLUDE</CODE> file doesn't generate any code and no listing
+file is required (including suppression of the listing using
+<CODE>NOLIST</CODE>), it won't be read again in pass 2.  The statement
+numbers will be bumped to keep in proper alignment.  This
+can really speed up assemblies that <CODE>INCLUDE</CODE> lots of <CODE>EQU</CODE>ates.
+</LI>
+<LI>
+The <CODE>ORG</CODE> directive is supported.  It works like <CODE>RORG</CODE>, except
+that it takes the actual address to be jumped to, rather
+than an offset from the start of the current section.
+The given address must be in the current section.
+As far as A68k is concerned, the only real difference
+between <CODE>ORG</CODE> and <CODE>RORG</CODE> is that the <CODE>ORG</CODE> value must be
+relocatable, while the RORG value must be absolute.
+</LI>
+<LI>
+Branch (<CODE>B<I>cc</I></CODE>, including <CODE>BRA</CODE> and <CODE>BSR</CODE>) instructions will be
+converted to short form if possible.  Shortening a branch
+may bring other branches within range of shortening - this
+can set up a ripple effect, and A68k may not catch all
+branches that could theoretically be optimized.  Any branches
+which A68k misses (there shouldn't be too many under normal
+circumstances) can be displayed by specifying the <B>'-f'</B> switch
+(see below).  Branch optimization is disabled by the <B>'-n'</B> switch.
+</LI>
+<LI>
+The <CODE>INCBIN</CODE> directive allows the contents of any file to be
+included in A68k's object code output.  Its format is the same
+as the <CODE>INCLUDE</CODE> directive, but the file can contain any data
+at all, printable or not.  Rather than being processed as
+source code by the assembler, the entire contents of the file
+is copied directly to the current position in the object code
+output file with no reformatting whatsoever.  The effect is
+the same as if <CODE>DC</CODE> statements whose constants represent the
+file's contents were inserted in place of the <CODE>INCBIN</CODE> directive.
+</LI>
+<LI>
+The opcode <CODE>TTL</CODE> is accepted as a synonym for <CODE>TITLE</CODE>.
+</LI>
+<LI>
+A command-line option <B>'-g'</B> causes A68k to treat any undefined
+symbol as <CODE>XREF</CODE>.
+</LI>
+<LI>
+The register list in a <CODE>MOVEM</CODE> instruction can be an
+immediate operand which specifies the actual mask bits.
+</LI>
+<LI><BR>
+<TABLE><TR><TD><B>(TIGCC)</B></TD><TD>
+The following synonyms are also supported:<BR>
+Starting from 2.71.F3a:
+<UL><LI><CODE>BLO</CODE> = <CODE>BCS</CODE></LI>
+<LI><CODE>BHS</CODE> = <CODE>BCC</CODE></LI>
+<LI><CODE>DBLO</CODE> = <CODE>DBCS</CODE></LI>
+<LI><CODE>DBHS</CODE> = <CODE>DBCC</CODE></LI>
+<LI><CODE>ROLX</CODE> = <CODE>ROXL</CODE></LI>
+<LI><CODE>RORX</CODE> = <CODE>ROXR</CODE></LI></UL>
+Starting from 2.71.F3c:
+<UL><LI><CODE>SLO</CODE> = <CODE>SCS</CODE></LI>
+<LI><CODE>SHS</CODE> = <CODE>SCC</CODE></LI></UL></TD></TR></TABLE>
+</LI>
+</UL>

+ 34 - 34
tigcc/doc/System/Info/a68k/filenames.hss

@@ -1,34 +1,34 @@
-[Main]
-Title=File Names
-
-[Top]
-The names of the above files can be explicitly specified.
-However, <CODE>A68k</CODE> will generate default file names in the following cases:
-<UL>
-<LI>
-If the <B>'-o'</B> switch is omitted, a default name will be assigned
-to the object code file.
-</LI>
-<LI>
-If the <B>'-e'</B> switch is specified with no file name, a default
-name will be assigned to the equate file.
-</LI>
-<LI>
-If the <B>'-l'</B> or <B>'-x'</B> switch is specified with no file name, a
-default name will be assigned to the listing file.
-</LI>
-</UL>
-A default name is generated by deriving a stem name from the source
-code file name, and appending <CODE>'.o'</CODE> for an object code file name (<CODE>'.s'</CODE>
-if the <B>'-s'</B> switch is specified to produce Motorola S-records), <CODE>'.equ'</CODE>
-for an equate file name, or <CODE>'.lst'</CODE> for a listing file name.  The stem
-name consists of all characters of the source file name up to the
-last period (or the entire source file name if it contains no period).
-Here are some examples of default names:
-<BR><BR>
-<TABLE BORDER CELLPADDING="5">
-<TR><TD><B>Source file</B></TD><TD><B>Object file</B></TD><TD><B>Equate file</B></TD><TD><B>Listing file</B></TD></TR>
-<TR><TD>myprog.asm</TD><TD>myprog.o</TD><TD>myprog.equ</TD><TD>myprog.lst</TD></TR>
-<TR><TD>myprog</TD><TD>myprog.o</TD><TD>myprog.equ</TD><TD>myprog.lst</TD></TR>
-<TR><TD>new.prog.asm</TD><TD>new.prog.o</TD><TD>new.prog.equ</TD><TD>new.prog.lst</TD></TR>
-</TABLE>
+[Main]
+Title=File Names
+
+[Top]
+The names of the above files can be explicitly specified.
+However, <CODE>A68k</CODE> will generate default file names in the following cases:
+<UL>
+<LI>
+If the <B>'-o'</B> switch is omitted, a default name will be assigned
+to the object code file.
+</LI>
+<LI>
+If the <B>'-e'</B> switch is specified with no file name, a default
+name will be assigned to the equate file.
+</LI>
+<LI>
+If the <B>'-l'</B> or <B>'-x'</B> switch is specified with no file name, a
+default name will be assigned to the listing file.
+</LI>
+</UL>
+A default name is generated by deriving a stem name from the source
+code file name, and appending <CODE>'.o'</CODE> for an object code file name (<CODE>'.s'</CODE>
+if the <B>'-s'</B> switch is specified to produce Motorola S-records), <CODE>'.equ'</CODE>
+for an equate file name, or <CODE>'.lst'</CODE> for a listing file name.  The stem
+name consists of all characters of the source file name up to the
+last period (or the entire source file name if it contains no period).
+Here are some examples of default names:
+<BR><BR>
+<TABLE BORDER CELLPADDING="5">
+<TR><TD><B>Source file</B></TD><TD><B>Object file</B></TD><TD><B>Equate file</B></TD><TD><B>Listing file</B></TD></TR>
+<TR><TD>myprog.asm</TD><TD>myprog.o</TD><TD>myprog.equ</TD><TD>myprog.lst</TD></TR>
+<TR><TD>myprog</TD><TD>myprog.o</TD><TD>myprog.equ</TD><TD>myprog.lst</TD></TR>
+<TR><TD>new.prog.asm</TD><TD>new.prog.o</TD><TD>new.prog.equ</TD><TD>new.prog.lst</TD></TR>
+</TABLE>

+ 55 - 55
tigcc/doc/System/Info/a68k/files.hss

@@ -1,55 +1,55 @@
-[Main]
-Title=Files
-
-[Top]
-<CODE>A68k</CODE> uses the following files:
-<UL>
-<LI>
-The source code file - this file contains the program to be
-assembled.  This file is an ASCII text file whose last line
-must be an <CODE>END</CODE> statement.
-<TABLE><TR><TD><B>(TIGCC)</B></TD><TD>
-This <CODE>END</CODE> statement is no longer necessary starting
-from v.2.71.F3c.<BR>
-Moreover, the assembler will no longer accept an <CODE>END</CODE>
-statement in include files or macros, since it did
-never expect that and caused bugs.</TD></TR></TABLE>
-</LI>
-<LI>
-The object code file - this file is created by <CODE>A68k</CODE>, replacing
-any previous version which may exist.  If any errors are
-encountered during the assembly, this file will be scratched,
-unless the <B>'-k'</B> (keep) switch is specified (see below).
-Although this file is normally written in AmigaDOS format,
-the <B>'-s'</B> switch (see below) will cause it to be written in
-Motorola S-record format instead.
-</LI>
-<LI>
-The listing file - this file is optionally created by <CODE>A68k</CODE>
-and contains a listing complete with page headings (including
-form feeds), generated object code, and error messages if any.
-It is suitable for feeding to a printer.
-</LI>
-<LI>
-An equate file - this file is optionally created by <CODE>A68k</CODE>
-and consists of a leading comment line followed by <CODE>EQU</CODE>
-statements, one for each symbol encountered by <CODE>A68k</CODE> whose
-value is absolute.  This file is only created if the <B>'-e'</B>
-command-line switch is specified (see below).
-</LI>
-<LI>
-A header file - if requested, this file is read by <CODE>A68k</CODE>
-immediately prior to the source code file.  It treated
-exactly as if it were requested by an <CODE>INCLUDE</CODE> statement
-at the front of the source file, but is selected only if
-the <B>'-h'</B> command-line switch is specified (see below).
-</LI>
-<LI>
-Include files are selected by <CODE>INCLUDE</CODE> directives within the
-source file, and are inserted in the source code in place
-of the <CODE>INCLUDE</CODE> directive itself.  <CODE>A68k</CODE> first searches the
-current directory for <CODE>INCLUDE</CODE> files; the <B>'-i'</B> command-line
-switch (see below) specifies additional directories which
-can be searched.
-</LI>
-</UL>
+[Main]
+Title=Files
+
+[Top]
+<CODE>A68k</CODE> uses the following files:
+<UL>
+<LI>
+The source code file - this file contains the program to be
+assembled.  This file is an ASCII text file whose last line
+must be an <CODE>END</CODE> statement.
+<TABLE><TR><TD><B>(TIGCC)</B></TD><TD>
+This <CODE>END</CODE> statement is no longer necessary starting
+from v.2.71.F3c.<BR>
+Moreover, the assembler will no longer accept an <CODE>END</CODE>
+statement in include files or macros, since it did
+never expect that and caused bugs.</TD></TR></TABLE>
+</LI>
+<LI>
+The object code file - this file is created by <CODE>A68k</CODE>, replacing
+any previous version which may exist.  If any errors are
+encountered during the assembly, this file will be scratched,
+unless the <B>'-k'</B> (keep) switch is specified (see below).
+Although this file is normally written in AmigaDOS format,
+the <B>'-s'</B> switch (see below) will cause it to be written in
+Motorola S-record format instead.
+</LI>
+<LI>
+The listing file - this file is optionally created by <CODE>A68k</CODE>
+and contains a listing complete with page headings (including
+form feeds), generated object code, and error messages if any.
+It is suitable for feeding to a printer.
+</LI>
+<LI>
+An equate file - this file is optionally created by <CODE>A68k</CODE>
+and consists of a leading comment line followed by <CODE>EQU</CODE>
+statements, one for each symbol encountered by <CODE>A68k</CODE> whose
+value is absolute.  This file is only created if the <B>'-e'</B>
+command-line switch is specified (see below).
+</LI>
+<LI>
+A header file - if requested, this file is read by <CODE>A68k</CODE>
+immediately prior to the source code file.  It treated
+exactly as if it were requested by an <CODE>INCLUDE</CODE> statement
+at the front of the source file, but is selected only if
+the <B>'-h'</B> command-line switch is specified (see below).
+</LI>
+<LI>
+Include files are selected by <CODE>INCLUDE</CODE> directives within the
+source file, and are inserted in the source code in place
+of the <CODE>INCLUDE</CODE> directive itself.  <CODE>A68k</CODE> first searches the
+current directory for <CODE>INCLUDE</CODE> files; the <B>'-i'</B> command-line
+switch (see below) specifies additional directories which
+can be searched.
+</LI>
+</UL>

+ 940 - 940
tigcc/doc/System/Info/a68k/history.hss

@@ -1,940 +1,940 @@
-[Main]
-Title=History of A68k
-
-[Top]
-<B>Note:</B> This section has been added to the documentation by the TIGCC Team. It was in <I>history.txt</I> before.
-<BR><BR>
-<B>Version 2.71.F3w (Kevin Kofler, July 27, 2006)</B>
-<UL><LI>Bugfix: Fixed compilation on *BSD and recent versions of OS X.</LI></UL>
-<B>Version 2.71.F3v (Kevin Kofler, July 31, 2005)</B>
-<UL><LI>Bugfix: Don't crash on EQUs doing arithmetic with other EQUs which do
-arithmetic with undefined symbols, print an error instead.</LI></UL>
-<B>Version 2.71.F3u (Kevin Kofler, February 2, 2005)</B>
-<UL><LI>Bugfix: Fixed compilation with GCC 3.4.</LI></UL>
-<B>Version 2.71.F3t (Kevin Kofler, January 31, 2005)</B>
-<UL><LI>Added: NO_UNOPTIMIZABLE_RELOCS compile-time define (disabled by default)
-to allow generating AmigaOS-compatible object files again.</LI>
-<LI>Improved: Branches explicitly coded as .w are now marked unoptimizable.</LI>
-<LI>Improved: Label references explicitly coded as .l are now marked
-unoptimizable.</LI>
-<LI>Bugfix: Emitting relocations for undefined symbols which are already in
-the symbol table due to the forward branch optimization code now
-works properly.</LI></UL>
-<B>Version 2.71.F3s (Kevin Kofler, September 21, 2004)</B>
-<UL><LI>Added: Support for the "unoptimizable reloc" flag, keeping the linker
-from corrupting some instructions when optimizing.</LI>
-<LI>Improved: All platforms now use the same maximum line length and chunk
-sizes.</LI>
-<LI>Improved: The line count limit has been raised from 32767 to INT_MAX.</LI></UL>
-<B>Version 2.71.F3r (Kevin Kofler, July 19, 2004)</B>
-<UL><LI>Bugfix: Fixed label(PC,Rn) addressing when "label" was in a different
-section (again) (reported by Julien Moutinho).</LI></UL>
-<B>Version 2.71.F3q (Kevin Kofler, December 30, 2003)</B>
-<UL><LI>Bugfix: Fixed label1-label2(an) in all-relocs mode (reported by
-hwti).</LI>
-<LI>Added: (In all-relocs mode,) don't emit an address difference when the 2
-labels are actually at the same address (or simply the same). This allows to
-keep optimizing label1-label1(an) into (an).</LI>
-<LI>Bugfix: Fixed a bug when range-checking branches in all-relocs mode
-(reported by hwti).</LI>
-<LI>Bugfix: Fixed a bug when range-checking short branches in all-relocs mode or
-to a different section (reported by hwti).</LI></UL>
-<B>Version 2.71.F3p (Kevin Kofler, December 1, 2003)</B>
-<UL><LI>Bugfix: Fixed label(PC,Rn) addressing in all-relocs mode or when "label" was
-in a different section (reported by Matthieu Gallet).</LI></UL>
-<B>Version 2.71.F3o (Kevin Kofler, October 5, 2003)</B>
-<UL><LI>Bugfix: Range checking now works correctly in all-relocs mode. (No more
-spurious out-of-range errors.)</LI></UL>
-<B>Version 2.71.F3n (Kevin Kofler, September 28, 2003)</B>
-<UL><LI>Bugfix: Local labels now work in all-relocs mode.</LI></UL>
-<B>Version 2.71.F3m (Kevin Kofler, September 2, 2003)</B>
-<UL><LI>Bugfix: PC-relative or indexed references to other sections didn't work.</LI>
-<LI>Bugfix: x(PC,Dn) or x(PC,An) didn't work in all-relocs mode.</LI></UL>
-<B>Version 2.71.F3l (Kevin Kofler, July 15, 2003)</B>
-<UL><LI>Added: The -u switch now also allows unaligned code, which can be useful
-when the code will be copied somewhere else anyway.</LI>
-<LI>Added: Short branches across hunks or object files are now allowed.</LI>
-<LI>Added: -a (All relocs) switch, which tells A68k to emit all relocs, even
-PC-relative relocs within a section. It also emits address
-differences in a special TIGCC-specific format. This will allow
-more aggressive linker-side optimization.</LI></UL>
-<B>Version 2.71.F3k (Kevin Kofler, May 17, 2003)</B>
-<UL><LI>Bugfix: Increased the forward reference buffer in order to allow
-multiple labels at the same location, as used in PedroM.</LI>
-<LI>Added: -u (Unaligned) switch, which disables automatic alignment of
-DC.W, DC.L, DCB.W, DCB.L, DS.W and DS.L.</LI></UL><BR>
-<B>Version 2.71.F3i (Kevin Kofler, February 1, 2002)</B>
-<UL><LI>Bugfix: Local labels caused a &quot;Pass 1 / Pass 2 phase error&quot;
-when preceded by an include file which
-contained labels, but was skipped in pass 2 (such as OS.h).</LI></UL><BR>
-<B>Version 2.71.F3h (Kevin Kofler, January 23, 2002)</B>
-<UL><LI>Bugfix: The TITLE (or TTL) directive did not work at all.
-It now works as it is supposed to.</LI>
-<LI>Bugfix: No longer crashes when trying to generate a
-listing file with cross-references (using the -x
-switch).</LI></UL><BR>
-<B>Version 2.71.F3g (Kevin Kofler, January 22, 2002)</B>
-<UL><LI>Bugfix: The RORG and PUBLIC directives are now recognized
-correctly even if the first letter is not
-capitalized. Thanks to Brandon Sterner for
-reporting the problem with the RORG directive.</LI></UL><BR>
-<B>Version 2.71.F3f (Kevin Kofler, January 8, 2002)</B>
-<UL><LI>Now also accepts &quot;;&quot;, and for the -v switch also &quot;=&quot;, as
-separator in command line arguments (wherever &quot;,&quot; is
-allowed), for compatibility with the &quot;-WA,&quot; switch in
-<CODE>tigcc</CODE>.</LI></UL><BR>
-<B>Version 2.71.F3e (Kevin Kofler, August 3, 2001)</B>
-<UL><LI>Bugfix: The SUB-&gt;LEA optimisation did not change the
-sign of the immediate value.</LI></UL><BR>
-<B>Version 2.71.F3d (Kevin Kofler, July 28, 2001)</B>
-<UL><LI>Bugfix: The ADD(A)/SUB(A)-&gt;LEA and LEA-&gt;ADDQ/SUBQ
-optimizations caused &quot;Pass 1 / Pass 2 phase
-errors&quot; if an optimization was known to be
-possible only in pass 2 (i.e. if using forward
-references to labels in the instruction). A68k
-will not try to optimize those anymore. Maybe a
-future version will provide support for this kind
-of optimization, but it is very difficult to
-implement.</LI>
-<LI>Bugfix: A68k did not compile correctly on Visual C++
-because I had done a define in an incorrect way.</LI></UL><BR>
-<B>Version 2.71.F3c (Kevin Kofler, July 20, 2001)</B>
-<UL><LI>Applied a few patches submitted by Paul Froissart:
-<UL><LI>A few more adaptations for compiling with Microsoft
-Visual C++. (Note that I still recommend using GCC for
-Mingw32.)</LI>
-<LI>A new command line switch:
-<DL><DT>-v<DD>Allows to set a variable in the command line (like
--d with GCC). The variable will be a SET, not EQU
-variable. Syntax: &quot;-v&lt;name&gt;[,&lt;value&gt;]&quot; (without
-spaces, and without the quotes). Note that &lt;value&gt;
-can only be a NUMBER at the moment. (We might
-support symbols as values in a future version.)
-The default value of &lt;value&gt; is 1.</DL></LI>
-<LI>Improved the optimization:
-<UL><LI>made optional the optimization which changes MOVEM
-with a single register to MOVE</LI>
-<LI>added an optional optimization which changes ADD(A)
-and SUB(A) to LEA when applicable</LI>
-<LI>added an optional optimization which changes LEA to
-ADDQ or SUBQ when applicable</LI>
-<LI>added a command line switch which allows you to
-selectively disable some optimizations:
-<DL><DT>-r<DD>Allows to disable specific optimizations:
-<TABLE CLASS="NOBORDER"><TR><TD CLASS="NOBORDER">-rm</TD><TD CLASS="NOBORDER">Disable the MOVEM -&gt; MOVE optimization</TD></TR>
-<TR><TD CLASS="NOBORDER">-ra</TD><TD CLASS="NOBORDER">Disable the ADD(A)/SUB(A) -&gt; LEA optimization</TD></TR>
-<TR><TD CLASS="NOBORDER">-rl</TD><TD CLASS="NOBORDER">Disable the LEA -&gt; ADDQ/SUBQ optimization</TD></TR></TABLE>
-You may use more than one -r switch (as in
-&quot;-rm -ra&quot;) or combine them into a single switch
-(as in &quot;-rma&quot;).
-You can still use -n to disable ALL optimizations
-(even those not covered by -r).</DL></LI></UL></LI>
-<LI>Added 2 more synonyms:
-<UL><LI>SLO = SCS</LI>
-<LI>SHS = SCC</LI></UL></LI>
-<LI>The END directive is now optional. If you do not use
-it, the assembly will automatically end at the end of
-your source file.</LI></UL></LI>
-<LI>Also fixed a bug found by Paul Froissart involving the
-reporting of invalid flags with the SECTION directive.
-(Not that anyone would use those flags anyway.)</LI>
-<LI>Adapted and applied a very old patch by John Antonishek,
-which allows you to define a symbol as XDEF even if it
-has been declared as XREF before. This is especially
-useful when using a common include file for globals.</LI>
-<LI>Moreover, END is not allowed in macros or include files
-anymore since that was causing a few bugs because A68k
-simply did not expect anyone to use it there. The
-quickest remedy is to simply remove the END instruction,
-since it is now optional anyway.</LI></UL><BR>
-<B>Version 2.71.F3b (Kevin Kofler, July 12, 2001)</B>
-<UL><LI>Bugfix: Now raises an error if an undefined local label is
-used.</LI>
-<LI>Bugfix: Branches coded with an explicit length (.W or .L)
-are not optimized (or flagged as optimizable)
-anymore.<BR>
-(In previous versions, .B or .S was not optimized,
-but .W or .L could be optimized to a short branch.
-Now, only branches without an explicit length will
-be optimized.)</LI>
-<LI>Bugfix: Quoted strings can now be passed as macro
-arguments without the need for '&lt;' and '&gt;', even
-if they contain spaces or separators (',' or ';').
-You can still use '&lt;' and '&gt;', for example in
-order to pass strings like &lt;129,' version'&gt; (which
-will appear as &quot;ß version&quot; on a TI-89/92/92+).</LI></UL><BR>
-<B>Version 2.71.F3a (Kevin Kofler, July 9, 2001)</B>
-<UL><LI>Win32 port for the TIGCC project, compiled with GCC for
-Mingw32.<BR>
-Even though we recommend Mingw32, A68k should also compile
-with Microsoft Visual C++, thanks to Paul Froissart.
-(Please do NOT ask me questions about compiling with
-Visual C++. I have just put in Paul Froissart's ifdefs.)
-It also compiles with Cygwin, but since the result is
-larger than the Mingw32 version, I do not see any benefit
-in using it.</LI>
-<LI>Bugfix: My Win32 port of v.2.71.F3 did not support labels
-or variable names which contain accented
-characters.</LI>
-<LI>Bugfix: Now detects all errors in include files. All
-include files will be treated in pass 2 if an
-error is detected.</LI>
-<LI>Bugfix by Paul Froissart: fixed a random crash bug due to
-a missing initialization</LI>
-<LI>Bugfix by Julien Muchembled: allow odd displacements for
-words and longwords if the
-resulting address might be
-even</LI>
-<LI>The Win32 version is now less greedy with the memory, so
-its limitations are less annoying:
-<UL><LI>lines can now be 256 bytes long (Paul Froissart)</LI>
-<LI>filenames (with path) can now be 259 bytes long (the
-Win32 maximum)</LI>
-<LI>the default heap sizes have also been increased (Paul
-Froissart)</LI></UL></LI>
-<LI>Added the following synonyms:
-<UL><LI>BLO = BCS</LI>
-<LI>BHS = BCC</LI>
-<LI>DBLO = DBCS</LI>
-<LI>DBHS = DBCC</LI>
-<LI>ROLX = ROXL</LI>
-<LI>RORX = ROXR</LI></UL></LI></UL><BR>
-<B>Version 2.71.F3 (David Ellsworth, July 11, 2000)</B>
-<UL><LI>Fixed a bug introduced by my modifications that prevented
-branches from being optimized in Global XRef mode.</LI></UL><BR>
-<B>Version 2.71.F2 (David Ellsworth, January 22, 1998)</B>
-<UL><LI>Made A68k properly differentiate between PC-relative and
-absolute references to external symbols. Allowed branches
-to reference external labels in Global XRef (-g parameter)
-mode.</LI></UL><BR>
-<B>Version 2.71.F1 (David Ellsworth, January 7, 1998)</B>
-<UL><LI>Made changes so that combinations of EQU, XREF, and XDEF
-directives work better together. These changes were made in
-order for Fargo II library linking to be easier to do.</LI>
-<LI>The F1 stands for Fargo patchlevel 1.</LI></UL><BR>
-<B>Version 2.71 (Charlie Gibbs, April 16, 1991)</B>
-<BR><BR>
-The following bugs in version 2.62 have been corrected:
-<UL><LI>Enforcer checks were being generated if command-line
-parameters that took a numeric value had no value or
-the value was invalid.  CalcValue was attempting to
-look up a label in the symbol table, which having not
-been allocated yet was causing a null pointer to be
-dereferenced.  (Patrick Quaid)</LI></UL>
-The following enhancements have been added:
-<UL><LI>Function prototyping has been added.  All function
-prototypes are in a new include file, protos.h, which
-is included by A68kdef.h.  Prototyping can be disabled
-(for compilers which do not support it) by defining
-the symbol __NOPROTO; in this case old-style function
-declarations are generated instead.</LI></UL><BR>
-<B>Version 2.70 (Charlie Gibbs, February 25, 1991)</B>
-<BR><BR>
-The following bugs in version 2.62 have been corrected:
-<UL><LI>The definition of tempstr in WriteSymTab (24 bytes)
-was being overrun in some cases, causing A68k to hang.
-Its length has been increased to MAXLINE.
-(Paul Gittings, John Antonishek)</LI>
-<LI>If A7 was in a list of registers in the source operand
-of a MOVEM instruction, all registers would be moved
-(i.e. the mask was set to 0xFFFF).  (Risto Kaivola)</LI>
-<LI>Octal or binary values that set bit 31 were being
-flagged as overflow errors.  (Harvey Taylor)</LI>
-<LI>ORGs were unnecessarily restricted when the -s flag was
-specified.  Everything should be absolute when S-records
-are generated, and any absolute ORG should be allowed.</LI></UL>
-The following enhancements have been added:
-<UL><LI>A new INCBIN directive has been added.  It takes a
-single operand, a file name whose contents are
-included as is at the current position in the
-object code file.  (Julian Gold, Colin Fox)</LI>
-<LI>The opcode TTL is now accepted as a synonym for TITLE.</LI>
-<LI>The file mode in the creat() call in xopen() has been
-changed from 1 to 0644; this provides a reasonable file
-mode when compiled on a Unix system.  (Paul Gittings)</LI>
-<LI>A new command-line keyword (-g) has been added.  It
-causes all undefined symbols to be treated as XREF.
-(Paul Gittings, Steve Hawtin (who provided the code))</LI>
-<LI>All initialized fields in opcodes.c have been made global
-for compatibilty with more compilers.  (Steve Hawtin)</LI>
-<LI>The register list in a MOVEM instruction can now be an
-immediate operand which specifies the actual mask bits.
-(Paul Gittings, who provided the code)</LI>
-<LI>The default value for the -q option has been changed
-from 10 to 100.</LI></UL><BR>
-<B>Version 2.62 (Charlie Gibbs, March 19, 1990)</B>
-<BR><BR>
-The following enhancements have been added:
-<UL><LI>A new command-line keyword (-m) has been added.
-It must be immediately followed by a number which
-specifies the offset from the beginning of a small
-data section to the base register specified in the
-NEAR directive (defaulting to A4).  If this parameter
-is omitted, the offset defaults to 32768 bytes.  This
-parameter is meaningful only if the NEAR directive
-is used.  (Colin Fox)</LI></UL><BR>
-<B>Version 2.61 (Charlie Gibbs, January 11, 1990)</B>
-<BR><BR>
-The following bugs in version 2.6 have been corrected:
-<UL><LI>ORG and RORG at the beginning of the program were
-being processed incorrectly.  (Jukka Jarvinen)</LI>
-<LI>A branch instruction to its own label, e.g.
-<PRE>lab	bra	lab</PRE>
-would cause phase errors; the instruction was
-being shortened on pass 2 but not on pass 1.
-(Kevin Hoare)</LI></UL>
-The following enhancements have been added:
-<UL><LI>Labels may begin with '@' if the next character
-is not numeric (to avoid confusion with octal
-constants).  (Colin Fox)</LI>
-<LI>Write errors now cause A68k to terminate gracefully
-with an appropriate error message.</LI></UL><BR>
-<B>Version 2.6 (Charlie Gibbs, November 2, 1989)</B>
-<BR><BR>
-The following bugs in version 2.5 have been corrected:
-<UL><LI>If a space is left between a file keyword and the file name
-(e.g. A68k -l foo.lst foo.asm) the source file was scratched.
-(E. Lenz)</LI>
-<LI>All code using post-increment addressing in references to
-toupper() has been reworked to avoid post-increment.  Such
-code does not work correctly if toupper() is a macro.
-(John K. Antonishek)</LI>
-<LI>The spelling of the include files A68kdef.h and A68kglb.h
-has been made correct as to case.  This simplifies porting
-to case-sensitive file systems.  (John K. Antonishek)</LI>
-<LI>If comments immediately follow the operands of an XDEF,
-XREF, or PUBLIC statement with no intervening white space
-(as in any of the following statements), A68k would hang:
-<PRE>	XDEF	foo;comments
-	XREF	bar;comments
-	PUBLIC	blah;comments</PRE>
-(Bruce Dawson)</LI>
-<LI>Numeric values (any radix) which do not fit into 32 bits
-were not being flagged.  (E. Lenz)</LI>
-<LI>DC statements with no operands were not being flagged.
-(E. Lenz)</LI>
-<LI>The -f option was suggesting short branches where the
-displacement would be zero, which is illegal.  (E. Lenz)</LI>
-<LI>Branches outside the current section had the offset
-set to zero.  (Matt Dillon, who provided a fix)</LI>
-<LI>ADDI, ANDI, CMPI, EORI, ORI, and SUBI instructions whose
-source operand was not immediate were not being flagged.
-(E. Lenz)</LI>
-<LI>Unary NOT of a byte or word immediate operand whose value
-was negative was being flagged as a size error.
-(John Aycock)</LI>
-<LI>All forward branches were rejected when the NEAR
-directive was active.  (Colin Fox)</LI></UL>
-The following enhancements have been added:
-<UL><LI>Single-byte immediate operands (e.g. MOVE.B #-1,(a0))
-are now padded with a high-order byte of zero, rather
-than being sign-extended.  (E. Lenz)</LI>
-<LI>The message &quot;Error in operand format.&quot; has been changed
-to &quot;Addressing mode not allowed here.&quot; in places where
-the latter message is more appropriate.</LI>
-<LI>If the -q option species a value of zero (or no value
-is given, defaulting to zero), all console output will
-be suppressed except for error messages, if any.
-(Matt Dillon)</LI>
-<LI>The 128-byte restriction on constant length no longer
-applies to the entire code generated by a single DCB
-statement; statements such as
-<PRE>	DCB.L	64,0</PRE>
-can now be handled.  (Colin Fox)</LI>
-<LI>Forward branches are now optimized.  The occasional
-instruction may be missed due to ripple effects, but
-this shouldn't happen frequently.  The -f switch
-will flag any such instructions.</LI>
-<LI>The -d switch can now be followed by an optional
-prefix string (with or without a leading !) which
-specifies which symbols should or should not be
-included in the symbol table dump.  (Lionel Hummel)</LI></UL><BR>
-<B>Version 2.5 (Charlie Gibbs, June 18, 1989)</B>
-<BR><BR>
-The following bugs in version 2.42 have been corrected:
-<UL><LI>Upon normal termination, A68k occasionally crashed in
-quit_cleanup by trying to free the relocation table twice.
-(Jeff Lydiatt and D. McClelland, who worked out a fix)</LI>
-<LI>MEMF_CHIP and MEMF_FAST bits were being set in the
-hunk length, rather than in the hunk type.  (Richard Man)</LI>
-<LI>BCHG.L, BCLR.L, BSET.L, and BTST.L were causing
-phase errors.  The test to ignore the .L specification
-(added in version 1.21) was being skipped in pass 1
-by an optimization added in version 2.4.  (David Hankins)</LI>
-<LI>PC-relative offset to a label was calculated as two bytes
-too great for MOVEM instructions.  (Tony Parkhurst)</LI></UL>
-The following enhancements have been added:
-<UL><LI>If the length code on an opcode is not .B, .W, .L, .S,
-or omitted, it will be flagged as an error.</LI>
-<LI>JMP.S and JSR.S are flagged as errors.  (Jim Butterfield)</LI>
-<LI>Operands of the form (xxxx).W and (xxxx).L are now
-supported.  This enables absolute short or absolute
-long addressing to be explicitly specified.</LI>
-<LI>All optimization can be disabled by the new -n switch.
-(David Hankins)</LI>
-<LI>The NEAR directive can now take a single operand, which
-can be any address register (or equated symbol) except
-A7.  If omitted, the register defaults to A4.</LI>
-<LI>Instructions of the form BTST Dn,#nn are no longer
-flagged.  This obscure variant is nonetheless legal.</LI></UL><BR>
-<B>Version 2.42 (Charlie Gibbs, January 10, 1989)</B>
-<BR><BR>
-The following bugs in version 2.41 have been corrected:
-<UL><LI>Small code/data conversion was sometimes taking place
-when no NEAR directive was active.  (Jeff Lydiatt)</LI></UL><BR>
-<B>Version 2.41 (Charlie Gibbs, January 6, 1989)</B>
-<BR><BR>
-The following bugs in version 2.4 have been corrected:
-<UL><LI>The second operand of LINK instructions was
-being erroneously flagged.</LI>
-<LI>If a macro was used before it was defined, it
-was being expanded during pass 2 but not during
-pass 1, causing severe phase errors.  Attempts
-to use a macro before it is defined will now
-be flagged as invalid opcodes.  (Colin Fox)</LI></UL><BR>
-<B>Version 2.4 (Charlie Gibbs, January 4, 1989)</B>
-<BR><BR>
-The following bugs in version 2.31 have been corrected:
-<UL><LI>If comments immediately followed the operands of
-a DC statement with no intervening white space,
-A68k would hang.  (Ulf Nordquist)</LI>
-<LI>In the following command:
-<PRE>a68k -w 15000 myprog.asm</PRE>
-the space between the -w and 15000 would cause A68k
-to look for a source file called &quot;15000&quot;, and to think
-that the object file is to be called &quot;myprog.asm&quot;.
-When it can't find &quot;15000&quot; it would display an error
-message and scratch &quot;myprog.asm&quot;.  (Jeff Lydiatt)</LI>
-<LI>If an INCLUDE file that is skipped on pass 2 contains
-a macro call, subsequent uses of \@ (macro sequence
-number are subsequently flagged.  The macro counter
-must be bumped along with the line number when
-skipping an INCLUDE.  (Colin Fox, Harvey Taylor)</LI></UL>
-The following enhancements have been added:
-<UL><LI>ORG and RORG are now fully implemented.</LI>
-<LI>The SET symbols A68k, a68K, and a68k are defined in the
-same way as A68K, making it effectively case-insensitive.
-(Colin Fox)</LI>
-<LI>MOVEM and REG now accept equated register names (EQUR)
-in register lists.  (Bruce Dawson)</LI>
-<LI>INCLUDE files will now be skipped on pass 2 even when
-a listing file is requested, if the listing has been
-turned off by a NOLIST directive before the INCLUDE,
-and is not turned on until after the end of the
-INCLUDE file has been reached.  (Colin Fox)</LI>
-<LI>A new switch (-f) causes forward branches (Bcc, BRA, BSR)
-that could be coded as short branches (Bcc.S etc.) to be
-flagged.  This flag is not considered to be an error.</LI>
-<LI>A limited small code / small data model has been provided.
-It is activated by a NEAR directive in the source code, and
-is de-activated by a FAR directive.  External variables
-must be declared at the beginning of the program, which
-must consist of only two sections (CODE and DATA or BSS).
-All forward data references are assumed to be PC-relative
-if in the CODE section, A4-relative if in the DATA/BSS
-section, and absolute word if absolute values.  Any
-forward references which cannot be resolved to one of
-these three in pass 2 will be flagged as errors, as will
-any attempt to define more than two sections.  A4 is
-assumed to point to the start of the DATA/BSS section
-plus 32768 bytes, and must be loaded by a MOVE.L
-instruction using immediate mode unless this instruction
-is not enclosed within NEAR and FAR directives.</LI>
-<LI>Miscellaneous optimizations, for speed, including:
-Most of the object code generator in pass 1 is bypassed.
-If GetValue gets a single term it takes a short cut.
-IsOperator now uses a table look-up.
-Instructions now only searches that portion of the
-opcode table whose opcodes start with the same letter
-as the OpCode being searched for.</LI></UL><BR>
-<B>Version 2.31 (Charlie Gibbs, November 30, 1988)</B>
-<BR><BR>
-The following bugs in version 2.3 have been corrected:
-<UL><LI>Even though a macro definition was being skipped
-by IFxx/ENDC, its ENDM directive was still being
-detected, causing spurious diagnostics.  (Harvey Taylor)</LI>
-<LI>NOP was not being recognized.  When moving all
-directives into the opcode table, NOL and NOLIST
-were placed after NOP, rather than before.  (Colin Fox)</LI>
-<LI>Symbols defined in the current module and declared
-as PUBLIC were not being written to the object code
-file when -d was specified.  (Colin Fox)</LI>
-<LI>Conversion of 0(An) to (An) (implemented in version
-1.2) was causing errors in the MOVEP instruction,
-which requires a displacement even if it is zero.
-This conversion is now disabled for MOVEP instructions.</LI>
-<LI>User macros containing invalid opcodes caused A68k
-to get lost when returning to the outer source file.
-(Colin Fox)</LI>
-<LI>Large values of -w (over 6000 or so) would cause
-a visit from the Guru.  The work field in HashIt
-was overflowing and going negative.  Changing it
-to unsigned corrected the problem.  (Colin Fox)</LI>
-<LI>Although user macros are no longer displayed when
--q is a negative number, the calling file's name
-was still being displayed at the end of the macro.</LI></UL><BR>
-<B>Version 2.3 (Charlie Gibbs, November 21, 1988)</B>
-<BR><BR>
-The following enhancements have been added:
-<UL><LI>All file I/O has been rewritten to use level 1 I/O
-(open, creat, close, read, write, and lseek) instead
-of level 2 I/O.  A68k now does its own buffering and
-unbuffering to reduce system overhead and increase speed.
-(Bruce Dawson)</LI>
-<LI>All assembler directives have been incorporated into
-the opcode table.  Since the opcode search now looks
-up directives as well, speed is increased.</LI>
-<LI>Miscellaneous code optimization for additional speed.</LI></UL><BR>
-<B>Version 2.2 (Charlie Gibbs, November 4, 1988)</B>
-<BR><BR>
-The following bugs in version 2.1 have been corrected:
-<UL><LI>Macro definitions within an INCLUDE file were
-disabling the test for skipping the file on pass 2.</LI>
-<LI>Errors encountered in an INCLUDE file on pass 1
-were not disabling the skip of the file on pass 2 -
-the pertinent error messages could not appear.</LI>
-<LI>XDEF information and optional symbol table dumps were
-not being written to the object code file for any
-hunks that did not contain relocatable code or data.
-(Colin Fox)</LI></UL>
-The following enhancements have been added:
-<UL><LI>If the -q option is specified as a negative value,
-user macros are no longer included in line number
-displays, reducing clutter.</LI>
-<LI>Some source code has been re-arranged to reduce size.</LI></UL><BR>
-<B>Version 2.1 (Charlie Gibbs, November 1, 1988)</B>
-<BR><BR>
-The following bugs in version 2.00 have been corrected:
-<UL><LI>Macro definitions that span two chunks of memory
-were causing garbage and probably a crash when
-the macro was being expanded.  Pointers were not
-being handled properly when linking the two chunks.</LI>
-<LI>Statements such as EQU and SET were not being flagged
-as illegal forward references if referencing a label
-defined on the same line, e.g.
-<PRE>LABEL	SET	LABEL+1</PRE></LI>
-<LI>The position within macros and INCLUDE files was
-sometimes out by one line when reported in error
-messages (and the new feature of the -q switch).</LI></UL>
-The following enhancements have been added:
-<UL><LI>If the -q option is specified as a negative value,
-line numbers will be displayed as positions within
-the current module (whose name is also displayed),
-rather than a total statement count.  (Bruce Dawson)</LI>
-<LI>INCLUDE files can be skipped on pass 2 even if they
-contain SET statements - the values of all symbols
-SET in the INCLUDE file are stored (as at the end
-of the file) in a separate table and are patched
-when the INCLUDE file is skipped.  (Bruce Dawson)</LI></UL><BR>
-<B>Version 2.00 (Charlie Gibbs, October 26, 1988)</B>
-<BR><BR>
-The following bugs in version 1.24 have been corrected:
-<UL><LI>The last digit of the statement number display
-(lengthened in version 1.24) was not being erased
-before displaying error messages.</LI>
-<LI>A68k would go into a loop if a user macro was
-missing an ENDC directive.  This error is now
-flagged (see below).</LI></UL>
-The following enhancements have been added:
-<UL><LI>The highest statement number displayed at the end of
-each pass is now left on the screen.  This means that,
-at the end of pass 1, you can always see how many lines
-A68k will have to process in pass 2, giving an idea of
-how how much longer you have to wait.  (Colin Fox)</LI>
-<LI>The symbol table is now built using a hashing algorithm.
-This eliminates the slowdown that occurs in pass 1 as
-the symbol table grows, due to the old insertion process.
-(Bruce Dawson)</LI>
-<LI>If A68k terminates abnormally for any reason (such as
-insufficient memory) the object file is scratched
-(unless the -k option is set).  (Bruce Dawson)</LI>
-<LI>Any INCLUDE files which cannot be found are flagged
-as errors in pass 1, and the assembly is aborted
-at the end of pass 1.  (Bruce Dawson)</LI>
-<LI>Missing ENDC directives are flagged in macro expansions.
-Also, missing or unpaired ENDC directives in user macros
-are flagged.</LI>
-<LI>If an INCLUDE file doesn't generate any code and no
-listing file is required, it won't be read again in
-pass 2.  The statement numbers will be bumped to keep
-in proper alignment.  This can really speed up
-assemblies that INCLUDE lots of equates.  (Colin Fox)</LI></UL><BR>
-<B>Version 1.24 (Charlie Gibbs, October 11, 1988)</B>
-<BR><BR>
-The following bugs in version 1.23 have been corrected:
-<UL><LI>MOVEA to a data register was not being flagged, even
-though all other invalid addressing modes were.</LI>
-<LI>Attempts to ORG out of the current hunk (including
-to an absolute address) were not being flagged.  (E. Lenz)</LI>
-<LI>If the size of the bottom of the primary heap (symbols
-and macro text) exceeded 32K, any further macro
-definitions would expand as endless garbage.  (Colin Fox)</LI>
-<LI>If the size of the bottom of the primary heap (symbols
-and macro text) exceeded 64K, any further external
-symbols (XDEF) would be flagged as relocatability
-errors upon each reference.  (Colin Fox)</LI></UL>
-The following enhancements have been added:
-<UL><LI>Where statement numbers are displayed as fixed-length
-fields, their maximum length has been increased
-from 4 digits to 5.  (Colin Fox)</LI>
-<LI>The PUBLIC directive has been implemented.
-As with the Aztec assembler, any labels defined as
-PUBLIC will be treated as XDEF if defined within
-the current module, and XREF otherwise.  (Jeff Lydiatt)</LI></UL><BR>
-<B>Version 1.23 (Charlie Gibbs, September 20, 1988)</B>
-<BR><BR>
-The following bugs in version 1.22 have been corrected:
-<UL><LI>The test for a third operand was producing erroneous
-error messages on instructions whose second operand
-was in immediate mode.  The '#' was not being taken
-into account, since it is not copied to DestOp.</LI></UL><BR>
-<B>Version 1.22 (Charlie Gibbs, August 31, 1988)</B>
-<BR><BR>
-The following bugs in version 1.21 have been corrected:
-<UL><LI>Expressions of the form R-A, where R is a relocatable
-term or expression and A is an absolute term or
-expression, were being flagged as relocation errors.
-This was due to a bug in the routine which should
-(but did not) flag expressions of the form A-R.
-(David Ashley)</LI>
-<LI>Instructions with three operands were not being
-flagged as errors.  This can be caused by an extra
-comma being typed in the instruction, as in:
-<PRE>	BTST #0,state+3,(a5)</PRE>
-The second comma should not be present.  (David Ashley)</LI></UL>
-The following enhancements have been added:
-<UL><LI>Excess spacing has been removed from the listing file.
-These changes are similar to those already made to the
-console output (probably at about version 1.05).</LI>
-<LI>If the first statement in the source file is TTL or
-PAGE, an empty page is no longer produced at the
-start of the listing.</LI></UL><BR>
-<B>Version 1.21 (Charlie Gibbs, July 29, 1988)</B>
-<BR><BR>
-The following bugs in version 1.2 have been corrected:
-<UL><LI>The instruction
-<PRE>	BTST.L	#8,D0</PRE>
-had a long-word value generated for the bit number.
-This bug also applies to BSET, BCLR, and BCHG.
-The .L specification is now ignored.  (Ulf Nordquist)</LI></UL><BR>
-<B>Version 1.2 (Charlie Gibbs, July 19, 1988)</B>
-<BR><BR>
-The following bugs in version 1.12 have been corrected:
-<UL><LI>A reference to the label of the current instruction
-was being converted to PC-relative on pass 2 but not
-on pass 1.  This was causing phase errors.  The label
-hasn't been added to the symbol table at the time the
-instruction is processed.  Conversion to PC-relative
-addressing will now not be attempted in this case,
-although references to * can and will be converted.</LI>
-<LI>All string-type DC statements, regardless of length,
-were being treated as DC.B.  For example, DC.L 'A'
-would generate only one byte of object code.
-(Gerald Hull)</LI>
-<LI>DC.W and DC.B statements were not being checked to
-ensure that their values would fit into a word or
-a byte respectively.</LI>
-<LI>If a comment line had white space preceding the
-asterisk, A68k would hang.  Actually, it was
-interpreting the asterisk as an opcode and trying
-to open a macro file called &quot;*&quot;.  Since under
-AmigaDOS such a file is the console, A68k was
-actually waiting for console input.</LI>
-<LI>If an instruction with no operands (such as RTS
-or NOP) followed MOVE.L #rel,D0 where &quot;rel&quot; was
-a relocatable symbol, the RTS (etc.) would have
-its nonexistent operands flagged as invalid.</LI>
-<LI>SECTION names enclosed in quotes were not being
-handled correctly.</LI>
-<LI>Source modules that did not generate any code, data,
-or BSS areas, but only defined symbols, such as
-<PRE>label	equ	4
-	xdef	label
-	end</PRE>
-were generating incomplete object modules.</LI></UL>
-The following enhancements have been added:
-<UL><LI>Jeff's experimental hunk code (prefixing hunk names
-with a sequence number before adding to the symbol
-table) has been permanently incorporated.  It seems
-to work better with BLink on programs that have
-hunks continued farther on in the source code.
-(Jeff Lydiatt)</LI>
-<LI>The macro parameter \0, which is replaced by the
-size specification in the macro call (B, W, or L,
-defaulting to W) is now supported.  (Gerald Hull)</LI>
-<LI>Operands of the form 0(An) will be treated as (An).
-(Bruce Dawson)</LI></UL><BR>
-<B>Version 1.12 (Charlie Gibbs, May 25, 1988)</B>
-<BR><BR>
-The following bugs in version 1.11 have been corrected:
-<UL><LI>If an instruction with no operands (e.g. RTS)
-followed a MOVE.L #label,D0 the RTS would be
-flagged with a relocatability error.  Src.Mode
-and Dest.Mode were not being cleared.  (Colin Fox)</LI></UL><BR>
-<B>Version 1.11 (Charlie Gibbs, April 6, 1988)</B>
-<BR><BR>
-The following bugs in version 1.10 have been corrected:
-<UL><LI>A68k would go into a loop while processing the
-arguments of a macro call, if these arguments are
-followed by comments separated from the arguments
-by one or more tab characters, and the -t switch
-is specified on the command line.  All tests for
-blanks have been replaced by calls to isspace().</LI>
-<LI>The operand alignment checks added in version 1.06
-were erroneously testing the following instructions:
-<UL><LI>BCHG</LI>
-<LI>BCLR</LI>
-<LI>BSET</LI>
-<LI>BTST</LI>
-<LI>NBCD</LI>
-<LI>Scc</LI>
-<LI>TAS</LI></UL>
-These instructions are now exempt from alignment checking.</LI></UL>
-The following enhancements have been added:
-<UL><LI>A listing file name can now be specified with the
--x switch; it is no longer necessary to specify
-both the -l and -x switches to produce a cross-
-reference listing with a name other than the default.</LI>
-<LI>DS statements with more than one operand are
-flagged and ignored (in case they should be DC).</LI>
-<LI>A character string used as a numeric value is
-flagged and set to zero if it is more than four
-characters long.</LI></UL><BR>
-<B>Version 1.10 (Charlie Gibbs, March 20, 1988)</B>
-<BR><BR>
-The following bugs in version 1.07 have been corrected:
-<UL><LI>BSS sections were not being written to the object
-code file except for a BSS section at the end of
-a program.  This is due to a bug in the code added
-in version 1.05 to overwrite null sections.</LI>
-<LI>If a source module contained a mixture of lengths
-(8, 16, or 32 bits) in external references (XREF)
-to the same label, all references were being treated
-as if they has the length of the first reference.</LI></UL>
-The following enhancements have been added:
-<UL><LI>DS operands that are either a forward references
-or relocatable are now flagged.</LI>
-<LI>Short branches (Bcc.S, including BRA and BSR) to
-the next instruction (i.e. a displacement of zero)
-are illegal - the processor takes the displacement
-from the next word.  Attempts to generate a short
-displacement of zero are now flagged.</LI></UL><BR>
-<B>Version 1.07 (Charlie Gibbs, March 11, 1988)</B>
-<BR><BR>
-The following bugs in version 1.06 have been corrected:
-<UL><LI>Instructions that take no operands (such as RTS)
-were being flagged if they had comments that were
-not preceded by a semicolon.</LI></UL>
-The following enhancements have been added:
-<UL><LI>The following synonyms have been added:
-<PRE>CSEG  for CODE (Aztec compatibility)
-DSEG  for DATA    &quot;          &quot;
-ENDIF for ENDC (Assempro compatibility)
-=     for EQU      &quot;           &quot;
-|     for !        &quot;           &quot;</PRE></LI>
-<LI>Strings and character values may be delimited by
-either apostrophes (') or quotation marks (&quot;).
-The character not used as a delimiter can be used
-within the string without doubling it.  For example,
-<PRE>  DC.B	&quot;This is Charlie's assembler&quot;</PRE>
-produces the same code as
-<PRE>  DC.B	'This is Charlie''s assembler';</PRE></LI>
-<LI>The object code file will be scratched if any errors
-were found, unless the -k (keep) flag is set.
-(Bruce Dawson)</LI>
-<LI>The symbol .A68K is automatically defined at the
-beginning of each assembly as a SET symbol with an
-absolute value of 1.  This enables programs to check
-whether they're being assembled by this assembler.
-(Jeff Lydiatt)</LI>
-<LI>The symbol table insertion routine has been
-greatly speeded up.</LI></UL><BR>
-<B>Version 1.06 (Charlie Gibbs, March 6, 1988)</B>
-<BR><BR>
-The following bugs in version 1.05 have been corrected:
-<UL><LI>Lines skipped by IFxx/ENDC were not being counted
-in the line number given in error messages.</LI>
-<LI>DATA and BSS sections may be unnamed, or have names
-the same as CODE sections.  Honest, I thought section
-names had to be unique even across types.</LI>
-<LI>CHIP and FAST options on the CODE, DATA, and BSS
-synonyms for the SECTION directive were not being
-handled correctly.</LI>
-<LI>XDEF records and symbol table records (if desired)
-were not being produced for symbols defined ahead
-of the first object-code producing instruction.</LI></UL>
-The following enhancements have been added:
-<UL><LI>The CNOP instruction can now force alignment
-relative to any boundary up to 128 bytes.
-The second operand must still be a power of 2.</LI>
-<LI>The -q switch has been added to change the frequency
-with which progress reports (current line number) are
-displayed on the console.  The default remains at
-every 10 lines (-q10).  If you specify -q (no interval)
-or -q0 the line number displays will be suppressed.
-This will make assemblies run slightly faster due to
-reduced console I/O.  (Bill Henning)</LI>
-<LI>The -t switch has been added to keep any tabs in the
-source file when producing the listing file, as well as
-generating tabs elsewhere whenever possible.  This
-speeds up assemblies and gives smaller listing files,
-but such listing files cannot be displayed on devices
-that do not assume a tab stop in every 8th position.
-(Bruce Dawson)</LI>
-<LI>Any single-operand instruction with two operands,
-and any no-operand instruction with any operands,
-will be flagged.</LI>
-<LI>Relocatable 8- or 16-bit immediate operands
-will be flagged.  They blow up BLink.</LI>
-<LI>Named local labels are now supported.  Their names
-are formed in the same way as normal labels, but are
-then preceded by a backslash.  Their scope is the
-same as normal local labels (nnn$).  (Colin Fox)</LI>
-<LI>An alignment error will be flagged in the following cases:
-<UL><LI>Odd displacement on a LINK instruction</LI>
-<LI>Bcc or DBcc to an odd address</LI>
-<LI>In any word or long-word instruction, any operand
-using the following addressing modes:
-<UL><LI>Address register indirect with displacement</LI>
-<LI>Address register indirect with index and displacement</LI>
-<LI>Absolute short</LI>
-<LI>Absolute long</LI>
-<LI>Program counter indirect with displacement</LI>
-<LI>Program counter indirect with index and displacement</LI></UL></LI>
-<LI>LEA and PEA instructions are exempt from these tests.</LI></UL></LI>
-<LI>If a section is found to contain no data, A68k will
-back up to its beginning and overwrite it with the
-next section.  The result is that null sections
-will no longer appear in the object file.</LI></UL><BR>
-<B>Version 1.05 (Charlie Gibbs, October 30, 1987)</B>
-<BR><BR>
-The following bugs in version 1.04 have been corrected:
-<UL><LI>If a section was continued later in the program, e.g.
-<PRE>	SECTION	prog,CODE
-	  &lt;code&gt;
-	SECTION	variables,BSS
-	  &lt;DS statements&gt;
-	SECTION	prog,CODE
-	  &lt;more code&gt;</PRE>
-bad relocation information was being generated for
-the continuation of the SECTION.  This bug was left
-over from version 1.03.</LI></UL>
-The following enhancements have been added:
-<UL><LI>All console output except for error messages is now
-sent to stderr - this enables stdout to be redirected,
-producing an error file.</LI>
-<LI>Console (stderr) output has been modified to require
-fewer lines on the screen.</LI>
-<LI>If an error occurs while expanding a macro or INCLUDE
-file, the position of the call in each outer file is
-given along with the position in the current (innermost)
-file.  Tracing continues until the outermost file (i.e.
-the original source file) is reached.</LI></UL><BR>
-<B>Version 1.04 (Charlie Gibbs, October 21, 1987)</B>
-<BR><BR>
-The following bugs in version 1.03 have been corrected:
-<UL><LI>MOVE was being converted to MOVEQ regardless of
-operand size - this conversion is legal only
-for longword MOVEs.</LI>
-<LI>Modifications to version 1.03 caused bad relocatable
-entries to be generated.</LI></UL><BR>
-<B>Version 1.03 (Charlie Gibbs, October 14, 1987)</B>
-<BR><BR>
-The following bugs in version 1.02 have been corrected:
-<UL><LI>The following situation was causing phase errors:
-<PRE>	xdef	label
-	bra	label
-	 .
-    &lt;at least 128 bytes of object code&gt;
-	 .
-label:</PRE>
-(The XDEF was fooling A68k into thinking that &quot;label&quot;
-was defined within 128 bytes of the BRA instruction
-on pass 1, although on pass 2 it knew better.</LI>
-<LI>If the first operand of an two-operand executable
-instruction contained a character term containing a
-left or right parenthesis, it would generate error
-messages and be incorrectly evaluated.</LI>
-<LI>Labels that don't begin in column 1 (denoted by a
-trailing colon) caused a Guru Meditation.</LI>
-<LI>Certain ADD and SUB instructions using PC-relative
-addressing may cause phase errors.  If the displacement
-is in the range 1 to 8 inclusive, the instruction was
-erroneously converted to ADDQ or SUBQ during pass 2.</LI></UL>
-The following enhancements have been added:
-<UL><LI>The -z option has been added to display the
-current source program line on stdout as it
-is read, optionally over a given range.
-This feature is provided for debugging purposes.</LI>
-<LI>Bcc, BSR, and DBcc to labels in other than the current
-section is now supported.  A 16-bit relocation entry
-will be generated for each such reference.</LI>
-<LI>PC relative mode will be generated for backward
-references to labels within the current CODE section
-if legal for the current instruction.  Forward
-references will not be converted, since there is
-no way of telling which section the label is in
-during pass 1.</LI>
-<LI>The cumulative sizes of all sections by type (i.e.
-CODE, DATA, and BSS) will be displayed at the end
-of the listing file and the console display.
-(Bruce Dawson)</LI>
-<LI>In the symbol table dump, section names will no
-longer be indicated just as SECTION, but rather
-as CODE, DATA, or BSS, depending on type.</LI></UL><BR>
-<B>Version 1.02 (Charlie Gibbs, September 9, 1987)</B>
-<BR><BR>
-The following bugs in version 1.01 have been corrected:
-<UL><LI>Duplicate labels were not being flagged.</LI>
-<LI>XDEF symbols were not being dumped to the
-object code file when the -d option was set.</LI></UL>
-The following enhancements have been added:
-<UL><LI>A header file is now supported.  If the parameter
--h&lt;filespec&gt; is included on the command line, the
-specified file will be included as if the source
-file's first line was &quot; include &lt;filespec&gt;&quot;.
-The file specification may include a path name,
-although the include path names given by the
--i parameter (if any) will also be searched.</LI>
-<LI>An equate file can now be produced.  If the parameter
--e&lt;filespec&gt; is included on the command line, a file
-will be written containing EQU statements for any
-symbol whose value is absolute.  If -e is specified
-without &lt;filespec&gt;, the name of the file will be
-formed in the same way as the list file, except with
-an extension of &quot;.equ&quot;.  (Bruce Dawson)</LI></UL>
-The following changes have been made to existing logic:
-<UL><LI>No symbol table dump will be produced unless the
--x (cross-reference) switch is set.  Formerly a
-symbol table dump was always produced, with only
-the cross-reference portion optional.</LI></UL><BR>
-<B>Version 1.01 (Charlie Gibbs, August 20, 1987)</B>
-<BR><BR>
-The following bugs in version 1.00 have been corrected:
-<UL><LI>Long-word constants and storage areas were being
-aligned on a double-word boundary.  The only place
-where double-word alignment is now forced is at a
-break between SECTIONs, since the length of an
-AmigaDOS hunk must be a multiple of 4 bytes.
-(CNOP 0,4 can still be used if double-word
-alignment is desired by the programmer.)</LI>
-<LI>If a label on an END statement or the first statement
-of a SECTION was named in an XDEF statement, it would
-not be written to the object code file.  The latter
-case includes both the label of a SECTION directive
-and the label of the first executable instruction in
-the absence of any SECTION directives (defaulting to
-an unnamed CODE section).  In the final case (default
-unnamed CODE section), references to XREF symbols
-in the first statement would also not be written
-to the object code file.</LI>
-<LI>If the last statement in the source file was not
-terminated with a newline character (premature EOF),
-it was being ignored altogether.</LI>
-<LI>A register list as the source operand of a MOVE
-instruction was not being flagged as an error.
-(MOVE to a register list was being flagged, however.)</LI>
-<LI>MOVE from USP was generating incorrect code.  Also,
-MOVE from SR or CCR to an address register was
-generating incorrect code rather than being flagged.</LI></UL><BR>
-<B>Version 1.00 (Charlie Gibbs, June 18, 1987) - initial release</B>
+[Main]
+Title=History of A68k
+
+[Top]
+<B>Note:</B> This section has been added to the documentation by the TIGCC Team. It was in <I>history.txt</I> before.
+<BR><BR>
+<B>Version 2.71.F3w (Kevin Kofler, July 27, 2006)</B>
+<UL><LI>Bugfix: Fixed compilation on *BSD and recent versions of OS X.</LI></UL>
+<B>Version 2.71.F3v (Kevin Kofler, July 31, 2005)</B>
+<UL><LI>Bugfix: Don't crash on EQUs doing arithmetic with other EQUs which do
+arithmetic with undefined symbols, print an error instead.</LI></UL>
+<B>Version 2.71.F3u (Kevin Kofler, February 2, 2005)</B>
+<UL><LI>Bugfix: Fixed compilation with GCC 3.4.</LI></UL>
+<B>Version 2.71.F3t (Kevin Kofler, January 31, 2005)</B>
+<UL><LI>Added: NO_UNOPTIMIZABLE_RELOCS compile-time define (disabled by default)
+to allow generating AmigaOS-compatible object files again.</LI>
+<LI>Improved: Branches explicitly coded as .w are now marked unoptimizable.</LI>
+<LI>Improved: Label references explicitly coded as .l are now marked
+unoptimizable.</LI>
+<LI>Bugfix: Emitting relocations for undefined symbols which are already in
+the symbol table due to the forward branch optimization code now
+works properly.</LI></UL>
+<B>Version 2.71.F3s (Kevin Kofler, September 21, 2004)</B>
+<UL><LI>Added: Support for the "unoptimizable reloc" flag, keeping the linker
+from corrupting some instructions when optimizing.</LI>
+<LI>Improved: All platforms now use the same maximum line length and chunk
+sizes.</LI>
+<LI>Improved: The line count limit has been raised from 32767 to INT_MAX.</LI></UL>
+<B>Version 2.71.F3r (Kevin Kofler, July 19, 2004)</B>
+<UL><LI>Bugfix: Fixed label(PC,Rn) addressing when "label" was in a different
+section (again) (reported by Julien Moutinho).</LI></UL>
+<B>Version 2.71.F3q (Kevin Kofler, December 30, 2003)</B>
+<UL><LI>Bugfix: Fixed label1-label2(an) in all-relocs mode (reported by
+hwti).</LI>
+<LI>Added: (In all-relocs mode,) don't emit an address difference when the 2
+labels are actually at the same address (or simply the same). This allows to
+keep optimizing label1-label1(an) into (an).</LI>
+<LI>Bugfix: Fixed a bug when range-checking branches in all-relocs mode
+(reported by hwti).</LI>
+<LI>Bugfix: Fixed a bug when range-checking short branches in all-relocs mode or
+to a different section (reported by hwti).</LI></UL>
+<B>Version 2.71.F3p (Kevin Kofler, December 1, 2003)</B>
+<UL><LI>Bugfix: Fixed label(PC,Rn) addressing in all-relocs mode or when "label" was
+in a different section (reported by Matthieu Gallet).</LI></UL>
+<B>Version 2.71.F3o (Kevin Kofler, October 5, 2003)</B>
+<UL><LI>Bugfix: Range checking now works correctly in all-relocs mode. (No more
+spurious out-of-range errors.)</LI></UL>
+<B>Version 2.71.F3n (Kevin Kofler, September 28, 2003)</B>
+<UL><LI>Bugfix: Local labels now work in all-relocs mode.</LI></UL>
+<B>Version 2.71.F3m (Kevin Kofler, September 2, 2003)</B>
+<UL><LI>Bugfix: PC-relative or indexed references to other sections didn't work.</LI>
+<LI>Bugfix: x(PC,Dn) or x(PC,An) didn't work in all-relocs mode.</LI></UL>
+<B>Version 2.71.F3l (Kevin Kofler, July 15, 2003)</B>
+<UL><LI>Added: The -u switch now also allows unaligned code, which can be useful
+when the code will be copied somewhere else anyway.</LI>
+<LI>Added: Short branches across hunks or object files are now allowed.</LI>
+<LI>Added: -a (All relocs) switch, which tells A68k to emit all relocs, even
+PC-relative relocs within a section. It also emits address
+differences in a special TIGCC-specific format. This will allow
+more aggressive linker-side optimization.</LI></UL>
+<B>Version 2.71.F3k (Kevin Kofler, May 17, 2003)</B>
+<UL><LI>Bugfix: Increased the forward reference buffer in order to allow
+multiple labels at the same location, as used in PedroM.</LI>
+<LI>Added: -u (Unaligned) switch, which disables automatic alignment of
+DC.W, DC.L, DCB.W, DCB.L, DS.W and DS.L.</LI></UL><BR>
+<B>Version 2.71.F3i (Kevin Kofler, February 1, 2002)</B>
+<UL><LI>Bugfix: Local labels caused a &quot;Pass 1 / Pass 2 phase error&quot;
+when preceded by an include file which
+contained labels, but was skipped in pass 2 (such as OS.h).</LI></UL><BR>
+<B>Version 2.71.F3h (Kevin Kofler, January 23, 2002)</B>
+<UL><LI>Bugfix: The TITLE (or TTL) directive did not work at all.
+It now works as it is supposed to.</LI>
+<LI>Bugfix: No longer crashes when trying to generate a
+listing file with cross-references (using the -x
+switch).</LI></UL><BR>
+<B>Version 2.71.F3g (Kevin Kofler, January 22, 2002)</B>
+<UL><LI>Bugfix: The RORG and PUBLIC directives are now recognized
+correctly even if the first letter is not
+capitalized. Thanks to Brandon Sterner for
+reporting the problem with the RORG directive.</LI></UL><BR>
+<B>Version 2.71.F3f (Kevin Kofler, January 8, 2002)</B>
+<UL><LI>Now also accepts &quot;;&quot;, and for the -v switch also &quot;=&quot;, as
+separator in command line arguments (wherever &quot;,&quot; is
+allowed), for compatibility with the &quot;-WA,&quot; switch in
+<CODE>tigcc</CODE>.</LI></UL><BR>
+<B>Version 2.71.F3e (Kevin Kofler, August 3, 2001)</B>
+<UL><LI>Bugfix: The SUB-&gt;LEA optimisation did not change the
+sign of the immediate value.</LI></UL><BR>
+<B>Version 2.71.F3d (Kevin Kofler, July 28, 2001)</B>
+<UL><LI>Bugfix: The ADD(A)/SUB(A)-&gt;LEA and LEA-&gt;ADDQ/SUBQ
+optimizations caused &quot;Pass 1 / Pass 2 phase
+errors&quot; if an optimization was known to be
+possible only in pass 2 (i.e. if using forward
+references to labels in the instruction). A68k
+will not try to optimize those anymore. Maybe a
+future version will provide support for this kind
+of optimization, but it is very difficult to
+implement.</LI>
+<LI>Bugfix: A68k did not compile correctly on Visual C++
+because I had done a define in an incorrect way.</LI></UL><BR>
+<B>Version 2.71.F3c (Kevin Kofler, July 20, 2001)</B>
+<UL><LI>Applied a few patches submitted by Paul Froissart:
+<UL><LI>A few more adaptations for compiling with Microsoft
+Visual C++. (Note that I still recommend using GCC for
+Mingw32.)</LI>
+<LI>A new command line switch:
+<DL><DT>-v<DD>Allows to set a variable in the command line (like
+-d with GCC). The variable will be a SET, not EQU
+variable. Syntax: &quot;-v&lt;name&gt;[,&lt;value&gt;]&quot; (without
+spaces, and without the quotes). Note that &lt;value&gt;
+can only be a NUMBER at the moment. (We might
+support symbols as values in a future version.)
+The default value of &lt;value&gt; is 1.</DL></LI>
+<LI>Improved the optimization:
+<UL><LI>made optional the optimization which changes MOVEM
+with a single register to MOVE</LI>
+<LI>added an optional optimization which changes ADD(A)
+and SUB(A) to LEA when applicable</LI>
+<LI>added an optional optimization which changes LEA to
+ADDQ or SUBQ when applicable</LI>
+<LI>added a command line switch which allows you to
+selectively disable some optimizations:
+<DL><DT>-r<DD>Allows to disable specific optimizations:
+<TABLE CLASS="NOBORDER"><TR><TD CLASS="NOBORDER">-rm</TD><TD CLASS="NOBORDER">Disable the MOVEM -&gt; MOVE optimization</TD></TR>
+<TR><TD CLASS="NOBORDER">-ra</TD><TD CLASS="NOBORDER">Disable the ADD(A)/SUB(A) -&gt; LEA optimization</TD></TR>
+<TR><TD CLASS="NOBORDER">-rl</TD><TD CLASS="NOBORDER">Disable the LEA -&gt; ADDQ/SUBQ optimization</TD></TR></TABLE>
+You may use more than one -r switch (as in
+&quot;-rm -ra&quot;) or combine them into a single switch
+(as in &quot;-rma&quot;).
+You can still use -n to disable ALL optimizations
+(even those not covered by -r).</DL></LI></UL></LI>
+<LI>Added 2 more synonyms:
+<UL><LI>SLO = SCS</LI>
+<LI>SHS = SCC</LI></UL></LI>
+<LI>The END directive is now optional. If you do not use
+it, the assembly will automatically end at the end of
+your source file.</LI></UL></LI>
+<LI>Also fixed a bug found by Paul Froissart involving the
+reporting of invalid flags with the SECTION directive.
+(Not that anyone would use those flags anyway.)</LI>
+<LI>Adapted and applied a very old patch by John Antonishek,
+which allows you to define a symbol as XDEF even if it
+has been declared as XREF before. This is especially
+useful when using a common include file for globals.</LI>
+<LI>Moreover, END is not allowed in macros or include files
+anymore since that was causing a few bugs because A68k
+simply did not expect anyone to use it there. The
+quickest remedy is to simply remove the END instruction,
+since it is now optional anyway.</LI></UL><BR>
+<B>Version 2.71.F3b (Kevin Kofler, July 12, 2001)</B>
+<UL><LI>Bugfix: Now raises an error if an undefined local label is
+used.</LI>
+<LI>Bugfix: Branches coded with an explicit length (.W or .L)
+are not optimized (or flagged as optimizable)
+anymore.<BR>
+(In previous versions, .B or .S was not optimized,
+but .W or .L could be optimized to a short branch.
+Now, only branches without an explicit length will
+be optimized.)</LI>
+<LI>Bugfix: Quoted strings can now be passed as macro
+arguments without the need for '&lt;' and '&gt;', even
+if they contain spaces or separators (',' or ';').
+You can still use '&lt;' and '&gt;', for example in
+order to pass strings like &lt;129,' version'&gt; (which
+will appear as &quot;ß version&quot; on a TI-89/92/92+).</LI></UL><BR>
+<B>Version 2.71.F3a (Kevin Kofler, July 9, 2001)</B>
+<UL><LI>Win32 port for the TIGCC project, compiled with GCC for
+Mingw32.<BR>
+Even though we recommend Mingw32, A68k should also compile
+with Microsoft Visual C++, thanks to Paul Froissart.
+(Please do NOT ask me questions about compiling with
+Visual C++. I have just put in Paul Froissart's ifdefs.)
+It also compiles with Cygwin, but since the result is
+larger than the Mingw32 version, I do not see any benefit
+in using it.</LI>
+<LI>Bugfix: My Win32 port of v.2.71.F3 did not support labels
+or variable names which contain accented
+characters.</LI>
+<LI>Bugfix: Now detects all errors in include files. All
+include files will be treated in pass 2 if an
+error is detected.</LI>
+<LI>Bugfix by Paul Froissart: fixed a random crash bug due to
+a missing initialization</LI>
+<LI>Bugfix by Julien Muchembled: allow odd displacements for
+words and longwords if the
+resulting address might be
+even</LI>
+<LI>The Win32 version is now less greedy with the memory, so
+its limitations are less annoying:
+<UL><LI>lines can now be 256 bytes long (Paul Froissart)</LI>
+<LI>filenames (with path) can now be 259 bytes long (the
+Win32 maximum)</LI>
+<LI>the default heap sizes have also been increased (Paul
+Froissart)</LI></UL></LI>
+<LI>Added the following synonyms:
+<UL><LI>BLO = BCS</LI>
+<LI>BHS = BCC</LI>
+<LI>DBLO = DBCS</LI>
+<LI>DBHS = DBCC</LI>
+<LI>ROLX = ROXL</LI>
+<LI>RORX = ROXR</LI></UL></LI></UL><BR>
+<B>Version 2.71.F3 (David Ellsworth, July 11, 2000)</B>
+<UL><LI>Fixed a bug introduced by my modifications that prevented
+branches from being optimized in Global XRef mode.</LI></UL><BR>
+<B>Version 2.71.F2 (David Ellsworth, January 22, 1998)</B>
+<UL><LI>Made A68k properly differentiate between PC-relative and
+absolute references to external symbols. Allowed branches
+to reference external labels in Global XRef (-g parameter)
+mode.</LI></UL><BR>
+<B>Version 2.71.F1 (David Ellsworth, January 7, 1998)</B>
+<UL><LI>Made changes so that combinations of EQU, XREF, and XDEF
+directives work better together. These changes were made in
+order for Fargo II library linking to be easier to do.</LI>
+<LI>The F1 stands for Fargo patchlevel 1.</LI></UL><BR>
+<B>Version 2.71 (Charlie Gibbs, April 16, 1991)</B>
+<BR><BR>
+The following bugs in version 2.62 have been corrected:
+<UL><LI>Enforcer checks were being generated if command-line
+parameters that took a numeric value had no value or
+the value was invalid.  CalcValue was attempting to
+look up a label in the symbol table, which having not
+been allocated yet was causing a null pointer to be
+dereferenced.  (Patrick Quaid)</LI></UL>
+The following enhancements have been added:
+<UL><LI>Function prototyping has been added.  All function
+prototypes are in a new include file, protos.h, which
+is included by A68kdef.h.  Prototyping can be disabled
+(for compilers which do not support it) by defining
+the symbol __NOPROTO; in this case old-style function
+declarations are generated instead.</LI></UL><BR>
+<B>Version 2.70 (Charlie Gibbs, February 25, 1991)</B>
+<BR><BR>
+The following bugs in version 2.62 have been corrected:
+<UL><LI>The definition of tempstr in WriteSymTab (24 bytes)
+was being overrun in some cases, causing A68k to hang.
+Its length has been increased to MAXLINE.
+(Paul Gittings, John Antonishek)</LI>
+<LI>If A7 was in a list of registers in the source operand
+of a MOVEM instruction, all registers would be moved
+(i.e. the mask was set to 0xFFFF).  (Risto Kaivola)</LI>
+<LI>Octal or binary values that set bit 31 were being
+flagged as overflow errors.  (Harvey Taylor)</LI>
+<LI>ORGs were unnecessarily restricted when the -s flag was
+specified.  Everything should be absolute when S-records
+are generated, and any absolute ORG should be allowed.</LI></UL>
+The following enhancements have been added:
+<UL><LI>A new INCBIN directive has been added.  It takes a
+single operand, a file name whose contents are
+included as is at the current position in the
+object code file.  (Julian Gold, Colin Fox)</LI>
+<LI>The opcode TTL is now accepted as a synonym for TITLE.</LI>
+<LI>The file mode in the creat() call in xopen() has been
+changed from 1 to 0644; this provides a reasonable file
+mode when compiled on a Unix system.  (Paul Gittings)</LI>
+<LI>A new command-line keyword (-g) has been added.  It
+causes all undefined symbols to be treated as XREF.
+(Paul Gittings, Steve Hawtin (who provided the code))</LI>
+<LI>All initialized fields in opcodes.c have been made global
+for compatibilty with more compilers.  (Steve Hawtin)</LI>
+<LI>The register list in a MOVEM instruction can now be an
+immediate operand which specifies the actual mask bits.
+(Paul Gittings, who provided the code)</LI>
+<LI>The default value for the -q option has been changed
+from 10 to 100.</LI></UL><BR>
+<B>Version 2.62 (Charlie Gibbs, March 19, 1990)</B>
+<BR><BR>
+The following enhancements have been added:
+<UL><LI>A new command-line keyword (-m) has been added.
+It must be immediately followed by a number which
+specifies the offset from the beginning of a small
+data section to the base register specified in the
+NEAR directive (defaulting to A4).  If this parameter
+is omitted, the offset defaults to 32768 bytes.  This
+parameter is meaningful only if the NEAR directive
+is used.  (Colin Fox)</LI></UL><BR>
+<B>Version 2.61 (Charlie Gibbs, January 11, 1990)</B>
+<BR><BR>
+The following bugs in version 2.6 have been corrected:
+<UL><LI>ORG and RORG at the beginning of the program were
+being processed incorrectly.  (Jukka Jarvinen)</LI>
+<LI>A branch instruction to its own label, e.g.
+<PRE>lab	bra	lab</PRE>
+would cause phase errors; the instruction was
+being shortened on pass 2 but not on pass 1.
+(Kevin Hoare)</LI></UL>
+The following enhancements have been added:
+<UL><LI>Labels may begin with '@' if the next character
+is not numeric (to avoid confusion with octal
+constants).  (Colin Fox)</LI>
+<LI>Write errors now cause A68k to terminate gracefully
+with an appropriate error message.</LI></UL><BR>
+<B>Version 2.6 (Charlie Gibbs, November 2, 1989)</B>
+<BR><BR>
+The following bugs in version 2.5 have been corrected:
+<UL><LI>If a space is left between a file keyword and the file name
+(e.g. A68k -l foo.lst foo.asm) the source file was scratched.
+(E. Lenz)</LI>
+<LI>All code using post-increment addressing in references to
+toupper() has been reworked to avoid post-increment.  Such
+code does not work correctly if toupper() is a macro.
+(John K. Antonishek)</LI>
+<LI>The spelling of the include files A68kdef.h and A68kglb.h
+has been made correct as to case.  This simplifies porting
+to case-sensitive file systems.  (John K. Antonishek)</LI>
+<LI>If comments immediately follow the operands of an XDEF,
+XREF, or PUBLIC statement with no intervening white space
+(as in any of the following statements), A68k would hang:
+<PRE>	XDEF	foo;comments
+	XREF	bar;comments
+	PUBLIC	blah;comments</PRE>
+(Bruce Dawson)</LI>
+<LI>Numeric values (any radix) which do not fit into 32 bits
+were not being flagged.  (E. Lenz)</LI>
+<LI>DC statements with no operands were not being flagged.
+(E. Lenz)</LI>
+<LI>The -f option was suggesting short branches where the
+displacement would be zero, which is illegal.  (E. Lenz)</LI>
+<LI>Branches outside the current section had the offset
+set to zero.  (Matt Dillon, who provided a fix)</LI>
+<LI>ADDI, ANDI, CMPI, EORI, ORI, and SUBI instructions whose
+source operand was not immediate were not being flagged.
+(E. Lenz)</LI>
+<LI>Unary NOT of a byte or word immediate operand whose value
+was negative was being flagged as a size error.
+(John Aycock)</LI>
+<LI>All forward branches were rejected when the NEAR
+directive was active.  (Colin Fox)</LI></UL>
+The following enhancements have been added:
+<UL><LI>Single-byte immediate operands (e.g. MOVE.B #-1,(a0))
+are now padded with a high-order byte of zero, rather
+than being sign-extended.  (E. Lenz)</LI>
+<LI>The message &quot;Error in operand format.&quot; has been changed
+to &quot;Addressing mode not allowed here.&quot; in places where
+the latter message is more appropriate.</LI>
+<LI>If the -q option species a value of zero (or no value
+is given, defaulting to zero), all console output will
+be suppressed except for error messages, if any.
+(Matt Dillon)</LI>
+<LI>The 128-byte restriction on constant length no longer
+applies to the entire code generated by a single DCB
+statement; statements such as
+<PRE>	DCB.L	64,0</PRE>
+can now be handled.  (Colin Fox)</LI>
+<LI>Forward branches are now optimized.  The occasional
+instruction may be missed due to ripple effects, but
+this shouldn't happen frequently.  The -f switch
+will flag any such instructions.</LI>
+<LI>The -d switch can now be followed by an optional
+prefix string (with or without a leading !) which
+specifies which symbols should or should not be
+included in the symbol table dump.  (Lionel Hummel)</LI></UL><BR>
+<B>Version 2.5 (Charlie Gibbs, June 18, 1989)</B>
+<BR><BR>
+The following bugs in version 2.42 have been corrected:
+<UL><LI>Upon normal termination, A68k occasionally crashed in
+quit_cleanup by trying to free the relocation table twice.
+(Jeff Lydiatt and D. McClelland, who worked out a fix)</LI>
+<LI>MEMF_CHIP and MEMF_FAST bits were being set in the
+hunk length, rather than in the hunk type.  (Richard Man)</LI>
+<LI>BCHG.L, BCLR.L, BSET.L, and BTST.L were causing
+phase errors.  The test to ignore the .L specification
+(added in version 1.21) was being skipped in pass 1
+by an optimization added in version 2.4.  (David Hankins)</LI>
+<LI>PC-relative offset to a label was calculated as two bytes
+too great for MOVEM instructions.  (Tony Parkhurst)</LI></UL>
+The following enhancements have been added:
+<UL><LI>If the length code on an opcode is not .B, .W, .L, .S,
+or omitted, it will be flagged as an error.</LI>
+<LI>JMP.S and JSR.S are flagged as errors.  (Jim Butterfield)</LI>
+<LI>Operands of the form (xxxx).W and (xxxx).L are now
+supported.  This enables absolute short or absolute
+long addressing to be explicitly specified.</LI>
+<LI>All optimization can be disabled by the new -n switch.
+(David Hankins)</LI>
+<LI>The NEAR directive can now take a single operand, which
+can be any address register (or equated symbol) except
+A7.  If omitted, the register defaults to A4.</LI>
+<LI>Instructions of the form BTST Dn,#nn are no longer
+flagged.  This obscure variant is nonetheless legal.</LI></UL><BR>
+<B>Version 2.42 (Charlie Gibbs, January 10, 1989)</B>
+<BR><BR>
+The following bugs in version 2.41 have been corrected:
+<UL><LI>Small code/data conversion was sometimes taking place
+when no NEAR directive was active.  (Jeff Lydiatt)</LI></UL><BR>
+<B>Version 2.41 (Charlie Gibbs, January 6, 1989)</B>
+<BR><BR>
+The following bugs in version 2.4 have been corrected:
+<UL><LI>The second operand of LINK instructions was
+being erroneously flagged.</LI>
+<LI>If a macro was used before it was defined, it
+was being expanded during pass 2 but not during
+pass 1, causing severe phase errors.  Attempts
+to use a macro before it is defined will now
+be flagged as invalid opcodes.  (Colin Fox)</LI></UL><BR>
+<B>Version 2.4 (Charlie Gibbs, January 4, 1989)</B>
+<BR><BR>
+The following bugs in version 2.31 have been corrected:
+<UL><LI>If comments immediately followed the operands of
+a DC statement with no intervening white space,
+A68k would hang.  (Ulf Nordquist)</LI>
+<LI>In the following command:
+<PRE>a68k -w 15000 myprog.asm</PRE>
+the space between the -w and 15000 would cause A68k
+to look for a source file called &quot;15000&quot;, and to think
+that the object file is to be called &quot;myprog.asm&quot;.
+When it can't find &quot;15000&quot; it would display an error
+message and scratch &quot;myprog.asm&quot;.  (Jeff Lydiatt)</LI>
+<LI>If an INCLUDE file that is skipped on pass 2 contains
+a macro call, subsequent uses of \@ (macro sequence
+number are subsequently flagged.  The macro counter
+must be bumped along with the line number when
+skipping an INCLUDE.  (Colin Fox, Harvey Taylor)</LI></UL>
+The following enhancements have been added:
+<UL><LI>ORG and RORG are now fully implemented.</LI>
+<LI>The SET symbols A68k, a68K, and a68k are defined in the
+same way as A68K, making it effectively case-insensitive.
+(Colin Fox)</LI>
+<LI>MOVEM and REG now accept equated register names (EQUR)
+in register lists.  (Bruce Dawson)</LI>
+<LI>INCLUDE files will now be skipped on pass 2 even when
+a listing file is requested, if the listing has been
+turned off by a NOLIST directive before the INCLUDE,
+and is not turned on until after the end of the
+INCLUDE file has been reached.  (Colin Fox)</LI>
+<LI>A new switch (-f) causes forward branches (Bcc, BRA, BSR)
+that could be coded as short branches (Bcc.S etc.) to be
+flagged.  This flag is not considered to be an error.</LI>
+<LI>A limited small code / small data model has been provided.
+It is activated by a NEAR directive in the source code, and
+is de-activated by a FAR directive.  External variables
+must be declared at the beginning of the program, which
+must consist of only two sections (CODE and DATA or BSS).
+All forward data references are assumed to be PC-relative
+if in the CODE section, A4-relative if in the DATA/BSS
+section, and absolute word if absolute values.  Any
+forward references which cannot be resolved to one of
+these three in pass 2 will be flagged as errors, as will
+any attempt to define more than two sections.  A4 is
+assumed to point to the start of the DATA/BSS section
+plus 32768 bytes, and must be loaded by a MOVE.L
+instruction using immediate mode unless this instruction
+is not enclosed within NEAR and FAR directives.</LI>
+<LI>Miscellaneous optimizations, for speed, including:
+Most of the object code generator in pass 1 is bypassed.
+If GetValue gets a single term it takes a short cut.
+IsOperator now uses a table look-up.
+Instructions now only searches that portion of the
+opcode table whose opcodes start with the same letter
+as the OpCode being searched for.</LI></UL><BR>
+<B>Version 2.31 (Charlie Gibbs, November 30, 1988)</B>
+<BR><BR>
+The following bugs in version 2.3 have been corrected:
+<UL><LI>Even though a macro definition was being skipped
+by IFxx/ENDC, its ENDM directive was still being
+detected, causing spurious diagnostics.  (Harvey Taylor)</LI>
+<LI>NOP was not being recognized.  When moving all
+directives into the opcode table, NOL and NOLIST
+were placed after NOP, rather than before.  (Colin Fox)</LI>
+<LI>Symbols defined in the current module and declared
+as PUBLIC were not being written to the object code
+file when -d was specified.  (Colin Fox)</LI>
+<LI>Conversion of 0(An) to (An) (implemented in version
+1.2) was causing errors in the MOVEP instruction,
+which requires a displacement even if it is zero.
+This conversion is now disabled for MOVEP instructions.</LI>
+<LI>User macros containing invalid opcodes caused A68k
+to get lost when returning to the outer source file.
+(Colin Fox)</LI>
+<LI>Large values of -w (over 6000 or so) would cause
+a visit from the Guru.  The work field in HashIt
+was overflowing and going negative.  Changing it
+to unsigned corrected the problem.  (Colin Fox)</LI>
+<LI>Although user macros are no longer displayed when
+-q is a negative number, the calling file's name
+was still being displayed at the end of the macro.</LI></UL><BR>
+<B>Version 2.3 (Charlie Gibbs, November 21, 1988)</B>
+<BR><BR>
+The following enhancements have been added:
+<UL><LI>All file I/O has been rewritten to use level 1 I/O
+(open, creat, close, read, write, and lseek) instead
+of level 2 I/O.  A68k now does its own buffering and
+unbuffering to reduce system overhead and increase speed.
+(Bruce Dawson)</LI>
+<LI>All assembler directives have been incorporated into
+the opcode table.  Since the opcode search now looks
+up directives as well, speed is increased.</LI>
+<LI>Miscellaneous code optimization for additional speed.</LI></UL><BR>
+<B>Version 2.2 (Charlie Gibbs, November 4, 1988)</B>
+<BR><BR>
+The following bugs in version 2.1 have been corrected:
+<UL><LI>Macro definitions within an INCLUDE file were
+disabling the test for skipping the file on pass 2.</LI>
+<LI>Errors encountered in an INCLUDE file on pass 1
+were not disabling the skip of the file on pass 2 -
+the pertinent error messages could not appear.</LI>
+<LI>XDEF information and optional symbol table dumps were
+not being written to the object code file for any
+hunks that did not contain relocatable code or data.
+(Colin Fox)</LI></UL>
+The following enhancements have been added:
+<UL><LI>If the -q option is specified as a negative value,
+user macros are no longer included in line number
+displays, reducing clutter.</LI>
+<LI>Some source code has been re-arranged to reduce size.</LI></UL><BR>
+<B>Version 2.1 (Charlie Gibbs, November 1, 1988)</B>
+<BR><BR>
+The following bugs in version 2.00 have been corrected:
+<UL><LI>Macro definitions that span two chunks of memory
+were causing garbage and probably a crash when
+the macro was being expanded.  Pointers were not
+being handled properly when linking the two chunks.</LI>
+<LI>Statements such as EQU and SET were not being flagged
+as illegal forward references if referencing a label
+defined on the same line, e.g.
+<PRE>LABEL	SET	LABEL+1</PRE></LI>
+<LI>The position within macros and INCLUDE files was
+sometimes out by one line when reported in error
+messages (and the new feature of the -q switch).</LI></UL>
+The following enhancements have been added:
+<UL><LI>If the -q option is specified as a negative value,
+line numbers will be displayed as positions within
+the current module (whose name is also displayed),
+rather than a total statement count.  (Bruce Dawson)</LI>
+<LI>INCLUDE files can be skipped on pass 2 even if they
+contain SET statements - the values of all symbols
+SET in the INCLUDE file are stored (as at the end
+of the file) in a separate table and are patched
+when the INCLUDE file is skipped.  (Bruce Dawson)</LI></UL><BR>
+<B>Version 2.00 (Charlie Gibbs, October 26, 1988)</B>
+<BR><BR>
+The following bugs in version 1.24 have been corrected:
+<UL><LI>The last digit of the statement number display
+(lengthened in version 1.24) was not being erased
+before displaying error messages.</LI>
+<LI>A68k would go into a loop if a user macro was
+missing an ENDC directive.  This error is now
+flagged (see below).</LI></UL>
+The following enhancements have been added:
+<UL><LI>The highest statement number displayed at the end of
+each pass is now left on the screen.  This means that,
+at the end of pass 1, you can always see how many lines
+A68k will have to process in pass 2, giving an idea of
+how how much longer you have to wait.  (Colin Fox)</LI>
+<LI>The symbol table is now built using a hashing algorithm.
+This eliminates the slowdown that occurs in pass 1 as
+the symbol table grows, due to the old insertion process.
+(Bruce Dawson)</LI>
+<LI>If A68k terminates abnormally for any reason (such as
+insufficient memory) the object file is scratched
+(unless the -k option is set).  (Bruce Dawson)</LI>
+<LI>Any INCLUDE files which cannot be found are flagged
+as errors in pass 1, and the assembly is aborted
+at the end of pass 1.  (Bruce Dawson)</LI>
+<LI>Missing ENDC directives are flagged in macro expansions.
+Also, missing or unpaired ENDC directives in user macros
+are flagged.</LI>
+<LI>If an INCLUDE file doesn't generate any code and no
+listing file is required, it won't be read again in
+pass 2.  The statement numbers will be bumped to keep
+in proper alignment.  This can really speed up
+assemblies that INCLUDE lots of equates.  (Colin Fox)</LI></UL><BR>
+<B>Version 1.24 (Charlie Gibbs, October 11, 1988)</B>
+<BR><BR>
+The following bugs in version 1.23 have been corrected:
+<UL><LI>MOVEA to a data register was not being flagged, even
+though all other invalid addressing modes were.</LI>
+<LI>Attempts to ORG out of the current hunk (including
+to an absolute address) were not being flagged.  (E. Lenz)</LI>
+<LI>If the size of the bottom of the primary heap (symbols
+and macro text) exceeded 32K, any further macro
+definitions would expand as endless garbage.  (Colin Fox)</LI>
+<LI>If the size of the bottom of the primary heap (symbols
+and macro text) exceeded 64K, any further external
+symbols (XDEF) would be flagged as relocatability
+errors upon each reference.  (Colin Fox)</LI></UL>
+The following enhancements have been added:
+<UL><LI>Where statement numbers are displayed as fixed-length
+fields, their maximum length has been increased
+from 4 digits to 5.  (Colin Fox)</LI>
+<LI>The PUBLIC directive has been implemented.
+As with the Aztec assembler, any labels defined as
+PUBLIC will be treated as XDEF if defined within
+the current module, and XREF otherwise.  (Jeff Lydiatt)</LI></UL><BR>
+<B>Version 1.23 (Charlie Gibbs, September 20, 1988)</B>
+<BR><BR>
+The following bugs in version 1.22 have been corrected:
+<UL><LI>The test for a third operand was producing erroneous
+error messages on instructions whose second operand
+was in immediate mode.  The '#' was not being taken
+into account, since it is not copied to DestOp.</LI></UL><BR>
+<B>Version 1.22 (Charlie Gibbs, August 31, 1988)</B>
+<BR><BR>
+The following bugs in version 1.21 have been corrected:
+<UL><LI>Expressions of the form R-A, where R is a relocatable
+term or expression and A is an absolute term or
+expression, were being flagged as relocation errors.
+This was due to a bug in the routine which should
+(but did not) flag expressions of the form A-R.
+(David Ashley)</LI>
+<LI>Instructions with three operands were not being
+flagged as errors.  This can be caused by an extra
+comma being typed in the instruction, as in:
+<PRE>	BTST #0,state+3,(a5)</PRE>
+The second comma should not be present.  (David Ashley)</LI></UL>
+The following enhancements have been added:
+<UL><LI>Excess spacing has been removed from the listing file.
+These changes are similar to those already made to the
+console output (probably at about version 1.05).</LI>
+<LI>If the first statement in the source file is TTL or
+PAGE, an empty page is no longer produced at the
+start of the listing.</LI></UL><BR>
+<B>Version 1.21 (Charlie Gibbs, July 29, 1988)</B>
+<BR><BR>
+The following bugs in version 1.2 have been corrected:
+<UL><LI>The instruction
+<PRE>	BTST.L	#8,D0</PRE>
+had a long-word value generated for the bit number.
+This bug also applies to BSET, BCLR, and BCHG.
+The .L specification is now ignored.  (Ulf Nordquist)</LI></UL><BR>
+<B>Version 1.2 (Charlie Gibbs, July 19, 1988)</B>
+<BR><BR>
+The following bugs in version 1.12 have been corrected:
+<UL><LI>A reference to the label of the current instruction
+was being converted to PC-relative on pass 2 but not
+on pass 1.  This was causing phase errors.  The label
+hasn't been added to the symbol table at the time the
+instruction is processed.  Conversion to PC-relative
+addressing will now not be attempted in this case,
+although references to * can and will be converted.</LI>
+<LI>All string-type DC statements, regardless of length,
+were being treated as DC.B.  For example, DC.L 'A'
+would generate only one byte of object code.
+(Gerald Hull)</LI>
+<LI>DC.W and DC.B statements were not being checked to
+ensure that their values would fit into a word or
+a byte respectively.</LI>
+<LI>If a comment line had white space preceding the
+asterisk, A68k would hang.  Actually, it was
+interpreting the asterisk as an opcode and trying
+to open a macro file called &quot;*&quot;.  Since under
+AmigaDOS such a file is the console, A68k was
+actually waiting for console input.</LI>
+<LI>If an instruction with no operands (such as RTS
+or NOP) followed MOVE.L #rel,D0 where &quot;rel&quot; was
+a relocatable symbol, the RTS (etc.) would have
+its nonexistent operands flagged as invalid.</LI>
+<LI>SECTION names enclosed in quotes were not being
+handled correctly.</LI>
+<LI>Source modules that did not generate any code, data,
+or BSS areas, but only defined symbols, such as
+<PRE>label	equ	4
+	xdef	label
+	end</PRE>
+were generating incomplete object modules.</LI></UL>
+The following enhancements have been added:
+<UL><LI>Jeff's experimental hunk code (prefixing hunk names
+with a sequence number before adding to the symbol
+table) has been permanently incorporated.  It seems
+to work better with BLink on programs that have
+hunks continued farther on in the source code.
+(Jeff Lydiatt)</LI>
+<LI>The macro parameter \0, which is replaced by the
+size specification in the macro call (B, W, or L,
+defaulting to W) is now supported.  (Gerald Hull)</LI>
+<LI>Operands of the form 0(An) will be treated as (An).
+(Bruce Dawson)</LI></UL><BR>
+<B>Version 1.12 (Charlie Gibbs, May 25, 1988)</B>
+<BR><BR>
+The following bugs in version 1.11 have been corrected:
+<UL><LI>If an instruction with no operands (e.g. RTS)
+followed a MOVE.L #label,D0 the RTS would be
+flagged with a relocatability error.  Src.Mode
+and Dest.Mode were not being cleared.  (Colin Fox)</LI></UL><BR>
+<B>Version 1.11 (Charlie Gibbs, April 6, 1988)</B>
+<BR><BR>
+The following bugs in version 1.10 have been corrected:
+<UL><LI>A68k would go into a loop while processing the
+arguments of a macro call, if these arguments are
+followed by comments separated from the arguments
+by one or more tab characters, and the -t switch
+is specified on the command line.  All tests for
+blanks have been replaced by calls to isspace().</LI>
+<LI>The operand alignment checks added in version 1.06
+were erroneously testing the following instructions:
+<UL><LI>BCHG</LI>
+<LI>BCLR</LI>
+<LI>BSET</LI>
+<LI>BTST</LI>
+<LI>NBCD</LI>
+<LI>Scc</LI>
+<LI>TAS</LI></UL>
+These instructions are now exempt from alignment checking.</LI></UL>
+The following enhancements have been added:
+<UL><LI>A listing file name can now be specified with the
+-x switch; it is no longer necessary to specify
+both the -l and -x switches to produce a cross-
+reference listing with a name other than the default.</LI>
+<LI>DS statements with more than one operand are
+flagged and ignored (in case they should be DC).</LI>
+<LI>A character string used as a numeric value is
+flagged and set to zero if it is more than four
+characters long.</LI></UL><BR>
+<B>Version 1.10 (Charlie Gibbs, March 20, 1988)</B>
+<BR><BR>
+The following bugs in version 1.07 have been corrected:
+<UL><LI>BSS sections were not being written to the object
+code file except for a BSS section at the end of
+a program.  This is due to a bug in the code added
+in version 1.05 to overwrite null sections.</LI>
+<LI>If a source module contained a mixture of lengths
+(8, 16, or 32 bits) in external references (XREF)
+to the same label, all references were being treated
+as if they has the length of the first reference.</LI></UL>
+The following enhancements have been added:
+<UL><LI>DS operands that are either a forward references
+or relocatable are now flagged.</LI>
+<LI>Short branches (Bcc.S, including BRA and BSR) to
+the next instruction (i.e. a displacement of zero)
+are illegal - the processor takes the displacement
+from the next word.  Attempts to generate a short
+displacement of zero are now flagged.</LI></UL><BR>
+<B>Version 1.07 (Charlie Gibbs, March 11, 1988)</B>
+<BR><BR>
+The following bugs in version 1.06 have been corrected:
+<UL><LI>Instructions that take no operands (such as RTS)
+were being flagged if they had comments that were
+not preceded by a semicolon.</LI></UL>
+The following enhancements have been added:
+<UL><LI>The following synonyms have been added:
+<PRE>CSEG  for CODE (Aztec compatibility)
+DSEG  for DATA    &quot;          &quot;
+ENDIF for ENDC (Assempro compatibility)
+=     for EQU      &quot;           &quot;
+|     for !        &quot;           &quot;</PRE></LI>
+<LI>Strings and character values may be delimited by
+either apostrophes (') or quotation marks (&quot;).
+The character not used as a delimiter can be used
+within the string without doubling it.  For example,
+<PRE>  DC.B	&quot;This is Charlie's assembler&quot;</PRE>
+produces the same code as
+<PRE>  DC.B	'This is Charlie''s assembler';</PRE></LI>
+<LI>The object code file will be scratched if any errors
+were found, unless the -k (keep) flag is set.
+(Bruce Dawson)</LI>
+<LI>The symbol .A68K is automatically defined at the
+beginning of each assembly as a SET symbol with an
+absolute value of 1.  This enables programs to check
+whether they're being assembled by this assembler.
+(Jeff Lydiatt)</LI>
+<LI>The symbol table insertion routine has been
+greatly speeded up.</LI></UL><BR>
+<B>Version 1.06 (Charlie Gibbs, March 6, 1988)</B>
+<BR><BR>
+The following bugs in version 1.05 have been corrected:
+<UL><LI>Lines skipped by IFxx/ENDC were not being counted
+in the line number given in error messages.</LI>
+<LI>DATA and BSS sections may be unnamed, or have names
+the same as CODE sections.  Honest, I thought section
+names had to be unique even across types.</LI>
+<LI>CHIP and FAST options on the CODE, DATA, and BSS
+synonyms for the SECTION directive were not being
+handled correctly.</LI>
+<LI>XDEF records and symbol table records (if desired)
+were not being produced for symbols defined ahead
+of the first object-code producing instruction.</LI></UL>
+The following enhancements have been added:
+<UL><LI>The CNOP instruction can now force alignment
+relative to any boundary up to 128 bytes.
+The second operand must still be a power of 2.</LI>
+<LI>The -q switch has been added to change the frequency
+with which progress reports (current line number) are
+displayed on the console.  The default remains at
+every 10 lines (-q10).  If you specify -q (no interval)
+or -q0 the line number displays will be suppressed.
+This will make assemblies run slightly faster due to
+reduced console I/O.  (Bill Henning)</LI>
+<LI>The -t switch has been added to keep any tabs in the
+source file when producing the listing file, as well as
+generating tabs elsewhere whenever possible.  This
+speeds up assemblies and gives smaller listing files,
+but such listing files cannot be displayed on devices
+that do not assume a tab stop in every 8th position.
+(Bruce Dawson)</LI>
+<LI>Any single-operand instruction with two operands,
+and any no-operand instruction with any operands,
+will be flagged.</LI>
+<LI>Relocatable 8- or 16-bit immediate operands
+will be flagged.  They blow up BLink.</LI>
+<LI>Named local labels are now supported.  Their names
+are formed in the same way as normal labels, but are
+then preceded by a backslash.  Their scope is the
+same as normal local labels (nnn$).  (Colin Fox)</LI>
+<LI>An alignment error will be flagged in the following cases:
+<UL><LI>Odd displacement on a LINK instruction</LI>
+<LI>Bcc or DBcc to an odd address</LI>
+<LI>In any word or long-word instruction, any operand
+using the following addressing modes:
+<UL><LI>Address register indirect with displacement</LI>
+<LI>Address register indirect with index and displacement</LI>
+<LI>Absolute short</LI>
+<LI>Absolute long</LI>
+<LI>Program counter indirect with displacement</LI>
+<LI>Program counter indirect with index and displacement</LI></UL></LI>
+<LI>LEA and PEA instructions are exempt from these tests.</LI></UL></LI>
+<LI>If a section is found to contain no data, A68k will
+back up to its beginning and overwrite it with the
+next section.  The result is that null sections
+will no longer appear in the object file.</LI></UL><BR>
+<B>Version 1.05 (Charlie Gibbs, October 30, 1987)</B>
+<BR><BR>
+The following bugs in version 1.04 have been corrected:
+<UL><LI>If a section was continued later in the program, e.g.
+<PRE>	SECTION	prog,CODE
+	  &lt;code&gt;
+	SECTION	variables,BSS
+	  &lt;DS statements&gt;
+	SECTION	prog,CODE
+	  &lt;more code&gt;</PRE>
+bad relocation information was being generated for
+the continuation of the SECTION.  This bug was left
+over from version 1.03.</LI></UL>
+The following enhancements have been added:
+<UL><LI>All console output except for error messages is now
+sent to stderr - this enables stdout to be redirected,
+producing an error file.</LI>
+<LI>Console (stderr) output has been modified to require
+fewer lines on the screen.</LI>
+<LI>If an error occurs while expanding a macro or INCLUDE
+file, the position of the call in each outer file is
+given along with the position in the current (innermost)
+file.  Tracing continues until the outermost file (i.e.
+the original source file) is reached.</LI></UL><BR>
+<B>Version 1.04 (Charlie Gibbs, October 21, 1987)</B>
+<BR><BR>
+The following bugs in version 1.03 have been corrected:
+<UL><LI>MOVE was being converted to MOVEQ regardless of
+operand size - this conversion is legal only
+for longword MOVEs.</LI>
+<LI>Modifications to version 1.03 caused bad relocatable
+entries to be generated.</LI></UL><BR>
+<B>Version 1.03 (Charlie Gibbs, October 14, 1987)</B>
+<BR><BR>
+The following bugs in version 1.02 have been corrected:
+<UL><LI>The following situation was causing phase errors:
+<PRE>	xdef	label
+	bra	label
+	 .
+    &lt;at least 128 bytes of object code&gt;
+	 .
+label:</PRE>
+(The XDEF was fooling A68k into thinking that &quot;label&quot;
+was defined within 128 bytes of the BRA instruction
+on pass 1, although on pass 2 it knew better.</LI>
+<LI>If the first operand of an two-operand executable
+instruction contained a character term containing a
+left or right parenthesis, it would generate error
+messages and be incorrectly evaluated.</LI>
+<LI>Labels that don't begin in column 1 (denoted by a
+trailing colon) caused a Guru Meditation.</LI>
+<LI>Certain ADD and SUB instructions using PC-relative
+addressing may cause phase errors.  If the displacement
+is in the range 1 to 8 inclusive, the instruction was
+erroneously converted to ADDQ or SUBQ during pass 2.</LI></UL>
+The following enhancements have been added:
+<UL><LI>The -z option has been added to display the
+current source program line on stdout as it
+is read, optionally over a given range.
+This feature is provided for debugging purposes.</LI>
+<LI>Bcc, BSR, and DBcc to labels in other than the current
+section is now supported.  A 16-bit relocation entry
+will be generated for each such reference.</LI>
+<LI>PC relative mode will be generated for backward
+references to labels within the current CODE section
+if legal for the current instruction.  Forward
+references will not be converted, since there is
+no way of telling which section the label is in
+during pass 1.</LI>
+<LI>The cumulative sizes of all sections by type (i.e.
+CODE, DATA, and BSS) will be displayed at the end
+of the listing file and the console display.
+(Bruce Dawson)</LI>
+<LI>In the symbol table dump, section names will no
+longer be indicated just as SECTION, but rather
+as CODE, DATA, or BSS, depending on type.</LI></UL><BR>
+<B>Version 1.02 (Charlie Gibbs, September 9, 1987)</B>
+<BR><BR>
+The following bugs in version 1.01 have been corrected:
+<UL><LI>Duplicate labels were not being flagged.</LI>
+<LI>XDEF symbols were not being dumped to the
+object code file when the -d option was set.</LI></UL>
+The following enhancements have been added:
+<UL><LI>A header file is now supported.  If the parameter
+-h&lt;filespec&gt; is included on the command line, the
+specified file will be included as if the source
+file's first line was &quot; include &lt;filespec&gt;&quot;.
+The file specification may include a path name,
+although the include path names given by the
+-i parameter (if any) will also be searched.</LI>
+<LI>An equate file can now be produced.  If the parameter
+-e&lt;filespec&gt; is included on the command line, a file
+will be written containing EQU statements for any
+symbol whose value is absolute.  If -e is specified
+without &lt;filespec&gt;, the name of the file will be
+formed in the same way as the list file, except with
+an extension of &quot;.equ&quot;.  (Bruce Dawson)</LI></UL>
+The following changes have been made to existing logic:
+<UL><LI>No symbol table dump will be produced unless the
+-x (cross-reference) switch is set.  Formerly a
+symbol table dump was always produced, with only
+the cross-reference portion optional.</LI></UL><BR>
+<B>Version 1.01 (Charlie Gibbs, August 20, 1987)</B>
+<BR><BR>
+The following bugs in version 1.00 have been corrected:
+<UL><LI>Long-word constants and storage areas were being
+aligned on a double-word boundary.  The only place
+where double-word alignment is now forced is at a
+break between SECTIONs, since the length of an
+AmigaDOS hunk must be a multiple of 4 bytes.
+(CNOP 0,4 can still be used if double-word
+alignment is desired by the programmer.)</LI>
+<LI>If a label on an END statement or the first statement
+of a SECTION was named in an XDEF statement, it would
+not be written to the object code file.  The latter
+case includes both the label of a SECTION directive
+and the label of the first executable instruction in
+the absence of any SECTION directives (defaulting to
+an unnamed CODE section).  In the final case (default
+unnamed CODE section), references to XREF symbols
+in the first statement would also not be written
+to the object code file.</LI>
+<LI>If the last statement in the source file was not
+terminated with a newline character (premature EOF),
+it was being ignored altogether.</LI>
+<LI>A register list as the source operand of a MOVE
+instruction was not being flagged as an error.
+(MOVE to a register list was being flagged, however.)</LI>
+<LI>MOVE from USP was generating incorrect code.  Also,
+MOVE from SR or CCR to an address register was
+generating incorrect code rather than being flagged.</LI></UL><BR>
+<B>Version 1.00 (Charlie Gibbs, June 18, 1987) - initial release</B>

+ 36 - 36
tigcc/doc/System/Info/a68k/intro.hss

@@ -1,36 +1,36 @@
-[Main]
-Title=Introduction - About A68k
-
-[Top]
-<CENTER><B>
-A68k - a freely distributable assembler for the Amiga<BR>
-by Charlie Gibbs<BR>
-with special thanks to<BR>
-Brian R. Anderson and Jeff Lydiatt<BR>
-The current versions are now part of the TIGCC project.
-As such, they will be aimed much more at development for the TI-89 and
-TI-92+ calculators than at the Amiga.
-Modifications of this document are marked with <B>(TIGCC)</B><BR>
-(Version 2.71.F3w - July 27, 2006)
-</B></CENTER>
-<BR><BR>
-<B>Note:</B> This program is Freely Distributable, as opposed to Public
-Domain.  Permission is given to freely distribute this program provided no
-fee is charged, and this documentation file is included with the program.
-<BR><BR>
-This assembler is based on Brian R. Anderson's 68000 cross-
-assembler published in Dr. Dobb's Journal, April through June 1986.
-I have converted it to produce AmigaDOS-format object modules, and
-have made many enhancements, such as macros and INCLUDE files.
-<BR><BR>
-My first step was to convert the original Modula-2 code into C.
-I did this for two reasons.  First, I had access to a C compiler, but
-not a Modula-2 compiler.  Second, I like C better anyway.
-<BR><BR>
-The executable code generator code (GetObjectCode and MergeModes)
-is essentially the same as in the original article, aside from its
-translation into C.  I have almost completely rewritten the remainder
-of the code, however, in order to remove restrictions, add enhancements,
-and adapt it to the AmigaDOS environment.  Since the only reference book
-available to me was the AmigaDOS Developer's Manual (Bantam, February
-1986), this document describes the assembler in terms of that book.
+[Main]
+Title=Introduction - About A68k
+
+[Top]
+<CENTER><B>
+A68k - a freely distributable assembler for the Amiga<BR>
+by Charlie Gibbs<BR>
+with special thanks to<BR>
+Brian R. Anderson and Jeff Lydiatt<BR>
+The current versions are now part of the TIGCC project.
+As such, they will be aimed much more at development for the TI-89 and
+TI-92+ calculators than at the Amiga.
+Modifications of this document are marked with <B>(TIGCC)</B><BR>
+(Version 2.71.F3w - July 27, 2006)
+</B></CENTER>
+<BR><BR>
+<B>Note:</B> This program is Freely Distributable, as opposed to Public
+Domain.  Permission is given to freely distribute this program provided no
+fee is charged, and this documentation file is included with the program.
+<BR><BR>
+This assembler is based on Brian R. Anderson's 68000 cross-
+assembler published in Dr. Dobb's Journal, April through June 1986.
+I have converted it to produce AmigaDOS-format object modules, and
+have made many enhancements, such as macros and INCLUDE files.
+<BR><BR>
+My first step was to convert the original Modula-2 code into C.
+I did this for two reasons.  First, I had access to a C compiler, but
+not a Modula-2 compiler.  Second, I like C better anyway.
+<BR><BR>
+The executable code generator code (GetObjectCode and MergeModes)
+is essentially the same as in the original article, aside from its
+translation into C.  I have almost completely rewritten the remainder
+of the code, however, in order to remove restrictions, add enhancements,
+and adapt it to the AmigaDOS environment.  Since the only reference book
+available to me was the AmigaDOS Developer's Manual (Bantam, February
+1986), this document describes the assembler in terms of that book.

+ 47 - 47
tigcc/doc/System/Info/a68k/restrictions.hss

@@ -1,47 +1,47 @@
-[Main]
-Title=Restrictions
-
-[Top]
-Let's get these out of the way first:
-<UL>
-<LI>
-The verification file <B>'-v'</B> option is not supported.  Diagnostic
-messages always appear on the console.  They also appear in the
-listing file, however (see extensions below).  You can produce
-an error file by redirecting console output to a file - the
-line number counter and final summary are displayed on stderr
-so you can still see what's happening.
-<TABLE><TR><TD><B>(TIGCC)</B></TD><TD>
-<B>WARNING:</B> The new -v switch introduced in v.2.71.F3c is <B>NOT</B> the same as this one!</TD></TR></TABLE>
-</LI>
-<LI>
-The file names in the <CODE>INCLUDE</CODE> directory list <B>'-i'</B> must be
-separated by commas.  The list may not be enclosed in quotes.
-</LI>
-<LI>
-Labels assigned by <CODE>EQUR</CODE> and <CODE>REG</CODE> directives are case-sensitive.
-</LI>
-<LI>
-Strange things will happen if your source code (including
-<CODE>INCLUDE</CODE> files and macro expansions) exceeds 32,766 lines.
-Tough darts.  Break up your source file.  Can you actually
-read that monster?
-<TABLE><TR><TD><B>(TIGCC)</B></TD><TD>
-The maximum has been increased from 32,766 to 2,147,483,646 for
-32-bit operating systems starting from version 2.71.F3s.</TD></TR></TABLE>
-</LI>
-<LI>
-Directives <CODE>OFFSET</CODE>, <CODE>NOPAGE</CODE>, <CODE>LLEN</CODE>, <CODE>PLEN</CODE>,
-<CODE>NOOBJ</CODE>, <CODE>FAIL</CODE>, <CODE>FORMAT</CODE>, <CODE>NOFORMAT</CODE> and
-<CODE>MASK2</CODE> are not supported, and will be flagged
-as invalid op-codes.
-I feel that <CODE>NOPAGE</CODE>, <CODE>LLEN</CODE>, and <CODE>PLEN</CODE> should not be
-defined within a source module.  It doesn't make sense to me to have to change
-your program just because you want to print your listings on
-different paper.  The command-line switch <B>'-p'</B> (see below) can
-be used as a replacement for <CODE>PLEN</CODE>; setting it to a high value
-(like 32767) is a good substitute for <CODE>NOPAGE</CODE>.  The effect of
-<CODE>LLEN</CODE> can be obtained by running the listing file through an
-appropriate filter.
-</LI>
-</UL>
+[Main]
+Title=Restrictions
+
+[Top]
+Let's get these out of the way first:
+<UL>
+<LI>
+The verification file <B>'-v'</B> option is not supported.  Diagnostic
+messages always appear on the console.  They also appear in the
+listing file, however (see extensions below).  You can produce
+an error file by redirecting console output to a file - the
+line number counter and final summary are displayed on stderr
+so you can still see what's happening.
+<TABLE><TR><TD><B>(TIGCC)</B></TD><TD>
+<B>WARNING:</B> The new -v switch introduced in v.2.71.F3c is <B>NOT</B> the same as this one!</TD></TR></TABLE>
+</LI>
+<LI>
+The file names in the <CODE>INCLUDE</CODE> directory list <B>'-i'</B> must be
+separated by commas.  The list may not be enclosed in quotes.
+</LI>
+<LI>
+Labels assigned by <CODE>EQUR</CODE> and <CODE>REG</CODE> directives are case-sensitive.
+</LI>
+<LI>
+Strange things will happen if your source code (including
+<CODE>INCLUDE</CODE> files and macro expansions) exceeds 32,766 lines.
+Tough darts.  Break up your source file.  Can you actually
+read that monster?
+<TABLE><TR><TD><B>(TIGCC)</B></TD><TD>
+The maximum has been increased from 32,766 to 2,147,483,646 for
+32-bit operating systems starting from version 2.71.F3s.</TD></TR></TABLE>
+</LI>
+<LI>
+Directives <CODE>OFFSET</CODE>, <CODE>NOPAGE</CODE>, <CODE>LLEN</CODE>, <CODE>PLEN</CODE>,
+<CODE>NOOBJ</CODE>, <CODE>FAIL</CODE>, <CODE>FORMAT</CODE>, <CODE>NOFORMAT</CODE> and
+<CODE>MASK2</CODE> are not supported, and will be flagged
+as invalid op-codes.
+I feel that <CODE>NOPAGE</CODE>, <CODE>LLEN</CODE>, and <CODE>PLEN</CODE> should not be
+defined within a source module.  It doesn't make sense to me to have to change
+your program just because you want to print your listings on
+different paper.  The command-line switch <B>'-p'</B> (see below) can
+be used as a replacement for <CODE>PLEN</CODE>; setting it to a high value
+(like 32767) is a good substitute for <CODE>NOPAGE</CODE>.  The effect of
+<CODE>LLEN</CODE> can be obtained by running the listing file through an
+appropriate filter.
+</LI>
+</UL>

+ 98 - 98
tigcc/doc/System/Info/a68k/smallcode.hss

@@ -1,98 +1,98 @@
-[Main]
-Title=The Small Code/Data model
-
-[Top]
-Version 2.4 implements a rudimentary small code/data model.
-It consists of converting any data reference to one of the following
-three addressing modes:
-<BR>
-<UL>
-<LI>
-    address register indirect with displacement using a
-        specified address register, defaulting to <CODE>A4</CODE>
-        (for references to the <CODE>DATA</CODE> or <CODE>BSS</CODE> section);
-</LI>
-<LI>
-    program counter indirect with displacement
-        (for references to the <CODE>CODE</CODE> section);
-</LI>
-<LI>
-    absolute word
-        (for absolute and 16-bit relocatable values).
-</LI>
-</UL>
-These conversions do not take place unless a <CODE>NEAR</CODE> directive is
-encountered.  The <CODE>NEAR</CODE> directive can take one operand, which
-must be either an address register or a symbol which has been
-equated (using <CODE>EQUR</CODE>) to an address register.  Register <CODE>A7</CODE> (<CODE>SP</CODE>)
-may not be used.  If no register is given, <CODE>A4</CODE> is assumed.
-<BR><BR>
-     Conversion is done for all operands until a <CODE>FAR</CODE> directive
-is encountered.  <CODE>NEAR</CODE> and <CODE>FAR</CODE> directives can occur any number
-of times, enabling conversion to be turned on and off at will.
-<BR><BR>
-     Backward references which cannot be converted (e.g. external
-labels declared as <CODE>XREF</CODE>) will remain as absolute long addressing.
-All forward references are assumed to be convertible, since during
-pass 1 <CODE>A68k</CODE> has no way of telling whether conversion is possible.
-If conversion turns out to be impossible, invalid object code will
-be generated - an error message ("Invalid forward reference") will
-indicate when this occurs.
-<BR><BR>
-Although the small code/data model can greatly reduce the
-size of assembled programs, several restrictions apply:
-<UL>
-<LI>
-Small code and small data models are active simultaneously.
-You can't have one without the other, since during pass 1
-A68k doesn't know whether forward references are to <CODE>CODE</CODE>
-or to <CODE>DATA</CODE>/<CODE>BSS</CODE>.
-</LI>
-<LI>
-Programs can consist of a maximum of two sections,
-one <CODE>CODE</CODE>, the other <CODE>DATA</CODE> or <CODE>BSS</CODE>.  If you try to define
-a third section, the message "Too many SECTIONs" will
-be displayed.  The <CODE>NEAR</CODE> directive is active only within
-the <CODE>CODE</CODE> section.
-</LI>
-<LI>
-While the <CODE>NEAR</CODE> directive is active, external labels (<CODE>XREF</CODE>)
-must be declared before they are used, <CODE>CODE</CODE> section references
-must be with 32K of the current position (i.e. expressible as
-PC-relative), and <CODE>DATA</CODE>/<CODE>BSS</CODE> section references must be in the
-first 64K of the <CODE>DATA</CODE>/<CODE>BSS</CODE> section (i.e. expressible as
-address register indirect with displacement).  Any instructions
-which do not satisfy these requirements cannot be detected in
-pass 1, so A68k has no choice but to display an error message
-in pass 2 ("Invalid forward reference") which in this case
-indicates that invalid code has been generated.  To properly
-assemble such instructions, you can temporarily disable
-conversion with a <CODE>FAR</CODE> directive, then resume afterwards
-with another <CODE>NEAR</CODE> directive.
-</LI>
-<LI>
-Conversion cannot be done for references between modules.
-All external references must be left as absolute long.
-</LI>
-<LI>
-<CODE>A68k</CODE> assumes that the base register (normally <CODE>A4</CODE>) points to
-the start of the <CODE>DATA</CODE>/<CODE>BSS</CODE> section plus 32768 bytes (this
-assumed offset can be changed by the <B>'-m'</B> command-line parameter).
-The register must be preloaded with this value before executing
-any code converted by the <CODE>NEAR</CODE> directive.  One way to do this
-is to code the instruction that loads the register prior to
-the <CODE>NEAR</CODE> directive.  Another way is to use a <CODE>MOVE.L</CODE> with
-immediate mode, which is never converted.  Here are examples
-of the two methods:
-<PRE>     LEA data+32768,a4                NEAR
-     NEAR ;defaults to A4             MOVE.L #data+32768,a4
-     &lt;remainder of code&gt;              &lt;remainder of code&gt;
-     BSS                              BSS
-data:                            data:
-     &lt;data areas&gt;                     &lt;data areas&gt;
-     END                              END
-</PRE>
-</LI>
-</UL>
-I'll be the first to admit that this is a very crude and ugly
-implementation.  I hope to improve it in future versions.
+[Main]
+Title=The Small Code/Data model
+
+[Top]
+Version 2.4 implements a rudimentary small code/data model.
+It consists of converting any data reference to one of the following
+three addressing modes:
+<BR>
+<UL>
+<LI>
+    address register indirect with displacement using a
+        specified address register, defaulting to <CODE>A4</CODE>
+        (for references to the <CODE>DATA</CODE> or <CODE>BSS</CODE> section);
+</LI>
+<LI>
+    program counter indirect with displacement
+        (for references to the <CODE>CODE</CODE> section);
+</LI>
+<LI>
+    absolute word
+        (for absolute and 16-bit relocatable values).
+</LI>
+</UL>
+These conversions do not take place unless a <CODE>NEAR</CODE> directive is
+encountered.  The <CODE>NEAR</CODE> directive can take one operand, which
+must be either an address register or a symbol which has been
+equated (using <CODE>EQUR</CODE>) to an address register.  Register <CODE>A7</CODE> (<CODE>SP</CODE>)
+may not be used.  If no register is given, <CODE>A4</CODE> is assumed.
+<BR><BR>
+     Conversion is done for all operands until a <CODE>FAR</CODE> directive
+is encountered.  <CODE>NEAR</CODE> and <CODE>FAR</CODE> directives can occur any number
+of times, enabling conversion to be turned on and off at will.
+<BR><BR>
+     Backward references which cannot be converted (e.g. external
+labels declared as <CODE>XREF</CODE>) will remain as absolute long addressing.
+All forward references are assumed to be convertible, since during
+pass 1 <CODE>A68k</CODE> has no way of telling whether conversion is possible.
+If conversion turns out to be impossible, invalid object code will
+be generated - an error message ("Invalid forward reference") will
+indicate when this occurs.
+<BR><BR>
+Although the small code/data model can greatly reduce the
+size of assembled programs, several restrictions apply:
+<UL>
+<LI>
+Small code and small data models are active simultaneously.
+You can't have one without the other, since during pass 1
+A68k doesn't know whether forward references are to <CODE>CODE</CODE>
+or to <CODE>DATA</CODE>/<CODE>BSS</CODE>.
+</LI>
+<LI>
+Programs can consist of a maximum of two sections,
+one <CODE>CODE</CODE>, the other <CODE>DATA</CODE> or <CODE>BSS</CODE>.  If you try to define
+a third section, the message "Too many SECTIONs" will
+be displayed.  The <CODE>NEAR</CODE> directive is active only within
+the <CODE>CODE</CODE> section.
+</LI>
+<LI>
+While the <CODE>NEAR</CODE> directive is active, external labels (<CODE>XREF</CODE>)
+must be declared before they are used, <CODE>CODE</CODE> section references
+must be with 32K of the current position (i.e. expressible as
+PC-relative), and <CODE>DATA</CODE>/<CODE>BSS</CODE> section references must be in the
+first 64K of the <CODE>DATA</CODE>/<CODE>BSS</CODE> section (i.e. expressible as
+address register indirect with displacement).  Any instructions
+which do not satisfy these requirements cannot be detected in
+pass 1, so A68k has no choice but to display an error message
+in pass 2 ("Invalid forward reference") which in this case
+indicates that invalid code has been generated.  To properly
+assemble such instructions, you can temporarily disable
+conversion with a <CODE>FAR</CODE> directive, then resume afterwards
+with another <CODE>NEAR</CODE> directive.
+</LI>
+<LI>
+Conversion cannot be done for references between modules.
+All external references must be left as absolute long.
+</LI>
+<LI>
+<CODE>A68k</CODE> assumes that the base register (normally <CODE>A4</CODE>) points to
+the start of the <CODE>DATA</CODE>/<CODE>BSS</CODE> section plus 32768 bytes (this
+assumed offset can be changed by the <B>'-m'</B> command-line parameter).
+The register must be preloaded with this value before executing
+any code converted by the <CODE>NEAR</CODE> directive.  One way to do this
+is to code the instruction that loads the register prior to
+the <CODE>NEAR</CODE> directive.  Another way is to use a <CODE>MOVE.L</CODE> with
+immediate mode, which is never converted.  Here are examples
+of the two methods:
+<PRE>     LEA data+32768,a4                NEAR
+     NEAR ;defaults to A4             MOVE.L #data+32768,a4
+     &lt;remainder of code&gt;              &lt;remainder of code&gt;
+     BSS                              BSS
+data:                            data:
+     &lt;data areas&gt;                     &lt;data areas&gt;
+     END                              END
+</PRE>
+</LI>
+</UL>
+I'll be the first to admit that this is a very crude and ugly
+implementation.  I hope to improve it in future versions.

+ 73 - 73
tigcc/doc/System/Info/a68k/tech.hss

@@ -1,73 +1,73 @@
-[Main]
-Title=Technical Information
-
-[Top]
-The actual symbol table entries (pointed to by the hash table,
-colliding entries are linked together) are stored in 8K chunks which
-are allocated as required.  The first entry of each chunk is reserved
-as a link to the next chunk (or NULL in the last chunk) - this makes
-it easy to find all the chunks to free them when we're finished.  All
-symbol table entries are stored in pass 1.  During pass 2, cross-
-reference table entries are built in the same group of chunks,
-immediately following the last symbol table entry.  Additional chunks
-will continue to be linked in if necessary.
-<BR><BR>
-Symbol names and macro text are stored in another series of linked
-chunks.  These chunks consist of a link pointer followed by strings
-(terminated by nulls) laid end to end.  Symbols are independent entries,
-linked from the corresponding symbol table entry.  Macros are stored as
-consecutive strings, one per line - the end of the macro is indicated by
-an <CODE>ENDM</CODE> statement.  If a macro spans two chunks, the last line in the
-original chunk is followed by a newline character to indicate that the
-macro is continued in the next chunk.
-<BR><BR>
-Relocation information is built during pass 2 in yet another
-series of linked chunks.  If more than one chunk is needed to hold one
-section's relocation information, all additional chunks are released
-at the end of the section.
-<BR><BR>
-The secondary heap is built from both ends, and it grows and
-shrinks according to how many macros and <CODE>INCLUDE</CODE> files are currently
-open.  At all times there will be at least one entry on the heap, for
-the original source code file.  The expression parser also uses the
-secondary heap to store its working stacks - this space is freed as
-soon as an expression has been evaluated.
-<BR><BR>
-The bottom of the heap holds the names of the source code file
-and any macro or <CODE>INCLUDE</CODE> files that are currently open.  The full path
-is given.  A null string is stored for user macros.  Macro arguments
-are stored by additional strings, one for each argument in the macro
-call line.  All strings are stored in minimum space, similar to the
-labels and user macro text on the primary heap.  File names are
-pointed to by the fixed table entries (see below) - macro arguments
-are accessed by stepping past the macro name to the desired argument,
-unless NARG would be exceeded.
-<BR><BR>
-The fixed portion of the heap is built down from the top.  Each
-entry occupies 16 bytes.  Enough information is stored to return to
-the proper position in the outer file once the current macro or
-<CODE>INCLUDE</CODE> file has been completely processed.
-<BR><BR>
-The diagram below illustrates the layout of the secondary heap.
-<PRE>
-Heap2 + maxheap2 -----------&gt;&nbsp;&nbsp;___________________________
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;Input file table&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|
-struct InFCtl *InF ---------&gt;&nbsp;|___________________________|
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;Parser operator stack&nbsp;&nbsp;&nbsp;|
-struct OpStack *Ops --------&gt;&nbsp;|___________________________|
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;(unused space)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|
-struct TermStack *Term -----&gt;&nbsp;|___________________________|
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;Parser term stack&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|
-char *NextFNS --------------&gt;&nbsp;|___________________________|
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;Input file name stack&nbsp;&nbsp;&nbsp;|
-char *Heap2 ----------------&gt;&nbsp;|___________________________|
-</PRE>
-The "high-water mark" for <CODE>NextFNS</CODE> is stored in <CODE>char&nbsp;*High2</CODE>,
-and the "low-water mark" (to stretch a metaphor) for <CODE>InF</CODE> is stored
-in <CODE>struct&nbsp;InFCtl&nbsp;*LowInF</CODE>.  These figures are used only to determine
-the maximum heap usage.
+[Main]
+Title=Technical Information
+
+[Top]
+The actual symbol table entries (pointed to by the hash table,
+colliding entries are linked together) are stored in 8K chunks which
+are allocated as required.  The first entry of each chunk is reserved
+as a link to the next chunk (or NULL in the last chunk) - this makes
+it easy to find all the chunks to free them when we're finished.  All
+symbol table entries are stored in pass 1.  During pass 2, cross-
+reference table entries are built in the same group of chunks,
+immediately following the last symbol table entry.  Additional chunks
+will continue to be linked in if necessary.
+<BR><BR>
+Symbol names and macro text are stored in another series of linked
+chunks.  These chunks consist of a link pointer followed by strings
+(terminated by nulls) laid end to end.  Symbols are independent entries,
+linked from the corresponding symbol table entry.  Macros are stored as
+consecutive strings, one per line - the end of the macro is indicated by
+an <CODE>ENDM</CODE> statement.  If a macro spans two chunks, the last line in the
+original chunk is followed by a newline character to indicate that the
+macro is continued in the next chunk.
+<BR><BR>
+Relocation information is built during pass 2 in yet another
+series of linked chunks.  If more than one chunk is needed to hold one
+section's relocation information, all additional chunks are released
+at the end of the section.
+<BR><BR>
+The secondary heap is built from both ends, and it grows and
+shrinks according to how many macros and <CODE>INCLUDE</CODE> files are currently
+open.  At all times there will be at least one entry on the heap, for
+the original source code file.  The expression parser also uses the
+secondary heap to store its working stacks - this space is freed as
+soon as an expression has been evaluated.
+<BR><BR>
+The bottom of the heap holds the names of the source code file
+and any macro or <CODE>INCLUDE</CODE> files that are currently open.  The full path
+is given.  A null string is stored for user macros.  Macro arguments
+are stored by additional strings, one for each argument in the macro
+call line.  All strings are stored in minimum space, similar to the
+labels and user macro text on the primary heap.  File names are
+pointed to by the fixed table entries (see below) - macro arguments
+are accessed by stepping past the macro name to the desired argument,
+unless NARG would be exceeded.
+<BR><BR>
+The fixed portion of the heap is built down from the top.  Each
+entry occupies 16 bytes.  Enough information is stored to return to
+the proper position in the outer file once the current macro or
+<CODE>INCLUDE</CODE> file has been completely processed.
+<BR><BR>
+The diagram below illustrates the layout of the secondary heap.
+<PRE>
+Heap2 + maxheap2 -----------&gt;&nbsp;&nbsp;___________________________
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;Input file table&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|
+struct InFCtl *InF ---------&gt;&nbsp;|___________________________|
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;Parser operator stack&nbsp;&nbsp;&nbsp;|
+struct OpStack *Ops --------&gt;&nbsp;|___________________________|
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;(unused space)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|
+struct TermStack *Term -----&gt;&nbsp;|___________________________|
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;Parser term stack&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|
+char *NextFNS --------------&gt;&nbsp;|___________________________|
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;Input file name stack&nbsp;&nbsp;&nbsp;|
+char *Heap2 ----------------&gt;&nbsp;|___________________________|
+</PRE>
+The "high-water mark" for <CODE>NextFNS</CODE> is stored in <CODE>char&nbsp;*High2</CODE>,
+and the "low-water mark" (to stretch a metaphor) for <CODE>InF</CODE> is stored
+in <CODE>struct&nbsp;InFCtl&nbsp;*LowInF</CODE>.  These figures are used only to determine
+the maximum heap usage.

+ 265 - 265
tigcc/doc/System/Info/a68k/usage.hss

@@ -1,265 +1,265 @@
-[Main]
-Title=A68k Command-Line Parameters (How to use A68k)
-
-[Top]
-The command-line syntax to run the assembler is as follows:
-<PRE>   a68k &lt;<I>source file name</I>&gt;
-        [&lt;<I>object file name</I>&gt;]
-        [&lt;<I>listing file name</I>&gt;]
-<B>(TIGCC)</B> [-a]
-        [-d[[!]&lt;<I>prefix</I>&gt;]]
-        [-e[&lt;<I>equate file name</I>&gt;]]
-        [-f]
-        [-g]
-        [-h&lt;<I>header file name</I>&gt;]
-        [-i&lt;<I>include directory list</I>&gt;]
-        [-k]
-        [-l[&lt;<I>listing file name</I>&gt;]]
-        [-m&lt;<I>small data offset</I>&gt;]
-        [-n]
-        [-o&lt;<I>object file name</I>&gt;]
-        [-p&lt;<I>page depth</I>&gt;]
-        [-q[&lt;<I>quiet interval</I>&gt;]]
-<B>(TIGCC)</B> [-r[a][l][m]]
-        [-s]
-        [-t]
-<B>(TIGCC)</B> [-u]
-<B>(TIGCC)</B> [-v&lt;<I>name</I>&gt;[,&lt;<I>value</I>&gt;]
-        [-w[&lt;<I>hash table size</I>&gt;][,&lt;<I>secondary heap size</I>&gt;]]
-        [-x[&lt;<I>listing file name</I>&gt;]]
-        [-y]
-        [-z[&lt;<I>debug start line</I>&gt;][,&lt;<I>debug end line</I>&gt;]]
-</PRE>
-
-These options can be given in any order.  Any parameter which is not
-a switch (denoted by a leading hyphen) is assumed to be a file name;
-up to three file names (assumed to be source, object, and listing file
-names respectively) can be given.  A source file name is always required.
-If a switch is being given a value, that value must immediately follow
-the switch letter with no intervening spaces.  For instance, to specify
-a page depth of 40 lines, the specification <B>'-p40'</B> should be used;
-<B>'-p&nbsp;40'</B> will be rejected.
-<BR><BR>
-Switches perform the following actions:
-<DL>
-<DT><B>-a</B>
-<DD>
-Causes all relocs to be emitted, even PC-relative relocs
-within a section. It also emits address differences in a
-special TIGCC-specific format. This will allow more
-aggressive linker-side optimization.
-<BR><BR><DT><B>-d</B>
-<DD>
-Causes symbol table entries (hunk_symbol) to be written
-to the object module for the use of symbolic debuggers.
-If the switch is followed by a string of characters, only
-those symbols beginning with that prefix string will be
-written.  This can be used to suppress internal symbols
-generated by compilers.  If the first character is an
-exclamation mark (<CODE>'!'</CODE>), only symbols which do <B>not</B> begin
-with the following characters are written out. Here are some examples:
-<BR><BR>
-<TABLE CLASS="NOBORDER">
-<TR><TD CLASS="NOBORDER"><CODE>-d</CODE></TD><TD CLASS="NOBORDER">writes all symbols</TD></TR>
-<TR><TD CLASS="NOBORDER"><CODE>-dabc&nbsp;&nbsp;&nbsp;</CODE></TD><TD CLASS="NOBORDER">writes only symbols beginning with "abc"</TD></TR>
-<TR><TD CLASS="NOBORDER"><CODE>-d!x</CODE></TD><TD CLASS="NOBORDER">writes symbols which do not begin with "x"</TD></TR>
-</TABLE>
-<BR><DT><B>-e</B>
-<DD>
-Causes an equate file (see above) to be produced.  A file
-name can be specified; otherwise a default name will be used.
-<BR><BR><DT><B>-f</B>
-<DD>
-Causes any branches (<CODE>B<I>cc</I></CODE>, <CODE>BRA</CODE>, <CODE>BSR</CODE>) that could be converted
-to short form to be flagged.  <CODE>A68k</CODE> will convert as many
-branches as possible to short form (unless the <B>'-n'</B> switch is
-is specified), but certain combinations of instructions may
-set up a ripple effect where shortening one branch brings
-another one into range.  This switch will cause <CODE>A68k</CODE> to
-flag any branches that it may have missed; during pass 2
-it is possible to tell this, although during pass 1 it might
-not be.  If the <B>'-n'</B> switch (see below) is specified along
-with this switch (suppressing all optimization), no branches
-will be shortened, but all branches which could be shortened
-will be flagged.
-<BR><BR><DT><B>-g</B>
-<DD>
-Causes any undefined symbols to be treated as if they were
-externally defined (<CODE>XREF</CODE>), rather than being flagged as errors.
-<BR><BR><DT><B>-h</B>
-<DD>
-Causes a header file to be read prior to the source code file.
-A file name must be given.  The action is the same as if the
-first statement of the source file were an <CODE>INCLUDE</CODE> statement
-naming the header file.  To find the header file, the same
-directories will be searched as for <CODE>INCLUDE</CODE> files (see the
-<B>'-i'</B> switch below).
-<BR><BR><DT><B>-i</B>
-<DD>
-Specifies directories to be searched for <CODE>INCLUDE</CODE> files in
-addition to the current directory.  Several names, separated
-by commas, may be specified.  No embedded blanks are allowed.
-For example, the specification
-<PRE>-imylib,df1:another.lib
-</PRE>
-will cause <CODE>INCLUDE</CODE> files to be searched for first in the
-current directory, then in "mylib", then in "df1:another.lib".
-<BR><BR><DT><B>-k</B>
-<DD>
-Causes the object file to be kept even if any errors were
-found.  Otherwise, it will be scratched if any errors occur.
-<BR><BR><DT><B>-l</B>
-<DD>
-Causes a listing file to be produced.  If you want the listing
-file to include a symbol table dump and cross-reference, use
-the <B>'-x'</B> switch instead (see below).
-<BR><BR><DT><B>-m</B>
-<DD>
-Changes the assumed offset from the start of the <CODE>DATA</CODE>/<CODE>BSS</CODE>
-section to the base register used when the small code/data
-option is activated by the <CODE>NEAR</CODE> directive.
-If this parameter is not specified, the offset defaults
-to 32768.
-<BR><BR><DT><B>-n</B>
-<DD>
-Causes all object code optimization (see above) to be disabled.
-<BR><BR><DT><B>-o</B>
-<DD>
-Allows the default name for the object code file (see above)
-to be overridden.
-<BR><BR><DT><B>-p</B>
-<DD>
-Causes the page depth to be set to the specified value.
-This takes the place of the <CODE>PLEN</CODE> directive in the Metacomco
-assembler.  Page depth defaults to 60 lines (<B>'-p60'</B>).
-<BR><BR><DT><B>-q</B>
-<DD>
-Changes the interval at which <CODE>A68k</CODE> displays the line number
-it has reached in its progress through the assembly.  The
-default is to display every 100 lines (<B>'-q100'</B>).  Specifying
-larger values reduces console I/O, making assemblies run
-slightly faster.
-<BR><BR>
-If you specify a negative number (e.g.  <B>'-q-10'</B>), line numbers
-will be displayed at an interval equal to the absolute value
-of the specified number, but will be given as positions
-within the current module (source, macro, or <CODE>INCLUDE</CODE>) rather
-than as a total statement count - the module name will also
-be displayed.
-<BR><BR>
-A special case is the value zero (<B>'-q0'</B> or just <B>'-q'</B>) - this
-will cause all console output, except for error messages,
-to be suppressed.
-<BR><BR><DT><B>(TIGCC)</B> <B>-r</B>
-<DD>
-Allows to disable specific optimizations:<BR>
-<B>-rm</B> Disable the <CODE>MOVEM</CODE> -> <CODE>MOVE</CODE> optimization<BR>
-<B>-ra</B> Disable the <CODE>ADD(A)/SUB(A)</CODE> -> <CODE>LEA</CODE> optimization<BR>
-<B>-rl</B> Disable the <CODE>LEA</CODE> -> <CODE>ADDQ/SUBQ</CODE> optimization<BR>
-You might use more than one <B>-r</B> switch (as in "<B>-rm -ra</B>") or combine them into a single switch (as in "<B>-rma</B>").
-<BR><BR><DT><B>-s</B>
-<DD>
-Causes the object file to be written in Motorola S-record
-format, rather than AmigaDOS format.  The default name for
-an S-record file ends with <CODE>'.s'</CODE> rather than <CODE>'.o</CODE>; this can
-still be overridden with the <B>'-o'</B> switch, though.
-<BR><BR><DT><B>-t</B>
-<DD>
-Allows tabs in the source file to be passed through to the
-listing file, rather than being expanded.  In addition, tabs
-will be generated in the listing file to skip from the object
-code to the source statement, etc.  This can greatly reduce
-the size of the listing file, as well as making it quicker to
-produce.  Do not use this option if you will be displaying or
-listing the list file on a device which does not assume a tab
-stop at every 8th position.
-<BR><BR><DT><B>(TIGCC)</B> <B>-u</B>
-<DD>
-Disables automatic alignment of <CODE>DC.W</CODE>,
-<CODE>DC.L</CODE>, <CODE>DCB.W</CODE>, <CODE>DCB.L</CODE>,
-<CODE>DS.W</CODE>, <CODE>DS.L</CODE> and code.
-<BR><BR><DT><B>(TIGCC)</B> <B>-v</B>
-<DD>
-Allows to set a variable in the command line (like <B>-d</B> with
-<CODE>GCC</CODE>). The variable will be a <CODE>SET</CODE>, not <CODE>EQU</CODE> variable. Syntax:
-"<B>-v</B>&lt;<I>name</I>&gt;[,&lt;<I>value</I>&gt;]" (without spaces, and without the
-quotes). Note that &lt;<I>value</I>&gt; can only be a <B>NUMBER</B> at the
-moment. (We might support symbols as values in a future
-version.) The default value of &lt;<I>value</I>&gt; is 1.
-<BR><BR><DT><B>-w</B>
-<DD>
-Specifies the sizes of fixed memory areas that <CODE>A68k</CODE> allocates
-for its own use.  You should normally never have to specify
-this switch, but it may be useful for tuning.
-<BR><BR>
-The first parameter gives the number of entries that the hash
-table (used for searching the symbol table) will contain.
-The default value of 2047 should be enough for all but the
-very largest programs.  The assembly will not fail if this
-value is too small, but may slow down if too many long hash
-chains must be searched.  The hashing statistics displayed by
-the <B>'-y'</B> switch (see below) can be used to tune this parameter.
-I've heard that you should really specify a prime number for
-this parameter, but I haven't gone into hashing theory enough
-to know whether it's actually necessary.
-<BR><BR>
-The second parameter of the <B>'-w'</B> switch specifies the size (in
-bytes) of the secondary heap, which is used to store nested
-macro and <CODE>INCLUDE</CODE> file information (see below).  It defaults
-to 1024, which should be enough unless you use very deeply
-nested macros and/or <CODE>INCLUDE</CODE> files with long path names.
-<BR><BR>
-<TABLE><TR><TD><B>(TIGCC)</B></TD><TD>
-The default sizes are 4095,2048 in the Win32 (since
-v.2.71.F3a) and GNU/Linux (since v.2.71.F3c) versions.</TD></TR></TABLE>
-<BR><BR>
-You can specify either or both parameters.  For example:
-<BR><BR>
-<TABLE CLASS="NOBORDER">
-<TR><TD CLASS="NOBORDER"><CODE>-w4093</CODE></TD><TD CLASS="NOBORDER">secondary heap size remains at 1024 bytes</TD></TR>
-<TR><TD CLASS="NOBORDER"><CODE>-w,2000</CODE></TD><TD CLASS="NOBORDER">hash table size remains at 2047 entries</TD></TR>
-<TR><TD CLASS="NOBORDER"><CODE>-w4093,2000&nbsp;&nbsp;&nbsp;</CODE></TD><TD CLASS="NOBORDER">increases the size of both areas</TD></TR>
-</TABLE>
-<BR>
-If you're really tight for memory, and are assembling small
-modules, you can use this switch to shrink these areas below
-their default sizes.  At the end of an assembly, a message
-will be displayed giving the sizes actually used, in the form
-of the <B>'-w'</B> command you would have to enter to allocate that much
-space.  This is primarily useful to see how much secondary
-heap space was used.
-<BR><BR>
-<B>Note:</B> All other memory used by <CODE>A68k</CODE> (e.g. the actual symbol
-table) is allocated as required (currently in 8K chunks).
-<BR><BR><DT><B>-x</B>
-<DD>
-Works the same as <B>'-l'</B> (see above), except that a symbol table
-dump, including cross-reference information, will be added
-to the end of the listing file.
-<BR><BR><DT><B>-y</B>
-<DD>
-Causes hashing statistics to be displayed at the end of the
-assembly.  First the number of symbols in the table is given,
-followed by a summary of hash chains by length.  Chains with
-length zero denote unused hash table entries.  Ideally (i.e.
-if there were no collisions) there should be as many chains
-with length 1 as there are symbols, and there should be no
-chains of length 2 or greater.  I added this option to help
-me tune my hashing algorithm, but you can also use it to see
-whether you should allocate a larger hash table (using the
-first parameter of the <B>'-w'</B> switch, see above).
-<BR><BR><DT><B>-z</B>
-<DD>
-This switch was provided to help debug <CODE>A68k</CODE> itself.  It causes <CODE>A68k</CODE> to
-list a range of source lines, complete with line number and
-current location counter value, during both passes.  Lines
-are listed immediately after they have been read from the
-source file, before any processing occurs. Here are some examples of the <B>'-z'</B> switch:
-<BR><BR>
-<TABLE CLASS="NOBORDER">
-<TR><TD CLASS="NOBORDER"><CODE>-z</CODE></TD><TD CLASS="NOBORDER">lists all source lines</TD></TR>
-<TR><TD CLASS="NOBORDER"><CODE>-z100,200&nbsp;&nbsp;&nbsp;</CODE></TD><TD CLASS="NOBORDER">lists lines 100 through 200</TD></TR>
-<TR><TD CLASS="NOBORDER"><CODE>-z100</CODE></TD><TD CLASS="NOBORDER">lists all lines starting at 100</TD></TR>
-<TR><TD CLASS="NOBORDER"><CODE>-z,100</CODE></TD><TD CLASS="NOBORDER">lists the first 100 lines</TD></TR>
-</TABLE>
-</DL>
+[Main]
+Title=A68k Command-Line Parameters (How to use A68k)
+
+[Top]
+The command-line syntax to run the assembler is as follows:
+<PRE>   a68k &lt;<I>source file name</I>&gt;
+        [&lt;<I>object file name</I>&gt;]
+        [&lt;<I>listing file name</I>&gt;]
+<B>(TIGCC)</B> [-a]
+        [-d[[!]&lt;<I>prefix</I>&gt;]]
+        [-e[&lt;<I>equate file name</I>&gt;]]
+        [-f]
+        [-g]
+        [-h&lt;<I>header file name</I>&gt;]
+        [-i&lt;<I>include directory list</I>&gt;]
+        [-k]
+        [-l[&lt;<I>listing file name</I>&gt;]]
+        [-m&lt;<I>small data offset</I>&gt;]
+        [-n]
+        [-o&lt;<I>object file name</I>&gt;]
+        [-p&lt;<I>page depth</I>&gt;]
+        [-q[&lt;<I>quiet interval</I>&gt;]]
+<B>(TIGCC)</B> [-r[a][l][m]]
+        [-s]
+        [-t]
+<B>(TIGCC)</B> [-u]
+<B>(TIGCC)</B> [-v&lt;<I>name</I>&gt;[,&lt;<I>value</I>&gt;]
+        [-w[&lt;<I>hash table size</I>&gt;][,&lt;<I>secondary heap size</I>&gt;]]
+        [-x[&lt;<I>listing file name</I>&gt;]]
+        [-y]
+        [-z[&lt;<I>debug start line</I>&gt;][,&lt;<I>debug end line</I>&gt;]]
+</PRE>
+
+These options can be given in any order.  Any parameter which is not
+a switch (denoted by a leading hyphen) is assumed to be a file name;
+up to three file names (assumed to be source, object, and listing file
+names respectively) can be given.  A source file name is always required.
+If a switch is being given a value, that value must immediately follow
+the switch letter with no intervening spaces.  For instance, to specify
+a page depth of 40 lines, the specification <B>'-p40'</B> should be used;
+<B>'-p&nbsp;40'</B> will be rejected.
+<BR><BR>
+Switches perform the following actions:
+<DL>
+<DT><B>-a</B>
+<DD>
+Causes all relocs to be emitted, even PC-relative relocs
+within a section. It also emits address differences in a
+special TIGCC-specific format. This will allow more
+aggressive linker-side optimization.
+<BR><BR><DT><B>-d</B>
+<DD>
+Causes symbol table entries (hunk_symbol) to be written
+to the object module for the use of symbolic debuggers.
+If the switch is followed by a string of characters, only
+those symbols beginning with that prefix string will be
+written.  This can be used to suppress internal symbols
+generated by compilers.  If the first character is an
+exclamation mark (<CODE>'!'</CODE>), only symbols which do <B>not</B> begin
+with the following characters are written out. Here are some examples:
+<BR><BR>
+<TABLE CLASS="NOBORDER">
+<TR><TD CLASS="NOBORDER"><CODE>-d</CODE></TD><TD CLASS="NOBORDER">writes all symbols</TD></TR>
+<TR><TD CLASS="NOBORDER"><CODE>-dabc&nbsp;&nbsp;&nbsp;</CODE></TD><TD CLASS="NOBORDER">writes only symbols beginning with "abc"</TD></TR>
+<TR><TD CLASS="NOBORDER"><CODE>-d!x</CODE></TD><TD CLASS="NOBORDER">writes symbols which do not begin with "x"</TD></TR>
+</TABLE>
+<BR><DT><B>-e</B>
+<DD>
+Causes an equate file (see above) to be produced.  A file
+name can be specified; otherwise a default name will be used.
+<BR><BR><DT><B>-f</B>
+<DD>
+Causes any branches (<CODE>B<I>cc</I></CODE>, <CODE>BRA</CODE>, <CODE>BSR</CODE>) that could be converted
+to short form to be flagged.  <CODE>A68k</CODE> will convert as many
+branches as possible to short form (unless the <B>'-n'</B> switch is
+is specified), but certain combinations of instructions may
+set up a ripple effect where shortening one branch brings
+another one into range.  This switch will cause <CODE>A68k</CODE> to
+flag any branches that it may have missed; during pass 2
+it is possible to tell this, although during pass 1 it might
+not be.  If the <B>'-n'</B> switch (see below) is specified along
+with this switch (suppressing all optimization), no branches
+will be shortened, but all branches which could be shortened
+will be flagged.
+<BR><BR><DT><B>-g</B>
+<DD>
+Causes any undefined symbols to be treated as if they were
+externally defined (<CODE>XREF</CODE>), rather than being flagged as errors.
+<BR><BR><DT><B>-h</B>
+<DD>
+Causes a header file to be read prior to the source code file.
+A file name must be given.  The action is the same as if the
+first statement of the source file were an <CODE>INCLUDE</CODE> statement
+naming the header file.  To find the header file, the same
+directories will be searched as for <CODE>INCLUDE</CODE> files (see the
+<B>'-i'</B> switch below).
+<BR><BR><DT><B>-i</B>
+<DD>
+Specifies directories to be searched for <CODE>INCLUDE</CODE> files in
+addition to the current directory.  Several names, separated
+by commas, may be specified.  No embedded blanks are allowed.
+For example, the specification
+<PRE>-imylib,df1:another.lib
+</PRE>
+will cause <CODE>INCLUDE</CODE> files to be searched for first in the
+current directory, then in "mylib", then in "df1:another.lib".
+<BR><BR><DT><B>-k</B>
+<DD>
+Causes the object file to be kept even if any errors were
+found.  Otherwise, it will be scratched if any errors occur.
+<BR><BR><DT><B>-l</B>
+<DD>
+Causes a listing file to be produced.  If you want the listing
+file to include a symbol table dump and cross-reference, use
+the <B>'-x'</B> switch instead (see below).
+<BR><BR><DT><B>-m</B>
+<DD>
+Changes the assumed offset from the start of the <CODE>DATA</CODE>/<CODE>BSS</CODE>
+section to the base register used when the small code/data
+option is activated by the <CODE>NEAR</CODE> directive.
+If this parameter is not specified, the offset defaults
+to 32768.
+<BR><BR><DT><B>-n</B>
+<DD>
+Causes all object code optimization (see above) to be disabled.
+<BR><BR><DT><B>-o</B>
+<DD>
+Allows the default name for the object code file (see above)
+to be overridden.
+<BR><BR><DT><B>-p</B>
+<DD>
+Causes the page depth to be set to the specified value.
+This takes the place of the <CODE>PLEN</CODE> directive in the Metacomco
+assembler.  Page depth defaults to 60 lines (<B>'-p60'</B>).
+<BR><BR><DT><B>-q</B>
+<DD>
+Changes the interval at which <CODE>A68k</CODE> displays the line number
+it has reached in its progress through the assembly.  The
+default is to display every 100 lines (<B>'-q100'</B>).  Specifying
+larger values reduces console I/O, making assemblies run
+slightly faster.
+<BR><BR>
+If you specify a negative number (e.g.  <B>'-q-10'</B>), line numbers
+will be displayed at an interval equal to the absolute value
+of the specified number, but will be given as positions
+within the current module (source, macro, or <CODE>INCLUDE</CODE>) rather
+than as a total statement count - the module name will also
+be displayed.
+<BR><BR>
+A special case is the value zero (<B>'-q0'</B> or just <B>'-q'</B>) - this
+will cause all console output, except for error messages,
+to be suppressed.
+<BR><BR><DT><B>(TIGCC)</B> <B>-r</B>
+<DD>
+Allows to disable specific optimizations:<BR>
+<B>-rm</B> Disable the <CODE>MOVEM</CODE> -> <CODE>MOVE</CODE> optimization<BR>
+<B>-ra</B> Disable the <CODE>ADD(A)/SUB(A)</CODE> -> <CODE>LEA</CODE> optimization<BR>
+<B>-rl</B> Disable the <CODE>LEA</CODE> -> <CODE>ADDQ/SUBQ</CODE> optimization<BR>
+You might use more than one <B>-r</B> switch (as in "<B>-rm -ra</B>") or combine them into a single switch (as in "<B>-rma</B>").
+<BR><BR><DT><B>-s</B>
+<DD>
+Causes the object file to be written in Motorola S-record
+format, rather than AmigaDOS format.  The default name for
+an S-record file ends with <CODE>'.s'</CODE> rather than <CODE>'.o</CODE>; this can
+still be overridden with the <B>'-o'</B> switch, though.
+<BR><BR><DT><B>-t</B>
+<DD>
+Allows tabs in the source file to be passed through to the
+listing file, rather than being expanded.  In addition, tabs
+will be generated in the listing file to skip from the object
+code to the source statement, etc.  This can greatly reduce
+the size of the listing file, as well as making it quicker to
+produce.  Do not use this option if you will be displaying or
+listing the list file on a device which does not assume a tab
+stop at every 8th position.
+<BR><BR><DT><B>(TIGCC)</B> <B>-u</B>
+<DD>
+Disables automatic alignment of <CODE>DC.W</CODE>,
+<CODE>DC.L</CODE>, <CODE>DCB.W</CODE>, <CODE>DCB.L</CODE>,
+<CODE>DS.W</CODE>, <CODE>DS.L</CODE> and code.
+<BR><BR><DT><B>(TIGCC)</B> <B>-v</B>
+<DD>
+Allows to set a variable in the command line (like <B>-d</B> with
+<CODE>GCC</CODE>). The variable will be a <CODE>SET</CODE>, not <CODE>EQU</CODE> variable. Syntax:
+"<B>-v</B>&lt;<I>name</I>&gt;[,&lt;<I>value</I>&gt;]" (without spaces, and without the
+quotes). Note that &lt;<I>value</I>&gt; can only be a <B>NUMBER</B> at the
+moment. (We might support symbols as values in a future
+version.) The default value of &lt;<I>value</I>&gt; is 1.
+<BR><BR><DT><B>-w</B>
+<DD>
+Specifies the sizes of fixed memory areas that <CODE>A68k</CODE> allocates
+for its own use.  You should normally never have to specify
+this switch, but it may be useful for tuning.
+<BR><BR>
+The first parameter gives the number of entries that the hash
+table (used for searching the symbol table) will contain.
+The default value of 2047 should be enough for all but the
+very largest programs.  The assembly will not fail if this
+value is too small, but may slow down if too many long hash
+chains must be searched.  The hashing statistics displayed by
+the <B>'-y'</B> switch (see below) can be used to tune this parameter.
+I've heard that you should really specify a prime number for
+this parameter, but I haven't gone into hashing theory enough
+to know whether it's actually necessary.
+<BR><BR>
+The second parameter of the <B>'-w'</B> switch specifies the size (in
+bytes) of the secondary heap, which is used to store nested
+macro and <CODE>INCLUDE</CODE> file information (see below).  It defaults
+to 1024, which should be enough unless you use very deeply
+nested macros and/or <CODE>INCLUDE</CODE> files with long path names.
+<BR><BR>
+<TABLE><TR><TD><B>(TIGCC)</B></TD><TD>
+The default sizes are 4095,2048 in the Win32 (since
+v.2.71.F3a) and GNU/Linux (since v.2.71.F3c) versions.</TD></TR></TABLE>
+<BR><BR>
+You can specify either or both parameters.  For example:
+<BR><BR>
+<TABLE CLASS="NOBORDER">
+<TR><TD CLASS="NOBORDER"><CODE>-w4093</CODE></TD><TD CLASS="NOBORDER">secondary heap size remains at 1024 bytes</TD></TR>
+<TR><TD CLASS="NOBORDER"><CODE>-w,2000</CODE></TD><TD CLASS="NOBORDER">hash table size remains at 2047 entries</TD></TR>
+<TR><TD CLASS="NOBORDER"><CODE>-w4093,2000&nbsp;&nbsp;&nbsp;</CODE></TD><TD CLASS="NOBORDER">increases the size of both areas</TD></TR>
+</TABLE>
+<BR>
+If you're really tight for memory, and are assembling small
+modules, you can use this switch to shrink these areas below
+their default sizes.  At the end of an assembly, a message
+will be displayed giving the sizes actually used, in the form
+of the <B>'-w'</B> command you would have to enter to allocate that much
+space.  This is primarily useful to see how much secondary
+heap space was used.
+<BR><BR>
+<B>Note:</B> All other memory used by <CODE>A68k</CODE> (e.g. the actual symbol
+table) is allocated as required (currently in 8K chunks).
+<BR><BR><DT><B>-x</B>
+<DD>
+Works the same as <B>'-l'</B> (see above), except that a symbol table
+dump, including cross-reference information, will be added
+to the end of the listing file.
+<BR><BR><DT><B>-y</B>
+<DD>
+Causes hashing statistics to be displayed at the end of the
+assembly.  First the number of symbols in the table is given,
+followed by a summary of hash chains by length.  Chains with
+length zero denote unused hash table entries.  Ideally (i.e.
+if there were no collisions) there should be as many chains
+with length 1 as there are symbols, and there should be no
+chains of length 2 or greater.  I added this option to help
+me tune my hashing algorithm, but you can also use it to see
+whether you should allocate a larger hash table (using the
+first parameter of the <B>'-w'</B> switch, see above).
+<BR><BR><DT><B>-z</B>
+<DD>
+This switch was provided to help debug <CODE>A68k</CODE> itself.  It causes <CODE>A68k</CODE> to
+list a range of source lines, complete with line number and
+current location counter value, during both passes.  Lines
+are listed immediately after they have been read from the
+source file, before any processing occurs. Here are some examples of the <B>'-z'</B> switch:
+<BR><BR>
+<TABLE CLASS="NOBORDER">
+<TR><TD CLASS="NOBORDER"><CODE>-z</CODE></TD><TD CLASS="NOBORDER">lists all source lines</TD></TR>
+<TR><TD CLASS="NOBORDER"><CODE>-z100,200&nbsp;&nbsp;&nbsp;</CODE></TD><TD CLASS="NOBORDER">lists lines 100 through 200</TD></TR>
+<TR><TD CLASS="NOBORDER"><CODE>-z100</CODE></TD><TD CLASS="NOBORDER">lists all lines starting at 100</TD></TR>
+<TR><TD CLASS="NOBORDER"><CODE>-z,100</CODE></TD><TD CLASS="NOBORDER">lists the first 100 lines</TD></TR>
+</TABLE>
+</DL>

File diff suppressed because it is too large
+ 0 - 23
tigcc/doc/System/Info/asminfo/asminfo.hss


+ 962 - 962
tigcc/doc/System/Info/comopts/SEC10.hss

@@ -1,962 +1,962 @@
-[Main]
-Title=Options That Control Optimization
-
-[Top]
-These options control various sorts of optimizations.
-<BR><BR>
-Without any optimization option, the compiler's goal is to reduce the
-cost of compilation and to make debugging produce the expected
-results.  Statements are independent: if you stop the program with a
-breakpoint between statements, you can then assign a new value to any
-variable or change the program counter to any other statement in the
-function and get exactly the results you would expect from the source
-code.
-<BR><BR>
-Turning on optimization flags makes the compiler attempt to improve
-the performance and/or code size at the expense of compilation time
-and possibly the ability to debug the program.
-<BR><BR>
-Not all optimizations are controlled directly by a flag.  Only
-optimizations that have a flag are listed.
-<DL>
-<DT><B>-O</B>
-<BR><B>-O1</B>
-<DD>Optimize.  Optimizing compilation takes somewhat more time, and a lot
-more memory for a large function.
-<BR><BR>
-With <B>'-O'</B>, the compiler tries to reduce code size and execution
-time, without performing any optimizations that take a great deal of
-compilation time.
-<BR><BR>
-<B>'-O'</B> turns on the following optimization flags:
--fdefer-pop -fmerge-constants -fthread-jumps -floop-optimize -fcrossjumping -fif-conversion -fif-conversion2 -fdelayed-branch -fguess-branch-probability -fcprop-registers
-<BR><BR>
-<B>'-O'</B> also turns on <B>'-fomit-frame-pointer'</B> on machines
-where doing so does not interfere with debugging.
-<BR><BR>
-<DT><B>-O2</B>
-<DD>Optimize even more.  GCC performs nearly all supported optimizations
-that do not involve a space-speed tradeoff.  The compiler does not
-perform loop unrolling or function inlining when you specify <B>'-O2'</B>.
-As compared to <B>'-O'</B>, this option increases both compilation time
-and the performance of the generated code.
-<BR><BR>
-<B>'-O2'</B> turns on all optimization flags specified by <B>'-O'</B>.  It
-also turns on the following optimization flags:
-<BR>
-<CODE>
--fforce-mem -foptimize-sibling-calls -fstrength-reduce -fcse-follow-jumps  -fcse-skip-blocks -frerun-cse-after-loop  -frerun-loop-opt -fgcse   -fgcse-lm   -fgcse-sm -fdelete-null-pointer-checks -fexpensive-optimizations -fregmove -fschedule-insns  -fschedule-insns2 -fsched-interblock -fsched-spec -fcaller-saves -fpeephole2 -freorder-blocks  -freorder-functions -fstrict-aliasing -falign-functions  -falign-jumps -falign-loops  -falign-labels
-</CODE>
-<BR><BR>
-Please note the warning under <B>'-fgcse'</B> about
-invoking <B>'-O2'</B> on programs that use computed gotos.
-<BR><BR>
-<DT><B>-O3</B>
-<DD>Optimize yet more.  <B>'-O3'</B> turns on all optimizations specified by
-<B>'-O2'</B> and also turns on the <B>'-finline-functions'</B> and
-<B>'-frename-registers'</B> options.
-<BR><BR>
-<DT><B>-O0</B>
-<DD>Do not optimize.  This is the default.
-<BR><BR>
-<DT><B>-Os</B>
-<DD>Optimize for size.  <B>'-Os'</B> enables all <B>'-O2'</B> optimizations that
-do not typically increase code size.  It also performs further
-optimizations designed to reduce code size.
-<BR><BR>
-<B>'-Os'</B> disables the following optimization flags:
--falign-functions  -falign-jumps  -falign-loops -falign-labels  -freorder-blocks -fprefetch-loop-arrays
-<BR><BR>
-If you use multiple <B>'-O'</B> options, with or without level numbers,
-the last such option is the one that is effective.
-</DL>
-Options of the form <B>'-f<I>flag</I>'</B> specify machine-independent
-flags.  Most flags have both positive and negative forms; the negative
-form of <B>'-ffoo'</B> would be <B>'-fno-foo'</B>.  In the table
-below, only one of the forms is listed: the one you typically will
-use.  You can figure out the other form by either removing <B>'no-'</B>
-or adding it.
-<BR><BR>
-The following options control specific optimizations.  They are either
-activated by <B>'-O'</B> options or are related to ones that are.  You
-can use the following flags in the rare cases when &quot;fine-tuning&quot; of
-optimizations to be performed is desired.
-<DL>
-<DT><B>-fno-defer-pop</B>
-<DD>Always pop the arguments to each function call as soon as that function
-returns.  For machines which must pop arguments after a function call,
-the compiler normally lets arguments accumulate on the stack for several
-function calls and pops them all at once.
-<BR><BR>
-Disabled at levels <B>'-O'</B>, <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-fforce-mem</B>
-<DD>Force memory operands to be copied into registers before doing
-arithmetic on them.  This produces better code by making all memory
-references potential common subexpressions.  When they are not common
-subexpressions, instruction combination should eliminate the separate
-register-load.
-<BR><BR>
-Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-fforce-addr</B>
-<DD>Force memory address constants to be copied into registers before
-doing arithmetic on them.  This may produce better code just as
-<B>'-fforce-mem'</B> may.
-<BR><BR>
-<DT><B>-fomit-frame-pointer</B>
-<DD>Don't keep the frame pointer in a register for functions that
-don't need one.  This avoids the instructions to save, set up and
-restore frame pointers; it also makes an extra register available
-in many functions.  It also makes debugging impossible on
-some machines (not on TIGCC though, thanks to unwinding tables).
-<BR><BR>
-This option now works with floating point arithmetic.
-<BR><BR>
-Enabled at levels <B>'-O'</B>, <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-foptimize-sibling-calls</B>
-<DD>Optimize sibling and tail recursive calls.
-<BR><BR>
-Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-fno-inline</B>
-<DD>Don't pay attention to the <CODE>inline</CODE> keyword.  Normally this option
-is used to keep the compiler from expanding any functions inline.
-Note that if you are not optimizing, no functions can be expanded inline.
-<BR><BR>
-<DT><B>-finline-functions</B>
-<DD>Integrate all simple functions into their callers.  The compiler
-heuristically decides which functions are simple enough to be worth
-integrating in this way.
-<BR><BR>
-If all calls to a given function are integrated, and the function is
-declared <CODE>static</CODE>, then the function is normally not output as
-assembler code in its own right.
-<BR><BR>
-Enabled at level <B>'-O3'</B>.
-<BR><BR>
-<DT><B>-finline-limit=<I>n</I></B>
-<DD>By default, gcc limits the size of functions that can be inlined.  This flag
-allows the control of this limit for functions that are explicitly marked as
-inline (i.e., marked with the inline keyword).
-<I>n</I> is the size of functions that can be inlined in
-number of pseudo instructions (not counting parameter handling).  The default
-value of <I>n</I> is 600.
-Increasing this value can result in more inlined code at
-the cost of compilation time and memory consumption.  Decreasing usually makes
-the compilation faster and less code will be inlined (which presumably
-means slower programs).  This option is particularly useful for programs that
-use inlining heavily.
-<BR><BR>
-Inlining is actually controlled by a number of parameters, which may be
-specified individually by using <B>'--param <I>name</I>=<I>value</I>'</B>.
-The <B>'-finline-limit=<I>n</I>'</B> option sets some of these parameters
-as follows:
-<BR><BR>
- <BR><BR><DL>
- <DT><B>max-inline-insns</B>
-<DD>  is set to <I>n</I>.
- <DT><B>max-inline-insns-single</B>
-<DD>  is set to <I>n</I>/2.
- <DT><B>max-inline-insns-auto</B>
-<DD>  is set to <I>n</I>/2.
- <DT><B>min-inline-insns</B>
-<DD>  is set to 130 or <I>n</I>/4, whichever is smaller.
- <DT><B>max-inline-insns-rtl</B>
-<DD>  is set to <I>n</I>.
- </DL><BR>
-Using <B>'-finline-limit=600'</B> thus results in the default settings
-for these parameters.  See below for a documentation of the individual
-parameters controlling inlining.
-<BR><BR>
-<B>Note:</B> pseudo instruction represents, in this particular context, an
-abstract measurement of function's size.  In no way, it represents a count
-of assembly instructions and as such its exact meaning might change from one
-release to an another.
-<BR><BR>
-<DT><B>-fkeep-inline-functions</B>
-<DD>Even if all calls to a given function are integrated, and the function
-is declared <CODE>static</CODE>, nevertheless output a separate run-time
-callable version of the function.  This switch does not affect
-<CODE>extern&nbsp;inline</CODE> functions.
-<BR><BR>
-<DT><B>-fkeep-static-consts</B>
-<DD>Emit variables declared <CODE><A HREF="$$INFOLINK(keywords/static)">static</A>&nbsp;<A HREF="$$INFOLINK(keywords/const)">const</A></CODE> when optimization isn't turned
-on, even if the variables aren't referenced.
-<BR><BR>
-GCC enables this option by default.  If you want to force the compiler to
-check if the variable was referenced, regardless of whether or not
-optimization is turned on, use the <B>'-fno-keep-static-consts'</B> option.
-<BR><BR>
-<DT><B>-fmerge-constants</B>
-<DD>Attempt to merge identical constants (string constants and floating point
-constants) across compilation units.
-<BR><BR>
-This option is the default for optimized compilation if the assembler and
-linker support it.  Use <B>'-fno-merge-constants'</B> to inhibit this
-behavior.
-<BR><BR>
-Enabled at levels <B>'-O'</B>, <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-fmerge-all-constants</B>
-<DD>Attempt to merge identical constants and identical variables.
-<BR><BR>
-This option implies <B>'-fmerge-constants'</B>.  In addition to
-<B>'-fmerge-constants'</B> this considers e.g. even constant initialized
-arrays or initialized constant variables with integral or floating point
-types.  C requires each non-automatic variable to have a distinct location,
-so using this option will result in non-conforming behavior.
-<BR><BR>
-<DT><B>-fno-branch-count-reg</B>
-<DD>Do not use &quot;decrement and branch&quot; instructions on a count register,
-but instead generate a sequence of instructions that decrement a
-register, compare it against zero, then branch based upon the result.
-This option is only meaningful on architectures that support such
-instructions, which include x86, PowerPC, IA-64 and S/390.
-<BR><BR>
-The default is <B>'-fbranch-count-reg'</B>, enabled when
-<B>'-fstrength-reduce'</B> is enabled.
-<BR><BR>
-<DT><B>-fno-function-cse</B>
-<DD>Do not put function addresses in registers; make each instruction that
-calls a constant function contain the function's address explicitly.
-<BR><BR>
-This option results in less efficient code, but some strange hacks
-that alter the assembler output may be confused by the optimizations
-performed when this option is not used.
-<BR><BR>
-The default is <B>'-ffunction-cse'</B>
-<BR><BR>
-<DT><B>-fno-zero-initialized-in-bss</B>
-<DD>If the target supports a BSS section
-(which is always the case for TIGCC now), GCC by default puts variables that
-are initialized to zero into BSS.  This can save space in the resulting
-code.
-<BR><BR>
-This option turns off this behavior because some programs explicitly
-rely on variables going to the data section.  E.g., so that the
-resulting executable can find the beginning of that section and/or make
-assumptions based on that.
-<BR><BR>
-The default is <B>'-fzero-initialized-in-bss'</B>.
-<BR><BR>
-<DT><B>-fstrength-reduce</B>
-<DD>Perform the optimizations of loop strength reduction and
-elimination of iteration variables.
-<BR><BR>
-Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-fthread-jumps</B>
-<DD>Perform optimizations where we check to see if a jump branches to a
-location where another comparison subsumed by the first is found.  If
-so, the first branch is redirected to either the destination of the
-second branch or a point immediately following it, depending on whether
-the condition is known to be true or false.
-<BR><BR>
-Enabled at levels <B>'-O'</B>, <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-fcse-follow-jumps</B>
-<DD>In common subexpression elimination, scan through jump instructions
-when the target of the jump is not reached by any other path.  For
-example, when CSE encounters an <CODE>if</CODE> statement with an
-<CODE>else</CODE> clause, CSE will follow the jump when the condition
-tested is false.
-<BR><BR>
-Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-fcse-skip-blocks</B>
-<DD>This is similar to <B>'-fcse-follow-jumps'</B>, but causes CSE to
-follow jumps which conditionally skip over blocks.  When CSE
-encounters a simple <CODE>if</CODE> statement with no else clause,
-<B>'-fcse-skip-blocks'</B> causes CSE to follow the jump around the
-body of the <CODE>if</CODE>.
-<BR><BR>
-Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-frerun-cse-after-loop</B>
-<DD>Re-run common subexpression elimination after loop optimizations have been
-performed.
-<BR><BR>
-Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-frerun-loop-opt</B>
-<DD>Run the loop optimizer twice.
-<BR><BR>
-Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-fgcse</B>
-<DD>Perform a global common subexpression elimination pass.
-This pass also performs global constant and copy propagation.
-<BR><BR>
-<B>Note:</B> When compiling a program using computed gotos, a GCC
-extension, you may get better runtime performance if you disable
-the global common subexpression elimination pass by adding
-<B>'-fno-gcse'</B> to the command line.
-<BR><BR>
-Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-fgcse-lm</B>
-<DD>When <B>'-fgcse-lm'</B> is enabled, global common subexpression elimination will
-attempt to move loads which are only killed by stores into themselves.  This
-allows a loop containing a load/store sequence to be changed to a load outside
-the loop, and a copy/store within the loop.
-<BR><BR>
-Enabled by default when gcse is enabled.
-<BR><BR>
-<DT><B>-fgcse-sm</B>
-<DD>When <B>'-fgcse-sm'</B> is enabled, A store motion pass is run after global common
-subexpression elimination.  This pass will attempt to move stores out of loops.
-When used in conjunction with <B>'-fgcse-lm'</B>, loops containing a load/store sequence
-can be changed to a load before the loop and a store after the loop.
-<BR><BR>
-Enabled by default when gcse is enabled.
-<BR><BR>
-<DT><B>-floop-optimize</B>
-<DD>Perform loop optimizations: move constant expressions out of loops, simplify
-exit test conditions and optionally do strength-reduction and loop unrolling as
-well.
-<BR><BR>
-Enabled at levels <B>'-O'</B>, <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-fcrossjumping</B>
-<DD>Perform cross-jumping transformation. This transformation unifies equivalent code and save code size. The
-resulting code may or may not perform better than without cross-jumping.
-<BR><BR>
-Enabled at levels <B>'-O'</B>, <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-fif-conversion</B>
-<DD>Attempt to transform conditional jumps into branch-less equivalents.  This
-include use of conditional moves, min, max, set flags and abs instructions, and
-some tricks doable by standard arithmetics.  The use of conditional execution
-on chips where it is available is controlled by <CODE>if-conversion2</CODE>.
-<BR><BR>
-Enabled at levels <B>'-O'</B>, <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-fif-conversion2</B>
-<DD>Use conditional execution (where available) to transform conditional jumps into
-branch-less equivalents.
-<BR><BR>
-Enabled at levels <B>'-O'</B>, <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-fdelete-null-pointer-checks</B>
-<DD>Use global dataflow analysis to identify and eliminate useless checks
-for null pointers.  The compiler assumes that dereferencing a null
-pointer would have halted the program.  If a pointer is checked after
-it has already been dereferenced, it cannot be null.
-<BR><BR>
-In some environments, this assumption is not true, and programs can
-safely dereference null pointers.  Use
-<B>'-fno-delete-null-pointer-checks'</B> to disable this optimization
-for programs which depend on that behavior.
-<BR><BR>
-Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-fexpensive-optimizations</B>
-<DD>Perform a number of minor optimizations that are relatively expensive.
-<BR><BR>
-Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-foptimize-register-move</B>
-<BR><B>-fregmove</B>
-<DD>Attempt to reassign register numbers in move instructions and as
-operands of other simple instructions in order to maximize the amount of
-register tying.  This is especially helpful on machines with two-operand
-instructions.
-<BR><BR>
-Note <B>'-fregmove'</B> and <B>'-foptimize-register-move'</B> are the same
-optimization.
-<BR><BR>
-Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-fdelayed-branch</B>
-<DD>If supported for the target machine, attempt to reorder instructions
-to exploit instruction slots available after delayed branch
-instructions.
-<BR><BR>
-Enabled at levels <B>'-O'</B>, <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-fschedule-insns</B>
-<DD>If supported for the target machine, attempt to reorder instructions to
-eliminate execution stalls due to required data being unavailable.  This
-helps machines that have slow floating point or memory load instructions
-by allowing other instructions to be issued until the result of the load
-or floating point instruction is required.
-<BR><BR>
-Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-fschedule-insns2</B>
-<DD>Similar to <B>'-fschedule-insns'</B>, but requests an additional pass of
-instruction scheduling after register allocation has been done.  This is
-especially useful on machines with a relatively small number of
-registers and where memory load instructions take more than one cycle.
-<BR><BR>
-Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-fno-sched-interblock</B>
-<DD>Don't schedule instructions across basic blocks.  This is normally
-enabled by default when scheduling before register allocation, i.e.
-with <B>'-fschedule-insns'</B> or at <B>'-O2'</B> or higher.
-<BR><BR>
-<DT><B>-fno-sched-spec</B>
-<DD>Don't allow speculative motion of non-load instructions.  This is normally
-enabled by default when scheduling before register allocation, i.e.
-with <B>'-fschedule-insns'</B> or at <B>'-O2'</B> or higher.
-<BR><BR>
-<DT><B>-fsched-spec-load</B>
-<DD>Allow speculative motion of some load instructions.  This only makes
-sense when scheduling before register allocation, i.e. with
-<B>'-fschedule-insns'</B> or at <B>'-O2'</B> or higher.
-<BR><BR>
-<DT><B>-fsched-spec-load-dangerous</B>
-<DD>Allow speculative motion of more load instructions.  This only makes
-sense when scheduling before register allocation, i.e. with
-<B>'-fschedule-insns'</B> or at <B>'-O2'</B> or higher.
-<BR><BR>
-<DT><B>-fcaller-saves</B>
-<DD>Enable values to be allocated in registers that will be clobbered by
-function calls, by emitting extra instructions to save and restore the
-registers around such calls.  Such allocation is done only when it
-seems to result in better code than would otherwise be produced.
-<BR><BR>
-This option is always enabled by default on certain machines, usually
-those which have no call-preserved registers to use instead.
-<BR><BR>
-Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-fmove-all-movables</B>
-<DD>Forces all invariant computations in loops to be moved
-outside the loop.
-<BR><BR>
-<DT><B>-freduce-all-givs</B>
-<DD>Forces all general-induction variables in loops to be
-strength-reduced.
-<BR><BR>
-These options may generate better or worse code; results are highly
-dependent on the structure of loops within the source code.
-<BR><BR>
-These two options are intended to be removed someday, once
-they have helped determine the efficacy of various
-approaches to improving loop optimizations.
-<BR><BR>
-<DT><B>-fno-peephole</B>
-<BR><B>-fno-peephole2</B>
-<DD>Disable any machine-specific peephole optimizations.  The difference
-between <B>'-fno-peephole'</B> and <B>'-fno-peephole2'</B> is in how they
-are implemented in the compiler; some targets use one, some use the
-other, a few use both.
-<BR><BR>
-<B>'-fpeephole'</B> is enabled by default.
-<B>'-fpeephole2'</B> enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-fbranch-probabilities</B>
-<BR><B>-fno-guess-branch-probability</B>
-<DD>Do not guess branch probabilities using a randomized model.
-<BR><BR>
-Sometimes gcc will opt to use a randomized model to guess branch
-probabilities, when none are available from either profiling feedback
-(<B>'-fprofile-arcs'</B>) or <CODE>__builtin_expect</CODE>.  This means that
-different runs of the compiler on the same program may produce different
-object code.
-<BR><BR>
-In a hard real-time system, people don't want different runs of the
-compiler to produce code that has different behavior; minimizing
-non-determinism is of paramount importance.  This switch allows users to
-reduce non-determinism, possibly at the expense of inferior
-optimization.
-<BR><BR>
-The default is <B>'-fguess-branch-probability'</B> at levels
-<B>'-O'</B>, <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-freorder-blocks</B>
-<DD>Reorder basic blocks in the compiled function in order to reduce number of
-taken branches and improve code locality.
-<BR><BR>
-Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>.
-<BR><BR>
-<DT><B>-freorder-functions</B>
-<DD>Reorder basic blocks in the compiled function in order to reduce number of
-taken branches and improve code locality. This is implemented by using special
-subsections <CODE>text.hot</CODE> for most frequently executed functions and
-<CODE>text.unlikely</CODE> for unlikely executed functions.  Reordering is done by
-the linker so object file format must support named sections and linker must
-place them in a reasonable way.
-<BR><BR>
-Also profile feedback must be available in to make this option effective.  See
-<B>'-fprofile-arcs'</B> for details.
-<BR><BR>
-Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-fstrict-aliasing</B>
-<DD>Allows the compiler to assume the strictest aliasing rules applicable to
-the language being compiled.  For C, this activates
-optimizations based on the type of expressions.  In particular, an
-object of one type is assumed never to reside at the same address as an
-object of a different type, unless the types are almost the same.  For
-example, an <CODE>unsigned&nbsp;int</CODE> can alias an <CODE>int</CODE>, but not a
-<CODE>void*</CODE> or a <CODE>double</CODE>.  A character type may alias any other
-type.
-<BR><BR>
-Pay special attention to code like this:
-<PRE>union a_union {
-  int i;
-  double d;
-};
-
-int f() {
-  a_union t;
-  t.d = 3.0;
-  return t.i;
-}
-</PRE>
-The practice of reading from a different union member than the one most
-recently written to (called &quot;type-punning&quot;) is common.  Even with
-<B>'-fstrict-aliasing'</B>, type-punning is allowed, provided the memory
-is accessed through the union type.  So, the code above will work as
-expected.  However, this code might not:
-<PRE>int f() {
-  a_union t;
-  int* ip;
-  t.d = 3.0;
-  ip = &amp;t.i;
-  return *ip;
-}
-</PRE>
-Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-falign-functions</B>
-<BR><B>-falign-functions=<I>n</I></B>
-<DD>Align the start of functions to the next power-of-two greater than
-<I>n</I>, skipping up to <I>n</I> bytes.  For instance,
-<B>'-falign-functions=32'</B> aligns functions to the next 32-byte
-boundary, but <B>'-falign-functions=24'</B> would align to the next
-32-byte boundary only if this can be done by skipping 23 bytes or less.
-<BR><BR>
-<B>'-fno-align-functions'</B> and <B>'-falign-functions=1'</B> are
-equivalent and mean that functions will not be aligned.
-<BR><BR>
-Some assemblers only support this flag when <I>n</I> is a power of two;
-in that case, it is rounded up.
-<BR><BR>
-If <I>n</I> is not specified, use a machine-dependent default.
-<BR><BR>
-Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>.
-<BR><BR>
-<DT><B>-falign-labels</B>
-<BR><B>-falign-labels=<I>n</I></B>
-<DD>Align all branch targets to a power-of-two boundary, skipping up to
-<I>n</I> bytes like <B>'-falign-functions'</B>.  This option can easily
-make code slower, because it must insert dummy operations for when the
-branch target is reached in the usual flow of the code.
-<BR><BR>
-If <B>'-falign-loops'</B> or <B>'-falign-jumps'</B> are applicable and
-are greater than this value, then their values are used instead.
-<BR><BR>
-If <I>n</I> is not specified, use a machine-dependent default which is
-very likely to be <CODE>1</CODE>, meaning no alignment.
-<BR><BR>
-Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>.
-<BR><BR>
-<DT><B>-falign-loops</B>
-<BR><B>-falign-loops=<I>n</I></B>
-<DD>Align loops to a power-of-two boundary, skipping up to <I>n</I> bytes
-like <B>'-falign-functions'</B>.  The hope is that the loop will be
-executed many times, which will make up for any execution of the dummy
-operations.
-<BR><BR>
-If <I>n</I> is not specified, use a machine-dependent default.
-<BR><BR>
-Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>.
-<BR><BR>
-<DT><B>-falign-jumps</B>
-<BR><B>-falign-jumps=<I>n</I></B>
-<DD>Align branch targets to a power-of-two boundary, for branch targets
-where the targets can only be reached by jumping, skipping up to <I>n</I>
-bytes like <B>'-falign-functions'</B>.  In this case, no dummy operations
-need be executed.
-<BR><BR>
-If <I>n</I> is not specified, use a machine-dependent default.
-<BR><BR>
-Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>.
-<BR><BR>
-<DT><B>-frename-registers</B>
-<DD>Attempt to avoid false dependencies in scheduled code by making use
-of registers left over after register allocation.  This optimization
-will most benefit processors with lots of registers.  It can, however,
-make debugging impossible, since variables will no longer stay in
-a &quot;home register&quot;.
-<BR><BR>
-Enabled at levels <B>'-O3'</B>.
-<BR><BR>
-<DT><B>-fno-cprop-registers</B>
-<DD>After register allocation and post-register allocation instruction splitting,
-we perform a copy-propagation pass to try to reduce scheduling dependencies
-and occasionally eliminate the copy.
-<BR><BR>
-Disabled at levels <B>'-O'</B>, <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
-</DL>
-The following options control compiler behavior regarding floating
-point arithmetic.  These options trade off between speed and
-correctness.  All must be specifically enabled.
-<DL>
-<DT><B>-ffloat-store</B>
-<DD>Do not store floating point variables in registers, and inhibit other
-options that might change whether a floating point value is taken from a
-register or memory.
-<BR><BR>
-This option prevents undesirable excess precision on machines such as
-the 68000 where the floating registers (of the 68881) keep more
-precision than a <CODE><A HREF="$$INFOLINK(keywords/double)">double</A></CODE> is supposed to have.  Similarly for the
-x86 architecture.  For most programs, the excess precision does only
-good, but a few programs rely on the precise definition of IEEE floating
-point.  Use <B>'-ffloat-store'</B> for such programs, after modifying
-them to store all pertinent intermediate computations into variables.
-<BR><BR>
-This option is probably useless in TIGCC, except as a workaround for floating
-point arithmetic errors.
-<BR><BR>
-<DT><B>-ffast-math</B>
-<DD>Sets <B>'-fno-math-errno'</B>, <B>'-funsafe-math-optimizations'</B>,
-<B>'-fno-trapping-math'</B>, <B>'-ffinite-math-only'</B> and
-<B>'-fno-signaling-nans'</B>.
-<BR><BR>
-This option causes the preprocessor macro <CODE>__FAST_MATH__</CODE> to be defined.
-<BR><BR>
-This option should never be turned on by any <B>'-O'</B> option since
-it can result in incorrect output for programs which depend on
-an exact implementation of IEEE or ISO rules/specifications for
-math functions.
-<BR><BR>
-This option is probably useless in TIGCC.
-<BR><BR>
-<DT><B>-fno-math-errno</B>
-<DD>Do not set ERRNO after calling math functions that are executed
-with a single instruction, e.g., sqrt.  A program that relies on
-IEEE exceptions for math error handling may want to use this flag
-for speed while maintaining IEEE arithmetic compatibility.
-<BR><BR>
-This option should never be turned on by any <B>'-O'</B> option since
-it can result in incorrect output for programs which depend on
-an exact implementation of IEEE or ISO rules/specifications for
-math functions.
-<BR><BR>
-This option is probably useless in TIGCC.
-<BR><BR>
-The default is <B>'-fmath-errno'</B>.
-<BR><BR>
-<DT><B>-funsafe-math-optimizations</B>
-<DD>Allow optimizations for floating-point arithmetic that (a) assume
-that arguments and results are valid and (b) may violate IEEE or
-ANSI standards.  When used at link-time, it may include libraries
-or startup files that change the default FPU control word or other
-similar optimizations.
-<BR><BR>
-This option should never be turned on by any <B>'-O'</B> option since
-it can result in incorrect output for programs which depend on
-an exact implementation of IEEE or ISO rules/specifications for
-math functions.
-<BR><BR>
-This option is probably useless in TIGCC.
-<BR><BR>
-The default is <B>'-fno-unsafe-math-optimizations'</B>.
-<BR><BR>
-<DT><B>-ffinite-math-only</B>
-<DD>Allow optimizations for floating-point arithmetic that assume
-that arguments and results are not NaNs or +-Infs.
-<BR><BR>
-This option should never be turned on by any <B>'-O'</B> option since
-it can result in incorrect output for programs which depend on
-an exact implementation of IEEE or ISO rules/specifications.
-<BR><BR>
-The default is <B>'-fno-finite-math-only'</B>.
-<BR><BR>
-<DT><B>-fno-trapping-math</B>
-<DD>Compile code assuming that floating-point operations cannot generate
-user-visible traps.  These traps include division by zero, overflow,
-underflow, inexact result and invalid operation.  This option implies
-<B>'-fno-signaling-nans'</B>.  Setting this option may allow faster
-code if one relies on &quot;non-stop&quot; IEEE arithmetic, for example.
-<BR><BR>
-This option should never be turned on by any <B>'-O'</B> option since
-it can result in incorrect output for programs which depend on
-an exact implementation of IEEE or ISO rules/specifications for
-math functions.
-<BR><BR>
-This option is probably useless in TIGCC.
-<BR><BR>
-The default is <B>'-ftrapping-math'</B>.
-<BR><BR>
-<DT><B>-fsignaling-nans</B>
-<DD>Compile code assuming that IEEE signaling NaNs may generate user-visible
-traps during floating-point operations.  Setting this option disables
-optimizations that may change the number of exceptions visible with
-signaling NaNs.  This option implies <B>'-ftrapping-math'</B>.
-<BR><BR>
-This option causes the preprocessor macro <CODE>__SUPPORT_SNAN__</CODE> to
-be defined.
-<BR><BR>
-The default is <B>'-fno-signaling-nans'</B>.
-<BR><BR>
-This option is experimental and does not currently guarantee to
-disable all GCC optimizations that affect signaling NaN behavior.
-<BR><BR>
-<DT><B>-fsingle-precision-constant</B>
-<DD>Treat floating point constant as single precision constant instead of
-implicitly converting it to double precision constant.
-</DL>
-The following options control optimizations that may improve
-performance, but are not enabled by any <B>'-O'</B> options.  This
-section includes experimental options that may produce broken code.
-<DL>
-<DT><B>-fbranch-probabilities</B>
-<DD>After running a program compiled with <B>'-fprofile-arcs'</B>
-(see <A HREF="$$LINK(SEC9)">Options for Debugging Your Program or GCC</A>),
-you can compile it a second time using
-<B>'-fbranch-probabilities'</B>, to improve optimizations based on
-the number of times each branch was taken.  When the program
-compiled with <B>'-fprofile-arcs'</B> exits, it saves arc execution
-counts to a file called <CODE><I>sourcename</I>.da</CODE> for each source
-file.  The information in this data file is very dependent on the
-structure of the generated code, so you must use the same source code
-and the same optimization options for both compilations.
-<BR><BR>
-With <B>'-fbranch-probabilities'</B>, GCC puts a
-<CODE>REG_BR_PROB</CODE> note on each <CODE>JUMP_INSN</CODE> and <CODE>CALL_INSN</CODE>.
-These can be used to improve optimization.  Currently, they are only
-used in one place: in <CODE>reorg.c</CODE>, instead of guessing which path a
-branch is mostly to take, the <CODE>REG_BR_PROB</CODE> values are used to
-exactly determine which path is taken more often.
-<BR><BR>
-<DT><B>-fnew-ra</B>
-<DD>Use a graph coloring register allocator.  Currently this option is meant
-for testing, so we are interested to hear about miscompilations with
-<B>'-fnew-ra'</B>.
-<BR><BR>
-<DT><B>-ftracer</B>
-<DD>Perform tail duplication to enlarge superblock size. This transformation
-simplifies the control flow of the function allowing other optimizations to do
-better job.
-<BR><BR>
-<DT><B>-funroll-loops</B>
-<DD>Unroll loops whose number of iterations can be determined at compile
-time or upon entry to the loop.  <B>'-funroll-loops'</B> implies both
-<B>'-fstrength-reduce'</B> and <B>'-frerun-cse-after-loop'</B>.  This
-option makes code larger, and may or may not make it run faster.
-<BR><BR>
-<DT><B>-funroll-all-loops</B>
-<DD>Unroll all loops, even if their number of iterations is uncertain when
-the loop is entered.  This usually makes programs run more slowly.
-<B>'-funroll-all-loops'</B> implies the same options as
-<B>'-funroll-loops'</B>,
-<BR><BR>
-<DT><B>-fprefetch-loop-arrays</B>
-<DD>If supported by the target machine, generate instructions to prefetch
-memory to improve the performance of loops that access large arrays.
-<BR><BR>
-Disabled at level <B>'-Os'</B>.
-<BR><BR>
-<DT><B>-ffunction-sections</B>
-<BR><B>-fdata-sections</B>
-<DD>Place each function or data item into its own section in the output
-file if the target supports arbitrary sections.  The name of the
-function or the name of the data item determines the section's name
-in the output file.
-<BR><BR>
-Use these options on systems where the linker can perform optimizations
-to improve locality of reference in the instruction space.  Most systems
-using the ELF object format and SPARC processors running Solaris 2 have
-linkers with such optimizations.  AIX may have these optimizations in
-the future.
-<BR><BR>
-Only use these options when there are significant benefits from doing
-so.  When you specify these options, the assembler and linker will
-create larger object and executable files and will also be slower.
-You will not be able to use <CODE>gprof</CODE> on all systems if you
-specify this option and you may have problems with debugging if
-you specify both this option and <B>'-g'</B>.
-<BR><BR>
-<DT><B>-fssa</B>
-<DD>Perform optimizations in static single assignment form.  Each function's
-flow graph is translated into SSA form, optimizations are performed, and
-the flow graph is translated back from SSA form.  Users should not
-specify this option, since it is not yet ready for production use.
-<BR><BR>
-<DT><B>-fssa-ccp</B>
-<DD>Perform Sparse Conditional Constant Propagation in SSA form.  Requires
-<B>'-fssa'</B>.  Like <B>'-fssa'</B>, this is an experimental feature.
-<BR><BR>
-<DT><B>-fssa-dce</B>
-<DD>Perform aggressive dead-code elimination in SSA form.  Requires <B>'-fssa'</B>.
-Like <B>'-fssa'</B>, this is an experimental feature.
-<BR><BR>
-<DT><B>--param <I>name</I>=<I>value</I></B>
-<DD>In some places, GCC uses various constants to control the amount of
-optimization that is done.  For example, GCC will not inline functions
-that contain more that a certain number of instructions.  You can
-control some of these constants on the command-line using the
-<B>'--param'</B> option.
-<BR><BR>
-In each case, the <I>value</I> is an integer.  The allowable choices for
-<I>name</I> are given in the following table:
-<BR><BR><DL>
-<DT><B>max-crossjump-edges</B>
-<DD>The maximum number of incoming edges to consider for crossjumping.
-The algorithm used by <B>'-fcrossjumping'</B> is <CODE>O(N^2)</CODE> in
-the number of edges incoming to each block.  Increasing values mean
-more aggressive optimization, making the compile time increase with
-probably small improvement in executable size.
-<BR><BR>
-<DT><B>max-delay-slot-insn-search</B>
-<DD>The maximum number of instructions to consider when looking for an
-instruction to fill a delay slot.  If more than this arbitrary number of
-instructions is searched, the time savings from filling the delay slot
-will be minimal so stop searching.  Increasing values mean more
-aggressive optimization, making the compile time increase with probably
-small improvement in executable run time.
-<BR><BR>
-<DT><B>max-delay-slot-live-search</B>
-<DD>When trying to fill delay slots, the maximum number of instructions to
-consider when searching for a block with valid live register
-information.  Increasing this arbitrarily chosen value means more
-aggressive optimization, increasing the compile time.  This parameter
-should be removed when the delay slot code is rewritten to maintain the
-control-flow graph.
-<BR><BR>
-<DT><B>max-gcse-memory</B>
-<DD>The approximate maximum amount of memory that will be allocated in
-order to perform the global common subexpression elimination
-optimization.  If more memory than specified is required, the
-optimization will not be done.
-<BR><BR>
-<DT><B>max-gcse-passes</B>
-<DD>The maximum number of passes of GCSE to run.
-<BR><BR>
-<DT><B>max-pending-list-length</B>
-<DD>The maximum number of pending dependencies scheduling will allow
-before flushing the current state and starting over.  Large functions
-with few branches or calls can create excessively large lists which
-needlessly consume memory and resources.
-<BR><BR>
-<DT><B>max-inline-insns-single</B>
-<DD>Several parameters control the tree inliner used in gcc.
-This number sets the maximum number of instructions (counted in gcc's
-internal representation) in a single function that the tree inliner
-will consider for inlining.  This only affects functions declared
-inline.
-The default value is 300.
-<BR><BR>
-<DT><B>max-inline-insns-auto</B>
-<DD>When you use <B>'-finline-functions'</B> (included in <B>'-O3'</B>),
-a lot of functions that would otherwise not be considered for inlining
-by the compiler will be investigated.  To those functions, a different
-(more restrictive) limit compared to functions declared inline can
-be applied.
-The default value is 300.
-<BR><BR>
-<DT><B>max-inline-insns</B>
-<DD>The tree inliner does decrease the allowable size for single functions
-to be inlined after we already inlined the number of instructions
-given here by repeated inlining.  This number should be a factor of
-two or more larger than the single function limit.
-Higher numbers result in better runtime performance, but incur higher
-compile-time resource (CPU time, memory) requirements and result in
-larger binaries.  Very high values are not advisable, as too large
-binaries may adversely affect runtime performance.
-The default value is 600.
-<BR><BR>
-<DT><B>max-inline-slope</B>
-<DD>After exceeding the maximum number of inlined instructions by repeated
-inlining, a linear function is used to decrease the allowable size
-for single functions.  The slope of that function is the negative
-reciprocal of the number specified here.
-The default value is 32.
-<BR><BR>
-<DT><B>min-inline-insns</B>
-<DD>The repeated inlining is throttled more and more by the linear function
-after exceeding the limit.  To avoid too much throttling, a minimum for
-this function is specified here to allow repeated inlining for very small
-functions even when a lot of repeated inlining already has been done.
-The default value is 130.
-<BR><BR>
-<DT><B>max-inline-insns-rtl</B>
-<DD>For languages that use the RTL inliner (this happens at a later stage
-than tree inlining), you can set the maximum allowable size (counted
-in RTL instructions) for the RTL inliner with this parameter.
-The default value is 600.
-<BR><BR>
-<DT><B>max-unrolled-insns</B>
-<DD>The maximum number of instructions that a loop should have if that loop
-is unrolled, and if the loop is unrolled, it determines how many times
-the loop code is unrolled.
-<BR><BR>
-<DT><B>hot-bb-count-fraction</B>
-<DD>Select fraction of the maximal count of repetitions of basic block in program
-given basic block needs to have to be considered hot.
-<BR><BR>
-<DT><B>hot-bb-frequency-fraction</B>
-<DD>Select fraction of the maximal frequency of executions of basic block in
-function given basic block needs to have to be considered hot
-<BR><BR>
-<DT><B>tracer-dynamic-coverage</B>
-<BR><B>tracer-dynamic-coverage-feedback</B>
-<DD>This value is used to limit superblock formation once the given percentage of
-executed instructions is covered.  This limits unnecessary code size
-expansion.
-<BR><BR>
-The <B>'tracer-dynamic-coverage-feedback'</B> is used only when profile
-feedback is available.  The real profiles (as opposed to statically estimated
-ones) are much less balanced allowing the threshold to be larger value.
-<BR><BR>
-<DT><B>tracer-max-code-growth</B>
-<DD>Stop tail duplication once code growth has reached given percentage.  This is
-rather hokey argument, as most of the duplicates will be eliminated later in
-cross jumping, so it may be set to much higher values than is the desired code
-growth.
-<BR><BR>
-<DT><B>tracer-min-branch-ratio</B>
-<DD>Stop reverse growth when the reverse probability of best edge is less than this
-threshold (in percent).
-<BR><BR>
-<DT><B>tracer-min-branch-ratio</B>
-<BR><B>tracer-min-branch-ratio-feedback</B>
-<DD>Stop forward growth if the best edge do have probability lower than this
-threshold.
-<BR><BR>
-Similarly to <B>'tracer-dynamic-coverage'</B> two values are present, one for
-compilation for profile feedback and one for compilation without.  The value
-for compilation with profile feedback needs to be more conservative (higher) in
-order to make tracer effective.
-<BR><BR>
-<DT><B>ggc-min-expand</B>
-<DD>GCC uses a garbage collector to manage its own memory allocation.  This
-parameter specifies the minimum percentage by which the garbage
-collector's heap should be allowed to expand between collections.
-Tuning this may improve compilation speed; it has no effect on code
-generation.
-<BR><BR>
-The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when
-RAM &gt;= 1GB.  If <CODE>getrlimit</CODE> is available, the notion of &quot;RAM&quot; is
-the smallest of actual RAM, RLIMIT_RSS, RLIMIT_DATA and RLIMIT_AS.  If
-GCC is not able to calculate RAM on a particular platform, the lower
-bound of 30% is used.  Setting this parameter and
-<B>'ggc-min-heapsize'</B> to zero causes a full collection to occur at
-every opportunity.  This is extremely slow, but can be useful for
-debugging.
-<BR><BR>
-<DT><B>ggc-min-heapsize</B>
-<DD>Minimum size of the garbage collector's heap before it begins bothering
-to collect garbage.  The first collection occurs after the heap expands
-by <B>'ggc-min-expand'</B>% beyond <B>'ggc-min-heapsize'</B>.  Again,
-tuning this may improve compilation speed, and has no effect on code
-generation.
-<BR><BR>
-The default is RAM/8, with a lower bound of 4096 (four megabytes) and an
-upper bound of 131072 (128 megabytes).  If <CODE>getrlimit</CODE> is
-available, the notion of &quot;RAM&quot; is the smallest of actual RAM,
-RLIMIT_RSS, RLIMIT_DATA and RLIMIT_AS.  If GCC is not able to calculate
-RAM on a particular platform, the lower bound is used.  Setting this
-parameter very large effectively disables garbage collection.  Setting
-this parameter and <B>'ggc-min-expand'</B> to zero causes a full
-collection to occur at every opportunity.
-</DL>
-</DL>
+[Main]
+Title=Options That Control Optimization
+
+[Top]
+These options control various sorts of optimizations.
+<BR><BR>
+Without any optimization option, the compiler's goal is to reduce the
+cost of compilation and to make debugging produce the expected
+results.  Statements are independent: if you stop the program with a
+breakpoint between statements, you can then assign a new value to any
+variable or change the program counter to any other statement in the
+function and get exactly the results you would expect from the source
+code.
+<BR><BR>
+Turning on optimization flags makes the compiler attempt to improve
+the performance and/or code size at the expense of compilation time
+and possibly the ability to debug the program.
+<BR><BR>
+Not all optimizations are controlled directly by a flag.  Only
+optimizations that have a flag are listed.
+<DL>
+<DT><B>-O</B>
+<BR><B>-O1</B>
+<DD>Optimize.  Optimizing compilation takes somewhat more time, and a lot
+more memory for a large function.
+<BR><BR>
+With <B>'-O'</B>, the compiler tries to reduce code size and execution
+time, without performing any optimizations that take a great deal of
+compilation time.
+<BR><BR>
+<B>'-O'</B> turns on the following optimization flags:
+-fdefer-pop -fmerge-constants -fthread-jumps -floop-optimize -fcrossjumping -fif-conversion -fif-conversion2 -fdelayed-branch -fguess-branch-probability -fcprop-registers
+<BR><BR>
+<B>'-O'</B> also turns on <B>'-fomit-frame-pointer'</B> on machines
+where doing so does not interfere with debugging.
+<BR><BR>
+<DT><B>-O2</B>
+<DD>Optimize even more.  GCC performs nearly all supported optimizations
+that do not involve a space-speed tradeoff.  The compiler does not
+perform loop unrolling or function inlining when you specify <B>'-O2'</B>.
+As compared to <B>'-O'</B>, this option increases both compilation time
+and the performance of the generated code.
+<BR><BR>
+<B>'-O2'</B> turns on all optimization flags specified by <B>'-O'</B>.  It
+also turns on the following optimization flags:
+<BR>
+<CODE>
+-fforce-mem -foptimize-sibling-calls -fstrength-reduce -fcse-follow-jumps  -fcse-skip-blocks -frerun-cse-after-loop  -frerun-loop-opt -fgcse   -fgcse-lm   -fgcse-sm -fdelete-null-pointer-checks -fexpensive-optimizations -fregmove -fschedule-insns  -fschedule-insns2 -fsched-interblock -fsched-spec -fcaller-saves -fpeephole2 -freorder-blocks  -freorder-functions -fstrict-aliasing -falign-functions  -falign-jumps -falign-loops  -falign-labels
+</CODE>
+<BR><BR>
+Please note the warning under <B>'-fgcse'</B> about
+invoking <B>'-O2'</B> on programs that use computed gotos.
+<BR><BR>
+<DT><B>-O3</B>
+<DD>Optimize yet more.  <B>'-O3'</B> turns on all optimizations specified by
+<B>'-O2'</B> and also turns on the <B>'-finline-functions'</B> and
+<B>'-frename-registers'</B> options.
+<BR><BR>
+<DT><B>-O0</B>
+<DD>Do not optimize.  This is the default.
+<BR><BR>
+<DT><B>-Os</B>
+<DD>Optimize for size.  <B>'-Os'</B> enables all <B>'-O2'</B> optimizations that
+do not typically increase code size.  It also performs further
+optimizations designed to reduce code size.
+<BR><BR>
+<B>'-Os'</B> disables the following optimization flags:
+-falign-functions  -falign-jumps  -falign-loops -falign-labels  -freorder-blocks -fprefetch-loop-arrays
+<BR><BR>
+If you use multiple <B>'-O'</B> options, with or without level numbers,
+the last such option is the one that is effective.
+</DL>
+Options of the form <B>'-f<I>flag</I>'</B> specify machine-independent
+flags.  Most flags have both positive and negative forms; the negative
+form of <B>'-ffoo'</B> would be <B>'-fno-foo'</B>.  In the table
+below, only one of the forms is listed: the one you typically will
+use.  You can figure out the other form by either removing <B>'no-'</B>
+or adding it.
+<BR><BR>
+The following options control specific optimizations.  They are either
+activated by <B>'-O'</B> options or are related to ones that are.  You
+can use the following flags in the rare cases when &quot;fine-tuning&quot; of
+optimizations to be performed is desired.
+<DL>
+<DT><B>-fno-defer-pop</B>
+<DD>Always pop the arguments to each function call as soon as that function
+returns.  For machines which must pop arguments after a function call,
+the compiler normally lets arguments accumulate on the stack for several
+function calls and pops them all at once.
+<BR><BR>
+Disabled at levels <B>'-O'</B>, <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-fforce-mem</B>
+<DD>Force memory operands to be copied into registers before doing
+arithmetic on them.  This produces better code by making all memory
+references potential common subexpressions.  When they are not common
+subexpressions, instruction combination should eliminate the separate
+register-load.
+<BR><BR>
+Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-fforce-addr</B>
+<DD>Force memory address constants to be copied into registers before
+doing arithmetic on them.  This may produce better code just as
+<B>'-fforce-mem'</B> may.
+<BR><BR>
+<DT><B>-fomit-frame-pointer</B>
+<DD>Don't keep the frame pointer in a register for functions that
+don't need one.  This avoids the instructions to save, set up and
+restore frame pointers; it also makes an extra register available
+in many functions.  It also makes debugging impossible on
+some machines (not on TIGCC though, thanks to unwinding tables).
+<BR><BR>
+This option now works with floating point arithmetic.
+<BR><BR>
+Enabled at levels <B>'-O'</B>, <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-foptimize-sibling-calls</B>
+<DD>Optimize sibling and tail recursive calls.
+<BR><BR>
+Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-fno-inline</B>
+<DD>Don't pay attention to the <CODE>inline</CODE> keyword.  Normally this option
+is used to keep the compiler from expanding any functions inline.
+Note that if you are not optimizing, no functions can be expanded inline.
+<BR><BR>
+<DT><B>-finline-functions</B>
+<DD>Integrate all simple functions into their callers.  The compiler
+heuristically decides which functions are simple enough to be worth
+integrating in this way.
+<BR><BR>
+If all calls to a given function are integrated, and the function is
+declared <CODE>static</CODE>, then the function is normally not output as
+assembler code in its own right.
+<BR><BR>
+Enabled at level <B>'-O3'</B>.
+<BR><BR>
+<DT><B>-finline-limit=<I>n</I></B>
+<DD>By default, gcc limits the size of functions that can be inlined.  This flag
+allows the control of this limit for functions that are explicitly marked as
+inline (i.e., marked with the inline keyword).
+<I>n</I> is the size of functions that can be inlined in
+number of pseudo instructions (not counting parameter handling).  The default
+value of <I>n</I> is 600.
+Increasing this value can result in more inlined code at
+the cost of compilation time and memory consumption.  Decreasing usually makes
+the compilation faster and less code will be inlined (which presumably
+means slower programs).  This option is particularly useful for programs that
+use inlining heavily.
+<BR><BR>
+Inlining is actually controlled by a number of parameters, which may be
+specified individually by using <B>'--param <I>name</I>=<I>value</I>'</B>.
+The <B>'-finline-limit=<I>n</I>'</B> option sets some of these parameters
+as follows:
+<BR><BR>
+ <BR><BR><DL>
+ <DT><B>max-inline-insns</B>
+<DD>  is set to <I>n</I>.
+ <DT><B>max-inline-insns-single</B>
+<DD>  is set to <I>n</I>/2.
+ <DT><B>max-inline-insns-auto</B>
+<DD>  is set to <I>n</I>/2.
+ <DT><B>min-inline-insns</B>
+<DD>  is set to 130 or <I>n</I>/4, whichever is smaller.
+ <DT><B>max-inline-insns-rtl</B>
+<DD>  is set to <I>n</I>.
+ </DL><BR>
+Using <B>'-finline-limit=600'</B> thus results in the default settings
+for these parameters.  See below for a documentation of the individual
+parameters controlling inlining.
+<BR><BR>
+<B>Note:</B> pseudo instruction represents, in this particular context, an
+abstract measurement of function's size.  In no way, it represents a count
+of assembly instructions and as such its exact meaning might change from one
+release to an another.
+<BR><BR>
+<DT><B>-fkeep-inline-functions</B>
+<DD>Even if all calls to a given function are integrated, and the function
+is declared <CODE>static</CODE>, nevertheless output a separate run-time
+callable version of the function.  This switch does not affect
+<CODE>extern&nbsp;inline</CODE> functions.
+<BR><BR>
+<DT><B>-fkeep-static-consts</B>
+<DD>Emit variables declared <CODE><A HREF="$$INFOLINK(keywords/static)">static</A>&nbsp;<A HREF="$$INFOLINK(keywords/const)">const</A></CODE> when optimization isn't turned
+on, even if the variables aren't referenced.
+<BR><BR>
+GCC enables this option by default.  If you want to force the compiler to
+check if the variable was referenced, regardless of whether or not
+optimization is turned on, use the <B>'-fno-keep-static-consts'</B> option.
+<BR><BR>
+<DT><B>-fmerge-constants</B>
+<DD>Attempt to merge identical constants (string constants and floating point
+constants) across compilation units.
+<BR><BR>
+This option is the default for optimized compilation if the assembler and
+linker support it.  Use <B>'-fno-merge-constants'</B> to inhibit this
+behavior.
+<BR><BR>
+Enabled at levels <B>'-O'</B>, <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-fmerge-all-constants</B>
+<DD>Attempt to merge identical constants and identical variables.
+<BR><BR>
+This option implies <B>'-fmerge-constants'</B>.  In addition to
+<B>'-fmerge-constants'</B> this considers e.g. even constant initialized
+arrays or initialized constant variables with integral or floating point
+types.  C requires each non-automatic variable to have a distinct location,
+so using this option will result in non-conforming behavior.
+<BR><BR>
+<DT><B>-fno-branch-count-reg</B>
+<DD>Do not use &quot;decrement and branch&quot; instructions on a count register,
+but instead generate a sequence of instructions that decrement a
+register, compare it against zero, then branch based upon the result.
+This option is only meaningful on architectures that support such
+instructions, which include x86, PowerPC, IA-64 and S/390.
+<BR><BR>
+The default is <B>'-fbranch-count-reg'</B>, enabled when
+<B>'-fstrength-reduce'</B> is enabled.
+<BR><BR>
+<DT><B>-fno-function-cse</B>
+<DD>Do not put function addresses in registers; make each instruction that
+calls a constant function contain the function's address explicitly.
+<BR><BR>
+This option results in less efficient code, but some strange hacks
+that alter the assembler output may be confused by the optimizations
+performed when this option is not used.
+<BR><BR>
+The default is <B>'-ffunction-cse'</B>
+<BR><BR>
+<DT><B>-fno-zero-initialized-in-bss</B>
+<DD>If the target supports a BSS section
+(which is always the case for TIGCC now), GCC by default puts variables that
+are initialized to zero into BSS.  This can save space in the resulting
+code.
+<BR><BR>
+This option turns off this behavior because some programs explicitly
+rely on variables going to the data section.  E.g., so that the
+resulting executable can find the beginning of that section and/or make
+assumptions based on that.
+<BR><BR>
+The default is <B>'-fzero-initialized-in-bss'</B>.
+<BR><BR>
+<DT><B>-fstrength-reduce</B>
+<DD>Perform the optimizations of loop strength reduction and
+elimination of iteration variables.
+<BR><BR>
+Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-fthread-jumps</B>
+<DD>Perform optimizations where we check to see if a jump branches to a
+location where another comparison subsumed by the first is found.  If
+so, the first branch is redirected to either the destination of the
+second branch or a point immediately following it, depending on whether
+the condition is known to be true or false.
+<BR><BR>
+Enabled at levels <B>'-O'</B>, <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-fcse-follow-jumps</B>
+<DD>In common subexpression elimination, scan through jump instructions
+when the target of the jump is not reached by any other path.  For
+example, when CSE encounters an <CODE>if</CODE> statement with an
+<CODE>else</CODE> clause, CSE will follow the jump when the condition
+tested is false.
+<BR><BR>
+Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-fcse-skip-blocks</B>
+<DD>This is similar to <B>'-fcse-follow-jumps'</B>, but causes CSE to
+follow jumps which conditionally skip over blocks.  When CSE
+encounters a simple <CODE>if</CODE> statement with no else clause,
+<B>'-fcse-skip-blocks'</B> causes CSE to follow the jump around the
+body of the <CODE>if</CODE>.
+<BR><BR>
+Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-frerun-cse-after-loop</B>
+<DD>Re-run common subexpression elimination after loop optimizations have been
+performed.
+<BR><BR>
+Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-frerun-loop-opt</B>
+<DD>Run the loop optimizer twice.
+<BR><BR>
+Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-fgcse</B>
+<DD>Perform a global common subexpression elimination pass.
+This pass also performs global constant and copy propagation.
+<BR><BR>
+<B>Note:</B> When compiling a program using computed gotos, a GCC
+extension, you may get better runtime performance if you disable
+the global common subexpression elimination pass by adding
+<B>'-fno-gcse'</B> to the command line.
+<BR><BR>
+Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-fgcse-lm</B>
+<DD>When <B>'-fgcse-lm'</B> is enabled, global common subexpression elimination will
+attempt to move loads which are only killed by stores into themselves.  This
+allows a loop containing a load/store sequence to be changed to a load outside
+the loop, and a copy/store within the loop.
+<BR><BR>
+Enabled by default when gcse is enabled.
+<BR><BR>
+<DT><B>-fgcse-sm</B>
+<DD>When <B>'-fgcse-sm'</B> is enabled, A store motion pass is run after global common
+subexpression elimination.  This pass will attempt to move stores out of loops.
+When used in conjunction with <B>'-fgcse-lm'</B>, loops containing a load/store sequence
+can be changed to a load before the loop and a store after the loop.
+<BR><BR>
+Enabled by default when gcse is enabled.
+<BR><BR>
+<DT><B>-floop-optimize</B>
+<DD>Perform loop optimizations: move constant expressions out of loops, simplify
+exit test conditions and optionally do strength-reduction and loop unrolling as
+well.
+<BR><BR>
+Enabled at levels <B>'-O'</B>, <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-fcrossjumping</B>
+<DD>Perform cross-jumping transformation. This transformation unifies equivalent code and save code size. The
+resulting code may or may not perform better than without cross-jumping.
+<BR><BR>
+Enabled at levels <B>'-O'</B>, <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-fif-conversion</B>
+<DD>Attempt to transform conditional jumps into branch-less equivalents.  This
+include use of conditional moves, min, max, set flags and abs instructions, and
+some tricks doable by standard arithmetics.  The use of conditional execution
+on chips where it is available is controlled by <CODE>if-conversion2</CODE>.
+<BR><BR>
+Enabled at levels <B>'-O'</B>, <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-fif-conversion2</B>
+<DD>Use conditional execution (where available) to transform conditional jumps into
+branch-less equivalents.
+<BR><BR>
+Enabled at levels <B>'-O'</B>, <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-fdelete-null-pointer-checks</B>
+<DD>Use global dataflow analysis to identify and eliminate useless checks
+for null pointers.  The compiler assumes that dereferencing a null
+pointer would have halted the program.  If a pointer is checked after
+it has already been dereferenced, it cannot be null.
+<BR><BR>
+In some environments, this assumption is not true, and programs can
+safely dereference null pointers.  Use
+<B>'-fno-delete-null-pointer-checks'</B> to disable this optimization
+for programs which depend on that behavior.
+<BR><BR>
+Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-fexpensive-optimizations</B>
+<DD>Perform a number of minor optimizations that are relatively expensive.
+<BR><BR>
+Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-foptimize-register-move</B>
+<BR><B>-fregmove</B>
+<DD>Attempt to reassign register numbers in move instructions and as
+operands of other simple instructions in order to maximize the amount of
+register tying.  This is especially helpful on machines with two-operand
+instructions.
+<BR><BR>
+Note <B>'-fregmove'</B> and <B>'-foptimize-register-move'</B> are the same
+optimization.
+<BR><BR>
+Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-fdelayed-branch</B>
+<DD>If supported for the target machine, attempt to reorder instructions
+to exploit instruction slots available after delayed branch
+instructions.
+<BR><BR>
+Enabled at levels <B>'-O'</B>, <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-fschedule-insns</B>
+<DD>If supported for the target machine, attempt to reorder instructions to
+eliminate execution stalls due to required data being unavailable.  This
+helps machines that have slow floating point or memory load instructions
+by allowing other instructions to be issued until the result of the load
+or floating point instruction is required.
+<BR><BR>
+Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-fschedule-insns2</B>
+<DD>Similar to <B>'-fschedule-insns'</B>, but requests an additional pass of
+instruction scheduling after register allocation has been done.  This is
+especially useful on machines with a relatively small number of
+registers and where memory load instructions take more than one cycle.
+<BR><BR>
+Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-fno-sched-interblock</B>
+<DD>Don't schedule instructions across basic blocks.  This is normally
+enabled by default when scheduling before register allocation, i.e.
+with <B>'-fschedule-insns'</B> or at <B>'-O2'</B> or higher.
+<BR><BR>
+<DT><B>-fno-sched-spec</B>
+<DD>Don't allow speculative motion of non-load instructions.  This is normally
+enabled by default when scheduling before register allocation, i.e.
+with <B>'-fschedule-insns'</B> or at <B>'-O2'</B> or higher.
+<BR><BR>
+<DT><B>-fsched-spec-load</B>
+<DD>Allow speculative motion of some load instructions.  This only makes
+sense when scheduling before register allocation, i.e. with
+<B>'-fschedule-insns'</B> or at <B>'-O2'</B> or higher.
+<BR><BR>
+<DT><B>-fsched-spec-load-dangerous</B>
+<DD>Allow speculative motion of more load instructions.  This only makes
+sense when scheduling before register allocation, i.e. with
+<B>'-fschedule-insns'</B> or at <B>'-O2'</B> or higher.
+<BR><BR>
+<DT><B>-fcaller-saves</B>
+<DD>Enable values to be allocated in registers that will be clobbered by
+function calls, by emitting extra instructions to save and restore the
+registers around such calls.  Such allocation is done only when it
+seems to result in better code than would otherwise be produced.
+<BR><BR>
+This option is always enabled by default on certain machines, usually
+those which have no call-preserved registers to use instead.
+<BR><BR>
+Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-fmove-all-movables</B>
+<DD>Forces all invariant computations in loops to be moved
+outside the loop.
+<BR><BR>
+<DT><B>-freduce-all-givs</B>
+<DD>Forces all general-induction variables in loops to be
+strength-reduced.
+<BR><BR>
+These options may generate better or worse code; results are highly
+dependent on the structure of loops within the source code.
+<BR><BR>
+These two options are intended to be removed someday, once
+they have helped determine the efficacy of various
+approaches to improving loop optimizations.
+<BR><BR>
+<DT><B>-fno-peephole</B>
+<BR><B>-fno-peephole2</B>
+<DD>Disable any machine-specific peephole optimizations.  The difference
+between <B>'-fno-peephole'</B> and <B>'-fno-peephole2'</B> is in how they
+are implemented in the compiler; some targets use one, some use the
+other, a few use both.
+<BR><BR>
+<B>'-fpeephole'</B> is enabled by default.
+<B>'-fpeephole2'</B> enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-fbranch-probabilities</B>
+<BR><B>-fno-guess-branch-probability</B>
+<DD>Do not guess branch probabilities using a randomized model.
+<BR><BR>
+Sometimes gcc will opt to use a randomized model to guess branch
+probabilities, when none are available from either profiling feedback
+(<B>'-fprofile-arcs'</B>) or <CODE>__builtin_expect</CODE>.  This means that
+different runs of the compiler on the same program may produce different
+object code.
+<BR><BR>
+In a hard real-time system, people don't want different runs of the
+compiler to produce code that has different behavior; minimizing
+non-determinism is of paramount importance.  This switch allows users to
+reduce non-determinism, possibly at the expense of inferior
+optimization.
+<BR><BR>
+The default is <B>'-fguess-branch-probability'</B> at levels
+<B>'-O'</B>, <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-freorder-blocks</B>
+<DD>Reorder basic blocks in the compiled function in order to reduce number of
+taken branches and improve code locality.
+<BR><BR>
+Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>.
+<BR><BR>
+<DT><B>-freorder-functions</B>
+<DD>Reorder basic blocks in the compiled function in order to reduce number of
+taken branches and improve code locality. This is implemented by using special
+subsections <CODE>text.hot</CODE> for most frequently executed functions and
+<CODE>text.unlikely</CODE> for unlikely executed functions.  Reordering is done by
+the linker so object file format must support named sections and linker must
+place them in a reasonable way.
+<BR><BR>
+Also profile feedback must be available in to make this option effective.  See
+<B>'-fprofile-arcs'</B> for details.
+<BR><BR>
+Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-fstrict-aliasing</B>
+<DD>Allows the compiler to assume the strictest aliasing rules applicable to
+the language being compiled.  For C, this activates
+optimizations based on the type of expressions.  In particular, an
+object of one type is assumed never to reside at the same address as an
+object of a different type, unless the types are almost the same.  For
+example, an <CODE>unsigned&nbsp;int</CODE> can alias an <CODE>int</CODE>, but not a
+<CODE>void*</CODE> or a <CODE>double</CODE>.  A character type may alias any other
+type.
+<BR><BR>
+Pay special attention to code like this:
+<PRE>union a_union {
+  int i;
+  double d;
+};
+
+int f() {
+  a_union t;
+  t.d = 3.0;
+  return t.i;
+}
+</PRE>
+The practice of reading from a different union member than the one most
+recently written to (called &quot;type-punning&quot;) is common.  Even with
+<B>'-fstrict-aliasing'</B>, type-punning is allowed, provided the memory
+is accessed through the union type.  So, the code above will work as
+expected.  However, this code might not:
+<PRE>int f() {
+  a_union t;
+  int* ip;
+  t.d = 3.0;
+  ip = &amp;t.i;
+  return *ip;
+}
+</PRE>
+Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-falign-functions</B>
+<BR><B>-falign-functions=<I>n</I></B>
+<DD>Align the start of functions to the next power-of-two greater than
+<I>n</I>, skipping up to <I>n</I> bytes.  For instance,
+<B>'-falign-functions=32'</B> aligns functions to the next 32-byte
+boundary, but <B>'-falign-functions=24'</B> would align to the next
+32-byte boundary only if this can be done by skipping 23 bytes or less.
+<BR><BR>
+<B>'-fno-align-functions'</B> and <B>'-falign-functions=1'</B> are
+equivalent and mean that functions will not be aligned.
+<BR><BR>
+Some assemblers only support this flag when <I>n</I> is a power of two;
+in that case, it is rounded up.
+<BR><BR>
+If <I>n</I> is not specified, use a machine-dependent default.
+<BR><BR>
+Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>.
+<BR><BR>
+<DT><B>-falign-labels</B>
+<BR><B>-falign-labels=<I>n</I></B>
+<DD>Align all branch targets to a power-of-two boundary, skipping up to
+<I>n</I> bytes like <B>'-falign-functions'</B>.  This option can easily
+make code slower, because it must insert dummy operations for when the
+branch target is reached in the usual flow of the code.
+<BR><BR>
+If <B>'-falign-loops'</B> or <B>'-falign-jumps'</B> are applicable and
+are greater than this value, then their values are used instead.
+<BR><BR>
+If <I>n</I> is not specified, use a machine-dependent default which is
+very likely to be <CODE>1</CODE>, meaning no alignment.
+<BR><BR>
+Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>.
+<BR><BR>
+<DT><B>-falign-loops</B>
+<BR><B>-falign-loops=<I>n</I></B>
+<DD>Align loops to a power-of-two boundary, skipping up to <I>n</I> bytes
+like <B>'-falign-functions'</B>.  The hope is that the loop will be
+executed many times, which will make up for any execution of the dummy
+operations.
+<BR><BR>
+If <I>n</I> is not specified, use a machine-dependent default.
+<BR><BR>
+Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>.
+<BR><BR>
+<DT><B>-falign-jumps</B>
+<BR><B>-falign-jumps=<I>n</I></B>
+<DD>Align branch targets to a power-of-two boundary, for branch targets
+where the targets can only be reached by jumping, skipping up to <I>n</I>
+bytes like <B>'-falign-functions'</B>.  In this case, no dummy operations
+need be executed.
+<BR><BR>
+If <I>n</I> is not specified, use a machine-dependent default.
+<BR><BR>
+Enabled at levels <B>'-O2'</B>, <B>'-O3'</B>.
+<BR><BR>
+<DT><B>-frename-registers</B>
+<DD>Attempt to avoid false dependencies in scheduled code by making use
+of registers left over after register allocation.  This optimization
+will most benefit processors with lots of registers.  It can, however,
+make debugging impossible, since variables will no longer stay in
+a &quot;home register&quot;.
+<BR><BR>
+Enabled at levels <B>'-O3'</B>.
+<BR><BR>
+<DT><B>-fno-cprop-registers</B>
+<DD>After register allocation and post-register allocation instruction splitting,
+we perform a copy-propagation pass to try to reduce scheduling dependencies
+and occasionally eliminate the copy.
+<BR><BR>
+Disabled at levels <B>'-O'</B>, <B>'-O2'</B>, <B>'-O3'</B>, <B>'-Os'</B>.
+</DL>
+The following options control compiler behavior regarding floating
+point arithmetic.  These options trade off between speed and
+correctness.  All must be specifically enabled.
+<DL>
+<DT><B>-ffloat-store</B>
+<DD>Do not store floating point variables in registers, and inhibit other
+options that might change whether a floating point value is taken from a
+register or memory.
+<BR><BR>
+This option prevents undesirable excess precision on machines such as
+the 68000 where the floating registers (of the 68881) keep more
+precision than a <CODE><A HREF="$$INFOLINK(keywords/double)">double</A></CODE> is supposed to have.  Similarly for the
+x86 architecture.  For most programs, the excess precision does only
+good, but a few programs rely on the precise definition of IEEE floating
+point.  Use <B>'-ffloat-store'</B> for such programs, after modifying
+them to store all pertinent intermediate computations into variables.
+<BR><BR>
+This option is probably useless in TIGCC, except as a workaround for floating
+point arithmetic errors.
+<BR><BR>
+<DT><B>-ffast-math</B>
+<DD>Sets <B>'-fno-math-errno'</B>, <B>'-funsafe-math-optimizations'</B>,
+<B>'-fno-trapping-math'</B>, <B>'-ffinite-math-only'</B> and
+<B>'-fno-signaling-nans'</B>.
+<BR><BR>
+This option causes the preprocessor macro <CODE>__FAST_MATH__</CODE> to be defined.
+<BR><BR>
+This option should never be turned on by any <B>'-O'</B> option since
+it can result in incorrect output for programs which depend on
+an exact implementation of IEEE or ISO rules/specifications for
+math functions.
+<BR><BR>
+This option is probably useless in TIGCC.
+<BR><BR>
+<DT><B>-fno-math-errno</B>
+<DD>Do not set ERRNO after calling math functions that are executed
+with a single instruction, e.g., sqrt.  A program that relies on
+IEEE exceptions for math error handling may want to use this flag
+for speed while maintaining IEEE arithmetic compatibility.
+<BR><BR>
+This option should never be turned on by any <B>'-O'</B> option since
+it can result in incorrect output for programs which depend on
+an exact implementation of IEEE or ISO rules/specifications for
+math functions.
+<BR><BR>
+This option is probably useless in TIGCC.
+<BR><BR>
+The default is <B>'-fmath-errno'</B>.
+<BR><BR>
+<DT><B>-funsafe-math-optimizations</B>
+<DD>Allow optimizations for floating-point arithmetic that (a) assume
+that arguments and results are valid and (b) may violate IEEE or
+ANSI standards.  When used at link-time, it may include libraries
+or startup files that change the default FPU control word or other
+similar optimizations.
+<BR><BR>
+This option should never be turned on by any <B>'-O'</B> option since
+it can result in incorrect output for programs which depend on
+an exact implementation of IEEE or ISO rules/specifications for
+math functions.
+<BR><BR>
+This option is probably useless in TIGCC.
+<BR><BR>
+The default is <B>'-fno-unsafe-math-optimizations'</B>.
+<BR><BR>
+<DT><B>-ffinite-math-only</B>
+<DD>Allow optimizations for floating-point arithmetic that assume
+that arguments and results are not NaNs or +-Infs.
+<BR><BR>
+This option should never be turned on by any <B>'-O'</B> option since
+it can result in incorrect output for programs which depend on
+an exact implementation of IEEE or ISO rules/specifications.
+<BR><BR>
+The default is <B>'-fno-finite-math-only'</B>.
+<BR><BR>
+<DT><B>-fno-trapping-math</B>
+<DD>Compile code assuming that floating-point operations cannot generate
+user-visible traps.  These traps include division by zero, overflow,
+underflow, inexact result and invalid operation.  This option implies
+<B>'-fno-signaling-nans'</B>.  Setting this option may allow faster
+code if one relies on &quot;non-stop&quot; IEEE arithmetic, for example.
+<BR><BR>
+This option should never be turned on by any <B>'-O'</B> option since
+it can result in incorrect output for programs which depend on
+an exact implementation of IEEE or ISO rules/specifications for
+math functions.
+<BR><BR>
+This option is probably useless in TIGCC.
+<BR><BR>
+The default is <B>'-ftrapping-math'</B>.
+<BR><BR>
+<DT><B>-fsignaling-nans</B>
+<DD>Compile code assuming that IEEE signaling NaNs may generate user-visible
+traps during floating-point operations.  Setting this option disables
+optimizations that may change the number of exceptions visible with
+signaling NaNs.  This option implies <B>'-ftrapping-math'</B>.
+<BR><BR>
+This option causes the preprocessor macro <CODE>__SUPPORT_SNAN__</CODE> to
+be defined.
+<BR><BR>
+The default is <B>'-fno-signaling-nans'</B>.
+<BR><BR>
+This option is experimental and does not currently guarantee to
+disable all GCC optimizations that affect signaling NaN behavior.
+<BR><BR>
+<DT><B>-fsingle-precision-constant</B>
+<DD>Treat floating point constant as single precision constant instead of
+implicitly converting it to double precision constant.
+</DL>
+The following options control optimizations that may improve
+performance, but are not enabled by any <B>'-O'</B> options.  This
+section includes experimental options that may produce broken code.
+<DL>
+<DT><B>-fbranch-probabilities</B>
+<DD>After running a program compiled with <B>'-fprofile-arcs'</B>
+(see <A HREF="$$LINK(SEC9)">Options for Debugging Your Program or GCC</A>),
+you can compile it a second time using
+<B>'-fbranch-probabilities'</B>, to improve optimizations based on
+the number of times each branch was taken.  When the program
+compiled with <B>'-fprofile-arcs'</B> exits, it saves arc execution
+counts to a file called <CODE><I>sourcename</I>.da</CODE> for each source
+file.  The information in this data file is very dependent on the
+structure of the generated code, so you must use the same source code
+and the same optimization options for both compilations.
+<BR><BR>
+With <B>'-fbranch-probabilities'</B>, GCC puts a
+<CODE>REG_BR_PROB</CODE> note on each <CODE>JUMP_INSN</CODE> and <CODE>CALL_INSN</CODE>.
+These can be used to improve optimization.  Currently, they are only
+used in one place: in <CODE>reorg.c</CODE>, instead of guessing which path a
+branch is mostly to take, the <CODE>REG_BR_PROB</CODE> values are used to
+exactly determine which path is taken more often.
+<BR><BR>
+<DT><B>-fnew-ra</B>
+<DD>Use a graph coloring register allocator.  Currently this option is meant
+for testing, so we are interested to hear about miscompilations with
+<B>'-fnew-ra'</B>.
+<BR><BR>
+<DT><B>-ftracer</B>
+<DD>Perform tail duplication to enlarge superblock size. This transformation
+simplifies the control flow of the function allowing other optimizations to do
+better job.
+<BR><BR>
+<DT><B>-funroll-loops</B>
+<DD>Unroll loops whose number of iterations can be determined at compile
+time or upon entry to the loop.  <B>'-funroll-loops'</B> implies both
+<B>'-fstrength-reduce'</B> and <B>'-frerun-cse-after-loop'</B>.  This
+option makes code larger, and may or may not make it run faster.
+<BR><BR>
+<DT><B>-funroll-all-loops</B>
+<DD>Unroll all loops, even if their number of iterations is uncertain when
+the loop is entered.  This usually makes programs run more slowly.
+<B>'-funroll-all-loops'</B> implies the same options as
+<B>'-funroll-loops'</B>,
+<BR><BR>
+<DT><B>-fprefetch-loop-arrays</B>
+<DD>If supported by the target machine, generate instructions to prefetch
+memory to improve the performance of loops that access large arrays.
+<BR><BR>
+Disabled at level <B>'-Os'</B>.
+<BR><BR>
+<DT><B>-ffunction-sections</B>
+<BR><B>-fdata-sections</B>
+<DD>Place each function or data item into its own section in the output
+file if the target supports arbitrary sections.  The name of the
+function or the name of the data item determines the section's name
+in the output file.
+<BR><BR>
+Use these options on systems where the linker can perform optimizations
+to improve locality of reference in the instruction space.  Most systems
+using the ELF object format and SPARC processors running Solaris 2 have
+linkers with such optimizations.  AIX may have these optimizations in
+the future.
+<BR><BR>
+Only use these options when there are significant benefits from doing
+so.  When you specify these options, the assembler and linker will
+create larger object and executable files and will also be slower.
+You will not be able to use <CODE>gprof</CODE> on all systems if you
+specify this option and you may have problems with debugging if
+you specify both this option and <B>'-g'</B>.
+<BR><BR>
+<DT><B>-fssa</B>
+<DD>Perform optimizations in static single assignment form.  Each function's
+flow graph is translated into SSA form, optimizations are performed, and
+the flow graph is translated back from SSA form.  Users should not
+specify this option, since it is not yet ready for production use.
+<BR><BR>
+<DT><B>-fssa-ccp</B>
+<DD>Perform Sparse Conditional Constant Propagation in SSA form.  Requires
+<B>'-fssa'</B>.  Like <B>'-fssa'</B>, this is an experimental feature.
+<BR><BR>
+<DT><B>-fssa-dce</B>
+<DD>Perform aggressive dead-code elimination in SSA form.  Requires <B>'-fssa'</B>.
+Like <B>'-fssa'</B>, this is an experimental feature.
+<BR><BR>
+<DT><B>--param <I>name</I>=<I>value</I></B>
+<DD>In some places, GCC uses various constants to control the amount of
+optimization that is done.  For example, GCC will not inline functions
+that contain more that a certain number of instructions.  You can
+control some of these constants on the command-line using the
+<B>'--param'</B> option.
+<BR><BR>
+In each case, the <I>value</I> is an integer.  The allowable choices for
+<I>name</I> are given in the following table:
+<BR><BR><DL>
+<DT><B>max-crossjump-edges</B>
+<DD>The maximum number of incoming edges to consider for crossjumping.
+The algorithm used by <B>'-fcrossjumping'</B> is <CODE>O(N^2)</CODE> in
+the number of edges incoming to each block.  Increasing values mean
+more aggressive optimization, making the compile time increase with
+probably small improvement in executable size.
+<BR><BR>
+<DT><B>max-delay-slot-insn-search</B>
+<DD>The maximum number of instructions to consider when looking for an
+instruction to fill a delay slot.  If more than this arbitrary number of
+instructions is searched, the time savings from filling the delay slot
+will be minimal so stop searching.  Increasing values mean more
+aggressive optimization, making the compile time increase with probably
+small improvement in executable run time.
+<BR><BR>
+<DT><B>max-delay-slot-live-search</B>
+<DD>When trying to fill delay slots, the maximum number of instructions to
+consider when searching for a block with valid live register
+information.  Increasing this arbitrarily chosen value means more
+aggressive optimization, increasing the compile time.  This parameter
+should be removed when the delay slot code is rewritten to maintain the
+control-flow graph.
+<BR><BR>
+<DT><B>max-gcse-memory</B>
+<DD>The approximate maximum amount of memory that will be allocated in
+order to perform the global common subexpression elimination
+optimization.  If more memory than specified is required, the
+optimization will not be done.
+<BR><BR>
+<DT><B>max-gcse-passes</B>
+<DD>The maximum number of passes of GCSE to run.
+<BR><BR>
+<DT><B>max-pending-list-length</B>
+<DD>The maximum number of pending dependencies scheduling will allow
+before flushing the current state and starting over.  Large functions
+with few branches or calls can create excessively large lists which
+needlessly consume memory and resources.
+<BR><BR>
+<DT><B>max-inline-insns-single</B>
+<DD>Several parameters control the tree inliner used in gcc.
+This number sets the maximum number of instructions (counted in gcc's
+internal representation) in a single function that the tree inliner
+will consider for inlining.  This only affects functions declared
+inline.
+The default value is 300.
+<BR><BR>
+<DT><B>max-inline-insns-auto</B>
+<DD>When you use <B>'-finline-functions'</B> (included in <B>'-O3'</B>),
+a lot of functions that would otherwise not be considered for inlining
+by the compiler will be investigated.  To those functions, a different
+(more restrictive) limit compared to functions declared inline can
+be applied.
+The default value is 300.
+<BR><BR>
+<DT><B>max-inline-insns</B>
+<DD>The tree inliner does decrease the allowable size for single functions
+to be inlined after we already inlined the number of instructions
+given here by repeated inlining.  This number should be a factor of
+two or more larger than the single function limit.
+Higher numbers result in better runtime performance, but incur higher
+compile-time resource (CPU time, memory) requirements and result in
+larger binaries.  Very high values are not advisable, as too large
+binaries may adversely affect runtime performance.
+The default value is 600.
+<BR><BR>
+<DT><B>max-inline-slope</B>
+<DD>After exceeding the maximum number of inlined instructions by repeated
+inlining, a linear function is used to decrease the allowable size
+for single functions.  The slope of that function is the negative
+reciprocal of the number specified here.
+The default value is 32.
+<BR><BR>
+<DT><B>min-inline-insns</B>
+<DD>The repeated inlining is throttled more and more by the linear function
+after exceeding the limit.  To avoid too much throttling, a minimum for
+this function is specified here to allow repeated inlining for very small
+functions even when a lot of repeated inlining already has been done.
+The default value is 130.
+<BR><BR>
+<DT><B>max-inline-insns-rtl</B>
+<DD>For languages that use the RTL inliner (this happens at a later stage
+than tree inlining), you can set the maximum allowable size (counted
+in RTL instructions) for the RTL inliner with this parameter.
+The default value is 600.
+<BR><BR>
+<DT><B>max-unrolled-insns</B>
+<DD>The maximum number of instructions that a loop should have if that loop
+is unrolled, and if the loop is unrolled, it determines how many times
+the loop code is unrolled.
+<BR><BR>
+<DT><B>hot-bb-count-fraction</B>
+<DD>Select fraction of the maximal count of repetitions of basic block in program
+given basic block needs to have to be considered hot.
+<BR><BR>
+<DT><B>hot-bb-frequency-fraction</B>
+<DD>Select fraction of the maximal frequency of executions of basic block in
+function given basic block needs to have to be considered hot
+<BR><BR>
+<DT><B>tracer-dynamic-coverage</B>
+<BR><B>tracer-dynamic-coverage-feedback</B>
+<DD>This value is used to limit superblock formation once the given percentage of
+executed instructions is covered.  This limits unnecessary code size
+expansion.
+<BR><BR>
+The <B>'tracer-dynamic-coverage-feedback'</B> is used only when profile
+feedback is available.  The real profiles (as opposed to statically estimated
+ones) are much less balanced allowing the threshold to be larger value.
+<BR><BR>
+<DT><B>tracer-max-code-growth</B>
+<DD>Stop tail duplication once code growth has reached given percentage.  This is
+rather hokey argument, as most of the duplicates will be eliminated later in
+cross jumping, so it may be set to much higher values than is the desired code
+growth.
+<BR><BR>
+<DT><B>tracer-min-branch-ratio</B>
+<DD>Stop reverse growth when the reverse probability of best edge is less than this
+threshold (in percent).
+<BR><BR>
+<DT><B>tracer-min-branch-ratio</B>
+<BR><B>tracer-min-branch-ratio-feedback</B>
+<DD>Stop forward growth if the best edge do have probability lower than this
+threshold.
+<BR><BR>
+Similarly to <B>'tracer-dynamic-coverage'</B> two values are present, one for
+compilation for profile feedback and one for compilation without.  The value
+for compilation with profile feedback needs to be more conservative (higher) in
+order to make tracer effective.
+<BR><BR>
+<DT><B>ggc-min-expand</B>
+<DD>GCC uses a garbage collector to manage its own memory allocation.  This
+parameter specifies the minimum percentage by which the garbage
+collector's heap should be allowed to expand between collections.
+Tuning this may improve compilation speed; it has no effect on code
+generation.
+<BR><BR>
+The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when
+RAM &gt;= 1GB.  If <CODE>getrlimit</CODE> is available, the notion of &quot;RAM&quot; is
+the smallest of actual RAM, RLIMIT_RSS, RLIMIT_DATA and RLIMIT_AS.  If
+GCC is not able to calculate RAM on a particular platform, the lower
+bound of 30% is used.  Setting this parameter and
+<B>'ggc-min-heapsize'</B> to zero causes a full collection to occur at
+every opportunity.  This is extremely slow, but can be useful for
+debugging.
+<BR><BR>
+<DT><B>ggc-min-heapsize</B>
+<DD>Minimum size of the garbage collector's heap before it begins bothering
+to collect garbage.  The first collection occurs after the heap expands
+by <B>'ggc-min-expand'</B>% beyond <B>'ggc-min-heapsize'</B>.  Again,
+tuning this may improve compilation speed, and has no effect on code
+generation.
+<BR><BR>
+The default is RAM/8, with a lower bound of 4096 (four megabytes) and an
+upper bound of 131072 (128 megabytes).  If <CODE>getrlimit</CODE> is
+available, the notion of &quot;RAM&quot; is the smallest of actual RAM,
+RLIMIT_RSS, RLIMIT_DATA and RLIMIT_AS.  If GCC is not able to calculate
+RAM on a particular platform, the lower bound is used.  Setting this
+parameter very large effectively disables garbage collection.  Setting
+this parameter and <B>'ggc-min-expand'</B> to zero causes a full
+collection to occur at every opportunity.
+</DL>
+</DL>

+ 525 - 525
tigcc/doc/System/Info/comopts/SEC11.hss

@@ -1,525 +1,525 @@
-[Main]
-Title=Options Controlling the Preprocessor
-
-[Top]
-These options control the <A HREF="$$INFOLINK(cpp)">C preprocessor</A>, which is run on each C source
-file before actual compilation.
-<BR><BR>
-If you use the <B>'-E'</B> option, nothing is done except preprocessing.
-Some of these options make sense only together with <B>'-E'</B> because
-they cause the preprocessor output to be unsuitable for actual
-compilation.
-<BR><BR>
-You can use <B>'-Wp,<I>option</I>'</B> to bypass the compiler driver
-and pass <I>option</I> directly through to the preprocessor.  If
-<I>option</I> contains commas, it is split into multiple options at the
-commas.  However, many options are modified, translated or interpreted
-by the compiler driver before being passed to the preprocessor, and
-<B>'-Wp'</B> forcibly bypasses this phase.  The preprocessor's direct
-interface is undocumented and subject to change, so whenever possible
-you should avoid using <B>'-Wp'</B> and let the driver handle the
-options instead.
-<DL>
-<DT><B>-D <I>name</I></B>
-<DD>Predefine <I>name</I> as a macro, with definition <CODE>1</CODE>.
-<BR><BR>
-<DT><B>-D <I>name</I>=<I>definition</I></B>
-<DD>Predefine <I>name</I> as a macro, with definition <I>definition</I>.
-There are no restrictions on the contents of <I>definition</I>, but if
-you are invoking the preprocessor from a shell or shell-like program you
-may need to use the shell's quoting syntax to protect characters such as
-spaces that have a meaning in the shell syntax.
-<BR><BR>
-If you wish to define a function-like macro on the command line, write
-its argument list with surrounding parentheses before the equals sign
-(if any).  Parentheses are meaningful to most shells, so you will need
-to quote the option.  With <CODE>sh</CODE> and <CODE>csh</CODE>,
-<B>'-D'<I>name</I>(<I>args...</I>)=<I>definition</I>''</B> works.
-<BR><BR>
-<B>'-D'</B> and <B>'-U'</B> options are processed in the order they
-are given on the command line.  All <B>'-imacros <I>file</I>'</B> and
-<B>'-include <I>file</I>'</B> options are processed after all
-<B>'-D'</B> and <B>'-U'</B> options.
-<BR><BR>
-<DT><B>-U <I>name</I></B>
-<DD>Cancel any previous definition of <I>name</I>, either built in or
-provided with a <B>'-D'</B> option.
-<BR><BR>
-<DT><B>-undef</B>
-<DD>Do not predefine any system-specific macros.  The common predefined
-macros remain defined.
-<BR><BR>
-<DT><B>-I <I>dir</I></B>
-<DD>Add the directory <I>dir</I> to the list of directories to be searched
-for header files.
-Directories named by <B>'-I'</B> are searched before the standard
-system include directories.  If the directory <I>dir</I> is a standard
-system include directory, the option is ignored to ensure that the
-default search order for system directories and the special treatment
-of system headers are not defeated
-(see <A HREF="$$INFOLINK(cpp/SEC9a)">System Headers</A>).
-<BR><BR>
-<DT><B>-o <I>file</I></B>
-<DD>Write output to <I>file</I>.  This is the same as specifying <I>file</I>
-as the second non-option argument to <CODE>cpp</CODE>.  <CODE>gcc</CODE> has a
-different interpretation of a second non-option argument, so you must
-use <B>'-o'</B> to specify the output file.
-<BR><BR>
-<DT><B>-Wall</B>
-<DD>Turns on all optional warnings which are desirable for normal code.  At
-present this is <B>'-Wcomment'</B> and <B>'-Wtrigraphs'</B>.  Note that
-many of the preprocessor's warnings are on by default and have no
-options to control them.
-<BR><BR>
-<DT><B>-Wcomment</B>
-<BR><B>-Wcomments</B>
-<DD>Warn whenever a comment-start sequence <CODE>/*</CODE> appears in a <CODE>/*</CODE>
-comment, or whenever a backslash-newline appears in a <CODE>//</CODE> comment.
-(Both forms have the same effect.)
-<BR><BR>
-<DT><B>-Wtrigraphs</B>
-<DD>Warn if any trigraphs are encountered.  This option used to take effect
-only if <B>'-trigraphs'</B> was also specified, but now works
-independently.  Warnings are not given for trigraphs within comments, as
-they do not affect the meaning of the program.
-<BR><BR>
-<DT><B>-Wtraditional</B>
-<DD>Warn about certain constructs that behave differently in traditional and
-ISO C.  Also warn about ISO C constructs that have no traditional C
-equivalent, and problematic constructs which should be avoided.
-See <A HREF="$$INFOLINK(cpp/SEC70)">Traditional Mode</A>.
-<BR><BR>
-<DT><B>-Wimport</B>
-<DD>Warn the first time <CODE>#import</CODE> is used.
-<BR><BR>
-<DT><B>-Wundef</B>
-<DD>Warn whenever an identifier which is not a macro is encountered in an
-<CODE>#if</CODE> directive, outside of <CODE>defined</CODE>.  Such identifiers are
-replaced with zero.
-<BR><BR>
-<DT><B>-Wunused-macros</B>
-<DD>Warn about macros defined in the main file that are unused.  A macro
-is <U>used</U> if it is expanded or tested for existence at least once.
-The preprocessor will also warn if the macro has not been used at the
-time it is redefined or undefined.
-<BR><BR>
-Built-in macros, macros defined on the command line, and macros
-defined in include files are not warned about.
-<BR><BR>
-<B>Note:</B> If a macro is actually used, but only used in skipped
-conditional blocks, then CPP will report it as unused.  To avoid the
-warning in such a case, you might improve the scope of the macro's
-definition by, for example, moving it into the first skipped block.
-Alternatively, you could provide a dummy use with something like:
-<PRE>#if defined the_macro_causing_the_warning
-#endif
-</PRE>
-<DT><B>-Wendif-labels</B>
-<DD>Warn whenever an <CODE>#else</CODE> or an <CODE>#endif</CODE> are followed by text.
-This usually happens in code of the form
-<PRE>#if FOO
-...
-#else FOO
-...
-#endif FOO
-</PRE>
-The second and third <CODE>FOO</CODE> should be in comments, but often are not
-in older programs.  This warning is on by default.
-<BR><BR>
-<DT><B>-Werror</B>
-<DD>Make all warnings into hard errors.  Source code which triggers warnings
-will be rejected.
-<BR><BR>
-<DT><B>-Wsystem-headers</B>
-<DD>Issue warnings for code in system headers.  These are normally unhelpful
-in finding bugs in your own code, therefore suppressed.  If you are
-responsible for the system library, you may want to see them.
-<BR><BR>
-<DT><B>-w</B>
-<DD>Suppress all warnings, including those which GNU CPP issues by default.
-<BR><BR>
-<DT><B>-pedantic</B>
-<DD>Issue all the mandatory diagnostics listed in the C standard.  Some of
-them are left out by default, since they trigger frequently on harmless
-code.
-<BR><BR>
-<DT><B>-pedantic-errors</B>
-<DD>Issue all the mandatory diagnostics, and make all mandatory diagnostics
-into errors.  This includes mandatory diagnostics that GCC issues
-without <B>'-pedantic'</B> but treats as warnings.
-<BR><BR>
-<DT><B>-M</B>
-<DD>Instead of outputting the result of preprocessing, output a rule
-suitable for <CODE>make</CODE> describing the dependencies of the main
-source file.  The preprocessor outputs one <CODE>make</CODE> rule containing
-the object file name for that source file, a colon, and the names of all
-the included files, including those coming from <B>'-include'</B> or
-<B>'-imacros'</B> command line options.
-<BR><BR>
-Unless specified explicitly (with <B>'-MT'</B> or <B>'-MQ'</B>), the
-object file name consists of the basename of the source file with any
-suffix replaced with object file suffix.  If there are many included
-files then the rule is split into several lines using <CODE>\</CODE>-newline.
-The rule has no commands.
-<BR><BR>
-This option does not suppress the preprocessor's debug output, such as
-<B>'-dM'</B>.  To avoid mixing such debug output with the dependency
-rules you should explicitly specify the dependency output file with
-<B>'-MF'</B>, or use an environment variable like
-<CODE>DEPENDENCIES_OUTPUT</CODE> (see <A HREF="$$INFOLINK(cpp/SEC45)">Environment Variables</A>).  Debug output
-will still be sent to the regular output stream as normal.
-<BR><BR>
-Passing <B>'-M'</B> to the driver implies <B>'-E'</B>, and suppresses
-warnings with an implicit <B>'-w'</B>.
-<BR><BR>
-<DT><B>-MM</B>
-<DD>Like <B>'-M'</B> but do not mention header files that are found in
-system header directories, nor header files that are included,
-directly or indirectly, from such a header.
-<BR><BR>
-This implies that the choice of angle brackets or double quotes in an
-<CODE>#include</CODE> directive does not in itself determine whether that
-header will appear in <B>'-MM'</B> dependency output.  This is a
-slight change in semantics from GCC versions 3.0 and earlier.
-<BR><BR>
-<DT><B>-MF <I>file</I></B>
-<DD>
-When used with <B>'-M'</B> or <B>'-MM'</B>, specifies a
-file to write the dependencies to.  If no <B>'-MF'</B> switch is given
-the preprocessor sends the rules to the same place it would have sent
-preprocessed output.
-<BR><BR>
-When used with the driver options <B>'-MD'</B> or <B>'-MMD'</B>,
-<B>'-MF'</B> overrides the default dependency output file.
-<BR><BR>
-<DT><B>-MG</B>
-<DD>In conjunction with an option such as <B>'-M'</B> requesting
-dependency generation, <B>'-MG'</B> assumes missing header files are
-generated files and adds them to the dependency list without raising
-an error.  The dependency filename is taken directly from the
-<CODE>#include</CODE> directive without prepending any path.  <B>'-MG'</B>
-also suppresses preprocessed output, as a missing header file renders
-this useless.
-<BR><BR>
-This feature is used in automatic updating of makefiles.
-<BR><BR>
-<DT><B>-MP</B>
-<DD>This option instructs CPP to add a phony target for each dependency
-other than the main file, causing each to depend on nothing.  These
-dummy rules work around errors <CODE>make</CODE> gives if you remove header
-files without updating the <CODE>Makefile</CODE> to match.
-<BR><BR>
-This is typical output:
-<PRE>test.o: test.c test.h
-
-test.h:
-</PRE>
-<DT><B>-MT <I>target</I></B>
-<DD>Change the target of the rule emitted by dependency generation.  By
-default CPP takes the name of the main input file, including any path,
-deletes any file suffix such as <CODE>.c</CODE>, and appends the platform's
-usual object suffix.  The result is the target.
-<BR><BR>
-An <B>'-MT'</B> option will set the target to be exactly the string you
-specify.  If you want multiple targets, you can specify them as a single
-argument to <B>'-MT'</B>, or use multiple <B>'-MT'</B> options.
-<BR><BR>
-For example, <B>'-MT '$(objpfx)foo.o''</B> might give
-<PRE>$(objpfx)foo.o: foo.c
-</PRE>
-<DT><B>-MQ <I>target</I></B>
-<DD>Same as <B>'-MT'</B>, but it quotes any characters which are special to
-Make.
-The default target is automatically quoted, as if it were given with
-<B>'-MQ'</B>.
-<BR><BR>
-<DT><B>-MD</B>
-<DD><B>'-MD'</B> is equivalent to <B>'-M -MF <I>file</I>'</B>, except that
-<B>'-E'</B> is not implied.  The driver determines <I>file</I> based on
-whether an <B>'-o'</B> option is given.  If it is, the driver uses its
-argument but with a suffix of <CODE>.d</CODE>, otherwise it take the
-basename of the input file and applies a <CODE>.d</CODE> suffix.
-<BR><BR>
-If <B>'-MD'</B> is used in conjunction with <B>'-E'</B>, any
-<B>'-o'</B> switch is understood to specify the dependency output file, but
-if used without <B>'-E'</B>, each <B>'-o'</B>
-is understood to specify a target object file.
-<BR><BR>
-Since <B>'-E'</B> is not implied, <B>'-MD'</B> can be used to generate
-a dependency output file as a side-effect of the compilation process.
-<BR><BR>
-<DT><B>-MMD</B>
-<DD>Like <B>'-MD'</B> except mention only user header files, not system
--header files.
-<BR><BR>
-<DT><B>-x c</B>
-<BR><B>-x c++</B>
-<BR><B>-x objective-c</B>
-<BR><B>-x assembler-with-cpp</B>
-<DD>Specify the source language: C, C++, Objective-C, or assembly.  This has
-nothing to do with standards conformance or extensions; it merely
-selects which base syntax to expect.  If you give none of these options,
-cpp will deduce the language from the extension of the source file:
-<CODE>.c</CODE>, <CODE>.cc</CODE>, <CODE>.m</CODE>, or <CODE>.S</CODE>.  Some other common
-extensions for C++ and assembly are also recognized.  If cpp does not
-recognize the extension, it will treat the file as C; this is the most
-generic mode.  Note that C++ and Objective-C are not supported in TIGCC.
-<BR><BR>
-<B>Note:</B> Previous versions of cpp accepted a <B>'-lang'</B> option
-which selected both the language and the standards conformance level.
-This option has been removed, because it conflicts with the <B>'-l'</B>
-option.
-<BR><BR>
-<DT><B>-std=<I>standard</I></B>
-<BR><B>-ansi</B>
-<DD>Specify the standard to which the code should conform.  Currently CPP
-knows about C and C++ standards; others may be added in the future
-(although it will not be important for TIGCC).
-<BR><BR>
-<I>standard</I>
-may be one of:
-<BR><BR><DL>
-<DT><B>iso9899:1990</B>
-<BR><B>c89</B>
-<DD>The ISO C standard from 1990.  <CODE>c89</CODE> is the customary shorthand for
-this version of the standard.
-<BR><BR>
-The <B>'-ansi'</B> option is equivalent to <B>'-std=c89'</B>.
-<BR><BR>
-<DT><B>iso9899:199409</B>
-<DD>The 1990 C standard, as amended in 1994.
-<BR><BR>
-<DT><B>iso9899:1999</B>
-<BR><B>c99</B>
-<BR><B>iso9899:199x</B>
-<BR><B>c9x</B>
-<DD>The revised ISO C standard, published in December 1999.  Before
-publication, this was known as C9X.
-<BR><BR>
-<DT><B>gnu89</B>
-<DD>The 1990 C standard plus GNU extensions.  This is the default.
-<BR><BR>
-<DT><B>gnu99</B>
-<BR><B>gnu9x</B>
-<DD>The 1999 C standard plus GNU extensions.
-<BR><BR>
-<DT><B>c++98</B>
-<DD>The 1998 ISO C++ standard plus amendments.
-<BR><BR>
-<DT><B>gnu++98</B>
-<DD>The same as <B>'-std=c++98'</B> plus GNU extensions.  This is the
-default for C++ code.
-</DL><BR>
-<BR><BR>
-<DT><B>-I-</B>
-<DD>Split the include path.  Any directories specified with <B>'-I'</B>
-options before <B>'-I-'</B> are searched only for headers requested with
-<CODE>#include&nbsp;&quot;<I>file</I>&quot;</CODE>; they are not searched for
-<CODE>#include&nbsp;&lt;<I>file</I>&gt;</CODE>.  If additional directories are
-specified with <B>'-I'</B> options after the <B>'-I-'</B>, those
-directories are searched for all <CODE>#include</CODE> directives.
-<BR><BR>
-In addition, <B>'-I-'</B> inhibits the use of the directory of the current
-file directory as the first search directory for <CODE>#include
-&quot;<I>file</I>&quot;</CODE>.
-<BR><BR>
-<DT><B>-nostdinc</B>
-<DD>Do not search the standard system directories for header files.
-Only the directories you have specified with <B>'-I'</B> options
-(and the directory of the current file, if appropriate) are searched.
-<BR><BR>
-<DT><B>-nostdinc++</B>
-<DD>Do not search for header files in the C++-specific standard directories,
-but do still search the other standard directories (not applicable to TIGCC,
-because it does not support C++).
-<BR><BR>
-<DT><B>-include <I>file</I></B>
-<DD>Process <I>file</I> as if <CODE>#include&nbsp;&quot;file&quot;</CODE> appeared as the first
-line of the primary source file.  However, the first directory searched
-for <I>file</I> is the preprocessor's working directory <I>instead of</I>
-the directory containing the main source file.  If not found there, it
-is searched for in the remainder of the <CODE>#include&nbsp;&quot;...&quot;</CODE> search
-chain as normal.
-<BR><BR>
-If multiple <B>'-include'</B> options are given, the files are included
-in the order they appear on the command line.
-<BR><BR>
-<DT><B>-imacros <I>file</I></B>
-<DD>Exactly like <B>'-include'</B>, except that any output produced by
-scanning <I>file</I> is thrown away.  Macros it defines remain defined.
-This allows you to acquire all the macros from a header without also
-processing its declarations.
-<BR><BR>
-All files specified by <B>'-imacros'</B> are processed before all files
-specified by <B>'-include'</B>.
-<BR><BR>
-<DT><B>-idirafter <I>dir</I></B>
-<DD>Search <I>dir</I> for header files, but do it <I>after</I> all
-directories specified with <B>'-I'</B> and the standard system directories
-have been exhausted.  <I>dir</I> is treated as a system include directory.
-<BR><BR>
-<DT><B>-iprefix <I>prefix</I></B>
-<DD>Specify <I>prefix</I> as the prefix for subsequent <B>'-iwithprefix'</B>
-options.  If the prefix represents a directory, you should include the
-final <CODE>/</CODE>.
-<BR><BR>
-<DT><B>-iwithprefix <I>dir</I></B>
-<BR><B>-iwithprefixbefore <I>dir</I></B>
-<DD>Append <I>dir</I> to the prefix specified previously with
-<B>'-iprefix'</B>, and add the resulting directory to the include search
-path.  <B>'-iwithprefixbefore'</B> puts it in the same place <B>'-I'</B>
-would; <B>'-iwithprefix'</B> puts it where <B>'-idirafter'</B> would.
-<BR><BR>
-Use of these options is discouraged.
-<BR><BR>
-<DT><B>-isystem <I>dir</I></B>
-<DD>Search <I>dir</I> for header files, after all directories specified by
-<B>'-I'</B> but before the standard system directories.  Mark it
-as a system directory, so that it gets the same special treatment as
-is applied to the standard system directories.
-See <A HREF="$$INFOLINK(cpp/SEC9a)">System Headers</A>.
-<BR><BR>
-<DT><B>-fpreprocessed</B>
-<DD>Indicate to the preprocessor that the input file has already been
-preprocessed.  This suppresses things like macro expansion, trigraph
-conversion, escaped newline splicing, and processing of most directives.
-The preprocessor still recognizes and removes comments, so that you can
-pass a file preprocessed with <B>'-C'</B> to the compiler without
-problems.  In this mode the integrated preprocessor is little more than
-a tokenizer for the front ends.
-<BR><BR>
-<B>'-fpreprocessed'</B> is implicit if the input file has one of the
-extensions <CODE>.i</CODE>, <CODE>.ii</CODE> or <CODE>.mi</CODE>.  These are the
-extensions that GCC uses for preprocessed files created by
-<B>'-save-temps'</B>.
-<BR><BR>
-<DT><B>-ftabstop=<I>width</I></B>
-<DD>Set the distance between tab stops.  This helps the preprocessor report
-correct column numbers in warnings or errors, even if tabs appear on the
-line.  If the value is less than 1 or greater than 100, the option is
-ignored.  The default is 8.
-<BR><BR>
-<DT><B>-fno-show-column</B>
-<DD>Do not print column numbers in diagnostics.  This may be necessary if
-diagnostics are being scanned by a program that does not understand the
-column numbers, such as <CODE>dejagnu</CODE>.
-<BR><BR>
-<DT><B>-A <I>predicate</I>=<I>answer</I></B>
-<DD>Make an assertion with the predicate <I>predicate</I> and answer
-<I>answer</I>.  This form is preferred to the older form <B>'-A
-<I>predicate</I>(<I>answer</I>)'</B>, which is still supported, because
-it does not use shell special characters.
-See <A HREF="$$INFOLINK(cpp/SEC39)">Assertions</A>.
-<DT><B>-A -<I>predicate</I>=<I>answer</I></B>
-<DD>Cancel an assertion with the predicate <I>predicate</I> and answer
-<I>answer</I>.
-<BR><BR>
-<DT><B>-dCHARS</B>
-<DD><I>CHARS</I> is a sequence of one or more of the following characters,
-and must not be preceded by a space.  Other characters are interpreted
-by the compiler proper, or reserved for future versions of GCC, and so
-are silently ignored.  If you specify characters whose behavior
-conflicts, the result is undefined.
-<BR><BR><DL>
-<DT><B>M</B>
-<DD>Instead of the normal output, generate a list of <CODE>#define</CODE>
-directives for all the macros defined during the execution of the
-preprocessor, including predefined macros.  This gives you a way of
-finding out what is predefined in your version of the preprocessor.
-Assuming you have no file <CODE>foo.h</CODE>, the command
-<PRE>touch foo.h; cpp -dM foo.h
-</PRE>
-will show all the predefined macros.
-<BR><BR>
-<DT><B>D</B>
-<DD>Like <CODE>M</CODE> except in two respects: it does <I>not</I> include the
-predefined macros, and it outputs <I>both</I> the <CODE>#define</CODE>
-directives and the result of preprocessing.  Both kinds of output go to
-the standard output file.
-<BR><BR>
-<DT><B>N</B>
-<DD>Like <CODE>D</CODE>, but emit only the macro names, not their expansions.
-<BR><BR>
-<DT><B>I</B>
-<DD>Output <CODE>#include</CODE> directives in addition to the result of
-preprocessing.
-</DL><BR>
-<DT><B>-P</B>
-<DD>Inhibit generation of linemarkers in the output from the preprocessor.
-This might be useful when running the preprocessor on something that is
-not C code, and will be sent to a program which might be confused by the
-linemarkers.
-See <A HREF="$$INFOLINK(cpp/SEC43)">Preprocessor Output</A>.
-<BR><BR>
-<DT><B>-C</B>
-<DD>Do not discard comments.  All comments are passed through to the output
-file, except for comments in processed directives, which are deleted
-along with the directive.
-<BR><BR>
-You should be prepared for side effects when using <B>'-C'</B>; it
-causes the preprocessor to treat comments as tokens in their own right.
-For example, comments appearing at the start of what would be a
-directive line have the effect of turning that line into an ordinary
-source line, since the first token on the line is no longer a <CODE>#</CODE>.
-<BR><BR>
-<DT><B>-CC</B>
-<DD>Do not discard comments, including during macro expansion.  This is
-like <B>'-C'</B>, except that comments contained within macros are
-also passed through to the output file where the macro is expanded.
-<BR><BR>
-In addition to the side-effects of the <B>'-C'</B> option, the
-<B>'-CC'</B> option causes all C++-style comments inside a macro
-to be converted to C-style comments.  This is to prevent later use
-of that macro from inadvertently commenting out the remainder of
-the source line.
-<BR><BR>
-The <B>'-CC'</B> option is generally used to support lint comments.
-<BR><BR>
-<DT><B>-gcc</B>
-<DD>Define the macros __GNUC__, __GNUC_MINOR__ and
-__GNUC_PATCHLEVEL__.  These are defined automatically when you use
-<CODE>gcc&nbsp;-E</CODE>; you can turn them off in that case with
-<B>'-no-gcc'</B>.
-<BR><BR>
-<DT><B>-traditional-cpp</B>
-<DD>Try to imitate the behavior of old-fashioned C preprocessors, as
-opposed to ISO C preprocessors.
-See <A HREF="$$INFOLINK(cpp/SEC70)">Traditional Mode</A>.
-<BR><BR>
-<DT><B>-trigraphs</B>
-<DD>Process trigraph sequences.
-See <A HREF="$$INFOLINK(cpp/SEC3)">Initial processing</A>.
-These are three-character sequences, all starting with <CODE>??</CODE>, that
-are defined by ISO C to stand for single characters.  For example,
-<CODE>??/</CODE> stands for <CODE>\</CODE>, so <CODE>'??/n'</CODE> is a character
-constant for a newline.  By default, GCC ignores trigraphs, but in
-standard-conforming modes it converts them.  See the <B>'-std'</B> and
-<B>'-ansi'</B> options.
-<BR><BR>
-The nine trigraphs and their replacements are
-<PRE>Trigraph:       ??(  ??)  ??&lt;  ??&gt;  ??=  ??/  ??'  ??!  ??-
-Replacement:      [    ]    {    }    #    \    ^    |    ~
-</PRE>
-<DT><B>-remap</B>
-<DD>Enable special code to work around file systems which only permit very
-short file names, such as MS-DOS.
-<BR><BR>
-<DT><B>--help</B>
-<BR><B>--target-help</B>
-<DD>Print text describing all the command line options instead of
-preprocessing anything.
-<BR><BR>
-<DT><B>-v</B>
-<DD>Verbose mode.  Print out GNU CPP's version number at the beginning of
-execution, and report the final form of the include path.
-<BR><BR>
-<DT><B>-H</B>
-<DD>Print the name of each header file used, in addition to other normal
-activities.  Each name is indented to show how deep in the
-<CODE>#include</CODE> stack it is.
-<BR><BR>
-<DT><B>-version</B>
-<BR><B>--version</B>
-<DD>Print out GNU CPP's version number.  With one dash, proceed to
-preprocess as normal.  With two dashes, exit immediately.
-</DL>
+[Main]
+Title=Options Controlling the Preprocessor
+
+[Top]
+These options control the <A HREF="$$INFOLINK(cpp)">C preprocessor</A>, which is run on each C source
+file before actual compilation.
+<BR><BR>
+If you use the <B>'-E'</B> option, nothing is done except preprocessing.
+Some of these options make sense only together with <B>'-E'</B> because
+they cause the preprocessor output to be unsuitable for actual
+compilation.
+<BR><BR>
+You can use <B>'-Wp,<I>option</I>'</B> to bypass the compiler driver
+and pass <I>option</I> directly through to the preprocessor.  If
+<I>option</I> contains commas, it is split into multiple options at the
+commas.  However, many options are modified, translated or interpreted
+by the compiler driver before being passed to the preprocessor, and
+<B>'-Wp'</B> forcibly bypasses this phase.  The preprocessor's direct
+interface is undocumented and subject to change, so whenever possible
+you should avoid using <B>'-Wp'</B> and let the driver handle the
+options instead.
+<DL>
+<DT><B>-D <I>name</I></B>
+<DD>Predefine <I>name</I> as a macro, with definition <CODE>1</CODE>.
+<BR><BR>
+<DT><B>-D <I>name</I>=<I>definition</I></B>
+<DD>Predefine <I>name</I> as a macro, with definition <I>definition</I>.
+There are no restrictions on the contents of <I>definition</I>, but if
+you are invoking the preprocessor from a shell or shell-like program you
+may need to use the shell's quoting syntax to protect characters such as
+spaces that have a meaning in the shell syntax.
+<BR><BR>
+If you wish to define a function-like macro on the command line, write
+its argument list with surrounding parentheses before the equals sign
+(if any).  Parentheses are meaningful to most shells, so you will need
+to quote the option.  With <CODE>sh</CODE> and <CODE>csh</CODE>,
+<B>'-D'<I>name</I>(<I>args...</I>)=<I>definition</I>''</B> works.
+<BR><BR>
+<B>'-D'</B> and <B>'-U'</B> options are processed in the order they
+are given on the command line.  All <B>'-imacros <I>file</I>'</B> and
+<B>'-include <I>file</I>'</B> options are processed after all
+<B>'-D'</B> and <B>'-U'</B> options.
+<BR><BR>
+<DT><B>-U <I>name</I></B>
+<DD>Cancel any previous definition of <I>name</I>, either built in or
+provided with a <B>'-D'</B> option.
+<BR><BR>
+<DT><B>-undef</B>
+<DD>Do not predefine any system-specific macros.  The common predefined
+macros remain defined.
+<BR><BR>
+<DT><B>-I <I>dir</I></B>
+<DD>Add the directory <I>dir</I> to the list of directories to be searched
+for header files.
+Directories named by <B>'-I'</B> are searched before the standard
+system include directories.  If the directory <I>dir</I> is a standard
+system include directory, the option is ignored to ensure that the
+default search order for system directories and the special treatment
+of system headers are not defeated
+(see <A HREF="$$INFOLINK(cpp/SEC9a)">System Headers</A>).
+<BR><BR>
+<DT><B>-o <I>file</I></B>
+<DD>Write output to <I>file</I>.  This is the same as specifying <I>file</I>
+as the second non-option argument to <CODE>cpp</CODE>.  <CODE>gcc</CODE> has a
+different interpretation of a second non-option argument, so you must
+use <B>'-o'</B> to specify the output file.
+<BR><BR>
+<DT><B>-Wall</B>
+<DD>Turns on all optional warnings which are desirable for normal code.  At
+present this is <B>'-Wcomment'</B> and <B>'-Wtrigraphs'</B>.  Note that
+many of the preprocessor's warnings are on by default and have no
+options to control them.
+<BR><BR>
+<DT><B>-Wcomment</B>
+<BR><B>-Wcomments</B>
+<DD>Warn whenever a comment-start sequence <CODE>/*</CODE> appears in a <CODE>/*</CODE>
+comment, or whenever a backslash-newline appears in a <CODE>//</CODE> comment.
+(Both forms have the same effect.)
+<BR><BR>
+<DT><B>-Wtrigraphs</B>
+<DD>Warn if any trigraphs are encountered.  This option used to take effect
+only if <B>'-trigraphs'</B> was also specified, but now works
+independently.  Warnings are not given for trigraphs within comments, as
+they do not affect the meaning of the program.
+<BR><BR>
+<DT><B>-Wtraditional</B>
+<DD>Warn about certain constructs that behave differently in traditional and
+ISO C.  Also warn about ISO C constructs that have no traditional C
+equivalent, and problematic constructs which should be avoided.
+See <A HREF="$$INFOLINK(cpp/SEC70)">Traditional Mode</A>.
+<BR><BR>
+<DT><B>-Wimport</B>
+<DD>Warn the first time <CODE>#import</CODE> is used.
+<BR><BR>
+<DT><B>-Wundef</B>
+<DD>Warn whenever an identifier which is not a macro is encountered in an
+<CODE>#if</CODE> directive, outside of <CODE>defined</CODE>.  Such identifiers are
+replaced with zero.
+<BR><BR>
+<DT><B>-Wunused-macros</B>
+<DD>Warn about macros defined in the main file that are unused.  A macro
+is <U>used</U> if it is expanded or tested for existence at least once.
+The preprocessor will also warn if the macro has not been used at the
+time it is redefined or undefined.
+<BR><BR>
+Built-in macros, macros defined on the command line, and macros
+defined in include files are not warned about.
+<BR><BR>
+<B>Note:</B> If a macro is actually used, but only used in skipped
+conditional blocks, then CPP will report it as unused.  To avoid the
+warning in such a case, you might improve the scope of the macro's
+definition by, for example, moving it into the first skipped block.
+Alternatively, you could provide a dummy use with something like:
+<PRE>#if defined the_macro_causing_the_warning
+#endif
+</PRE>
+<DT><B>-Wendif-labels</B>
+<DD>Warn whenever an <CODE>#else</CODE> or an <CODE>#endif</CODE> are followed by text.
+This usually happens in code of the form
+<PRE>#if FOO
+...
+#else FOO
+...
+#endif FOO
+</PRE>
+The second and third <CODE>FOO</CODE> should be in comments, but often are not
+in older programs.  This warning is on by default.
+<BR><BR>
+<DT><B>-Werror</B>
+<DD>Make all warnings into hard errors.  Source code which triggers warnings
+will be rejected.
+<BR><BR>
+<DT><B>-Wsystem-headers</B>
+<DD>Issue warnings for code in system headers.  These are normally unhelpful
+in finding bugs in your own code, therefore suppressed.  If you are
+responsible for the system library, you may want to see them.
+<BR><BR>
+<DT><B>-w</B>
+<DD>Suppress all warnings, including those which GNU CPP issues by default.
+<BR><BR>
+<DT><B>-pedantic</B>
+<DD>Issue all the mandatory diagnostics listed in the C standard.  Some of
+them are left out by default, since they trigger frequently on harmless
+code.
+<BR><BR>
+<DT><B>-pedantic-errors</B>
+<DD>Issue all the mandatory diagnostics, and make all mandatory diagnostics
+into errors.  This includes mandatory diagnostics that GCC issues
+without <B>'-pedantic'</B> but treats as warnings.
+<BR><BR>
+<DT><B>-M</B>
+<DD>Instead of outputting the result of preprocessing, output a rule
+suitable for <CODE>make</CODE> describing the dependencies of the main
+source file.  The preprocessor outputs one <CODE>make</CODE> rule containing
+the object file name for that source file, a colon, and the names of all
+the included files, including those coming from <B>'-include'</B> or
+<B>'-imacros'</B> command line options.
+<BR><BR>
+Unless specified explicitly (with <B>'-MT'</B> or <B>'-MQ'</B>), the
+object file name consists of the basename of the source file with any
+suffix replaced with object file suffix.  If there are many included
+files then the rule is split into several lines using <CODE>\</CODE>-newline.
+The rule has no commands.
+<BR><BR>
+This option does not suppress the preprocessor's debug output, such as
+<B>'-dM'</B>.  To avoid mixing such debug output with the dependency
+rules you should explicitly specify the dependency output file with
+<B>'-MF'</B>, or use an environment variable like
+<CODE>DEPENDENCIES_OUTPUT</CODE> (see <A HREF="$$INFOLINK(cpp/SEC45)">Environment Variables</A>).  Debug output
+will still be sent to the regular output stream as normal.
+<BR><BR>
+Passing <B>'-M'</B> to the driver implies <B>'-E'</B>, and suppresses
+warnings with an implicit <B>'-w'</B>.
+<BR><BR>
+<DT><B>-MM</B>
+<DD>Like <B>'-M'</B> but do not mention header files that are found in
+system header directories, nor header files that are included,
+directly or indirectly, from such a header.
+<BR><BR>
+This implies that the choice of angle brackets or double quotes in an
+<CODE>#include</CODE> directive does not in itself determine whether that
+header will appear in <B>'-MM'</B> dependency output.  This is a
+slight change in semantics from GCC versions 3.0 and earlier.
+<BR><BR>
+<DT><B>-MF <I>file</I></B>
+<DD>
+When used with <B>'-M'</B> or <B>'-MM'</B>, specifies a
+file to write the dependencies to.  If no <B>'-MF'</B> switch is given
+the preprocessor sends the rules to the same place it would have sent
+preprocessed output.
+<BR><BR>
+When used with the driver options <B>'-MD'</B> or <B>'-MMD'</B>,
+<B>'-MF'</B> overrides the default dependency output file.
+<BR><BR>
+<DT><B>-MG</B>
+<DD>In conjunction with an option such as <B>'-M'</B> requesting
+dependency generation, <B>'-MG'</B> assumes missing header files are
+generated files and adds them to the dependency list without raising
+an error.  The dependency filename is taken directly from the
+<CODE>#include</CODE> directive without prepending any path.  <B>'-MG'</B>
+also suppresses preprocessed output, as a missing header file renders
+this useless.
+<BR><BR>
+This feature is used in automatic updating of makefiles.
+<BR><BR>
+<DT><B>-MP</B>
+<DD>This option instructs CPP to add a phony target for each dependency
+other than the main file, causing each to depend on nothing.  These
+dummy rules work around errors <CODE>make</CODE> gives if you remove header
+files without updating the <CODE>Makefile</CODE> to match.
+<BR><BR>
+This is typical output:
+<PRE>test.o: test.c test.h
+
+test.h:
+</PRE>
+<DT><B>-MT <I>target</I></B>
+<DD>Change the target of the rule emitted by dependency generation.  By
+default CPP takes the name of the main input file, including any path,
+deletes any file suffix such as <CODE>.c</CODE>, and appends the platform's
+usual object suffix.  The result is the target.
+<BR><BR>
+An <B>'-MT'</B> option will set the target to be exactly the string you
+specify.  If you want multiple targets, you can specify them as a single
+argument to <B>'-MT'</B>, or use multiple <B>'-MT'</B> options.
+<BR><BR>
+For example, <B>'-MT '$(objpfx)foo.o''</B> might give
+<PRE>$(objpfx)foo.o: foo.c
+</PRE>
+<DT><B>-MQ <I>target</I></B>
+<DD>Same as <B>'-MT'</B>, but it quotes any characters which are special to
+Make.
+The default target is automatically quoted, as if it were given with
+<B>'-MQ'</B>.
+<BR><BR>
+<DT><B>-MD</B>
+<DD><B>'-MD'</B> is equivalent to <B>'-M -MF <I>file</I>'</B>, except that
+<B>'-E'</B> is not implied.  The driver determines <I>file</I> based on
+whether an <B>'-o'</B> option is given.  If it is, the driver uses its
+argument but with a suffix of <CODE>.d</CODE>, otherwise it take the
+basename of the input file and applies a <CODE>.d</CODE> suffix.
+<BR><BR>
+If <B>'-MD'</B> is used in conjunction with <B>'-E'</B>, any
+<B>'-o'</B> switch is understood to specify the dependency output file, but
+if used without <B>'-E'</B>, each <B>'-o'</B>
+is understood to specify a target object file.
+<BR><BR>
+Since <B>'-E'</B> is not implied, <B>'-MD'</B> can be used to generate
+a dependency output file as a side-effect of the compilation process.
+<BR><BR>
+<DT><B>-MMD</B>
+<DD>Like <B>'-MD'</B> except mention only user header files, not system
+-header files.
+<BR><BR>
+<DT><B>-x c</B>
+<BR><B>-x c++</B>
+<BR><B>-x objective-c</B>
+<BR><B>-x assembler-with-cpp</B>
+<DD>Specify the source language: C, C++, Objective-C, or assembly.  This has
+nothing to do with standards conformance or extensions; it merely
+selects which base syntax to expect.  If you give none of these options,
+cpp will deduce the language from the extension of the source file:
+<CODE>.c</CODE>, <CODE>.cc</CODE>, <CODE>.m</CODE>, or <CODE>.S</CODE>.  Some other common
+extensions for C++ and assembly are also recognized.  If cpp does not
+recognize the extension, it will treat the file as C; this is the most
+generic mode.  Note that C++ and Objective-C are not supported in TIGCC.
+<BR><BR>
+<B>Note:</B> Previous versions of cpp accepted a <B>'-lang'</B> option
+which selected both the language and the standards conformance level.
+This option has been removed, because it conflicts with the <B>'-l'</B>
+option.
+<BR><BR>
+<DT><B>-std=<I>standard</I></B>
+<BR><B>-ansi</B>
+<DD>Specify the standard to which the code should conform.  Currently CPP
+knows about C and C++ standards; others may be added in the future
+(although it will not be important for TIGCC).
+<BR><BR>
+<I>standard</I>
+may be one of:
+<BR><BR><DL>
+<DT><B>iso9899:1990</B>
+<BR><B>c89</B>
+<DD>The ISO C standard from 1990.  <CODE>c89</CODE> is the customary shorthand for
+this version of the standard.
+<BR><BR>
+The <B>'-ansi'</B> option is equivalent to <B>'-std=c89'</B>.
+<BR><BR>
+<DT><B>iso9899:199409</B>
+<DD>The 1990 C standard, as amended in 1994.
+<BR><BR>
+<DT><B>iso9899:1999</B>
+<BR><B>c99</B>
+<BR><B>iso9899:199x</B>
+<BR><B>c9x</B>
+<DD>The revised ISO C standard, published in December 1999.  Before
+publication, this was known as C9X.
+<BR><BR>
+<DT><B>gnu89</B>
+<DD>The 1990 C standard plus GNU extensions.  This is the default.
+<BR><BR>
+<DT><B>gnu99</B>
+<BR><B>gnu9x</B>
+<DD>The 1999 C standard plus GNU extensions.
+<BR><BR>
+<DT><B>c++98</B>
+<DD>The 1998 ISO C++ standard plus amendments.
+<BR><BR>
+<DT><B>gnu++98</B>
+<DD>The same as <B>'-std=c++98'</B> plus GNU extensions.  This is the
+default for C++ code.
+</DL><BR>
+<BR><BR>
+<DT><B>-I-</B>
+<DD>Split the include path.  Any directories specified with <B>'-I'</B>
+options before <B>'-I-'</B> are searched only for headers requested with
+<CODE>#include&nbsp;&quot;<I>file</I>&quot;</CODE>; they are not searched for
+<CODE>#include&nbsp;&lt;<I>file</I>&gt;</CODE>.  If additional directories are
+specified with <B>'-I'</B> options after the <B>'-I-'</B>, those
+directories are searched for all <CODE>#include</CODE> directives.
+<BR><BR>
+In addition, <B>'-I-'</B> inhibits the use of the directory of the current
+file directory as the first search directory for <CODE>#include
+&quot;<I>file</I>&quot;</CODE>.
+<BR><BR>
+<DT><B>-nostdinc</B>
+<DD>Do not search the standard system directories for header files.
+Only the directories you have specified with <B>'-I'</B> options
+(and the directory of the current file, if appropriate) are searched.
+<BR><BR>
+<DT><B>-nostdinc++</B>
+<DD>Do not search for header files in the C++-specific standard directories,
+but do still search the other standard directories (not applicable to TIGCC,
+because it does not support C++).
+<BR><BR>
+<DT><B>-include <I>file</I></B>
+<DD>Process <I>file</I> as if <CODE>#include&nbsp;&quot;file&quot;</CODE> appeared as the first
+line of the primary source file.  However, the first directory searched
+for <I>file</I> is the preprocessor's working directory <I>instead of</I>
+the directory containing the main source file.  If not found there, it
+is searched for in the remainder of the <CODE>#include&nbsp;&quot;...&quot;</CODE> search
+chain as normal.
+<BR><BR>
+If multiple <B>'-include'</B> options are given, the files are included
+in the order they appear on the command line.
+<BR><BR>
+<DT><B>-imacros <I>file</I></B>
+<DD>Exactly like <B>'-include'</B>, except that any output produced by
+scanning <I>file</I> is thrown away.  Macros it defines remain defined.
+This allows you to acquire all the macros from a header without also
+processing its declarations.
+<BR><BR>
+All files specified by <B>'-imacros'</B> are processed before all files
+specified by <B>'-include'</B>.
+<BR><BR>
+<DT><B>-idirafter <I>dir</I></B>
+<DD>Search <I>dir</I> for header files, but do it <I>after</I> all
+directories specified with <B>'-I'</B> and the standard system directories
+have been exhausted.  <I>dir</I> is treated as a system include directory.
+<BR><BR>
+<DT><B>-iprefix <I>prefix</I></B>
+<DD>Specify <I>prefix</I> as the prefix for subsequent <B>'-iwithprefix'</B>
+options.  If the prefix represents a directory, you should include the
+final <CODE>/</CODE>.
+<BR><BR>
+<DT><B>-iwithprefix <I>dir</I></B>
+<BR><B>-iwithprefixbefore <I>dir</I></B>
+<DD>Append <I>dir</I> to the prefix specified previously with
+<B>'-iprefix'</B>, and add the resulting directory to the include search
+path.  <B>'-iwithprefixbefore'</B> puts it in the same place <B>'-I'</B>
+would; <B>'-iwithprefix'</B> puts it where <B>'-idirafter'</B> would.
+<BR><BR>
+Use of these options is discouraged.
+<BR><BR>
+<DT><B>-isystem <I>dir</I></B>
+<DD>Search <I>dir</I> for header files, after all directories specified by
+<B>'-I'</B> but before the standard system directories.  Mark it
+as a system directory, so that it gets the same special treatment as
+is applied to the standard system directories.
+See <A HREF="$$INFOLINK(cpp/SEC9a)">System Headers</A>.
+<BR><BR>
+<DT><B>-fpreprocessed</B>
+<DD>Indicate to the preprocessor that the input file has already been
+preprocessed.  This suppresses things like macro expansion, trigraph
+conversion, escaped newline splicing, and processing of most directives.
+The preprocessor still recognizes and removes comments, so that you can
+pass a file preprocessed with <B>'-C'</B> to the compiler without
+problems.  In this mode the integrated preprocessor is little more than
+a tokenizer for the front ends.
+<BR><BR>
+<B>'-fpreprocessed'</B> is implicit if the input file has one of the
+extensions <CODE>.i</CODE>, <CODE>.ii</CODE> or <CODE>.mi</CODE>.  These are the
+extensions that GCC uses for preprocessed files created by
+<B>'-save-temps'</B>.
+<BR><BR>
+<DT><B>-ftabstop=<I>width</I></B>
+<DD>Set the distance between tab stops.  This helps the preprocessor report
+correct column numbers in warnings or errors, even if tabs appear on the
+line.  If the value is less than 1 or greater than 100, the option is
+ignored.  The default is 8.
+<BR><BR>
+<DT><B>-fno-show-column</B>
+<DD>Do not print column numbers in diagnostics.  This may be necessary if
+diagnostics are being scanned by a program that does not understand the
+column numbers, such as <CODE>dejagnu</CODE>.
+<BR><BR>
+<DT><B>-A <I>predicate</I>=<I>answer</I></B>
+<DD>Make an assertion with the predicate <I>predicate</I> and answer
+<I>answer</I>.  This form is preferred to the older form <B>'-A
+<I>predicate</I>(<I>answer</I>)'</B>, which is still supported, because
+it does not use shell special characters.
+See <A HREF="$$INFOLINK(cpp/SEC39)">Assertions</A>.
+<DT><B>-A -<I>predicate</I>=<I>answer</I></B>
+<DD>Cancel an assertion with the predicate <I>predicate</I> and answer
+<I>answer</I>.
+<BR><BR>
+<DT><B>-dCHARS</B>
+<DD><I>CHARS</I> is a sequence of one or more of the following characters,
+and must not be preceded by a space.  Other characters are interpreted
+by the compiler proper, or reserved for future versions of GCC, and so
+are silently ignored.  If you specify characters whose behavior
+conflicts, the result is undefined.
+<BR><BR><DL>
+<DT><B>M</B>
+<DD>Instead of the normal output, generate a list of <CODE>#define</CODE>
+directives for all the macros defined during the execution of the
+preprocessor, including predefined macros.  This gives you a way of
+finding out what is predefined in your version of the preprocessor.
+Assuming you have no file <CODE>foo.h</CODE>, the command
+<PRE>touch foo.h; cpp -dM foo.h
+</PRE>
+will show all the predefined macros.
+<BR><BR>
+<DT><B>D</B>
+<DD>Like <CODE>M</CODE> except in two respects: it does <I>not</I> include the
+predefined macros, and it outputs <I>both</I> the <CODE>#define</CODE>
+directives and the result of preprocessing.  Both kinds of output go to
+the standard output file.
+<BR><BR>
+<DT><B>N</B>
+<DD>Like <CODE>D</CODE>, but emit only the macro names, not their expansions.
+<BR><BR>
+<DT><B>I</B>
+<DD>Output <CODE>#include</CODE> directives in addition to the result of
+preprocessing.
+</DL><BR>
+<DT><B>-P</B>
+<DD>Inhibit generation of linemarkers in the output from the preprocessor.
+This might be useful when running the preprocessor on something that is
+not C code, and will be sent to a program which might be confused by the
+linemarkers.
+See <A HREF="$$INFOLINK(cpp/SEC43)">Preprocessor Output</A>.
+<BR><BR>
+<DT><B>-C</B>
+<DD>Do not discard comments.  All comments are passed through to the output
+file, except for comments in processed directives, which are deleted
+along with the directive.
+<BR><BR>
+You should be prepared for side effects when using <B>'-C'</B>; it
+causes the preprocessor to treat comments as tokens in their own right.
+For example, comments appearing at the start of what would be a
+directive line have the effect of turning that line into an ordinary
+source line, since the first token on the line is no longer a <CODE>#</CODE>.
+<BR><BR>
+<DT><B>-CC</B>
+<DD>Do not discard comments, including during macro expansion.  This is
+like <B>'-C'</B>, except that comments contained within macros are
+also passed through to the output file where the macro is expanded.
+<BR><BR>
+In addition to the side-effects of the <B>'-C'</B> option, the
+<B>'-CC'</B> option causes all C++-style comments inside a macro
+to be converted to C-style comments.  This is to prevent later use
+of that macro from inadvertently commenting out the remainder of
+the source line.
+<BR><BR>
+The <B>'-CC'</B> option is generally used to support lint comments.
+<BR><BR>
+<DT><B>-gcc</B>
+<DD>Define the macros __GNUC__, __GNUC_MINOR__ and
+__GNUC_PATCHLEVEL__.  These are defined automatically when you use
+<CODE>gcc&nbsp;-E</CODE>; you can turn them off in that case with
+<B>'-no-gcc'</B>.
+<BR><BR>
+<DT><B>-traditional-cpp</B>
+<DD>Try to imitate the behavior of old-fashioned C preprocessors, as
+opposed to ISO C preprocessors.
+See <A HREF="$$INFOLINK(cpp/SEC70)">Traditional Mode</A>.
+<BR><BR>
+<DT><B>-trigraphs</B>
+<DD>Process trigraph sequences.
+See <A HREF="$$INFOLINK(cpp/SEC3)">Initial processing</A>.
+These are three-character sequences, all starting with <CODE>??</CODE>, that
+are defined by ISO C to stand for single characters.  For example,
+<CODE>??/</CODE> stands for <CODE>\</CODE>, so <CODE>'??/n'</CODE> is a character
+constant for a newline.  By default, GCC ignores trigraphs, but in
+standard-conforming modes it converts them.  See the <B>'-std'</B> and
+<B>'-ansi'</B> options.
+<BR><BR>
+The nine trigraphs and their replacements are
+<PRE>Trigraph:       ??(  ??)  ??&lt;  ??&gt;  ??=  ??/  ??'  ??!  ??-
+Replacement:      [    ]    {    }    #    \    ^    |    ~
+</PRE>
+<DT><B>-remap</B>
+<DD>Enable special code to work around file systems which only permit very
+short file names, such as MS-DOS.
+<BR><BR>
+<DT><B>--help</B>
+<BR><B>--target-help</B>
+<DD>Print text describing all the command line options instead of
+preprocessing anything.
+<BR><BR>
+<DT><B>-v</B>
+<DD>Verbose mode.  Print out GNU CPP's version number at the beginning of
+execution, and report the final form of the include path.
+<BR><BR>
+<DT><B>-H</B>
+<DD>Print the name of each header file used, in addition to other normal
+activities.  Each name is indented to show how deep in the
+<CODE>#include</CODE> stack it is.
+<BR><BR>
+<DT><B>-version</B>
+<BR><B>--version</B>
+<DD>Print out GNU CPP's version number.  With one dash, proceed to
+preprocess as normal.  With two dashes, exit immediately.
+</DL>

+ 23 - 23
tigcc/doc/System/Info/comopts/SEC12.hss

@@ -1,23 +1,23 @@
-[Main]
-Title=Passing Options to the Assembler and Linker
-
-[Top]
-You can pass options to the <A HREF="$$INFOLINK(gnuasm)">GNU assembler</A>, to the
-<A HREF="$$INFOLINK(a68k)">A68k assembler</A>, and to the GNU linker.
-<BR><BR>
-However, this is only possible this way if you are using the command line compiler.
-In the IDE, you have to use the appropriate edit boxes in the project options.
-<DL>
-<DT><B>-Wa,<I>option</I></B>
-<DD>Pass <I>option</I> as an option to the GNU assembler.  If <I>option</I>
-contains commas, it is split into multiple options at the commas.
-<BR><BR>
-<DT><B>-WA,<I>option</I></B>
-<DD>Pass <I>option</I> as an option to the A68k assembler.  If <I>option</I>
-contains commas, it is split into multiple options at the commas.
-This is a TIGCC-only switch.
-<BR><BR>
-<DT><B>-Wl,<I>option</I></B>
-<DD>Pass <I>option</I> as an option to the GNU linker.  If <I>option</I>
-contains commas, it is split into multiple options at the commas.
-</DL>
+[Main]
+Title=Passing Options to the Assembler and Linker
+
+[Top]
+You can pass options to the <A HREF="$$INFOLINK(gnuasm)">GNU assembler</A>, to the
+<A HREF="$$INFOLINK(a68k)">A68k assembler</A>, and to the GNU linker.
+<BR><BR>
+However, this is only possible this way if you are using the command line compiler.
+In the IDE, you have to use the appropriate edit boxes in the project options.
+<DL>
+<DT><B>-Wa,<I>option</I></B>
+<DD>Pass <I>option</I> as an option to the GNU assembler.  If <I>option</I>
+contains commas, it is split into multiple options at the commas.
+<BR><BR>
+<DT><B>-WA,<I>option</I></B>
+<DD>Pass <I>option</I> as an option to the A68k assembler.  If <I>option</I>
+contains commas, it is split into multiple options at the commas.
+This is a TIGCC-only switch.
+<BR><BR>
+<DT><B>-Wl,<I>option</I></B>
+<DD>Pass <I>option</I> as an option to the GNU linker.  If <I>option</I>
+contains commas, it is split into multiple options at the commas.
+</DL>

+ 70 - 70
tigcc/doc/System/Info/comopts/SEC14.hss

@@ -1,70 +1,70 @@
-[Main]
-Title=Options for Directory Search
-
-[Top]
-These options specify directories to search for header files, for
-libraries and for parts of the compiler:
-<DL>
-<DT><B>-I<I>dir</I></B>
-<DD>Add the directory <I>dir</I> to the head of the list of directories to be
-searched for header files.  This can be used to override a system header
-file, substituting your own version, since these directories are
-searched before the system header file directories.  However, you should
-not use this option to add directories that contain vendor-supplied
-system header files (use <B>'-isystem'</B> for that).  If you use more than
-one <B>'-I'</B> option, the directories are scanned in left-to-right
-order; the standard system directories come after.
-<BR><BR>
-If a standard system include directory, or a directory specified with
-<B>'-isystem'</B>, is also specified with <B>'-I'</B>, the <B>'-I'</B>
-option will be ignored.  The directory will still be searched but as a
-system directory at its normal position in the system include chain.
-This is to ensure that GCC's procedure to fix buggy system headers and
-the ordering for the include_next directive are not inadvertently changed.
-If you really need to change the search order for system directories,
-use the <B>'-nostdinc'</B> and/or <B>'-isystem'</B> options.
-<BR><BR>
-<DT><B>-I-</B>
-<DD>Any directories you specify with <B>'-I'</B> options before the <B>'-I-'</B>
-option are searched only for the case of <CODE>#include&nbsp;&quot;<I>file</I>&quot;</CODE>;
-they are not searched for <CODE>#include&nbsp;&lt;<I>file</I>&gt;</CODE>.
-<BR><BR>
-If additional directories are specified with <B>'-I'</B> options after
-the <B>'-I-'</B>, these directories are searched for all <CODE>#include</CODE>
-directives.  (Ordinarily <I>all</I> <B>'-I'</B> directories are used
-this way.)
-<BR><BR>
-In addition, the <B>'-I-'</B> option inhibits the use of the current
-directory (where the current input file came from) as the first search
-directory for <CODE>#include&nbsp;&quot;<I>file</I>&quot;</CODE>.  There is no way to
-override this effect of <B>'-I-'</B>.  With <B>'-I.'</B> you can specify
-searching the directory which was current when the compiler was
-invoked.  That is not exactly the same as what the preprocessor does
-by default, but it is often satisfactory.
-<BR><BR>
-<B>'-I-'</B> does not inhibit the use of the standard system directories
-for header files.  Thus, <B>'-I-'</B> and <B>'-nostdinc'</B> are
-independent.
-<BR><BR>
-<DT><B>-L<I>dir</I></B>
-<DD>Add directory <I>dir</I> to the list of directories to be searched
-for <B>'-l'</B>.
-<BR><BR>
-<DT><B>-B<I>prefix</I></B>
-<DD>This option specifies where to find the executables, libraries,
-include files, and data files of the compiler itself.
-<BR><BR>
-The compiler will check to see if the path provided by the <B>'-B'</B>
-refers to a directory, and if necessary it will add a directory
-separator character at the end of the path.
-<BR><BR>
-Another way to specify a prefix much like the <B>'-B'</B> prefix is to use
-the environment variable <CODE>GCC_EXEC_PREFIX</CODE>.  See <A HREF="$$LINK(SEC45)">Environment
-Variables</A>.
-<BR><BR>
-<DT><B>-specs=<I>file</I></B>
-<DD>Process <I>file</I> after the compiler reads in the standard <CODE>specs</CODE>
-file, in order to override the defaults that the <CODE>gcc</CODE> driver
-program uses when determining what switches to pass to the individual programs.
-This does not work in TIGCC.
-</DL>
+[Main]
+Title=Options for Directory Search
+
+[Top]
+These options specify directories to search for header files, for
+libraries and for parts of the compiler:
+<DL>
+<DT><B>-I<I>dir</I></B>
+<DD>Add the directory <I>dir</I> to the head of the list of directories to be
+searched for header files.  This can be used to override a system header
+file, substituting your own version, since these directories are
+searched before the system header file directories.  However, you should
+not use this option to add directories that contain vendor-supplied
+system header files (use <B>'-isystem'</B> for that).  If you use more than
+one <B>'-I'</B> option, the directories are scanned in left-to-right
+order; the standard system directories come after.
+<BR><BR>
+If a standard system include directory, or a directory specified with
+<B>'-isystem'</B>, is also specified with <B>'-I'</B>, the <B>'-I'</B>
+option will be ignored.  The directory will still be searched but as a
+system directory at its normal position in the system include chain.
+This is to ensure that GCC's procedure to fix buggy system headers and
+the ordering for the include_next directive are not inadvertently changed.
+If you really need to change the search order for system directories,
+use the <B>'-nostdinc'</B> and/or <B>'-isystem'</B> options.
+<BR><BR>
+<DT><B>-I-</B>
+<DD>Any directories you specify with <B>'-I'</B> options before the <B>'-I-'</B>
+option are searched only for the case of <CODE>#include&nbsp;&quot;<I>file</I>&quot;</CODE>;
+they are not searched for <CODE>#include&nbsp;&lt;<I>file</I>&gt;</CODE>.
+<BR><BR>
+If additional directories are specified with <B>'-I'</B> options after
+the <B>'-I-'</B>, these directories are searched for all <CODE>#include</CODE>
+directives.  (Ordinarily <I>all</I> <B>'-I'</B> directories are used
+this way.)
+<BR><BR>
+In addition, the <B>'-I-'</B> option inhibits the use of the current
+directory (where the current input file came from) as the first search
+directory for <CODE>#include&nbsp;&quot;<I>file</I>&quot;</CODE>.  There is no way to
+override this effect of <B>'-I-'</B>.  With <B>'-I.'</B> you can specify
+searching the directory which was current when the compiler was
+invoked.  That is not exactly the same as what the preprocessor does
+by default, but it is often satisfactory.
+<BR><BR>
+<B>'-I-'</B> does not inhibit the use of the standard system directories
+for header files.  Thus, <B>'-I-'</B> and <B>'-nostdinc'</B> are
+independent.
+<BR><BR>
+<DT><B>-L<I>dir</I></B>
+<DD>Add directory <I>dir</I> to the list of directories to be searched
+for <B>'-l'</B>.
+<BR><BR>
+<DT><B>-B<I>prefix</I></B>
+<DD>This option specifies where to find the executables, libraries,
+include files, and data files of the compiler itself.
+<BR><BR>
+The compiler will check to see if the path provided by the <B>'-B'</B>
+refers to a directory, and if necessary it will add a directory
+separator character at the end of the path.
+<BR><BR>
+Another way to specify a prefix much like the <B>'-B'</B> prefix is to use
+the environment variable <CODE>GCC_EXEC_PREFIX</CODE>.  See <A HREF="$$LINK(SEC45)">Environment
+Variables</A>.
+<BR><BR>
+<DT><B>-specs=<I>file</I></B>
+<DD>Process <I>file</I> after the compiler reads in the standard <CODE>specs</CODE>
+file, in order to override the defaults that the <CODE>gcc</CODE> driver
+program uses when determining what switches to pass to the individual programs.
+This does not work in TIGCC.
+</DL>

+ 22 - 22
tigcc/doc/System/Info/comopts/SEC15.hss

@@ -1,22 +1,22 @@
-[Main]
-Title=GCC Spec Strings
-
-[Top]
-<CODE>gcc</CODE> is a driver program.  It performs its job by invoking a
-sequence of other programs to do the work of compiling, assembling and
-linking.  GCC interprets its command-line parameters and uses these to
-deduce which programs it should invoke, and which command-line options
-it ought to place on their command lines.  This behavior is controlled
-by <U>spec strings</U>.  In most cases there is one spec string for each
-program that GCC can invoke, but a few programs have multiple spec
-strings to control their behavior.  The spec strings built into GCC can
-be overridden by using the <B>'-specs='</B> command-line switch to specify
-a spec file.
-<BR><BR>
-<U>Spec files</U> are plaintext files that are used to construct spec
-strings.  They consist of a sequence of directives separated by blank
-lines.
-<BR><BR>
-Since <CODE>gcc</CODE> only performs a small part of the tasks in TIGCC, spec
-strings are more or less irrelevant.  For details on specs, see the
-<A HREF="http://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html#Spec%20Files">original documentation</A> on the net.
+[Main]
+Title=GCC Spec Strings
+
+[Top]
+<CODE>gcc</CODE> is a driver program.  It performs its job by invoking a
+sequence of other programs to do the work of compiling, assembling and
+linking.  GCC interprets its command-line parameters and uses these to
+deduce which programs it should invoke, and which command-line options
+it ought to place on their command lines.  This behavior is controlled
+by <U>spec strings</U>.  In most cases there is one spec string for each
+program that GCC can invoke, but a few programs have multiple spec
+strings to control their behavior.  The spec strings built into GCC can
+be overridden by using the <B>'-specs='</B> command-line switch to specify
+a spec file.
+<BR><BR>
+<U>Spec files</U> are plaintext files that are used to construct spec
+strings.  They consist of a sequence of directives separated by blank
+lines.
+<BR><BR>
+Since <CODE>gcc</CODE> only performs a small part of the tasks in TIGCC, spec
+strings are more or less irrelevant.  For details on specs, see the
+<A HREF="http://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html#Spec%20Files">original documentation</A> on the net.

+ 82 - 82
tigcc/doc/System/Info/comopts/SEC16.hss

@@ -1,82 +1,82 @@
-[Main]
-Title=M680x0 Target Options
-
-[Top]
-The GCC compiler used in TIGCC is configured for just one target family:
-the Motorola M680x0 (M68k) family.  In the TI-89, TI-92+, and V200 calculators,
-an MC68000 processor is used, therefore TIGCC creates code for such a
-processor by default.  However, switches specifying the processor model, such
-as <B>'-m68020'</B>, still exist, although they are not useful.  However,
-there are also options that control the code that is generated specifically
-for TI calculators; they also start with <B>'-m'</B>:
-<DL>
-<DT><B>-mno-bss</B>
-<DD>Output all uninitialized global or static variables as normal data with
-zero content. Note that this leads to different semantics if the program is
-not compressed or archived: The variables will keep their values even after
-program termination, instead of being initialized to zero every time the
-program is run. For a better alternative, see
-<CODE><A HREF="$$INFOLINK(httigcc/advanced_mergebss)">MERGE_BSS</A></CODE>.
-<BR><BR>
-<DT><B>-mlong</B>
-<DD>Consider type <CODE>int</CODE> to be 32 bits wide, like <CODE>long&nbsp;int</CODE>.
-The <B>'-mshort'</B> option is enabled by default in TIGCC; the negative is
-actually <B>'-mnoshort'</B>, but <B>'-mno-short'</B> and <B>'-mlong'</B> have
-been added as aliases.  Constants such as <CODE>INT_MAX</CODE> are set to the
-appropriate values, and <CODE>__INT_SHORT__</CODE> will be defined if short
-integers are used (i.e. if this switch is not used).  This option may be
-useful if you need to port code from a system which uses long integers.
-<BR><BR>
-<DT><B>-mno-tios</B>
-<DD>Again, this is the negative form of a switch called <B>'-mtios'</B>,
-which changes the convention for returning pointers from functions, and which
-also implies <B>'-fcall-used-d2'</B>.  This is necessary to make GCC work
-with the TIOS calling conventions, therefore <B>'-mno-tios'</B> may only be
-used if no interaction with the operating system is required.  Since library
-calls also use the TIOS calling convention, they cannot be used either; you
-should disable linking against <CODE>tigcc.a</CODE>.  Only use this option if
-you know exactly what you are doing.
-<BR><BR>
-<DT><B>-mmlink</B>
-<DD>Assume that uninitialized global variables can be handled smartly through
-BSS blocks even in kernel-less mode.
-<BR><BR>
-<DT><B>-mpcrel</B>
-<DD>Use the pc-relative addressing mode of the 68000 directly, instead of
-using a global offset table (also known as the relocation table).
-Therefore, this option produces position-independent code.
-<BR><BR>
-<DT><B>-mregparm[=<I>regcount</I>]</B>
-<DD>Use register passing for all user-defined functions.  <I>regcount</I>
-data registers plus <I>regcount</I> address registers are used to pass
-arguments to functions.  If <I>regcount</I> is not specified, a default value
-of 2 is used.  You should not specify a value higher than 6, or 5 if you use
-<CODE><A HREF="$$INFOLINK(httigcc/advanced_optrom)">OPTIMIZE_ROM_CALLS</A></CODE>.
-Note that you have to be careful with callback functions if you use this
-switch, although you will be warned about incompatiblities.
-<BR><BR>
-<DT><B>-mbitfield</B>
-<DD>Use bit-field instructions.
-<BR><BR>
-<DT><B>-malign-int</B>
-<DD>Aligns <CODE>int</CODE>, <CODE>long</CODE>, <CODE>long&nbsp;long</CODE>,
-<CODE>float</CODE>, <CODE>double</CODE>, and <CODE>long&nbsp;double</CODE> variables on a 32-bit
-boundary.
-<BR><BR>
-<DT><B>-mno-strict-align</B>
-<BR><B>-mstrict-align</B>
-<DD>Do not or do assume that unaligned memory references will be handled by
-the system.
-<BR><BR>
-<DT><B>-mno-merge-sections</B>
-<DD>Do not merge the <CODE>.text</CODE> and <CODE>.data</CODE> sections,
-as TIGCC normally does (to save space used by relocation).
-<BR><BR>
-<DT><B>-mmerge-to-data</B>
-<DD>When merging sections, merge to <CODE>.data</CODE> rather than to
-<CODE>.text</CODE>.
-<BR><BR>
-<DT><B>-mrodata-to-text</B>
-<DD>When not merging sections, put read-only data into <CODE>.text</CODE>
-rather than <CODE>.data</CODE>.
-</DL>
+[Main]
+Title=M680x0 Target Options
+
+[Top]
+The GCC compiler used in TIGCC is configured for just one target family:
+the Motorola M680x0 (M68k) family.  In the TI-89, TI-92+, and V200 calculators,
+an MC68000 processor is used, therefore TIGCC creates code for such a
+processor by default.  However, switches specifying the processor model, such
+as <B>'-m68020'</B>, still exist, although they are not useful.  However,
+there are also options that control the code that is generated specifically
+for TI calculators; they also start with <B>'-m'</B>:
+<DL>
+<DT><B>-mno-bss</B>
+<DD>Output all uninitialized global or static variables as normal data with
+zero content. Note that this leads to different semantics if the program is
+not compressed or archived: The variables will keep their values even after
+program termination, instead of being initialized to zero every time the
+program is run. For a better alternative, see
+<CODE><A HREF="$$INFOLINK(httigcc/advanced_mergebss)">MERGE_BSS</A></CODE>.
+<BR><BR>
+<DT><B>-mlong</B>
+<DD>Consider type <CODE>int</CODE> to be 32 bits wide, like <CODE>long&nbsp;int</CODE>.
+The <B>'-mshort'</B> option is enabled by default in TIGCC; the negative is
+actually <B>'-mnoshort'</B>, but <B>'-mno-short'</B> and <B>'-mlong'</B> have
+been added as aliases.  Constants such as <CODE>INT_MAX</CODE> are set to the
+appropriate values, and <CODE>__INT_SHORT__</CODE> will be defined if short
+integers are used (i.e. if this switch is not used).  This option may be
+useful if you need to port code from a system which uses long integers.
+<BR><BR>
+<DT><B>-mno-tios</B>
+<DD>Again, this is the negative form of a switch called <B>'-mtios'</B>,
+which changes the convention for returning pointers from functions, and which
+also implies <B>'-fcall-used-d2'</B>.  This is necessary to make GCC work
+with the TIOS calling conventions, therefore <B>'-mno-tios'</B> may only be
+used if no interaction with the operating system is required.  Since library
+calls also use the TIOS calling convention, they cannot be used either; you
+should disable linking against <CODE>tigcc.a</CODE>.  Only use this option if
+you know exactly what you are doing.
+<BR><BR>
+<DT><B>-mmlink</B>
+<DD>Assume that uninitialized global variables can be handled smartly through
+BSS blocks even in kernel-less mode.
+<BR><BR>
+<DT><B>-mpcrel</B>
+<DD>Use the pc-relative addressing mode of the 68000 directly, instead of
+using a global offset table (also known as the relocation table).
+Therefore, this option produces position-independent code.
+<BR><BR>
+<DT><B>-mregparm[=<I>regcount</I>]</B>
+<DD>Use register passing for all user-defined functions.  <I>regcount</I>
+data registers plus <I>regcount</I> address registers are used to pass
+arguments to functions.  If <I>regcount</I> is not specified, a default value
+of 2 is used.  You should not specify a value higher than 6, or 5 if you use
+<CODE><A HREF="$$INFOLINK(httigcc/advanced_optrom)">OPTIMIZE_ROM_CALLS</A></CODE>.
+Note that you have to be careful with callback functions if you use this
+switch, although you will be warned about incompatiblities.
+<BR><BR>
+<DT><B>-mbitfield</B>
+<DD>Use bit-field instructions.
+<BR><BR>
+<DT><B>-malign-int</B>
+<DD>Aligns <CODE>int</CODE>, <CODE>long</CODE>, <CODE>long&nbsp;long</CODE>,
+<CODE>float</CODE>, <CODE>double</CODE>, and <CODE>long&nbsp;double</CODE> variables on a 32-bit
+boundary.
+<BR><BR>
+<DT><B>-mno-strict-align</B>
+<BR><B>-mstrict-align</B>
+<DD>Do not or do assume that unaligned memory references will be handled by
+the system.
+<BR><BR>
+<DT><B>-mno-merge-sections</B>
+<DD>Do not merge the <CODE>.text</CODE> and <CODE>.data</CODE> sections,
+as TIGCC normally does (to save space used by relocation).
+<BR><BR>
+<DT><B>-mmerge-to-data</B>
+<DD>When merging sections, merge to <CODE>.data</CODE> rather than to
+<CODE>.text</CODE>.
+<BR><BR>
+<DT><B>-mrodata-to-text</B>
+<DD>When not merging sections, put read-only data into <CODE>.text</CODE>
+rather than <CODE>.data</CODE>.
+</DL>

+ 61 - 61
tigcc/doc/System/Info/comopts/SEC3.hss

@@ -1,61 +1,61 @@
-[Main]
-Title=Options Available in the Command Line Compiler
-
-[Top]
-These options apply only to the command line compiler.  If you want to use
-the IDE instead, you do not need to worry about these topics.
-<BR><BR>
-<CODE>tigcc</CODE> has an important difference to the standard program
-<CODE>gcc</CODE>: <CODE>tigcc</CODE> always overwrites assembly or
-object files.  For example, if a file <CODE>test.c</CODE> is compiled, the
-files <CODE>test.s</CODE> and <CODE>test.o</CODE> will be created and
-overwritten if necessary, but they will automatically be deleted again if
-neither <B>'-c'</B> nor <B>'-S'</B> are specified.
-<BR><BR>
-Another important difference is that <CODE>tigcc</CODE> always looks for
-libraries in the <CODE>'Lib'</CODE> subfolder of the installation.
-<DL>
-<DT><B>-pack <I>varname</I></B>
-<DD>Compress the file generated during compilation.
-<I>varname</I> is the name of the on-calc packed variable.  Although
-<I>varname</I> cannot have an extension, the variable on the calculator will
-always have the extension <CODE>ppg</CODE>.  <I>varname</I> cannot be the
-same as the on-calc name of the program itself.  When you use this switch,
-two files will be created; one with the extension <CODE>.89y</CODE> or
-<CODE>.9xy</CODE>, and one <CODE>.89z</CODE> or <CODE>.9xz</CODE> file.
-<BR><BR>
-This option comes from
-<A HREF="mailto:thomas.nussbaumer@gmx.net">Thomas Nussbaumer</A>'s
-TIGCC Tools Suite, where this feature is called "ExePack Technology."
-You can read about it on the official
-<A HREF="http://tict.ticalc.org/">TI-Chess Team site</A>.
-<BR><BR>
-<DT><B>-q</B>
-<DD>Keep as quiet as possible while assembling and linking.  This option is
-not needed by the compiler because it is always quiet, but the linker and
-especially the assembler output some information.
-<BR><BR>
-<DT><B>-v0</B>
-<DD>This switch is an addition to the <B>'-v'</B> switch.  It tells TIGCC to
-output only the commands that are run directly.  This was the default in some
-previous releases.
-<BR><BR>
-<DT><B>-g</B>
-<DD>The <B>'-g'</B> switch in GCC turns on debugging information in the
-preferred format for the target. In TIGCC, this is DWARF 2, which can be used
-with a GDB-enabled TiEmu.
-<BR><BR>
-<DT><B>-standalone</B>
-<DD>Do not link against <CODE>tigcc.a</CODE>.  All of GCC's internal
-functions are implemented in this library, as well as all non-TIOS functions.
-Using one of these will result in an error from the linker.
-<BR><BR>
-<DT><B>-ar</B>
-<DD>Create an archive (a static library) instead of a program.  The resulting
-file will have an <CODE>.a</CODE> ending.
-<BR><BR>
-<DT><B>-bsr</B>
-<DD>This option is ignored for compatibility.
-</DL>
-In addition to these options, the <CODE>tigcc</CODE> program also accepts
-most of the <A HREF="$$INFOLINK(ld/invocation)">linker options</A>.
+[Main]
+Title=Options Available in the Command Line Compiler
+
+[Top]
+These options apply only to the command line compiler.  If you want to use
+the IDE instead, you do not need to worry about these topics.
+<BR><BR>
+<CODE>tigcc</CODE> has an important difference to the standard program
+<CODE>gcc</CODE>: <CODE>tigcc</CODE> always overwrites assembly or
+object files.  For example, if a file <CODE>test.c</CODE> is compiled, the
+files <CODE>test.s</CODE> and <CODE>test.o</CODE> will be created and
+overwritten if necessary, but they will automatically be deleted again if
+neither <B>'-c'</B> nor <B>'-S'</B> are specified.
+<BR><BR>
+Another important difference is that <CODE>tigcc</CODE> always looks for
+libraries in the <CODE>'Lib'</CODE> subfolder of the installation.
+<DL>
+<DT><B>-pack <I>varname</I></B>
+<DD>Compress the file generated during compilation.
+<I>varname</I> is the name of the on-calc packed variable.  Although
+<I>varname</I> cannot have an extension, the variable on the calculator will
+always have the extension <CODE>ppg</CODE>.  <I>varname</I> cannot be the
+same as the on-calc name of the program itself.  When you use this switch,
+two files will be created; one with the extension <CODE>.89y</CODE> or
+<CODE>.9xy</CODE>, and one <CODE>.89z</CODE> or <CODE>.9xz</CODE> file.
+<BR><BR>
+This option comes from
+<A HREF="mailto:thomas.nussbaumer@gmx.net">Thomas Nussbaumer</A>'s
+TIGCC Tools Suite, where this feature is called "ExePack Technology."
+You can read about it on the official
+<A HREF="http://tict.ticalc.org/">TI-Chess Team site</A>.
+<BR><BR>
+<DT><B>-q</B>
+<DD>Keep as quiet as possible while assembling and linking.  This option is
+not needed by the compiler because it is always quiet, but the linker and
+especially the assembler output some information.
+<BR><BR>
+<DT><B>-v0</B>
+<DD>This switch is an addition to the <B>'-v'</B> switch.  It tells TIGCC to
+output only the commands that are run directly.  This was the default in some
+previous releases.
+<BR><BR>
+<DT><B>-g</B>
+<DD>The <B>'-g'</B> switch in GCC turns on debugging information in the
+preferred format for the target. In TIGCC, this is DWARF 2, which can be used
+with a GDB-enabled TiEmu.
+<BR><BR>
+<DT><B>-standalone</B>
+<DD>Do not link against <CODE>tigcc.a</CODE>.  All of GCC's internal
+functions are implemented in this library, as well as all non-TIOS functions.
+Using one of these will result in an error from the linker.
+<BR><BR>
+<DT><B>-ar</B>
+<DD>Create an archive (a static library) instead of a program.  The resulting
+file will have an <CODE>.a</CODE> ending.
+<BR><BR>
+<DT><B>-bsr</B>
+<DD>This option is ignored for compatibility.
+</DL>
+In addition to these options, the <CODE>tigcc</CODE> program also accepts
+most of the <A HREF="$$INFOLINK(ld/invocation)">linker options</A>.

+ 141 - 141
tigcc/doc/System/Info/comopts/SEC4.hss

@@ -1,141 +1,141 @@
-[Main]
-Title=Options Controlling the Kind of Output
-
-[Top]
-Compilation can involve up to four stages: preprocessing, compilation
-proper, assembly and linking, always in that order.  The first three
-stages apply to an individual source file, and end by producing an
-object file; linking combines all the object files (those newly
-compiled, and those specified as input) into an executable file.
-<BR><BR>
-For any given input file, the file name suffix determines what kind of
-compilation is done (some of these apply only to TIGCC):
-<DL>
-<DT><B><I>file</I>.c</B>
-<DD>C source code which must be preprocessed.
-<BR><BR>
-<DT><B><I>file</I>.s</B>
-<DD>GNU Assembler code.
-<BR><BR>
-<DT><B><I>file</I>.S</B>
-<DD>GNU Assembler code which must be preprocessed.
-<BR><BR>
-<DT><B><I>file</I>.asm</B>
-<DD>A68k Assembler code.
-<BR><BR>
-<DT><B><I>file</I>.o</B>
-<DD>COFF object file to be linked using <CODE>ld</CODE>.
-<BR><BR>
-<DT><B><I>file</I>.a</B>
-<DD>Static library (function archive) to be linked using <CODE>ld</CODE>.
-</DL>
-You can specify the input language explicitly with the <B>'-x'</B> option:
-<DL>
-<DT><B>-x <I>language</I></B>
-<DD>Specify explicitly the <I>language</I> for the following input files
-(rather than letting the compiler choose a default based on the file
-name suffix).  This option applies to all following input files until
-the next <B>'-x'</B> option.  Possible values for <I>language</I> are:
-<BR>
-<CODE>
-c  c-header  cpp-output
-c++  c++-cpp-output
-objective-c  objc-cpp-output
-assembler  assembler-with-cpp
-ada
-f77  f77-cpp-input  ratfor
-java
-treelang
-</CODE>
-<DT><B>-x none</B>
-<DD>Turn off any specification of a language, so that subsequent files are
-handled according to their file name suffixes (as they are if <B>'-x'</B>
-has not been used at all).
-<BR><BR>
-<DT><B>-pass-exit-codes</B>
-<DD>Normally the <CODE>gcc</CODE> program will exit with the code of 1 if any
-phase of the compiler returns a non-success return code.  If you specify
-<B>'-pass-exit-codes'</B>, the <CODE>gcc</CODE> program will instead return with
-numerically highest error produced by any phase that returned an error
-indication.
-</DL>
-If you only want some of the stages of compilation, you can use
-<B>'-x'</B> (or filename suffixes) to tell <CODE>gcc</CODE> where to start, and
-one of the options <B>'-c'</B>, <B>'-S'</B>, or <B>'-E'</B> to say where
-<CODE>gcc</CODE> is to stop.  Note that some combinations (for example,
-<B>'-x cpp-output -E'</B>) instruct <CODE>gcc</CODE> to do nothing at all.
-<DL>
-<DT><B>-c</B>
-<DD>Compile or assemble the source files, but do not link.  The linking
-stage simply is not done.  The ultimate output is in the form of an
-object file for each source file.
-<BR><BR>
-By default, the object file name for a source file is made by replacing
-the suffix <CODE>.c</CODE>, <CODE>.i</CODE>, <CODE>.s</CODE>, etc., with <CODE>.o</CODE>.
-<BR><BR>
-Unrecognized input files, not requiring compilation or assembly, are
-ignored.
-<BR><BR>
-<DT><B>-S</B>
-<DD>Stop after the stage of compilation proper; do not assemble.  The output
-is in the form of an assembler code file for each non-assembler input
-file specified.
-<BR><BR>
-By default, the assembler file name for a source file is made by
-replacing the suffix <CODE>.c</CODE>, <CODE>.i</CODE>, etc., with <CODE>.s</CODE>.
-<BR><BR>
-Input files that don't require compilation are ignored.
-<BR><BR>
-<DT><B>-E</B>
-<DD>Stop after the preprocessing stage; do not run the compiler proper.  The
-output is in the form of preprocessed source code, which is sent to the
-standard output.
-<BR><BR>
-Input files which don't require preprocessing are ignored.
-<BR><BR>
-<DT><B>-o <I>file</I></B>
-<DD>Place output in file <I>file</I>.  This applies regardless to whatever
-sort of output is being produced, whether it be an executable file,
-an object file, an assembler file or preprocessed C code.
-<BR><BR>
-Since only one output file can be specified, it does not make sense to
-use <B>'-o'</B> when compiling more than one input file, unless you are
-producing an executable file as output.
-<BR><BR>
-If <B>'-o'</B> is not specified, the default is to put an executable file
-in <CODE>a.out</CODE>, the object file for <CODE><I>source</I>.<I>suffix</I></CODE> in
-<CODE><I>source</I>.o</CODE>, its assembler file in <CODE><I>source</I>.s</CODE>, and
-all preprocessed C source on standard output.
-<BR><BR>
-<DT><B>-v</B>
-<DD>Print (on standard error output) the commands executed to run the stages
-of compilation.  Also print the version number of the compiler driver
-program and of the preprocessor and the compiler proper.
-<BR><BR>
-<DT><B>-###</B>
-<DD>Like <B>'-v'</B> except the commands are not executed and all command
-arguments are quoted.  This is useful for shell scripts to capture the
-driver-generated command lines.
-<BR><BR>
-<DT><B>-pipe</B>
-<DD>Use pipes rather than temporary files for communication between the
-various stages of compilation.  This fails to work on some systems where
-the assembler is unable to read from a pipe; but the GNU assembler has
-no trouble.
-<BR><BR>
-<DT><B>--help</B>
-<DD>Print (on the standard output) a description of the command line options
-understood by <CODE>gcc</CODE>.  If the <B>'-v'</B> option is also specified
-then <B>'--help'</B> will also be passed on to the various processes
-invoked by <CODE>gcc</CODE>, so that they can display the command line options
-they accept.  If the <B>'-W'</B> option is also specified then command
-line options which have no documentation associated with them will also
-be displayed.
-<BR><BR>
-<DT><B>--target-help</B>
-<DD>Print (on the standard output) a description of target specific command
-line options for each tool.
-<BR><BR>
-<DT><B>--version</B>
-<DD>Display the version number and copyrights of the invoked GCC.
-</DL>
+[Main]
+Title=Options Controlling the Kind of Output
+
+[Top]
+Compilation can involve up to four stages: preprocessing, compilation
+proper, assembly and linking, always in that order.  The first three
+stages apply to an individual source file, and end by producing an
+object file; linking combines all the object files (those newly
+compiled, and those specified as input) into an executable file.
+<BR><BR>
+For any given input file, the file name suffix determines what kind of
+compilation is done (some of these apply only to TIGCC):
+<DL>
+<DT><B><I>file</I>.c</B>
+<DD>C source code which must be preprocessed.
+<BR><BR>
+<DT><B><I>file</I>.s</B>
+<DD>GNU Assembler code.
+<BR><BR>
+<DT><B><I>file</I>.S</B>
+<DD>GNU Assembler code which must be preprocessed.
+<BR><BR>
+<DT><B><I>file</I>.asm</B>
+<DD>A68k Assembler code.
+<BR><BR>
+<DT><B><I>file</I>.o</B>
+<DD>COFF object file to be linked using <CODE>ld</CODE>.
+<BR><BR>
+<DT><B><I>file</I>.a</B>
+<DD>Static library (function archive) to be linked using <CODE>ld</CODE>.
+</DL>
+You can specify the input language explicitly with the <B>'-x'</B> option:
+<DL>
+<DT><B>-x <I>language</I></B>
+<DD>Specify explicitly the <I>language</I> for the following input files
+(rather than letting the compiler choose a default based on the file
+name suffix).  This option applies to all following input files until
+the next <B>'-x'</B> option.  Possible values for <I>language</I> are:
+<BR>
+<CODE>
+c  c-header  cpp-output
+c++  c++-cpp-output
+objective-c  objc-cpp-output
+assembler  assembler-with-cpp
+ada
+f77  f77-cpp-input  ratfor
+java
+treelang
+</CODE>
+<DT><B>-x none</B>
+<DD>Turn off any specification of a language, so that subsequent files are
+handled according to their file name suffixes (as they are if <B>'-x'</B>
+has not been used at all).
+<BR><BR>
+<DT><B>-pass-exit-codes</B>
+<DD>Normally the <CODE>gcc</CODE> program will exit with the code of 1 if any
+phase of the compiler returns a non-success return code.  If you specify
+<B>'-pass-exit-codes'</B>, the <CODE>gcc</CODE> program will instead return with
+numerically highest error produced by any phase that returned an error
+indication.
+</DL>
+If you only want some of the stages of compilation, you can use
+<B>'-x'</B> (or filename suffixes) to tell <CODE>gcc</CODE> where to start, and
+one of the options <B>'-c'</B>, <B>'-S'</B>, or <B>'-E'</B> to say where
+<CODE>gcc</CODE> is to stop.  Note that some combinations (for example,
+<B>'-x cpp-output -E'</B>) instruct <CODE>gcc</CODE> to do nothing at all.
+<DL>
+<DT><B>-c</B>
+<DD>Compile or assemble the source files, but do not link.  The linking
+stage simply is not done.  The ultimate output is in the form of an
+object file for each source file.
+<BR><BR>
+By default, the object file name for a source file is made by replacing
+the suffix <CODE>.c</CODE>, <CODE>.i</CODE>, <CODE>.s</CODE>, etc., with <CODE>.o</CODE>.
+<BR><BR>
+Unrecognized input files, not requiring compilation or assembly, are
+ignored.
+<BR><BR>
+<DT><B>-S</B>
+<DD>Stop after the stage of compilation proper; do not assemble.  The output
+is in the form of an assembler code file for each non-assembler input
+file specified.
+<BR><BR>
+By default, the assembler file name for a source file is made by
+replacing the suffix <CODE>.c</CODE>, <CODE>.i</CODE>, etc., with <CODE>.s</CODE>.
+<BR><BR>
+Input files that don't require compilation are ignored.
+<BR><BR>
+<DT><B>-E</B>
+<DD>Stop after the preprocessing stage; do not run the compiler proper.  The
+output is in the form of preprocessed source code, which is sent to the
+standard output.
+<BR><BR>
+Input files which don't require preprocessing are ignored.
+<BR><BR>
+<DT><B>-o <I>file</I></B>
+<DD>Place output in file <I>file</I>.  This applies regardless to whatever
+sort of output is being produced, whether it be an executable file,
+an object file, an assembler file or preprocessed C code.
+<BR><BR>
+Since only one output file can be specified, it does not make sense to
+use <B>'-o'</B> when compiling more than one input file, unless you are
+producing an executable file as output.
+<BR><BR>
+If <B>'-o'</B> is not specified, the default is to put an executable file
+in <CODE>a.out</CODE>, the object file for <CODE><I>source</I>.<I>suffix</I></CODE> in
+<CODE><I>source</I>.o</CODE>, its assembler file in <CODE><I>source</I>.s</CODE>, and
+all preprocessed C source on standard output.
+<BR><BR>
+<DT><B>-v</B>
+<DD>Print (on standard error output) the commands executed to run the stages
+of compilation.  Also print the version number of the compiler driver
+program and of the preprocessor and the compiler proper.
+<BR><BR>
+<DT><B>-###</B>
+<DD>Like <B>'-v'</B> except the commands are not executed and all command
+arguments are quoted.  This is useful for shell scripts to capture the
+driver-generated command lines.
+<BR><BR>
+<DT><B>-pipe</B>
+<DD>Use pipes rather than temporary files for communication between the
+various stages of compilation.  This fails to work on some systems where
+the assembler is unable to read from a pipe; but the GNU assembler has
+no trouble.
+<BR><BR>
+<DT><B>--help</B>
+<DD>Print (on the standard output) a description of the command line options
+understood by <CODE>gcc</CODE>.  If the <B>'-v'</B> option is also specified
+then <B>'--help'</B> will also be passed on to the various processes
+invoked by <CODE>gcc</CODE>, so that they can display the command line options
+they accept.  If the <B>'-W'</B> option is also specified then command
+line options which have no documentation associated with them will also
+be displayed.
+<BR><BR>
+<DT><B>--target-help</B>
+<DD>Print (on the standard output) a description of target specific command
+line options for each tool.
+<BR><BR>
+<DT><B>--version</B>
+<DD>Display the version number and copyrights of the invoked GCC.
+</DL>

+ 305 - 305
tigcc/doc/System/Info/comopts/SEC44.hss

@@ -1,305 +1,305 @@
-[Main]
-Title=Options for Code Generation Conventions
-
-[Top]
-These machine-independent options control the interface conventions
-used in code generation.
-<BR><BR>
-Most of them have both positive and negative forms; the negative form
-of <B>'-ffoo'</B> would be <B>'-fno-foo'</B>.  In the table below, only
-one of the forms is listed: the one which is not the default.  You
-can figure out the other form by either removing <B>'no-'</B> or adding
-it.
-<DL>
-<DT><B>-fbounds-check</B>
-<DD>For front-ends that support it, generate additional code to check that
-indices used to access arrays are within the declared range.  This is
-currently only supported by the Java and Fortran 77 front-ends, where
-this option defaults to true and false respectively.
-<BR><BR>
-<DT><B>-ftrapv</B>
-<DD>This option generates traps for signed overflow on addition, subtraction,
-multiplication operations.
-<BR><BR>
-<DT><B>-fexceptions</B>
-<DD>Enable exception handling.  Generates extra code needed to propagate
-exceptions.  In principle, you may need to enable this option when compiling
-C code that needs to interoperate properly with exception handlers, but this
-is useless in TIGCC, as the TIOS uses its own exception handling mechanism
-(see <A HREF="$$LINK(error.h/)">error.h</A>).
-<BR><BR>
-<DT><B>-fnon-call-exceptions</B>
-<DD>Generate code that allows trapping instructions to throw exceptions.
-Probably useless in TIGCC.
-<BR><BR>
-<DT><B>-funwind-tables</B>
-<DD>Similar to <B>'-fexceptions'</B>, except that it will just generate any needed
-static data, but will not affect the generated code in any other way.
-Probably useless in TIGCC.
-<BR><BR>
-<DT><B>-fasynchronous-unwind-tables</B>
-<DD>Generate unwind table in dwarf2 format, if supported by target machine.  The
-table is exact at each instruction boundary, so it can be used for stack
-unwinding from asynchronous events (such as debugger or garbage collector).
-<BR><BR>
-<DT><B>-fpcc-struct-return</B>
-<DD>Return &quot;short&quot; <CODE>struct</CODE> and <CODE>union</CODE> values in memory like
-longer ones, rather than in registers.  This convention is less
-efficient, but it has the advantage of allowing intercallability between
-GCC-compiled files and files compiled with other compilers, particularly
-the Portable C Compiler (pcc).
-<BR><BR>
-The precise convention for returning structures in memory depends
-on the target configuration macros.
-<BR><BR>
-Short structures and unions are those whose size and alignment match
-that of some integer type.
-<BR><BR>
-<B>Warning:</B> code compiled with the <B>'-fpcc-struct-return'</B>
-switch is not binary compatible with code compiled with the
-<B>'-freg-struct-return'</B> switch.
-Use it to conform to a non-default application binary interface.
-<BR><BR>
-<DT><B>-freg-struct-return</B>
-<DD>Return <CODE>struct</CODE> and <CODE>union</CODE> values in registers when possible.
-This is more efficient for small structures than
-<B>'-fpcc-struct-return'</B>.
-<BR><BR>
-If you specify neither <B>'-fpcc-struct-return'</B> nor
-<B>'-freg-struct-return'</B>, TIGCC defaults to <B>'-freg-struct-return'</B>.
-<BR><BR>
-<B>Warning:</B> code compiled with the <B>'-freg-struct-return'</B>
-switch is not binary compatible with code compiled with the
-<B>'-fpcc-struct-return'</B> switch.
-Use it to conform to a non-default application binary interface.
-<BR><BR>
-<DT><B>-fshort-enums</B>
-<DD>Allocate to an <CODE>enum</CODE> type only as many bytes as it needs for the
-declared range of possible values.  Specifically, the <CODE>enum</CODE> type
-will be equivalent to the smallest integer type which has enough room.
-<BR><BR>
-<B>Warning:</B> the <B>'-fshort-enums'</B> switch causes GCC to generate
-code that is not binary compatible with code generated without that switch.
-Use it to conform to a non-default application binary interface.
-<BR><BR>
-<DT><B>-fshort-double</B>
-<DD>Use the same size for <CODE>double</CODE> as for <CODE>float</CODE>.
-This is always true in TIGCC, regardless of this switch.
-<BR><BR>
-<B>Warning:</B> the <B>'-fshort-double'</B> switch causes GCC to generate
-code that is not binary compatible with code generated without that switch.
-Use it to conform to a non-default application binary interface.
-<BR><BR>
-<DT><B>-fshort-wchar</B>
-<DD>Override the underlying type for <CODE>wchar_t</CODE> to be <CODE>short
-unsigned&nbsp;int</CODE> instead of the default for the target.  This option is
-useful for building programs to run under WINE.
-<BR><BR>
-<B>Warning:</B> the <B>'-fshort-wchar'</B> switch causes GCC to generate
-code that is not binary compatible with code generated without that switch.
-Use it to conform to a non-default application binary interface.
-<BR><BR>
-<DT><B>-fshared-data</B>
-<DD>Requests that the data and non-<CODE>const</CODE> variables of this
-compilation be shared data rather than private data.  The distinction
-makes sense only on certain operating systems, where shared data is
-shared between processes running the same program, while private data
-exists in one copy per process.
-<BR><BR>
-<DT><B>-fno-common</B>
-<DD>Allocate even uninitialized global variables in the data section of the
-object file, rather than generating them as common blocks.  This has the
-effect that if the same variable is declared (without <CODE>extern</CODE>) in
-two different compilations, you will get an error when you link them.
-The only reason this might be useful is if you wish to verify that the
-program will work on other systems which always work this way.  Currently,
-TIGCC does not support this option, since it needs common symbols to
-communicate with the linker.
-<BR><BR>
-<DT><B>-fno-ident</B>
-<DD>Ignore the <CODE>#ident</CODE> directive.
-<BR><BR>
-<DT><B>-fno-gnu-linker</B>
-<DD>Do not output global initializations in the form used by the GNU linker
-Useless in TIGCC, because global initializations are not implemented.
-<BR><BR>
-<DT><B>-finhibit-size-directive</B>
-<DD>Don't output a <CODE>.size</CODE> assembler directive, or anything else that
-would cause trouble if the function is split in the middle, and the
-two halves are placed at locations far apart in memory.  This option is
-used when compiling <CODE>crtstuff.c</CODE>; you should not need to use it
-for anything else.
-<BR><BR>
-<DT><B>-fverbose-asm</B>
-<DD>Put extra commentary information in the generated assembly code to
-make it more readable.  This option is generally only of use to those
-who actually need to read the generated assembly code (perhaps while
-debugging the compiler itself).
-<BR><BR>
-<B>'-fno-verbose-asm'</B>, the default, causes the
-extra information to be omitted and is useful when comparing two assembler
-files.
-<BR><BR>
-<DT><B>-fvolatile</B>
-<DD>Consider all memory references through pointers to be volatile.
-<BR><BR>
-<DT><B>-fvolatile-global</B>
-<DD>Consider all memory references to extern and global data items to
-be volatile.  GCC does not consider static data items to be volatile
-because of this switch.
-<BR><BR>
-<DT><B>-fvolatile-static</B>
-<DD>Consider all memory references to static data to be volatile.
-<BR><BR>
-<DT><B>-fpic</B>
-<DD>Generate position-independent code (PIC) suitable for use in a shared
-library.  However, it requires special support of the operating
-system (like dynamic loaders, etc.).  So forget it with the TIOS; maybe
-some future ASM shells will support this.  At the moment, forget this
-nice option.
-<BR><BR>
-<DT><B>-fPIC</B>
-<DD>If supported for the target machine, emit position-independent code,
-suitable for dynamic linking and avoiding any limit on the size of the
-global offset table.
-<BR><BR>
-<DT><B>-ffixed-<I>reg</I></B>
-<DD>Treat the register named <I>reg</I> as a fixed register; generated code
-should never refer to it (except perhaps as a stack pointer, frame
-pointer or in some other fixed role).
-<BR><BR>
-This flag does not have a negative form, because it specifies a
-three-way choice.
-<BR><BR>
-<DT><B>-fcall-used-<I>reg</I></B>
-<DD>Treat the register named <I>reg</I> as an allocable register that is
-clobbered by function calls.  It may be allocated for temporaries or
-variables that do not live across a call.  Functions compiled this way
-will not save and restore the register <I>reg</I>.
-<BR><BR>
-It is an error to used this flag with the frame pointer or stack pointer.
-Use of this flag for other registers that have fixed pervasive roles in
-the machine's execution model will produce disastrous results.
-<BR><BR>
-This flag does not have a negative form, because it specifies a
-three-way choice.
-<BR><BR>
-<DT><B>-fcall-saved-<I>reg</I></B>
-<DD>Treat the register named <I>reg</I> as an allocable register saved by
-functions.  It may be allocated even for temporaries or variables that
-live across a call.  Functions compiled this way will save and restore
-the register <I>reg</I> if they use it.
-<BR><BR>
-It is an error to used this flag with the frame pointer or stack pointer.
-Use of this flag for other registers that have fixed pervasive roles in
-the machine's execution model will produce disastrous results.
-<BR><BR>
-A different sort of disaster will result from the use of this flag for
-a register in which function values may be returned.
-<BR><BR>
-This flag does not have a negative form, because it specifies a
-three-way choice.
-<BR><BR>
-<DT><B>-freg-relative-<I>reg</I></B><DD>
-Refer to all labels only in relation to the register specified in
-<I>reg</I>.  This can make the code somewhat smaller, but you should use this
-option with care as it is not fully supported.
-This option is implemented only in TIGCC.
-<BR><BR>
-<DT><B>-fpack-struct</B>
-<DD>Pack all structure members together without holes.
-<BR><BR>
-<B>Warning:</B> the <B>'-fpack-struct'</B> switch causes GCC to generate
-code that is not binary compatible with code generated without that switch.
-Additionally, it makes the code suboptimal.
-Use it to conform to a non-default application binary interface.
-<BR><BR>
-<DT><B>-finstrument-functions</B>
-<DD>Generate instrumentation calls for entry and exit to functions.  Just
-after function entry and just before function exit, the following
-profiling functions will be called with the address of the current
-function and its call site.  (On some platforms,
-<CODE>__builtin_return_address</CODE> does not work beyond the current
-function, so the call site information may not be available to the
-profiling functions otherwise.)
-<PRE>void __cyg_profile_func_enter (void *this_fn,
-                               void *call_site);
-void __cyg_profile_func_exit  (void *this_fn,
-                               void *call_site);
-</PRE>
-The first argument is the address of the start of the current function,
-which may be looked up exactly in the symbol table.
-<BR><BR>
-This instrumentation is also done for functions expanded inline in other
-functions.  The profiling calls will indicate where, conceptually, the
-inline function is entered and exited.  This means that addressable
-versions of such functions must be available.  If all your uses of a
-function are expanded inline, this may mean an additional expansion of
-code size.  If you use <CODE>extern&nbsp;inline</CODE> in your C code, an
-addressable version of such functions must be provided.  (This is
-normally the case anyways, but if you get lucky and the optimizer always
-expands the functions inline, you might have gotten away without
-providing static copies.)
-<BR><BR>
-A function may be given the attribute <CODE>no_instrument_function</CODE>, in
-which case this instrumentation will not be done.  This can be used, for
-example, for the profiling functions listed above, high-priority
-interrupt routines, and any functions from which the profiling functions
-cannot safely be called (perhaps signal handlers, if the profiling
-routines generate output or allocate memory).
-<BR><BR>
-<DT><B>-fstack-check</B>
-<DD>Generate code to verify that you do not go beyond the boundary of the
-stack.  As this requires support from the operating system, it probably does
-not work in TIGCC.
-<BR><BR>
-<DT><B>-fstack-limit-register=<I>reg</I></B>
-<BR><B>-fstack-limit-symbol=<I>sym</I></B>
-<BR><B>-fno-stack-limit</B>
-<DD>Generate code to ensure that the stack does not grow beyond a certain value,
-either the value of a register or the address of a symbol.  If the stack
-would grow beyond the value, a signal is raised.  For most targets,
-the signal is raised before the stack overruns the boundary, so
-it is possible to catch the signal without taking special precautions.
-<BR><BR>
-For instance, if the stack starts at absolute address <CODE>0x80000000</CODE>
-and grows downwards, you can use the flags
-<B>'-fstack-limit-symbol=__stack_limit'</B> and
-<B>'-Wl,--defsym,__stack_limit=0x7ffe0000'</B> to enforce a stack limit
-of 128KB.  Note that this may only work with the GNU linker.
-<BR><BR>
-<DT><B>-fargument-alias</B>
-<BR><B>-fargument-noalias</B>
-<BR><B>-fargument-noalias-global</B>
-<DD>Specify the possible relationships among parameters and between
-parameters and global data.
-<UL>
-<LI><B>'-fargument-alias'</B> specifies that arguments (parameters) may
-alias each other and may alias global storage.</LI>
-<LI><B>'-fargument-noalias'</B> specifies that arguments do not alias
-each other, but may alias global storage.</LI>
-<LI><B>'-fargument-noalias-global'</B> specifies that arguments do not
-alias each other and do not alias global storage.</LI>
-</UL>
-Each language will automatically use whatever option is required by
-the language standard.  You should not need to use these options yourself.
-<BR><BR>
-<DT><B>-fleading-underscore</B>
-<DD>This option and its counterpart, <B>'-fno-leading-underscore'</B>, forcibly
-change the way C symbols are represented in the object file.  One use
-is to help link with legacy assembly code.
-<BR><BR>
-<B>Warning:</B> the <B>'-fleading-underscore'</B> switch causes GCC to
-generate code that is not binary compatible with code generated without that
-switch.  Use it to conform to a non-default application binary interface.
-<BR><BR>
-<DT><B>-ftls-model=<I>model</I></B>
-<DD>Alter the thread-local storage model to be used.
-The <I>model</I> argument should be one of <CODE>global-dynamic</CODE>,
-<CODE>local-dynamic</CODE>, <CODE>initial-exec</CODE> or <CODE>local-exec</CODE>.
-<BR><BR>
-The default without <B>'-fpic'</B> is <CODE>initial-exec</CODE>; with
-<B>'-fpic'</B> the default is <CODE>global-dynamic</CODE>.
-<BR><BR>
-Useless in TIGCC, as threads are not supported.
-</DL>
+[Main]
+Title=Options for Code Generation Conventions
+
+[Top]
+These machine-independent options control the interface conventions
+used in code generation.
+<BR><BR>
+Most of them have both positive and negative forms; the negative form
+of <B>'-ffoo'</B> would be <B>'-fno-foo'</B>.  In the table below, only
+one of the forms is listed: the one which is not the default.  You
+can figure out the other form by either removing <B>'no-'</B> or adding
+it.
+<DL>
+<DT><B>-fbounds-check</B>
+<DD>For front-ends that support it, generate additional code to check that
+indices used to access arrays are within the declared range.  This is
+currently only supported by the Java and Fortran 77 front-ends, where
+this option defaults to true and false respectively.
+<BR><BR>
+<DT><B>-ftrapv</B>
+<DD>This option generates traps for signed overflow on addition, subtraction,
+multiplication operations.
+<BR><BR>
+<DT><B>-fexceptions</B>
+<DD>Enable exception handling.  Generates extra code needed to propagate
+exceptions.  In principle, you may need to enable this option when compiling
+C code that needs to interoperate properly with exception handlers, but this
+is useless in TIGCC, as the TIOS uses its own exception handling mechanism
+(see <A HREF="$$LINK(error.h/)">error.h</A>).
+<BR><BR>
+<DT><B>-fnon-call-exceptions</B>
+<DD>Generate code that allows trapping instructions to throw exceptions.
+Probably useless in TIGCC.
+<BR><BR>
+<DT><B>-funwind-tables</B>
+<DD>Similar to <B>'-fexceptions'</B>, except that it will just generate any needed
+static data, but will not affect the generated code in any other way.
+Probably useless in TIGCC.
+<BR><BR>
+<DT><B>-fasynchronous-unwind-tables</B>
+<DD>Generate unwind table in dwarf2 format, if supported by target machine.  The
+table is exact at each instruction boundary, so it can be used for stack
+unwinding from asynchronous events (such as debugger or garbage collector).
+<BR><BR>
+<DT><B>-fpcc-struct-return</B>
+<DD>Return &quot;short&quot; <CODE>struct</CODE> and <CODE>union</CODE> values in memory like
+longer ones, rather than in registers.  This convention is less
+efficient, but it has the advantage of allowing intercallability between
+GCC-compiled files and files compiled with other compilers, particularly
+the Portable C Compiler (pcc).
+<BR><BR>
+The precise convention for returning structures in memory depends
+on the target configuration macros.
+<BR><BR>
+Short structures and unions are those whose size and alignment match
+that of some integer type.
+<BR><BR>
+<B>Warning:</B> code compiled with the <B>'-fpcc-struct-return'</B>
+switch is not binary compatible with code compiled with the
+<B>'-freg-struct-return'</B> switch.
+Use it to conform to a non-default application binary interface.
+<BR><BR>
+<DT><B>-freg-struct-return</B>
+<DD>Return <CODE>struct</CODE> and <CODE>union</CODE> values in registers when possible.
+This is more efficient for small structures than
+<B>'-fpcc-struct-return'</B>.
+<BR><BR>
+If you specify neither <B>'-fpcc-struct-return'</B> nor
+<B>'-freg-struct-return'</B>, TIGCC defaults to <B>'-freg-struct-return'</B>.
+<BR><BR>
+<B>Warning:</B> code compiled with the <B>'-freg-struct-return'</B>
+switch is not binary compatible with code compiled with the
+<B>'-fpcc-struct-return'</B> switch.
+Use it to conform to a non-default application binary interface.
+<BR><BR>
+<DT><B>-fshort-enums</B>
+<DD>Allocate to an <CODE>enum</CODE> type only as many bytes as it needs for the
+declared range of possible values.  Specifically, the <CODE>enum</CODE> type
+will be equivalent to the smallest integer type which has enough room.
+<BR><BR>
+<B>Warning:</B> the <B>'-fshort-enums'</B> switch causes GCC to generate
+code that is not binary compatible with code generated without that switch.
+Use it to conform to a non-default application binary interface.
+<BR><BR>
+<DT><B>-fshort-double</B>
+<DD>Use the same size for <CODE>double</CODE> as for <CODE>float</CODE>.
+This is always true in TIGCC, regardless of this switch.
+<BR><BR>
+<B>Warning:</B> the <B>'-fshort-double'</B> switch causes GCC to generate
+code that is not binary compatible with code generated without that switch.
+Use it to conform to a non-default application binary interface.
+<BR><BR>
+<DT><B>-fshort-wchar</B>
+<DD>Override the underlying type for <CODE>wchar_t</CODE> to be <CODE>short
+unsigned&nbsp;int</CODE> instead of the default for the target.  This option is
+useful for building programs to run under WINE.
+<BR><BR>
+<B>Warning:</B> the <B>'-fshort-wchar'</B> switch causes GCC to generate
+code that is not binary compatible with code generated without that switch.
+Use it to conform to a non-default application binary interface.
+<BR><BR>
+<DT><B>-fshared-data</B>
+<DD>Requests that the data and non-<CODE>const</CODE> variables of this
+compilation be shared data rather than private data.  The distinction
+makes sense only on certain operating systems, where shared data is
+shared between processes running the same program, while private data
+exists in one copy per process.
+<BR><BR>
+<DT><B>-fno-common</B>
+<DD>Allocate even uninitialized global variables in the data section of the
+object file, rather than generating them as common blocks.  This has the
+effect that if the same variable is declared (without <CODE>extern</CODE>) in
+two different compilations, you will get an error when you link them.
+The only reason this might be useful is if you wish to verify that the
+program will work on other systems which always work this way.  Currently,
+TIGCC does not support this option, since it needs common symbols to
+communicate with the linker.
+<BR><BR>
+<DT><B>-fno-ident</B>
+<DD>Ignore the <CODE>#ident</CODE> directive.
+<BR><BR>
+<DT><B>-fno-gnu-linker</B>
+<DD>Do not output global initializations in the form used by the GNU linker
+Useless in TIGCC, because global initializations are not implemented.
+<BR><BR>
+<DT><B>-finhibit-size-directive</B>
+<DD>Don't output a <CODE>.size</CODE> assembler directive, or anything else that
+would cause trouble if the function is split in the middle, and the
+two halves are placed at locations far apart in memory.  This option is
+used when compiling <CODE>crtstuff.c</CODE>; you should not need to use it
+for anything else.
+<BR><BR>
+<DT><B>-fverbose-asm</B>
+<DD>Put extra commentary information in the generated assembly code to
+make it more readable.  This option is generally only of use to those
+who actually need to read the generated assembly code (perhaps while
+debugging the compiler itself).
+<BR><BR>
+<B>'-fno-verbose-asm'</B>, the default, causes the
+extra information to be omitted and is useful when comparing two assembler
+files.
+<BR><BR>
+<DT><B>-fvolatile</B>
+<DD>Consider all memory references through pointers to be volatile.
+<BR><BR>
+<DT><B>-fvolatile-global</B>
+<DD>Consider all memory references to extern and global data items to
+be volatile.  GCC does not consider static data items to be volatile
+because of this switch.
+<BR><BR>
+<DT><B>-fvolatile-static</B>
+<DD>Consider all memory references to static data to be volatile.
+<BR><BR>
+<DT><B>-fpic</B>
+<DD>Generate position-independent code (PIC) suitable for use in a shared
+library.  However, it requires special support of the operating
+system (like dynamic loaders, etc.).  So forget it with the TIOS; maybe
+some future ASM shells will support this.  At the moment, forget this
+nice option.
+<BR><BR>
+<DT><B>-fPIC</B>
+<DD>If supported for the target machine, emit position-independent code,
+suitable for dynamic linking and avoiding any limit on the size of the
+global offset table.
+<BR><BR>
+<DT><B>-ffixed-<I>reg</I></B>
+<DD>Treat the register named <I>reg</I> as a fixed register; generated code
+should never refer to it (except perhaps as a stack pointer, frame
+pointer or in some other fixed role).
+<BR><BR>
+This flag does not have a negative form, because it specifies a
+three-way choice.
+<BR><BR>
+<DT><B>-fcall-used-<I>reg</I></B>
+<DD>Treat the register named <I>reg</I> as an allocable register that is
+clobbered by function calls.  It may be allocated for temporaries or
+variables that do not live across a call.  Functions compiled this way
+will not save and restore the register <I>reg</I>.
+<BR><BR>
+It is an error to used this flag with the frame pointer or stack pointer.
+Use of this flag for other registers that have fixed pervasive roles in
+the machine's execution model will produce disastrous results.
+<BR><BR>
+This flag does not have a negative form, because it specifies a
+three-way choice.
+<BR><BR>
+<DT><B>-fcall-saved-<I>reg</I></B>
+<DD>Treat the register named <I>reg</I> as an allocable register saved by
+functions.  It may be allocated even for temporaries or variables that
+live across a call.  Functions compiled this way will save and restore
+the register <I>reg</I> if they use it.
+<BR><BR>
+It is an error to used this flag with the frame pointer or stack pointer.
+Use of this flag for other registers that have fixed pervasive roles in
+the machine's execution model will produce disastrous results.
+<BR><BR>
+A different sort of disaster will result from the use of this flag for
+a register in which function values may be returned.
+<BR><BR>
+This flag does not have a negative form, because it specifies a
+three-way choice.
+<BR><BR>
+<DT><B>-freg-relative-<I>reg</I></B><DD>
+Refer to all labels only in relation to the register specified in
+<I>reg</I>.  This can make the code somewhat smaller, but you should use this
+option with care as it is not fully supported.
+This option is implemented only in TIGCC.
+<BR><BR>
+<DT><B>-fpack-struct</B>
+<DD>Pack all structure members together without holes.
+<BR><BR>
+<B>Warning:</B> the <B>'-fpack-struct'</B> switch causes GCC to generate
+code that is not binary compatible with code generated without that switch.
+Additionally, it makes the code suboptimal.
+Use it to conform to a non-default application binary interface.
+<BR><BR>
+<DT><B>-finstrument-functions</B>
+<DD>Generate instrumentation calls for entry and exit to functions.  Just
+after function entry and just before function exit, the following
+profiling functions will be called with the address of the current
+function and its call site.  (On some platforms,
+<CODE>__builtin_return_address</CODE> does not work beyond the current
+function, so the call site information may not be available to the
+profiling functions otherwise.)
+<PRE>void __cyg_profile_func_enter (void *this_fn,
+                               void *call_site);
+void __cyg_profile_func_exit  (void *this_fn,
+                               void *call_site);
+</PRE>
+The first argument is the address of the start of the current function,
+which may be looked up exactly in the symbol table.
+<BR><BR>
+This instrumentation is also done for functions expanded inline in other
+functions.  The profiling calls will indicate where, conceptually, the
+inline function is entered and exited.  This means that addressable
+versions of such functions must be available.  If all your uses of a
+function are expanded inline, this may mean an additional expansion of
+code size.  If you use <CODE>extern&nbsp;inline</CODE> in your C code, an
+addressable version of such functions must be provided.  (This is
+normally the case anyways, but if you get lucky and the optimizer always
+expands the functions inline, you might have gotten away without
+providing static copies.)
+<BR><BR>
+A function may be given the attribute <CODE>no_instrument_function</CODE>, in
+which case this instrumentation will not be done.  This can be used, for
+example, for the profiling functions listed above, high-priority
+interrupt routines, and any functions from which the profiling functions
+cannot safely be called (perhaps signal handlers, if the profiling
+routines generate output or allocate memory).
+<BR><BR>
+<DT><B>-fstack-check</B>
+<DD>Generate code to verify that you do not go beyond the boundary of the
+stack.  As this requires support from the operating system, it probably does
+not work in TIGCC.
+<BR><BR>
+<DT><B>-fstack-limit-register=<I>reg</I></B>
+<BR><B>-fstack-limit-symbol=<I>sym</I></B>
+<BR><B>-fno-stack-limit</B>
+<DD>Generate code to ensure that the stack does not grow beyond a certain value,
+either the value of a register or the address of a symbol.  If the stack
+would grow beyond the value, a signal is raised.  For most targets,
+the signal is raised before the stack overruns the boundary, so
+it is possible to catch the signal without taking special precautions.
+<BR><BR>
+For instance, if the stack starts at absolute address <CODE>0x80000000</CODE>
+and grows downwards, you can use the flags
+<B>'-fstack-limit-symbol=__stack_limit'</B> and
+<B>'-Wl,--defsym,__stack_limit=0x7ffe0000'</B> to enforce a stack limit
+of 128KB.  Note that this may only work with the GNU linker.
+<BR><BR>
+<DT><B>-fargument-alias</B>
+<BR><B>-fargument-noalias</B>
+<BR><B>-fargument-noalias-global</B>
+<DD>Specify the possible relationships among parameters and between
+parameters and global data.
+<UL>
+<LI><B>'-fargument-alias'</B> specifies that arguments (parameters) may
+alias each other and may alias global storage.</LI>
+<LI><B>'-fargument-noalias'</B> specifies that arguments do not alias
+each other, but may alias global storage.</LI>
+<LI><B>'-fargument-noalias-global'</B> specifies that arguments do not
+alias each other and do not alias global storage.</LI>
+</UL>
+Each language will automatically use whatever option is required by
+the language standard.  You should not need to use these options yourself.
+<BR><BR>
+<DT><B>-fleading-underscore</B>
+<DD>This option and its counterpart, <B>'-fno-leading-underscore'</B>, forcibly
+change the way C symbols are represented in the object file.  One use
+is to help link with legacy assembly code.
+<BR><BR>
+<B>Warning:</B> the <B>'-fleading-underscore'</B> switch causes GCC to
+generate code that is not binary compatible with code generated without that
+switch.  Use it to conform to a non-default application binary interface.
+<BR><BR>
+<DT><B>-ftls-model=<I>model</I></B>
+<DD>Alter the thread-local storage model to be used.
+The <I>model</I> argument should be one of <CODE>global-dynamic</CODE>,
+<CODE>local-dynamic</CODE>, <CODE>initial-exec</CODE> or <CODE>local-exec</CODE>.
+<BR><BR>
+The default without <B>'-fpic'</B> is <CODE>initial-exec</CODE>; with
+<B>'-fpic'</B> the default is <CODE>global-dynamic</CODE>.
+<BR><BR>
+Useless in TIGCC, as threads are not supported.
+</DL>

+ 158 - 158
tigcc/doc/System/Info/comopts/SEC45.hss

@@ -1,158 +1,158 @@
-[Main]
-Title=Environment Variables Affecting GCC
-
-[Top]
-This section describes several environment variables that affect how GCC
-operates.  Some of them work by specifying directories or prefixes to use
-when searching for various kinds of files.  Some are used to specify other
-aspects of the compilation environment.
-<BR><BR>
-Note that you can also specify places to search using options such as
-<B>'-B'</B>, <B>'-I'</B> and <B>'-L'</B> (see <A HREF="$$LINK(SEC14)">Options for Directory Search</A>).
-<DL>
-<DT><B>LANG</B>
-<BR><B>LC_CTYPE</B>
-<BR><B>LC_MESSAGES</B>
-<BR><B>LC_ALL</B>
-<DD>These environment variables control the way that GCC uses
-localization information that allow GCC to work with different
-national conventions.  GCC inspects the locale categories
-<CODE>LC_CTYPE</CODE> and <CODE>LC_MESSAGES</CODE> if it has been configured to do
-so.  These locale categories can be set to any value supported by your
-installation.  A typical value is <CODE>en_UK</CODE> for English in the United
-Kingdom.
-<BR><BR>
-The <CODE>LC_CTYPE</CODE> environment variable specifies character
-classification.  GCC uses it to determine the character boundaries in
-a string; this is needed for some multibyte encodings that contain quote
-and escape characters that would otherwise be interpreted as a string
-end or escape.
-<BR><BR>
-The <CODE>LC_MESSAGES</CODE> environment variable specifies the language to
-use in diagnostic messages.
-<BR><BR>
-If the <CODE>LC_ALL</CODE> environment variable is set, it overrides the value
-of <CODE>LC_CTYPE</CODE> and <CODE>LC_MESSAGES</CODE>; otherwise, <CODE>LC_CTYPE</CODE>
-and <CODE>LC_MESSAGES</CODE> default to the value of the <CODE>LANG</CODE>
-environment variable.  If none of these variables are set, GCC
-defaults to traditional C English behavior.
-<BR><BR>
-<DT><B>TMPDIR</B>
-<DD>If <CODE>TMPDIR</CODE> is set, it specifies the directory to use for temporary
-files.  GCC uses temporary files to hold the output of one stage of
-compilation which is to be used as input to the next stage: for example,
-the output of the preprocessor, which is the input to the compiler
-proper.
-<BR><BR>
-<DT><B>GCC_EXEC_PREFIX</B>
-<DD>If <CODE>GCC_EXEC_PREFIX</CODE> is set, it specifies a prefix to use in the
-names of the subprograms executed by the compiler.  No slash is added
-when this prefix is combined with the name of a subprogram, but you can
-specify a prefix that ends with a slash if you wish.
-<BR><BR>
-If <CODE>GCC_EXEC_PREFIX</CODE> is not set, GCC will attempt to figure out
-an appropriate prefix to use based on the pathname it was invoked with.
-<BR><BR>
-If GCC cannot find the subprogram using the specified prefix, it
-tries looking in the usual places for the subprogram.
-<BR><BR>
-The default value of <CODE>GCC_EXEC_PREFIX</CODE> is
-<CODE><I>prefix</I>/lib/gcc-lib/</CODE> where <I>prefix</I> is the value
-of <CODE>prefix</CODE> when you ran the <CODE>configure</CODE> script.
-<BR><BR>
-Other prefixes specified with <B>'-B'</B> take precedence over this prefix.
-<BR><BR>
-In addition, the prefix is used in an unusual way in finding the
-directories to search for header files.  For each of the standard
-directories whose name normally begins with <CODE>/usr/local/lib/gcc-lib</CODE>
-(more precisely, with the value of <CODE>GCC_INCLUDE_DIR</CODE>), GCC tries
-replacing that beginning with the specified prefix to produce an
-alternate directory name.  Thus, with <B>'-B<I>foo</I>/'</B>, GCC will search
-<CODE><I>foo</I>/<I>bar</I></CODE> where it would normally search <CODE>/usr/local/lib/<I>bar</I></CODE>.
-These alternate directories are searched first; the standard directories
-come next.
-<BR><BR>
-<DT><B>COMPILER_PATH</B>
-<DD>The value of <CODE>COMPILER_PATH</CODE> is a colon-separated list of
-directories, much like <CODE>PATH</CODE>.  GCC tries the directories thus
-specified when searching for subprograms, if it can't find the
-subprograms using <CODE>GCC_EXEC_PREFIX</CODE>.
-<BR><BR>
-<DT><B>LIBRARY_PATH</B>
-<DD>The value of <CODE>LIBRARY_PATH</CODE> is a colon-separated list of
-directories, much like <CODE>PATH</CODE>.  When configured as a native compiler (which TIGCC is <I>not</I>),
-GCC tries the directories thus specified when searching for special
-linker files, if it can't find them using <CODE>GCC_EXEC_PREFIX</CODE>.  Linking
-using GCC also uses these directories when searching for ordinary
-libraries for the <B>'-l'</B> option (but directories specified with
-<B>'-L'</B> come first).
-<BR><BR>
-<DT><B>LANG</B>
-<DD>This variable is used to pass locale information to the compiler.  One way in
-which this information is used is to determine the character set to be used
-when character literals, string literals and comments are parsed.
-When the compiler is configured to allow multibyte characters,
-the following values for <CODE>LANG</CODE> are recognized:
-<BR><BR><DL>
-<DT><B>C-JIS</B>
-<DD>Recognize JIS characters.
-<BR><BR>
-<DT><B>C-SJIS</B>
-<DD>Recognize SJIS characters.
-<BR><BR>
-<DT><B>C-EUCJP</B>
-<DD>Recognize EUCJP characters.
-</DL><BR>
-If <CODE>LANG</CODE> is not defined, or if it has some other value, then the
-compiler will use mblen and mbtowc as defined by the default locale to
-recognize and translate multibyte characters.
-</DL>
-Some additional environments variables affect the behavior of the
-preprocessor.
-<DL>
-<DT><B>CPATH</B>
-<BR><B>C_INCLUDE_PATH</B>
-<DD>Each variable's value is a list of directories separated by a special
-character, much like <CODE>PATH</CODE>, in which to look for header files.
-The special character, <CODE>PATH_SEPARATOR</CODE>, is target-dependent and
-determined at GCC build time.  For Windows-based targets it is a
-semicolon, and for almost all other targets it is a colon.
-<BR><BR>
-<CODE>CPATH</CODE> specifies a list of directories to be searched as if
-specified with <B>'-I'</B>, but after any paths given with <B>'-I'</B>
-options on the command line.
-<BR><BR>
-<CODE>C_INCLUDE_PATH</CODE> specifies a list of directories
-to be searched as if specified with <B>'-isystem'</B>, but after any
-paths given with <B>'-isystem'</B> options on the command line.
-<BR><BR>
-In all these variables, an empty element instructs the compiler to
-search its current working directory.  Empty elements can appear at the
-beginning or end of a path.  For instance, if the value of
-<CODE>CPATH</CODE> is <CODE>:/special/include</CODE>, that has the same
-effect as <CODE>-I.&nbsp;-I/special/include</CODE>.
-<BR><BR>
-<DT><B>DEPENDENCIES_OUTPUT</B>
-<DD>If this variable is set, its value specifies how to output
-dependencies for Make based on the non-system header files processed
-by the compiler.  System header files are ignored in the dependency
-output.
-<BR><BR>
-The value of <CODE>DEPENDENCIES_OUTPUT</CODE> can be just a file name, in
-which case the Make rules are written to that file, guessing the target
-name from the source file name.  Or the value can have the form
-<CODE><I>file</I>&nbsp;<I>target</I></CODE>, in which case the rules are written to
-file <I>file</I> using <I>target</I> as the target name.
-<BR><BR>
-In other words, this environment variable is equivalent to combining
-the options <B>'-MM'</B> and <B>'-MF'</B>
-(see <A HREF="$$LINK(SEC11)">Options Controlling the Preprocessor</A>),
-with an optional <B>'-MT'</B> switch, too.
-<BR><BR>
-<DT><B>SUNPRO_DEPENDENCIES</B>
-<DD>This variable is the same as <CODE>DEPENDENCIES_OUTPUT</CODE> (see above),
-except that system header files are not ignored, so it implies
-<B>'-M'</B> rather than <B>'-MM'</B>
-(see <A HREF="$$LINK(SEC11)">Options Controlling the Preprocessor</A>).
-However, the dependence on the main input file is omitted.
-</DL>
+[Main]
+Title=Environment Variables Affecting GCC
+
+[Top]
+This section describes several environment variables that affect how GCC
+operates.  Some of them work by specifying directories or prefixes to use
+when searching for various kinds of files.  Some are used to specify other
+aspects of the compilation environment.
+<BR><BR>
+Note that you can also specify places to search using options such as
+<B>'-B'</B>, <B>'-I'</B> and <B>'-L'</B> (see <A HREF="$$LINK(SEC14)">Options for Directory Search</A>).
+<DL>
+<DT><B>LANG</B>
+<BR><B>LC_CTYPE</B>
+<BR><B>LC_MESSAGES</B>
+<BR><B>LC_ALL</B>
+<DD>These environment variables control the way that GCC uses
+localization information that allow GCC to work with different
+national conventions.  GCC inspects the locale categories
+<CODE>LC_CTYPE</CODE> and <CODE>LC_MESSAGES</CODE> if it has been configured to do
+so.  These locale categories can be set to any value supported by your
+installation.  A typical value is <CODE>en_UK</CODE> for English in the United
+Kingdom.
+<BR><BR>
+The <CODE>LC_CTYPE</CODE> environment variable specifies character
+classification.  GCC uses it to determine the character boundaries in
+a string; this is needed for some multibyte encodings that contain quote
+and escape characters that would otherwise be interpreted as a string
+end or escape.
+<BR><BR>
+The <CODE>LC_MESSAGES</CODE> environment variable specifies the language to
+use in diagnostic messages.
+<BR><BR>
+If the <CODE>LC_ALL</CODE> environment variable is set, it overrides the value
+of <CODE>LC_CTYPE</CODE> and <CODE>LC_MESSAGES</CODE>; otherwise, <CODE>LC_CTYPE</CODE>
+and <CODE>LC_MESSAGES</CODE> default to the value of the <CODE>LANG</CODE>
+environment variable.  If none of these variables are set, GCC
+defaults to traditional C English behavior.
+<BR><BR>
+<DT><B>TMPDIR</B>
+<DD>If <CODE>TMPDIR</CODE> is set, it specifies the directory to use for temporary
+files.  GCC uses temporary files to hold the output of one stage of
+compilation which is to be used as input to the next stage: for example,
+the output of the preprocessor, which is the input to the compiler
+proper.
+<BR><BR>
+<DT><B>GCC_EXEC_PREFIX</B>
+<DD>If <CODE>GCC_EXEC_PREFIX</CODE> is set, it specifies a prefix to use in the
+names of the subprograms executed by the compiler.  No slash is added
+when this prefix is combined with the name of a subprogram, but you can
+specify a prefix that ends with a slash if you wish.
+<BR><BR>
+If <CODE>GCC_EXEC_PREFIX</CODE> is not set, GCC will attempt to figure out
+an appropriate prefix to use based on the pathname it was invoked with.
+<BR><BR>
+If GCC cannot find the subprogram using the specified prefix, it
+tries looking in the usual places for the subprogram.
+<BR><BR>
+The default value of <CODE>GCC_EXEC_PREFIX</CODE> is
+<CODE><I>prefix</I>/lib/gcc-lib/</CODE> where <I>prefix</I> is the value
+of <CODE>prefix</CODE> when you ran the <CODE>configure</CODE> script.
+<BR><BR>
+Other prefixes specified with <B>'-B'</B> take precedence over this prefix.
+<BR><BR>
+In addition, the prefix is used in an unusual way in finding the
+directories to search for header files.  For each of the standard
+directories whose name normally begins with <CODE>/usr/local/lib/gcc-lib</CODE>
+(more precisely, with the value of <CODE>GCC_INCLUDE_DIR</CODE>), GCC tries
+replacing that beginning with the specified prefix to produce an
+alternate directory name.  Thus, with <B>'-B<I>foo</I>/'</B>, GCC will search
+<CODE><I>foo</I>/<I>bar</I></CODE> where it would normally search <CODE>/usr/local/lib/<I>bar</I></CODE>.
+These alternate directories are searched first; the standard directories
+come next.
+<BR><BR>
+<DT><B>COMPILER_PATH</B>
+<DD>The value of <CODE>COMPILER_PATH</CODE> is a colon-separated list of
+directories, much like <CODE>PATH</CODE>.  GCC tries the directories thus
+specified when searching for subprograms, if it can't find the
+subprograms using <CODE>GCC_EXEC_PREFIX</CODE>.
+<BR><BR>
+<DT><B>LIBRARY_PATH</B>
+<DD>The value of <CODE>LIBRARY_PATH</CODE> is a colon-separated list of
+directories, much like <CODE>PATH</CODE>.  When configured as a native compiler (which TIGCC is <I>not</I>),
+GCC tries the directories thus specified when searching for special
+linker files, if it can't find them using <CODE>GCC_EXEC_PREFIX</CODE>.  Linking
+using GCC also uses these directories when searching for ordinary
+libraries for the <B>'-l'</B> option (but directories specified with
+<B>'-L'</B> come first).
+<BR><BR>
+<DT><B>LANG</B>
+<DD>This variable is used to pass locale information to the compiler.  One way in
+which this information is used is to determine the character set to be used
+when character literals, string literals and comments are parsed.
+When the compiler is configured to allow multibyte characters,
+the following values for <CODE>LANG</CODE> are recognized:
+<BR><BR><DL>
+<DT><B>C-JIS</B>
+<DD>Recognize JIS characters.
+<BR><BR>
+<DT><B>C-SJIS</B>
+<DD>Recognize SJIS characters.
+<BR><BR>
+<DT><B>C-EUCJP</B>
+<DD>Recognize EUCJP characters.
+</DL><BR>
+If <CODE>LANG</CODE> is not defined, or if it has some other value, then the
+compiler will use mblen and mbtowc as defined by the default locale to
+recognize and translate multibyte characters.
+</DL>
+Some additional environments variables affect the behavior of the
+preprocessor.
+<DL>
+<DT><B>CPATH</B>
+<BR><B>C_INCLUDE_PATH</B>
+<DD>Each variable's value is a list of directories separated by a special
+character, much like <CODE>PATH</CODE>, in which to look for header files.
+The special character, <CODE>PATH_SEPARATOR</CODE>, is target-dependent and
+determined at GCC build time.  For Windows-based targets it is a
+semicolon, and for almost all other targets it is a colon.
+<BR><BR>
+<CODE>CPATH</CODE> specifies a list of directories to be searched as if
+specified with <B>'-I'</B>, but after any paths given with <B>'-I'</B>
+options on the command line.
+<BR><BR>
+<CODE>C_INCLUDE_PATH</CODE> specifies a list of directories
+to be searched as if specified with <B>'-isystem'</B>, but after any
+paths given with <B>'-isystem'</B> options on the command line.
+<BR><BR>
+In all these variables, an empty element instructs the compiler to
+search its current working directory.  Empty elements can appear at the
+beginning or end of a path.  For instance, if the value of
+<CODE>CPATH</CODE> is <CODE>:/special/include</CODE>, that has the same
+effect as <CODE>-I.&nbsp;-I/special/include</CODE>.
+<BR><BR>
+<DT><B>DEPENDENCIES_OUTPUT</B>
+<DD>If this variable is set, its value specifies how to output
+dependencies for Make based on the non-system header files processed
+by the compiler.  System header files are ignored in the dependency
+output.
+<BR><BR>
+The value of <CODE>DEPENDENCIES_OUTPUT</CODE> can be just a file name, in
+which case the Make rules are written to that file, guessing the target
+name from the source file name.  Or the value can have the form
+<CODE><I>file</I>&nbsp;<I>target</I></CODE>, in which case the rules are written to
+file <I>file</I> using <I>target</I> as the target name.
+<BR><BR>
+In other words, this environment variable is equivalent to combining
+the options <B>'-MM'</B> and <B>'-MF'</B>
+(see <A HREF="$$LINK(SEC11)">Options Controlling the Preprocessor</A>),
+with an optional <B>'-MT'</B> switch, too.
+<BR><BR>
+<DT><B>SUNPRO_DEPENDENCIES</B>
+<DD>This variable is the same as <CODE>DEPENDENCIES_OUTPUT</CODE> (see above),
+except that system header files are not ignored, so it implies
+<B>'-M'</B> rather than <B>'-MM'</B>
+(see <A HREF="$$LINK(SEC11)">Options Controlling the Preprocessor</A>).
+However, the dependence on the main input file is omitted.
+</DL>

+ 211 - 211
tigcc/doc/System/Info/comopts/SEC6.hss

@@ -1,211 +1,211 @@
-[Main]
-Title=Options Controlling C Dialect
-
-[Top]
-The following options control the dialect of C that the compiler accepts:
-<DL>
-<DT><B>-ansi</B>
-<DD>Support all ISO C89 programs.
-This turns off certain features of GCC that are incompatible with ISO C89,
-such as the <CODE>asm</CODE> and <CODE>typeof</CODE> keywords, and
-some predefined macros that identify the
-type of system you are using.  It also enables the undesirable and
-rarely used ISO trigraph feature, and disables recognition of C++ style
-<CODE>//</CODE> comments as well as the <CODE>inline</CODE> keyword.
-<BR><BR>
-The alternate keywords <CODE>__asm__</CODE>, <CODE>__extension__</CODE>,
-<CODE>__inline__</CODE> and <CODE>__typeof__</CODE> continue to work despite
-<B>'-ansi'</B>.  You would not want to use them in an ISO C program, of
-course, but it is useful to put them in header files that might be included
-in compilations done with <B>'-ansi'</B>.  Alternate predefined macros
-such as <CODE>__unix__</CODE> are also available, with or
-without <B>'-ansi'</B>.
-<BR><BR>
-The <B>'-ansi'</B> option does not cause non-ISO programs to be
-rejected gratuitously.  For that, <B>'-pedantic'</B> is required in
-addition to <B>'-ansi'</B>.  See <A HREF="$$LINK(SEC8)">Warning Options</A>.
-<BR><BR>
-The macro <CODE>__STRICT_ANSI__</CODE> is predefined when the <B>'-ansi'</B>
-option is used.  Some header files may notice this macro and refrain
-from declaring certain functions or defining certain macros that the
-ISO standard doesn't call for; this is to avoid interfering with any
-programs that might use these names for other things.
-<BR><BR>
-Functions which would normally be built in but do not have semantics
-defined by ISO C (such as <A HREF="$$LINK(alloc.h/alloca)">alloca</A>) are not built-in
-functions with <B>'-ansi'</B> is used.  See <A HREF="$$INFOLINK(gnuexts/SEC104)">Other
-built-in functions provided by GCC</A> for details of the functions
-affected.
-<BR><BR>
-<B>Note:</B> At the moment, the TIGCC library depends heavily on GNU C extensions,
-so you cannot use the <B>'-ansi'</B> switch in TIGCC.
-<BR><BR>
-<DT><B>-std=<I>standard</I></B>
-<DD>Determine the language standard.  A value for <I>standard</I> must be provided;
-provided; possible values are
-<BR><BR><DL>
-<DT><B>c89</B>
-<BR><B>iso9899:1990</B>
-<DD>ISO C90 (same as <B>'-ansi'</B>).
-<BR><BR>
-<DT><B>iso9899:199409</B>
-<DD>ISO C90 as modified in amendment 1.
-<BR><BR>
-<DT><B>c99</B>
-<BR><B>c9x</B>
-<BR><B>iso9899:1999</B>
-<BR><B>iso9899:199x</B>
-<DD>ISO C99.  Note that this standard is not yet fully supported; see
-<A HREF="http://gcc.gnu.org/gcc-3.3/c99status.html">http://gcc.gnu.org/gcc-3.3/c99status.html</A> for more information.  The
-names <CODE>c9x</CODE> and <CODE>iso9899:199x</CODE> are deprecated.
-<BR><BR>
-<DT><B>gnu89</B>
-<DD>Default, ISO C90 plus GNU extensions (including some C99 features).
-<BR><BR>
-<DT><B>gnu99</B>
-<BR><B>gnu9x</B>
-<DD>ISO C99 plus GNU extensions.  When ISO C99 is fully implemented in GCC,
-this will become the default.  The name <CODE>gnu9x</CODE> is deprecated.
-</DL><BR>
-Even when this option is not specified, you can still use some of the
-features of newer standards in so far as they do not conflict with
-previous C standards.  For example, you may use <CODE>__restrict__</CODE> even
-when <B>'-std=c99'</B> is not specified.
-<BR><BR>
-The <B>'-std'</B> options specifying some version of ISO C have the same
-effects as <B>'-ansi'</B>, except that features that were not in ISO C90
-but are in the specified version (for example, <CODE>//</CODE> comments and
-the <CODE>inline</CODE> keyword in ISO C99) are not disabled.
-<BR><BR>
-<DT><B>-aux-info <I>filename</I></B>
-<DD>Output to the given filename prototyped declarations for all functions
-declared and/or defined in a translation unit, including those in header
-files.  This option is silently ignored in any language other than C.
-<BR><BR>
-Besides declarations, the file indicates, in comments, the origin of
-each declaration (source file and line), whether the declaration was
-implicit, prototyped or unprototyped (<CODE>I</CODE>, <CODE>N</CODE> for new or
-<CODE>O</CODE> for old, respectively, in the first character after the line
-number and the colon), and whether it came from a declaration or a
-definition (<CODE>C</CODE> or <CODE>F</CODE>, respectively, in the following
-character).  In the case of function definitions, a K&amp;R-style list of
-arguments followed by their declarations is also provided, inside
-comments, after the declaration.
-<BR><BR>
-<DT><B>-fno-asm</B>
-<DD>Do not recognize <CODE>asm</CODE>, <CODE>inline</CODE> or <CODE>typeof</CODE> as a
-keyword, so that code can use these words as identifiers.  You can use
-the keywords <CODE>__asm__</CODE>, <CODE>__inline__</CODE> and <CODE>__typeof__</CODE>
-instead.  <B>'-ansi'</B> implies <B>'-fno-asm'</B>.
-<BR><BR>
-<DT><B>-fno-builtin</B>
-<BR><B>-fno-builtin-<I>function</I></B>
-<DD>Don't recognize built-in functions that do not begin with
-<CODE>__builtin_</CODE> as prefix.  See <A HREF="$$INFOLINK(gnuexts/SEC104)">Other built-in
-functions provided by GCC</A> for details of the functions affected,
-including those which are not built-in functions when <B>'-ansi'</B> or
-<B>'-std'</B> options for strict ISO C conformance are used because they
-do not have an ISO standard meaning.
-<BR><BR>
-GCC normally generates special code to handle certain built-in functions
-more efficiently; for instance, calls to <A HREF="$$LINK(alloc.h/alloca)">alloca</A> may become single
-instructions that adjust the stack directly.  The resulting code is often both smaller
-and faster, but since the function calls no longer appear as such, you
-cannot set a breakpoint on those calls, nor can you change the behavior
-of the functions by linking with a different library.
-<BR><BR>
-With the <B>'-fno-builtin-<I>function</I>'</B> option,
-only the built-in function <I>function</I> is
-disabled.  <I>function</I> must not begin with <CODE>__builtin_</CODE>.  If a
-function is named this is not built-in in this version of GCC, this
-option is ignored.  There is no corresponding
-<B>'-fbuiltin-<I>function</I>'</B> option; if you wish to enable
-built-in functions selectively when using <B>'-fno-builtin'</B> or
-<B>'-ffreestanding'</B>, you may define macros such as:
-<PRE>#define abs(n)          __builtin_abs ((n))
-#define strcpy(d, s)    __builtin_strcpy ((d), (s))
-</PRE>
-<DT><B>-fhosted</B>
-<DD>Assert that compilation takes place in a hosted environment.  This implies
-<B>'-fbuiltin'</B>.  A hosted environment is one in which the
-entire standard library is available, and in which <CODE>main</CODE> has a return
-type of <CODE>int</CODE>.  Examples are nearly everything except a kernel.
-This is equivalent to <B>'-fno-freestanding'</B>.
-<BR><BR>
-Although TI calculators are not really hosted environments, <B>'-fhosted'</B>
-is kept as the default.
-<BR><BR>
-<DT><B>-ffreestanding</B>
-<DD>Assert that compilation takes place in a freestanding environment.  This
-implies <B>'-fno-builtin'</B>.  A freestanding environment
-is one in which the standard library may not exist, and program startup may
-not necessarily be at <CODE>main</CODE>.  The most obvious example is an OS kernel.
-This is equivalent to <B>'-fno-hosted'</B>.
-<BR><BR>
-<DT><B>-fms-extensions</B>
-<DD>Accept some non-standard constructs used in Microsoft header files.
-<BR><BR>
-<DT><B>-trigraphs</B>
-<DD>Support ISO C trigraphs.  The <B>'-ansi'</B> option (and <B>'-std'</B>
-options for strict ISO C conformance) implies <B>'-trigraphs'</B>.
-See <A HREF="$$LINK(SEC11)">Options Controlling the Preprocessor</A> for more information.
-<BR><BR>
-<DT><B>-no-integrated-cpp</B>
-<DD>Performs a compilation in two passes: preprocessing and compiling.  This
-option allows a user supplied &quot;cc1&quot; via the
-<B>'-B'</B> option. The user supplied compilation step can then add in
-an additional preprocessing step after normal preprocessing but before
-compiling. The default is to use the integrated preprocessor.
-<BR><BR>
-The semantics of this option will change if &quot;cc1&quot;, &quot;cc1plus&quot;, and
-&quot;cc1obj&quot; are merged.
-<BR><BR>
-<DT><B>-traditional</B>
-<BR><B>-traditional-cpp</B>
-<DD>Formerly, these options caused GCC to attempt to emulate a pre-standard
-C compiler.  They are now only supported with the <B>'-E'</B> switch.
-The preprocessor continues to support a <A HREF="$$INFOLINK(CPP/SEC70)">pre-standard mode</A>.
-<BR><BR>
-<DT><B>-fcond-mismatch</B>
-<DD>Allow conditional expressions with mismatched types in the second and
-third arguments.  The value of such an expression is void.
-<BR><BR>
-<DT><B>-funsigned-char</B>
-<DD>Let the type <CODE><A HREF="$$INFOLINK(keywords/char)">char</A></CODE> be unsigned, like <CODE>unsigned&nbsp;char</CODE>.
-In TIGCC, the default is <CODE>signed char</CODE>.
-<BR><BR>
-Ideally, a portable program should always use <CODE>signed&nbsp;char</CODE> or
-<CODE>unsigned&nbsp;char</CODE> when it depends on the signedness of an object.
-But many programs have been written to use plain <CODE>char</CODE> and
-expect it to be signed, or expect it to be unsigned, depending on the
-machines they were written for.  This option, and its inverse, let you
-make such a program work with the opposite default.
-<BR><BR>
-The type <CODE>char</CODE> is always a distinct type from each of
-<CODE>signed&nbsp;char</CODE> or <CODE>unsigned&nbsp;char</CODE>, even though its behavior
-is always just like one of those two.
-<BR><BR>
-<DT><B>-fsigned-char</B>
-<DD>Let the type <CODE><A HREF="$$INFOLINK(keywords/char)">char</A></CODE> be signed, like <CODE>signed&nbsp;char</CODE>.
-<BR><BR>
-Note that this is equivalent to <B>'-fno-unsigned-char'</B>, which is
-the negative form of <B>'-funsigned-char'</B>.  Likewise, the option
-<B>'-fno-signed-char'</B> is equivalent to <B>'-funsigned-char'</B>.
-<BR><BR>
-<DT><B>-fsigned-bitfields</B>
-<BR><B>-funsigned-bitfields</B>
-<BR><B>-fno-signed-bitfields</B>
-<BR><B>-fno-unsigned-bitfields</B>
-<DD>These options control whether a bit-field is signed or unsigned, when the
-declaration does not use either <CODE>signed</CODE> or <CODE>unsigned</CODE>.  By
-default, such a bit-field is signed, because this is consistent: the
-basic integer types such as <CODE>int</CODE> are signed types.
-<BR><BR>
-<DT><B>-fwritable-strings</B>
-<DD>Store string constants in the writable data segment and don't uniquize
-them.  This is for compatibility with old programs which assume they can
-write into string constants.
-<BR><BR>
-Writing into string constants is a very bad idea; &quot;constants&quot; should
-be constant.
-</DL>
+[Main]
+Title=Options Controlling C Dialect
+
+[Top]
+The following options control the dialect of C that the compiler accepts:
+<DL>
+<DT><B>-ansi</B>
+<DD>Support all ISO C89 programs.
+This turns off certain features of GCC that are incompatible with ISO C89,
+such as the <CODE>asm</CODE> and <CODE>typeof</CODE> keywords, and
+some predefined macros that identify the
+type of system you are using.  It also enables the undesirable and
+rarely used ISO trigraph feature, and disables recognition of C++ style
+<CODE>//</CODE> comments as well as the <CODE>inline</CODE> keyword.
+<BR><BR>
+The alternate keywords <CODE>__asm__</CODE>, <CODE>__extension__</CODE>,
+<CODE>__inline__</CODE> and <CODE>__typeof__</CODE> continue to work despite
+<B>'-ansi'</B>.  You would not want to use them in an ISO C program, of
+course, but it is useful to put them in header files that might be included
+in compilations done with <B>'-ansi'</B>.  Alternate predefined macros
+such as <CODE>__unix__</CODE> are also available, with or
+without <B>'-ansi'</B>.
+<BR><BR>
+The <B>'-ansi'</B> option does not cause non-ISO programs to be
+rejected gratuitously.  For that, <B>'-pedantic'</B> is required in
+addition to <B>'-ansi'</B>.  See <A HREF="$$LINK(SEC8)">Warning Options</A>.
+<BR><BR>
+The macro <CODE>__STRICT_ANSI__</CODE> is predefined when the <B>'-ansi'</B>
+option is used.  Some header files may notice this macro and refrain
+from declaring certain functions or defining certain macros that the
+ISO standard doesn't call for; this is to avoid interfering with any
+programs that might use these names for other things.
+<BR><BR>
+Functions which would normally be built in but do not have semantics
+defined by ISO C (such as <A HREF="$$LINK(alloc.h/alloca)">alloca</A>) are not built-in
+functions with <B>'-ansi'</B> is used.  See <A HREF="$$INFOLINK(gnuexts/SEC104)">Other
+built-in functions provided by GCC</A> for details of the functions
+affected.
+<BR><BR>
+<B>Note:</B> At the moment, the TIGCC library depends heavily on GNU C extensions,
+so you cannot use the <B>'-ansi'</B> switch in TIGCC.
+<BR><BR>
+<DT><B>-std=<I>standard</I></B>
+<DD>Determine the language standard.  A value for <I>standard</I> must be provided;
+provided; possible values are
+<BR><BR><DL>
+<DT><B>c89</B>
+<BR><B>iso9899:1990</B>
+<DD>ISO C90 (same as <B>'-ansi'</B>).
+<BR><BR>
+<DT><B>iso9899:199409</B>
+<DD>ISO C90 as modified in amendment 1.
+<BR><BR>
+<DT><B>c99</B>
+<BR><B>c9x</B>
+<BR><B>iso9899:1999</B>
+<BR><B>iso9899:199x</B>
+<DD>ISO C99.  Note that this standard is not yet fully supported; see
+<A HREF="http://gcc.gnu.org/gcc-3.3/c99status.html">http://gcc.gnu.org/gcc-3.3/c99status.html</A> for more information.  The
+names <CODE>c9x</CODE> and <CODE>iso9899:199x</CODE> are deprecated.
+<BR><BR>
+<DT><B>gnu89</B>
+<DD>Default, ISO C90 plus GNU extensions (including some C99 features).
+<BR><BR>
+<DT><B>gnu99</B>
+<BR><B>gnu9x</B>
+<DD>ISO C99 plus GNU extensions.  When ISO C99 is fully implemented in GCC,
+this will become the default.  The name <CODE>gnu9x</CODE> is deprecated.
+</DL><BR>
+Even when this option is not specified, you can still use some of the
+features of newer standards in so far as they do not conflict with
+previous C standards.  For example, you may use <CODE>__restrict__</CODE> even
+when <B>'-std=c99'</B> is not specified.
+<BR><BR>
+The <B>'-std'</B> options specifying some version of ISO C have the same
+effects as <B>'-ansi'</B>, except that features that were not in ISO C90
+but are in the specified version (for example, <CODE>//</CODE> comments and
+the <CODE>inline</CODE> keyword in ISO C99) are not disabled.
+<BR><BR>
+<DT><B>-aux-info <I>filename</I></B>
+<DD>Output to the given filename prototyped declarations for all functions
+declared and/or defined in a translation unit, including those in header
+files.  This option is silently ignored in any language other than C.
+<BR><BR>
+Besides declarations, the file indicates, in comments, the origin of
+each declaration (source file and line), whether the declaration was
+implicit, prototyped or unprototyped (<CODE>I</CODE>, <CODE>N</CODE> for new or
+<CODE>O</CODE> for old, respectively, in the first character after the line
+number and the colon), and whether it came from a declaration or a
+definition (<CODE>C</CODE> or <CODE>F</CODE>, respectively, in the following
+character).  In the case of function definitions, a K&amp;R-style list of
+arguments followed by their declarations is also provided, inside
+comments, after the declaration.
+<BR><BR>
+<DT><B>-fno-asm</B>
+<DD>Do not recognize <CODE>asm</CODE>, <CODE>inline</CODE> or <CODE>typeof</CODE> as a
+keyword, so that code can use these words as identifiers.  You can use
+the keywords <CODE>__asm__</CODE>, <CODE>__inline__</CODE> and <CODE>__typeof__</CODE>
+instead.  <B>'-ansi'</B> implies <B>'-fno-asm'</B>.
+<BR><BR>
+<DT><B>-fno-builtin</B>
+<BR><B>-fno-builtin-<I>function</I></B>
+<DD>Don't recognize built-in functions that do not begin with
+<CODE>__builtin_</CODE> as prefix.  See <A HREF="$$INFOLINK(gnuexts/SEC104)">Other built-in
+functions provided by GCC</A> for details of the functions affected,
+including those which are not built-in functions when <B>'-ansi'</B> or
+<B>'-std'</B> options for strict ISO C conformance are used because they
+do not have an ISO standard meaning.
+<BR><BR>
+GCC normally generates special code to handle certain built-in functions
+more efficiently; for instance, calls to <A HREF="$$LINK(alloc.h/alloca)">alloca</A> may become single
+instructions that adjust the stack directly.  The resulting code is often both smaller
+and faster, but since the function calls no longer appear as such, you
+cannot set a breakpoint on those calls, nor can you change the behavior
+of the functions by linking with a different library.
+<BR><BR>
+With the <B>'-fno-builtin-<I>function</I>'</B> option,
+only the built-in function <I>function</I> is
+disabled.  <I>function</I> must not begin with <CODE>__builtin_</CODE>.  If a
+function is named this is not built-in in this version of GCC, this
+option is ignored.  There is no corresponding
+<B>'-fbuiltin-<I>function</I>'</B> option; if you wish to enable
+built-in functions selectively when using <B>'-fno-builtin'</B> or
+<B>'-ffreestanding'</B>, you may define macros such as:
+<PRE>#define abs(n)          __builtin_abs ((n))
+#define strcpy(d, s)    __builtin_strcpy ((d), (s))
+</PRE>
+<DT><B>-fhosted</B>
+<DD>Assert that compilation takes place in a hosted environment.  This implies
+<B>'-fbuiltin'</B>.  A hosted environment is one in which the
+entire standard library is available, and in which <CODE>main</CODE> has a return
+type of <CODE>int</CODE>.  Examples are nearly everything except a kernel.
+This is equivalent to <B>'-fno-freestanding'</B>.
+<BR><BR>
+Although TI calculators are not really hosted environments, <B>'-fhosted'</B>
+is kept as the default.
+<BR><BR>
+<DT><B>-ffreestanding</B>
+<DD>Assert that compilation takes place in a freestanding environment.  This
+implies <B>'-fno-builtin'</B>.  A freestanding environment
+is one in which the standard library may not exist, and program startup may
+not necessarily be at <CODE>main</CODE>.  The most obvious example is an OS kernel.
+This is equivalent to <B>'-fno-hosted'</B>.
+<BR><BR>
+<DT><B>-fms-extensions</B>
+<DD>Accept some non-standard constructs used in Microsoft header files.
+<BR><BR>
+<DT><B>-trigraphs</B>
+<DD>Support ISO C trigraphs.  The <B>'-ansi'</B> option (and <B>'-std'</B>
+options for strict ISO C conformance) implies <B>'-trigraphs'</B>.
+See <A HREF="$$LINK(SEC11)">Options Controlling the Preprocessor</A> for more information.
+<BR><BR>
+<DT><B>-no-integrated-cpp</B>
+<DD>Performs a compilation in two passes: preprocessing and compiling.  This
+option allows a user supplied &quot;cc1&quot; via the
+<B>'-B'</B> option. The user supplied compilation step can then add in
+an additional preprocessing step after normal preprocessing but before
+compiling. The default is to use the integrated preprocessor.
+<BR><BR>
+The semantics of this option will change if &quot;cc1&quot;, &quot;cc1plus&quot;, and
+&quot;cc1obj&quot; are merged.
+<BR><BR>
+<DT><B>-traditional</B>
+<BR><B>-traditional-cpp</B>
+<DD>Formerly, these options caused GCC to attempt to emulate a pre-standard
+C compiler.  They are now only supported with the <B>'-E'</B> switch.
+The preprocessor continues to support a <A HREF="$$INFOLINK(CPP/SEC70)">pre-standard mode</A>.
+<BR><BR>
+<DT><B>-fcond-mismatch</B>
+<DD>Allow conditional expressions with mismatched types in the second and
+third arguments.  The value of such an expression is void.
+<BR><BR>
+<DT><B>-funsigned-char</B>
+<DD>Let the type <CODE><A HREF="$$INFOLINK(keywords/char)">char</A></CODE> be unsigned, like <CODE>unsigned&nbsp;char</CODE>.
+In TIGCC, the default is <CODE>signed char</CODE>.
+<BR><BR>
+Ideally, a portable program should always use <CODE>signed&nbsp;char</CODE> or
+<CODE>unsigned&nbsp;char</CODE> when it depends on the signedness of an object.
+But many programs have been written to use plain <CODE>char</CODE> and
+expect it to be signed, or expect it to be unsigned, depending on the
+machines they were written for.  This option, and its inverse, let you
+make such a program work with the opposite default.
+<BR><BR>
+The type <CODE>char</CODE> is always a distinct type from each of
+<CODE>signed&nbsp;char</CODE> or <CODE>unsigned&nbsp;char</CODE>, even though its behavior
+is always just like one of those two.
+<BR><BR>
+<DT><B>-fsigned-char</B>
+<DD>Let the type <CODE><A HREF="$$INFOLINK(keywords/char)">char</A></CODE> be signed, like <CODE>signed&nbsp;char</CODE>.
+<BR><BR>
+Note that this is equivalent to <B>'-fno-unsigned-char'</B>, which is
+the negative form of <B>'-funsigned-char'</B>.  Likewise, the option
+<B>'-fno-signed-char'</B> is equivalent to <B>'-funsigned-char'</B>.
+<BR><BR>
+<DT><B>-fsigned-bitfields</B>
+<BR><B>-funsigned-bitfields</B>
+<BR><B>-fno-signed-bitfields</B>
+<BR><B>-fno-unsigned-bitfields</B>
+<DD>These options control whether a bit-field is signed or unsigned, when the
+declaration does not use either <CODE>signed</CODE> or <CODE>unsigned</CODE>.  By
+default, such a bit-field is signed, because this is consistent: the
+basic integer types such as <CODE>int</CODE> are signed types.
+<BR><BR>
+<DT><B>-fwritable-strings</B>
+<DD>Store string constants in the writable data segment and don't uniquize
+them.  This is for compatibility with old programs which assume they can
+write into string constants.
+<BR><BR>
+Writing into string constants is a very bad idea; &quot;constants&quot; should
+be constant.
+</DL>

+ 774 - 774
tigcc/doc/System/Info/comopts/SEC8.hss

@@ -1,774 +1,774 @@
-[Main]
-Title=Options to Request or Suppress Warnings
-
-[Top]
-Warnings are diagnostic messages that report constructions which
-are not inherently erroneous but which are risky or suggest there
-may have been an error.
-<BR><BR>
-You can request many specific warnings with options beginning <B>'-W'</B>,
-for example <B>'-Wimplicit'</B> to request warnings on implicit
-declarations.  Each of these specific warning options also has a
-negative form beginning <B>'-Wno-'</B> to turn off warnings;
-for example, <B>'-Wno-implicit'</B>.  This manual lists only one of the
-two forms, whichever is not the default.
-<BR><BR>
-The following options control the amount and kinds of warnings produced
-by GCC.
-<DL>
-<DT><B>-fsyntax-only</B>
-<DD>Check the code for syntax errors, but don't do anything beyond that.
-<BR><BR>
-<DT><B>-pedantic</B>
-<DD>Issue all the warnings demanded by strict ISO C;
-reject all programs that use forbidden extensions, and some other
-programs that do not follow ISO C.  This option follows the
-version of the ISO C standard specified by any <B>'-std'</B> option used.
-<BR><BR>
-Valid ISO C programs should compile properly with or without
-this option (though a rare few will require <B>'-ansi'</B> or a
-<B>'-std'</B> option specifying the required version of ISO C).  However,
-without this option, certain GNU extensions and traditional C
-features are supported as well.  With this option, they are rejected.
-<BR><BR>
-<B>'-pedantic'</B> does not cause warning messages for use of the
-alternate keywords whose names begin and end with <CODE>__</CODE>.  Pedantic
-warnings are also disabled in the expression that follows
-<CODE>__extension__</CODE>.  However, only system header files should use
-these escape routes; application programs should avoid them.
-See <A HREF="$$INFOLINK(gnuexts/SEC100)">Alternate Keywords</A>.
-<BR><BR>
-Some users try to use <B>'-pedantic'</B> to check programs for strict ISO
-C conformance.  They soon find that it does not do quite what they want:
-it finds some non-ISO practices, but not all - only those for which
-ISO C <I>requires</I> a diagnostic, and some others for which
-diagnostics have been added.
-<BR><BR>
-A feature to report any failure to conform to ISO C might be useful in
-some instances, but would require considerable additional work and would
-be quite different from <B>'-pedantic'</B>.  The GNU team doesn't have plans to
-support such a feature in the near future.
-<BR><BR>
-Where the standard specified with <B>'-std'</B> represents a GNU
-extended dialect of C, such as <CODE>gnu89</CODE> or <CODE>gnu99</CODE>, there is a
-corresponding <U>base standard</U>, the version of ISO C on which the GNU
-extended dialect is based.  Warnings from <B>'-pedantic'</B> are given
-where they are required by the base standard.  (It would not make sense
-for such warnings to be given only for features not in the specified GNU
-C dialect, since by definition the GNU dialects of C include all
-features the compiler supports with the given option, and there would be
-nothing to warn about.)
-<BR><BR>
-<DT><B>-pedantic-errors</B>
-<DD>Like <B>'-pedantic'</B>, except that errors are produced rather than
-warnings.
-<BR><BR>
-<DT><B>-w</B>
-<DD>Inhibit all warning messages.
-<BR><BR>
-<DT><B>-Wno-import</B>
-<DD>Inhibit warning messages about the use of <CODE><A HREF="$$INFOLINK(cpp/SEC84)">#import</A></CODE>.
-<BR><BR>
-<DT><B>-Wchar-subscripts</B>
-<DD>Warn if an array subscript has type <CODE><A HREF="$$INFOLINK(keywords/char)">char</A></CODE>.  This is a common cause
-of error, as programmers often forget that this type is signed on some
-machines.
-<BR><BR>
-<DT><B>-Wcomment</B>
-<DD>Warn whenever a comment-start sequence <CODE>/*</CODE> appears in a <CODE>/*</CODE>
-comment, or whenever a Backslash-Newline appears in a <CODE>//</CODE> comment.
-<BR><BR>
-<DT><B>-Wformat</B>
-<DD>Check calls to <A HREF="$$LINK(stdio.h/printf)">printf</A> and <A HREF="$$LINK(stdio.h/scanf)">scanf</A>, etc., to make sure that
-the arguments supplied have types appropriate to the format string
-specified, and that the conversions specified in the format string make
-sense.  This includes standard functions, and others specified by format
-attributes (see <A HREF="$$INFOLINK(gnuexts/SEC85_format)">format</A>).
-<BR><BR>
-Since <B>'-Wformat'</B> also checks for null format arguments for
-several functions, <B>'-Wformat'</B> also implies <B>'-Wnonnull'</B>.
-<BR><BR>
-<B>'-Wformat'</B> is included in <B>'-Wall'</B>.  For more control over some
-aspects of format checking, the options
-<B>'-Wno-format-extra-args'</B>, <B>'-Wno-format-zero-length'</B>,
-<B>'-Wformat-nonliteral'</B>, <B>'-Wformat-security'</B>, and
-<B>'-Wformat=2'</B> are available, but are not included in <B>'-Wall'</B>.
-<BR><BR>
-<DT><B>-Wno-format-extra-args</B>
-<DD>If <B>'-Wformat'</B> is specified, do not warn about excess arguments to a
-<A HREF="$$LINK(stdio.h/printf)">printf</A> or <A HREF="$$LINK(stdio.h/scanf)">scanf</A> format function.  The C standard specifies
-that such arguments are ignored.
-<BR><BR>
-<DT><B>-Wno-format-zero-length</B>
-<DD>If <B>'-Wformat'</B> is specified, do not warn about zero-length formats.
-The C standard specifies that zero-length formats are allowed.
-<BR><BR>
-<DT><B>-Wformat-nonliteral</B>
-<DD>If <B>'-Wformat'</B> is specified, also warn if the format string is not a
-string literal and so cannot be checked, unless the format function
-takes its format arguments as a <A HREF="$$LINK(stdarg.h/va_list)">va_list</A>.
-<BR><BR>
-<DT><B>-Wformat-security</B>
-<DD>If <B>'-Wformat'</B> is specified, also warn about uses of format
-functions that represent possible security problems.  At present, this
-warns about calls to <A HREF="$$LINK(stdio.h/printf)">printf</A> and <A HREF="$$LINK(stdio.h/scanf)">scanf</A> functions where the
-format string is not a string literal and there are no format arguments,
-as in <CODE>printf&nbsp;(foo);</CODE>.  This may be a security hole if the format
-string came from untrusted input and contains <CODE>%n</CODE>.  (This is
-currently a subset of what <B>'-Wformat-nonliteral'</B> warns about, but
-in future warnings may be added to <B>'-Wformat-security'</B> that are not
-included in <B>'-Wformat-nonliteral'</B>.)
-<BR><BR>
-<DT><B>-Wformat=2</B>
-<DD>Enable <B>'-Wformat'</B> plus format checks not included in
-<B>'-Wformat'</B>.  Currently equivalent to <B>'-Wformat
--Wformat-nonliteral -Wformat-security'</B>.
-<BR><BR>
-<DT><B>-Wnonnull</B>
-<DD>Enable warning about passing a null pointer for arguments marked as
-requiring a non-null value by the <CODE>nonnull</CODE> function attribute.
-<BR><BR>
-<B>'-Wnonnull'</B> is included in <B>'-Wall'</B> and <B>'-Wformat'</B>.  It
-can be disabled with the <B>'-Wno-nonnull'</B> option.
-<BR><BR>
-<DT><B>-Wimplicit-int</B>
-<DD>Warn when a declaration does not specify a type.
-<BR><BR>
-<DT><B>-Wimplicit-function-declaration</B>
-<BR><B>-Werror-implicit-function-declaration</B>
-<DD>Give a warning (or error) whenever a function is used before being
-declared.
-<BR><BR>
-<DT><B>-Wimplicit</B>
-<DD>Same as <B>'-Wimplicit-int -Wimplicit-function-declaration'</B>.
-<BR><BR>
-<DT><B>-Wmissing-braces</B>
-<DD>Warn if an aggregate or union initializer is not fully bracketed.  In
-the following example, the initializer for <CODE>a</CODE> is not fully
-bracketed, but that for <CODE>b</CODE> is fully bracketed.
-<PRE>int a[2][2] = { 0, 1, 2, 3 };
-int b[2][2] = { { 0, 1 }, { 2, 3 } };
-</PRE>
-<DT><B>-Wparentheses</B>
-<DD>Warn if parentheses are omitted in certain contexts, such
-as when there is an assignment in a context where a truth value
-is expected, or when operators are nested whose precedence people
-often get confused about.
-<BR><BR>
-Also warn about constructions where there may be confusion to which
-<CODE><A HREF="$$INFOLINK(keywords/if)">if</A></CODE> statement an <CODE><A HREF="$$INFOLINK(keywords/else)">else</A></CODE> branch belongs.  Here is an example of
-such a case:
-<PRE>{
-  if (a)
-    if (b)
-      foo ();
-  else
-    bar ();
-}
-</PRE>
-In C, every <CODE>else</CODE> branch belongs to the innermost possible <CODE>if</CODE>
-statement, which in this example is <CODE>if&nbsp;(b)</CODE>.  This is often not
-what the programmer expected, as illustrated in the above example by the
-indentation the programmer chose.  When there is the potential for this
-confusion, GCC will issue a warning when this flag is specified.
-To eliminate the warning, add explicit braces around the innermost
-<CODE>if</CODE> statement so there is no way the <CODE>else</CODE> could belong to
-the enclosing <CODE>if</CODE>.  The resulting code would look like this:
-<PRE>{
-  if (a)
-    {
-      if (b)
-        foo ();
-      else
-        bar ();
-    }
-}
-</PRE>
-<DT><B>-Wsequence-point</B>
-<DD>Warn about code that may have undefined semantics because of violations
-of sequence point rules in the C standard.
-<BR><BR>
-The C standard defines the order in which expressions in a C program are
-evaluated in terms of <U>sequence points</U>, which represent a partial
-ordering between the execution of parts of the program: those executed
-before the sequence point, and those executed after it.  These occur
-after the evaluation of a full expression (one which is not part of a
-larger expression), after the evaluation of the first operand of a
-<CODE>&amp;&amp;</CODE>, <CODE>||</CODE>, <CODE>?&nbsp;:</CODE> or <CODE>,</CODE> (comma) operator, before a
-function is called (but after the evaluation of its arguments and the
-expression denoting the called function), and in certain other places.
-Other than as expressed by the sequence point rules, the order of
-evaluation of subexpressions of an expression is not specified.  All
-these rules describe only a partial order rather than a total order,
-since, for example, if two functions are called within one expression
-with no sequence point between them, the order in which the functions
-are called is not specified.  However, the standards committee have
-ruled that function calls do not overlap.
-<BR><BR>
-It is not specified when between sequence points modifications to the
-values of objects take effect.  Programs whose behavior depends on this
-have undefined behavior; the C standard specifies that &quot;Between the
-previous and next sequence point an object shall have its stored value
-modified at most once by the evaluation of an expression.  Furthermore,
-the prior value shall be read only to determine the value to be
-stored.&quot;.  If a program breaks these rules, the results on any
-particular implementation are entirely unpredictable.
-<BR><BR>
-Examples of code with undefined behavior are <CODE>a&nbsp;=&nbsp;a++;</CODE>, <CODE>a[n]
-=&nbsp;b[n++]</CODE> and <CODE>a[i++]&nbsp;=&nbsp;i;</CODE>.  Some more complicated cases are not
-diagnosed by this option, and it may give an occasional false positive
-result, but in general it has been found fairly effective at detecting
-this sort of problem in programs.
-<BR><BR>
-The C standard is worded confusingly, therefore there is some debate
-over the precise meaning of the sequence point rules in subtle cases.
-Links to discussions of the problem, including proposed formal
-definitions, may be found on the GCC readings page, at
-<A HREF="http://gcc.gnu.org/readings.html">http://gcc.gnu.org/readings.html</A>.
-<BR><BR>
-<DT><B>-Wreturn-type</B>
-<DD>Warn whenever a function is defined with a return-type that defaults to
-<CODE><A HREF="$$INFOLINK(keywords/int)">int</A></CODE>.  Also warn about any <CODE>return</CODE> statement with no
-return-value in a function whose return-type is not <CODE><A HREF="$$INFOLINK(keywords/void)">void</A></CODE>.
-<BR><BR>
-<DT><B>-Wswitch</B>
-<DD>Warn whenever a <CODE><A HREF="$$INFOLINK(keywords/switch)">switch</A></CODE> statement has an index of enumeral type
-and lacks a <CODE><A HREF="$$INFOLINK(keywords/case)">case</A></CODE> for one or more of the named codes of that
-enumeration.  (The presence of a <CODE>default</CODE> label prevents this
-warning.)  <CODE>case</CODE> labels outside the enumeration range also
-provoke warnings when this option is used.
-<BR><BR>
-<DT><B>-Wswitch-default</B>
-<DD>Warn whenever a <CODE>switch</CODE> statement does not have a <CODE>default</CODE>
-case.
-<BR><BR>
-<DT><B>-Wswitch-enum</B>
-<DD>Warn whenever a <CODE>switch</CODE> statement has an index of enumeral type
-and lacks a <CODE>case</CODE> for one or more of the named codes of that
-enumeration.  <CODE>case</CODE> labels outside the enumeration range also
-provoke warnings when this option is used.
-<BR><BR>
-<DT><B>-Wtrigraphs</B>
-<DD>Warn if any trigraphs are encountered that might change the meaning of
-the program (trigraphs within comments are not warned about).
-For more information about trigraphs, see <A HREF="$$LINK(SEC11)">Options Controlling the Preprocessor</A>.
-<BR><BR>
-<DT><B>-Wunused-function</B>
-<DD>Warn whenever a static function is declared but not defined or a
-non\-inline static function is unused.
-<BR><BR>
-To suppress this warning, use the <CODE><A HREF="$$INFOLINK(gnuexts/SEC85_unused)">unused</A></CODE> attribute.
-<BR><BR>
-<DT><B>-Wunused-label</B>
-<DD>Warn whenever a label is declared but not used.
-<BR><BR>
-To suppress this warning, use the <CODE><A HREF="$$INFOLINK(gnuexts/SEC91_unused)">unused</A></CODE> attribute.
-<BR><BR>
-<DT><B>-Wunused-parameter</B>
-<DD>Warn whenever a function parameter is unused aside from its declaration.
-<BR><BR>
-To suppress this warning, use the <CODE><A HREF="$$INFOLINK(gnuexts/SEC91_unused)">unused</A></CODE> attribute.
-<BR><BR>
-<DT><B>-Wunused-variable</B>
-<DD>Warn whenever a local variable or non-constant static variable is unused
-aside from its declaration
-<BR><BR>
-To suppress this warning, use the <CODE><A HREF="$$INFOLINK(gnuexts/SEC91_unused)">unused</A></CODE> attribute.
-<BR><BR>
-<DT><B>-Wunused-value</B>
-<DD>Warn whenever a statement computes a result that is explicitly not used.
-<BR><BR>
-To suppress this warning, cast the expression to <CODE><A HREF="$$INFOLINK(keywords/void)">void</A></CODE>.
-<BR><BR>
-<DT><B>-Wunused</B>
-<DD>All the above <B>'-Wunused'</B> options combined.
-<BR><BR>
-In order to get a warning about an unused function parameter, you must
-either specify <B>'-W -Wunused'</B> or separately specify
-<B>'-Wunused-parameter'</B>.
-<BR><BR>
-<DT><B>-Wuninitialized</B>
-<DD>Warn if an automatic variable is used without first being initialized or
-if a variable may be clobbered by a <A HREF="$$LINK(setjmp.h/setjmp)">setjmp</A> call
-(I am not sure whether <A HREF="$$LINK(setjmp.h/setjmp)">setjmp</A> problems may be detected in TIGCC).
-<BR><BR>
-These warnings are possible only in optimizing compilation,
-because they require data flow information that is computed only
-when optimizing.  If you don't specify <B>'-O'</B>, you simply won't
-get these warnings.
-<BR><BR>
-These warnings occur only for variables that are candidates for
-register allocation.  Therefore, they do not occur for a variable that
-is declared <CODE><A HREF="$$INFOLINK(keywords/volatile)">volatile</A></CODE>, or whose address is taken, or whose size
-is other than 1, 2, 4 or 8 bytes.  Also, they do not occur for
-structures, unions or arrays, even when they are in registers.
-<BR><BR>
-Note that there may be no warning about a variable that is used only
-to compute a value that itself is never used, because such
-computations may be deleted by data flow analysis before the warnings
-are printed.
-<BR><BR>
-These warnings are made optional because GCC is not smart
-enough to see all the reasons why the code might be correct
-despite appearing to have an error.  Here is one example of how
-this can happen:
-<PRE>{
-  int x;
-  switch (y)
-    {
-    case 1: x = 1;
-      break;
-    case 2: x = 4;
-      break;
-    case 3: x = 5;
-    }
-  foo (x);
-}
-</PRE>
-If the value of <I>y</I> is always 1, 2 or 3, then <I>x</I> is
-always initialized, but GCC doesn't know this.  Here is
-another common case:
-<PRE>{
-  int save_y;
-  if (change_y) save_y = y, y = new_y;
-  ...
-  if (change_y) y = save_y;
-}
-</PRE>
-This has no bug because <I>save_y</I> is used only if it is set.
-<BR><BR>
-This option also warns when a non-volatile automatic variable might be
-changed by a call to <A HREF="$$LINK(setjmp.h/longjmp)">longjmp</A>.  These warnings as well are possible
-only in optimizing compilation
-(although I am not sure whether they can be caught at all in TIGCC).
-<BR><BR>
-The compiler sees only the calls to <A HREF="$$LINK(setjmp.h/setjmp)">setjmp</A>.  It cannot know
-where <A HREF="$$LINK(setjmp.h/longjmp)">longjmp</A> will be called; in fact, an interrupt handler could
-call it at any point in the code.  As a result, you may get a warning
-even when there is in fact no problem because <A HREF="$$LINK(setjmp.h/longjmp)">longjmp</A> cannot
-in fact be called at the place which would cause a problem.
-<BR><BR>
-Some spurious warnings can be avoided if you declare all the functions
-you use that never return as <A HREF="$$INFOLINK(gnuexts/SEC85_noreturn)">noreturn</A>.
-<BR><BR>
-<DT><B>-Wunknown-pragmas</B>
-<DD>Warn when a <CODE><A HREF="$$INFOLINK(cpp/SEC46)">#pragma</A></CODE> directive is encountered which is not understood by
-GCC.  If this command line option is used, warnings will even be issued
-for unknown pragmas in system header files.  This is not the case if
-the warnings were only enabled by the <B>'-Wall'</B> command line option.
-<BR><BR>
-<DT><B>-Wstrict-aliasing</B>
-<DD>This option is only active when <B>'-fstrict-aliasing'</B> is active.
-It warns about code which might break the strict aliasing rules that the
-compiler is using for optimization. The warning does not catch all
-cases, but does attempt to catch the more common pitfalls. It is
-included in <B>'-Wall'</B>.
-<BR><BR>
-<DT><B>-Wall</B>
-<DD>All of the above <B>'-W'</B> options combined.  This enables all the
-warnings about constructions that some users consider questionable, and
-that are easy to avoid (or modify to prevent the warning), even in
-conjunction with macros.
-</DL>
-The following <B>'-W...'</B> options are not implied by <B>'-Wall'</B>.
-Some of them warn about constructions that users generally do not
-consider questionable, but which occasionally you might wish to check
-for; others warn about constructions that are necessary or hard to avoid
-in some cases, and there is no simple way to modify the code to suppress
-the warning.
-<DL>
-<DT><B>-W</B>
-<DD>Print extra warning messages for these events:
-<UL>
-<LI>
-A function can return either with or without a value.  (Falling
-off the end of the function body is considered returning without
-a value.)  For example, this function would evoke such a
-warning:
-<PRE>foo (a)
-{
-  if (a &gt; 0)
-    return a;
-}
-</PRE>
-</LI>
-<LI>
-An expression-statement or the left-hand side of a comma expression
-contains no side effects.
-To suppress the warning, cast the unused expression to void.
-For example, an expression such as <CODE>x[i,j]</CODE> will cause a warning,
-but <CODE>x[(void)i,j]</CODE> will not.
-<BR><BR>
-</LI>
-<LI>
-An unsigned value is compared against zero with <CODE>&lt;</CODE> or <CODE>&lt;=</CODE>.
-<BR><BR>
-</LI>
-<LI>
-A comparison like <CODE>x&lt;=y&lt;=z</CODE> appears; this is equivalent to
-<CODE>(x&lt;=y&nbsp;?&nbsp;1&nbsp;:&nbsp;0)&nbsp;&lt;=&nbsp;z</CODE>, which is a different interpretation from
-that of ordinary mathematical notation.
-<BR><BR>
-</LI>
-<LI>
-Storage-class specifiers like <CODE>static</CODE> are not the first things in
-a declaration.  According to the C Standard, this usage is obsolescent.
-<BR><BR>
-</LI>
-<LI>
-The return type of a function has a type qualifier such as <CODE>const</CODE>.
-Such a type qualifier has no effect, since the value returned by a
-function is not an lvalue.  (But don't warn about the GNU extension of
-<CODE>volatile&nbsp;void</CODE> return types.  That extension will be warned about
-if <B>'-pedantic'</B> is specified.)
-<BR><BR>
-</LI>
-<LI>
-If <B>'-Wall'</B> or <B>'-Wunused'</B> is also specified, warn about unused
-arguments.
-<BR><BR>
-</LI>
-<LI>
-A comparison between signed and unsigned values could produce an
-incorrect result when the signed value is converted to unsigned.
-(But don't warn if <B>'-Wno-sign-compare'</B> is also specified.)
-<BR><BR>
-</LI>
-<LI>
-An aggregate has a partly bracketed initializer.
-For example, the following code would evoke such a warning,
-because braces are missing around the initializer for <I>x</I>.<I>h</I>:
-<PRE>struct s { int f, g; };
-struct t { struct s h; int i; };
-struct t x = { 1, 2, 3 };
-</PRE>
-</LI>
-<LI>
-An aggregate has an initializer which does not initialize all members.
-For example, the following code would cause such a warning, because
-<I>x</I>.<I>h</I> would be implicitly initialized to zero:
-<PRE>struct s { int f, g, h; };
-struct s x = { 3, 4 };
-</PRE>
-</LI>
-</UL>
-<DT><B>-Wno-div-by-zero</B>
-<DD>Do not warn about compile-time integer division by zero.  Floating point
-division by zero is not warned about, as it can be a legitimate way of
-obtaining infinities and NaNs.
-<BR><BR>
-<DT><B>-Wsystem-headers</B>
-<DD>Print warning messages for constructs found in system header files.
-Warnings from system headers are normally suppressed, on the assumption
-that they usually do not indicate real problems and would only make the
-compiler output harder to read.  Using this command line option tells
-GCC to emit warnings from system headers as if they occurred in user
-code.  However, note that using <B>'-Wall'</B> in conjunction with this
-option will <I>not</I> warn about unknown pragmas in system
-headers - for that, <B>'-Wunknown-pragmas'</B> must also be used.
-<BR><BR>
-Note that the TIGCC Library header files are not included as system header
-files.
-<BR><BR>
-<DT><B>-Wfloat-equal</B>
-<DD>Warn if floating point values are used in equality comparisons.
-<BR><BR>
-The idea behind this is that sometimes it is convenient (for the
-programmer) to consider floating-point values as approximations to
-infinitely precise real numbers.  If you are doing this, then you need
-to compute (by analyzing the code, or in some other way) the maximum or
-likely maximum error that the computation introduces, and allow for it
-when performing comparisons (and when producing output, but that's a
-different problem).  In particular, instead of testing for equality, you
-would check to see whether the two values have ranges that overlap; and
-this is done with the relational operators, so equality comparisons are
-probably mistaken.
-<BR><BR>
-<DT><B>-Wtraditional</B>
-<DD>Warn about certain constructs that behave differently in traditional and
-ISO C.  Also warn about ISO C constructs that have no traditional C
-equivalent, and/or problematic constructs which should be avoided.
-<UL>
-<LI>
-Macro parameters that appear within string literals in the macro body.
-In traditional C macro replacement takes place within string literals,
-but does not in ISO C.
-<BR><BR>
-</LI>
-<LI>
-In traditional C, some preprocessor directives did not exist.
-Traditional preprocessors would only consider a line to be a directive
-if the <CODE>#</CODE> appeared in column 1 on the line.  Therefore
-<B>'-Wtraditional'</B> warns about directives that traditional C
-understands but would ignore because the <CODE>#</CODE> does not appear as the
-first character on the line.  It also suggests you hide directives like
-<CODE><A HREF="$$INFOLINK(cpp/SEC46)">#pragma</A></CODE> not understood by traditional C by indenting them.  Some
-traditional implementations would not recognize <CODE><A HREF="$$INFOLINK(cpp/SEC36)">#elif</A></CODE>, so it
-suggests avoiding it altogether.
-<BR><BR>
-</LI>
-<LI>
-A function-like macro that appears without arguments.
-<BR><BR>
-</LI>
-<LI>
-The unary plus operator.
-<BR><BR>
-</LI>
-<LI>
-The <CODE>U</CODE> integer constant suffix, or the <CODE>F</CODE> or <CODE>L</CODE> floating point
-constant suffixes.  (Traditional C does support the <CODE>L</CODE> suffix on integer
-constants.)  Note, these suffixes appear in macros defined in <A HREF="$$LINK(limits.h/)">limits.h</A>,
-for example.
-<BR><BR>
-</LI>
-<LI>
-A function declared external in one block and then used after the end of
-the block.
-<BR><BR>
-</LI>
-<LI>
-A <CODE><A HREF="$$INFOLINK(keywords/switch)">switch</A></CODE> statement has an operand of type <CODE><A HREF="$$INFOLINK(keywords/long)">long</A></CODE>.
-<BR><BR>
-</LI>
-<LI>
-A non-<CODE><A HREF="$$INFOLINK(keywords/static)">static</A></CODE> function declaration follows a <CODE>static</CODE> one.
-This construct is not accepted by some traditional C compilers.
-<BR><BR>
-</LI>
-<LI>
-The ISO type of an integer constant has a different width or
-signedness from its traditional type.  This warning is only issued if
-the base of the constant is 10, i.e. hexadecimal or octal values, which
-typically represent bit patterns, are not warned about.
-<BR><BR>
-</LI>
-<LI>
-Usage of ISO string concatenation is detected.
-<BR><BR>
-</LI>
-<LI>
-Initialization of automatic aggregates.
-<BR><BR>
-</LI>
-<LI>
-Identifier conflicts with labels.  Traditional C lacks a separate
-namespace for labels.
-<BR><BR>
-</LI>
-<LI>
-Initialization of unions.  If the initializer is zero, the warning is
-omitted.  This is done under the assumption that the zero initializer in
-user code appears conditioned on e.g. <A HREF="$$INFOLINK(cpp/SEC15_STDC)">__STDC__</A> to avoid missing
-initializer warnings and relies on default initialization to zero in the
-traditional C case.
-<BR><BR>
-</LI>
-<LI>
-Conversions by prototypes between fixed/floating point values and vice
-versa.  The absence of these prototypes when compiling with traditional
-C would cause serious problems.  This is a subset of the possible
-conversion warnings, for the full set use <B>'-Wconversion'</B>.
-<BR><BR>
-</LI>
-<LI>
-Use of ISO C style function definitions.  This warning intentionally is
-<I>not</I> issued for prototype declarations or variadic functions
-because these ISO C features will appear in your code when using
-libiberty's traditional C compatibility macros, <CODE>PARAMS</CODE> and
-<CODE>VPARAMS</CODE>.  This warning is also bypassed for nested functions
-because that feature is already a gcc extension and thus not relevant to
-traditional C compatibility.
-</LI>
-</UL>
-<DT><B>-Wundef</B>
-<DD>Warn if an undefined identifier is evaluated in an <CODE>#if</CODE> directive.
-<BR><BR>
-<DT><B>-Wendif-labels</B>
-<DD>Warn whenever an <CODE>#else</CODE> or an <CODE>#endif</CODE> are followed by text.
-<BR><BR>
-<DT><B>-Wshadow</B>
-<DD>Warn whenever a local variable shadows another local variable, parameter or
-global variable or whenever a built-in function is shadowed.
-<BR><BR>
-<DT><B>-Wlarger-than-<I>len</I></B>
-<DD>Warn whenever an object of larger than <I>len</I> bytes is defined.
-<BR><BR>
-<DT><B>-Wpointer-arith</B>
-<DD>Warn about anything that depends on the &quot;size of&quot; a function type or
-of <CODE><A HREF="$$INFOLINK(keywords/void)">void</A></CODE>.  GNU C assigns these types a size of 1, for
-convenience in calculations with <CODE>void*</CODE> pointers and pointers
-to functions.
-<BR><BR>
-<DT><B>-Wbad-function-cast</B>
-<DD>Warn whenever a function call is cast to a non-matching type.
-For example, warn if <CODE>int&nbsp;malloc()</CODE> is cast to <CODE>anything&nbsp;*</CODE>.
-<BR><BR>
-<DT><B>-Wcast-qual</B>
-<DD>Warn whenever a pointer is cast so as to remove a type qualifier from
-the target type.  For example, warn if a <CODE>const&nbsp;char&nbsp;*</CODE> is cast
-to an ordinary <CODE>char&nbsp;*</CODE>.
-<BR><BR>
-<DT><B>-Wcast-align</B>
-<DD>Warn whenever a pointer is cast such that the required alignment of the
-target is increased.  For example, warn if a <CODE>char&nbsp;*</CODE> is cast to
-an <CODE>int&nbsp;*</CODE> on machines where integers can only be accessed at
-two- or four-byte boundaries.
-<BR><BR>
-<DT><B>-Wwrite-strings</B>
-<DD>When compiling C, give string constants the type <CODE>const
-char[<I>length</I>]</CODE> so that
-copying the address of one into a non-<CODE>const</CODE> <CODE>char&nbsp;*</CODE>
-pointer will get a warning; when compiling C++, warn about the
-deprecated conversion from string constants to <CODE>char&nbsp;*</CODE>.
-These warnings will help you find at
-compile time code that can try to write into a string constant, but
-only if you have been very careful about using <CODE>const</CODE> in
-declarations and prototypes.  Otherwise, it will just be a nuisance;
-this is why we did not make <B>'-Wall'</B> request these warnings.
-<BR><BR>
-<DT><B>-Wconversion</B>
-<DD>Warn if a prototype causes a type conversion that is different from what
-would happen to the same argument in the absence of a prototype.  This
-includes conversions of fixed point to floating and vice versa, and
-conversions changing the width or signedness of a fixed point argument
-except when the same as the default promotion.
-<BR><BR>
-Also, warn if a negative integer constant expression is implicitly
-converted to an unsigned type.  For example, warn about the assignment
-<CODE>x&nbsp;=&nbsp;-1</CODE> if <CODE>x</CODE> is unsigned.  But do not warn about explicit
-casts like <CODE>(unsigned)&nbsp;-1</CODE>.
-<BR><BR>
-<DT><B>-Wsign-compare</B>
-<DD>Warn when a comparison between signed and unsigned values could produce
-an incorrect result when the signed value is converted to unsigned.
-This warning is enabled by <B>'-W'</B>, and by <B>'-Wall'</B>
-in C++ only.
-<BR><BR>
-<DT><B>-Waggregate-return</B>
-<DD>Warn if any functions that return structures or unions are defined or
-called.
-<BR><BR>
-<DT><B>-Wstrict-prototypes</B>
-<DD>Warn if a function is declared or defined without specifying the
-argument types.  (An old-style function definition is permitted without
-a warning if preceded by a declaration which specifies the argument
-types.)
-<BR><BR>
-<DT><B>-Wmissing-prototypes</B>
-<DD>Warn if a global function is defined without a previous prototype
-declaration.  This warning is issued even if the definition itself
-provides a prototype.  The aim is to detect global functions that fail
-to be declared in header files.
-<BR><BR>
-<DT><B>-Wmissing-declarations (C only)</B>
-<DD>Warn if a global function is defined without a previous declaration.
-Do so even if the definition itself provides a prototype.
-Use this option to detect global functions that are not declared in
-header files.
-<BR><BR>
-<DT><B>-Wmissing-noreturn</B>
-<DD>Warn about functions which might be candidates for attribute <A HREF="$$INFOLINK(gnuexts/SEC85_noreturn)">noreturn</A>.
-Note these are only possible candidates, not absolute ones.  Care should
-be taken to manually verify functions actually do not ever return before
-adding the <A HREF="$$INFOLINK(gnuexts/SEC85_noreturn)">noreturn</A> attribute, otherwise subtle code generation
-bugs could be introduced.
-<BR><BR>
-<DT><B>-Wmissing-format-attribute</B>
-<DD>If <B>'-Wformat'</B> is enabled, also warn about functions which might be
-candidates for <A HREF="$$INFOLINK(gnuexts/SEC85_format)">format</A> attributes.  Note these are only possible
-candidates, not absolute ones.  GCC will guess that <A HREF="$$INFOLINK(gnuexts/SEC85_format)">format</A>
-attributes might be appropriate for any function that calls a function
-like <A HREF="$$LINK(stdio.h/vprintf)">vprintf</A> or <A HREF="$$LINK(stdio.h/vscanf)">vscanf</A>, but this might not always be the
-case, and some functions for which <A HREF="$$INFOLINK(gnuexts/SEC85_format)">format</A> attributes are
-appropriate may not be detected.  This option has no effect unless
-<B>'-Wformat'</B> is enabled (possibly by <B>'-Wall'</B>).
-<BR><BR>
-<DT><B>-Wno-multichar</B>
-<DD>Do not warn if a multicharacter constant (<CODE>'FOOF'</CODE>) is used.
-Usually they indicate a typo in the user's code, as they have
-implementation-defined values, and should not be used in portable code.
-<BR><BR>
-<DT><B>-Wno-deprecated-declarations</B>
-<DD>Do not warn about uses of functions, variables, and types marked as
-deprecated by using the <A HREF="$$INFOLINK(gnuexts/SEC85_deprecated)">deprecated</A> attribute.
-<BR><BR>
-<DT><B>-Wpacked</B>
-<DD>Warn if a structure is given the <A HREF="$$INFOLINK(gnuexts/SEC92_packed)">packed</A> attribute, but the <A HREF="$$INFOLINK(gnuexts/SEC92_packed)">packed</A>
-attribute has no effect on the layout or size of the structure.
-Such structures may be mis-aligned for little benefit.  For
-instance, in this code, the variable <I>f</I>.<I>x</I> in <CODE>struct&nbsp;bar</CODE>
-will be misaligned even though <CODE>struct&nbsp;bar</CODE> does not itself
-have the packed attribute:
-<PRE>struct foo {
-  int x;
-  char a, b, c, d;
-} __attribute__((packed));
-struct bar {
-  char z;
-  struct foo f;
-};
-</PRE>
-<DT><B>-Wpadded</B>
-<DD>Warn if padding is included in a structure, either to align an element
-of the structure or to align the whole structure.  Sometimes when this
-happens it is possible to rearrange the fields of the structure to
-reduce the padding and so make the structure smaller.
-<BR><BR>
-<DT><B>-Wredundant-decls</B>
-<DD>Warn if anything is declared more than once in the same scope, even in
-cases where multiple declaration is valid and changes nothing.
-<BR><BR>
-<DT><B>-Wnested-externs</B>
-<DD>Warn if an <CODE><A HREF="$$INFOLINK(keywords/extern)">extern</A></CODE> declaration is encountered within a function.
-<BR><BR>
-<DT><B>-Wunreachable-code</B>
-<DD>Warn if the compiler detects that code will never be executed.
-<BR><BR>
-This option is intended to warn when the compiler detects that at
-least a whole line of source code will never be executed, because
-some condition is never satisfied or because it is after a
-procedure that never returns.
-<BR><BR>
-It is possible for this option to produce a warning even though there
-are circumstances under which part of the affected line can be executed,
-so care should be taken when removing apparently-unreachable code.
-<BR><BR>
-For instance, when a function is inlined, a warning may mean that the
-line is unreachable in only one inlined copy of the function.
-<BR><BR>
-This option is not made part of <B>'-Wall'</B> because in a debugging
-version of a program there is often substantial code which checks
-correct functioning of the program and is, hopefully, unreachable
-because the program does work.  Another common use of unreachable
-code is to provide behavior which is selectable at compile-time.
-<BR><BR>
-<DT><B>-Winline</B>
-<DD>Warn if a function can not be inlined and it was declared as inline.
-Even with this option, the compiler will not warn about failures to
-inline functions declared in system headers.
-<BR><BR>
-The compiler uses a variety of heuristics to determine whether or not
-to inline a function.  For example, the compiler takes into account
-the size of the function being inlined and the the amount of inlining
-that has already been done in the current function.  Therefore,
-seemingly insignificant changes in the source program can cause the
-warnings produced by <B>'-Winline'</B> to appear or disappear.
-<BR><BR>
-<DT><B>-Wlong-long</B>
-<DD>Warn if <CODE>long&nbsp;long</CODE> type is used.  This is default.  To inhibit
-the warning messages, use <B>'-Wno-long-long'</B>.  Flags
-<B>'-Wlong-long'</B> and <B>'-Wno-long-long'</B> are taken into account
-only when <B>'-pedantic'</B> flag is used.
-<BR><BR>
-<DT><B>-Wdisabled-optimization</B>
-<DD>Warn if a requested optimization pass is disabled.  This warning does
-not generally indicate that there is anything wrong with your code; it
-merely indicates that GCC's optimizers were unable to handle the code
-effectively.  Often, the problem is that your code is too big or too
-complex; GCC will refuse to optimize programs when the optimization
-itself is likely to take inordinate amounts of time.
-<BR><BR>
-<DT><B>-Werror</B>
-<DD>Make all warnings into errors.
-</DL>
+[Main]
+Title=Options to Request or Suppress Warnings
+
+[Top]
+Warnings are diagnostic messages that report constructions which
+are not inherently erroneous but which are risky or suggest there
+may have been an error.
+<BR><BR>
+You can request many specific warnings with options beginning <B>'-W'</B>,
+for example <B>'-Wimplicit'</B> to request warnings on implicit
+declarations.  Each of these specific warning options also has a
+negative form beginning <B>'-Wno-'</B> to turn off warnings;
+for example, <B>'-Wno-implicit'</B>.  This manual lists only one of the
+two forms, whichever is not the default.
+<BR><BR>
+The following options control the amount and kinds of warnings produced
+by GCC.
+<DL>
+<DT><B>-fsyntax-only</B>
+<DD>Check the code for syntax errors, but don't do anything beyond that.
+<BR><BR>
+<DT><B>-pedantic</B>
+<DD>Issue all the warnings demanded by strict ISO C;
+reject all programs that use forbidden extensions, and some other
+programs that do not follow ISO C.  This option follows the
+version of the ISO C standard specified by any <B>'-std'</B> option used.
+<BR><BR>
+Valid ISO C programs should compile properly with or without
+this option (though a rare few will require <B>'-ansi'</B> or a
+<B>'-std'</B> option specifying the required version of ISO C).  However,
+without this option, certain GNU extensions and traditional C
+features are supported as well.  With this option, they are rejected.
+<BR><BR>
+<B>'-pedantic'</B> does not cause warning messages for use of the
+alternate keywords whose names begin and end with <CODE>__</CODE>.  Pedantic
+warnings are also disabled in the expression that follows
+<CODE>__extension__</CODE>.  However, only system header files should use
+these escape routes; application programs should avoid them.
+See <A HREF="$$INFOLINK(gnuexts/SEC100)">Alternate Keywords</A>.
+<BR><BR>
+Some users try to use <B>'-pedantic'</B> to check programs for strict ISO
+C conformance.  They soon find that it does not do quite what they want:
+it finds some non-ISO practices, but not all - only those for which
+ISO C <I>requires</I> a diagnostic, and some others for which
+diagnostics have been added.
+<BR><BR>
+A feature to report any failure to conform to ISO C might be useful in
+some instances, but would require considerable additional work and would
+be quite different from <B>'-pedantic'</B>.  The GNU team doesn't have plans to
+support such a feature in the near future.
+<BR><BR>
+Where the standard specified with <B>'-std'</B> represents a GNU
+extended dialect of C, such as <CODE>gnu89</CODE> or <CODE>gnu99</CODE>, there is a
+corresponding <U>base standard</U>, the version of ISO C on which the GNU
+extended dialect is based.  Warnings from <B>'-pedantic'</B> are given
+where they are required by the base standard.  (It would not make sense
+for such warnings to be given only for features not in the specified GNU
+C dialect, since by definition the GNU dialects of C include all
+features the compiler supports with the given option, and there would be
+nothing to warn about.)
+<BR><BR>
+<DT><B>-pedantic-errors</B>
+<DD>Like <B>'-pedantic'</B>, except that errors are produced rather than
+warnings.
+<BR><BR>
+<DT><B>-w</B>
+<DD>Inhibit all warning messages.
+<BR><BR>
+<DT><B>-Wno-import</B>
+<DD>Inhibit warning messages about the use of <CODE><A HREF="$$INFOLINK(cpp/SEC84)">#import</A></CODE>.
+<BR><BR>
+<DT><B>-Wchar-subscripts</B>
+<DD>Warn if an array subscript has type <CODE><A HREF="$$INFOLINK(keywords/char)">char</A></CODE>.  This is a common cause
+of error, as programmers often forget that this type is signed on some
+machines.
+<BR><BR>
+<DT><B>-Wcomment</B>
+<DD>Warn whenever a comment-start sequence <CODE>/*</CODE> appears in a <CODE>/*</CODE>
+comment, or whenever a Backslash-Newline appears in a <CODE>//</CODE> comment.
+<BR><BR>
+<DT><B>-Wformat</B>
+<DD>Check calls to <A HREF="$$LINK(stdio.h/printf)">printf</A> and <A HREF="$$LINK(stdio.h/scanf)">scanf</A>, etc., to make sure that
+the arguments supplied have types appropriate to the format string
+specified, and that the conversions specified in the format string make
+sense.  This includes standard functions, and others specified by format
+attributes (see <A HREF="$$INFOLINK(gnuexts/SEC85_format)">format</A>).
+<BR><BR>
+Since <B>'-Wformat'</B> also checks for null format arguments for
+several functions, <B>'-Wformat'</B> also implies <B>'-Wnonnull'</B>.
+<BR><BR>
+<B>'-Wformat'</B> is included in <B>'-Wall'</B>.  For more control over some
+aspects of format checking, the options
+<B>'-Wno-format-extra-args'</B>, <B>'-Wno-format-zero-length'</B>,
+<B>'-Wformat-nonliteral'</B>, <B>'-Wformat-security'</B>, and
+<B>'-Wformat=2'</B> are available, but are not included in <B>'-Wall'</B>.
+<BR><BR>
+<DT><B>-Wno-format-extra-args</B>
+<DD>If <B>'-Wformat'</B> is specified, do not warn about excess arguments to a
+<A HREF="$$LINK(stdio.h/printf)">printf</A> or <A HREF="$$LINK(stdio.h/scanf)">scanf</A> format function.  The C standard specifies
+that such arguments are ignored.
+<BR><BR>
+<DT><B>-Wno-format-zero-length</B>
+<DD>If <B>'-Wformat'</B> is specified, do not warn about zero-length formats.
+The C standard specifies that zero-length formats are allowed.
+<BR><BR>
+<DT><B>-Wformat-nonliteral</B>
+<DD>If <B>'-Wformat'</B> is specified, also warn if the format string is not a
+string literal and so cannot be checked, unless the format function
+takes its format arguments as a <A HREF="$$LINK(stdarg.h/va_list)">va_list</A>.
+<BR><BR>
+<DT><B>-Wformat-security</B>
+<DD>If <B>'-Wformat'</B> is specified, also warn about uses of format
+functions that represent possible security problems.  At present, this
+warns about calls to <A HREF="$$LINK(stdio.h/printf)">printf</A> and <A HREF="$$LINK(stdio.h/scanf)">scanf</A> functions where the
+format string is not a string literal and there are no format arguments,
+as in <CODE>printf&nbsp;(foo);</CODE>.  This may be a security hole if the format
+string came from untrusted input and contains <CODE>%n</CODE>.  (This is
+currently a subset of what <B>'-Wformat-nonliteral'</B> warns about, but
+in future warnings may be added to <B>'-Wformat-security'</B> that are not
+included in <B>'-Wformat-nonliteral'</B>.)
+<BR><BR>
+<DT><B>-Wformat=2</B>
+<DD>Enable <B>'-Wformat'</B> plus format checks not included in
+<B>'-Wformat'</B>.  Currently equivalent to <B>'-Wformat
+-Wformat-nonliteral -Wformat-security'</B>.
+<BR><BR>
+<DT><B>-Wnonnull</B>
+<DD>Enable warning about passing a null pointer for arguments marked as
+requiring a non-null value by the <CODE>nonnull</CODE> function attribute.
+<BR><BR>
+<B>'-Wnonnull'</B> is included in <B>'-Wall'</B> and <B>'-Wformat'</B>.  It
+can be disabled with the <B>'-Wno-nonnull'</B> option.
+<BR><BR>
+<DT><B>-Wimplicit-int</B>
+<DD>Warn when a declaration does not specify a type.
+<BR><BR>
+<DT><B>-Wimplicit-function-declaration</B>
+<BR><B>-Werror-implicit-function-declaration</B>
+<DD>Give a warning (or error) whenever a function is used before being
+declared.
+<BR><BR>
+<DT><B>-Wimplicit</B>
+<DD>Same as <B>'-Wimplicit-int -Wimplicit-function-declaration'</B>.
+<BR><BR>
+<DT><B>-Wmissing-braces</B>
+<DD>Warn if an aggregate or union initializer is not fully bracketed.  In
+the following example, the initializer for <CODE>a</CODE> is not fully
+bracketed, but that for <CODE>b</CODE> is fully bracketed.
+<PRE>int a[2][2] = { 0, 1, 2, 3 };
+int b[2][2] = { { 0, 1 }, { 2, 3 } };
+</PRE>
+<DT><B>-Wparentheses</B>
+<DD>Warn if parentheses are omitted in certain contexts, such
+as when there is an assignment in a context where a truth value
+is expected, or when operators are nested whose precedence people
+often get confused about.
+<BR><BR>
+Also warn about constructions where there may be confusion to which
+<CODE><A HREF="$$INFOLINK(keywords/if)">if</A></CODE> statement an <CODE><A HREF="$$INFOLINK(keywords/else)">else</A></CODE> branch belongs.  Here is an example of
+such a case:
+<PRE>{
+  if (a)
+    if (b)
+      foo ();
+  else
+    bar ();
+}
+</PRE>
+In C, every <CODE>else</CODE> branch belongs to the innermost possible <CODE>if</CODE>
+statement, which in this example is <CODE>if&nbsp;(b)</CODE>.  This is often not
+what the programmer expected, as illustrated in the above example by the
+indentation the programmer chose.  When there is the potential for this
+confusion, GCC will issue a warning when this flag is specified.
+To eliminate the warning, add explicit braces around the innermost
+<CODE>if</CODE> statement so there is no way the <CODE>else</CODE> could belong to
+the enclosing <CODE>if</CODE>.  The resulting code would look like this:
+<PRE>{
+  if (a)
+    {
+      if (b)
+        foo ();
+      else
+        bar ();
+    }
+}
+</PRE>
+<DT><B>-Wsequence-point</B>
+<DD>Warn about code that may have undefined semantics because of violations
+of sequence point rules in the C standard.
+<BR><BR>
+The C standard defines the order in which expressions in a C program are
+evaluated in terms of <U>sequence points</U>, which represent a partial
+ordering between the execution of parts of the program: those executed
+before the sequence point, and those executed after it.  These occur
+after the evaluation of a full expression (one which is not part of a
+larger expression), after the evaluation of the first operand of a
+<CODE>&amp;&amp;</CODE>, <CODE>||</CODE>, <CODE>?&nbsp;:</CODE> or <CODE>,</CODE> (comma) operator, before a
+function is called (but after the evaluation of its arguments and the
+expression denoting the called function), and in certain other places.
+Other than as expressed by the sequence point rules, the order of
+evaluation of subexpressions of an expression is not specified.  All
+these rules describe only a partial order rather than a total order,
+since, for example, if two functions are called within one expression
+with no sequence point between them, the order in which the functions
+are called is not specified.  However, the standards committee have
+ruled that function calls do not overlap.
+<BR><BR>
+It is not specified when between sequence points modifications to the
+values of objects take effect.  Programs whose behavior depends on this
+have undefined behavior; the C standard specifies that &quot;Between the
+previous and next sequence point an object shall have its stored value
+modified at most once by the evaluation of an expression.  Furthermore,
+the prior value shall be read only to determine the value to be
+stored.&quot;.  If a program breaks these rules, the results on any
+particular implementation are entirely unpredictable.
+<BR><BR>
+Examples of code with undefined behavior are <CODE>a&nbsp;=&nbsp;a++;</CODE>, <CODE>a[n]
+=&nbsp;b[n++]</CODE> and <CODE>a[i++]&nbsp;=&nbsp;i;</CODE>.  Some more complicated cases are not
+diagnosed by this option, and it may give an occasional false positive
+result, but in general it has been found fairly effective at detecting
+this sort of problem in programs.
+<BR><BR>
+The C standard is worded confusingly, therefore there is some debate
+over the precise meaning of the sequence point rules in subtle cases.
+Links to discussions of the problem, including proposed formal
+definitions, may be found on the GCC readings page, at
+<A HREF="http://gcc.gnu.org/readings.html">http://gcc.gnu.org/readings.html</A>.
+<BR><BR>
+<DT><B>-Wreturn-type</B>
+<DD>Warn whenever a function is defined with a return-type that defaults to
+<CODE><A HREF="$$INFOLINK(keywords/int)">int</A></CODE>.  Also warn about any <CODE>return</CODE> statement with no
+return-value in a function whose return-type is not <CODE><A HREF="$$INFOLINK(keywords/void)">void</A></CODE>.
+<BR><BR>
+<DT><B>-Wswitch</B>
+<DD>Warn whenever a <CODE><A HREF="$$INFOLINK(keywords/switch)">switch</A></CODE> statement has an index of enumeral type
+and lacks a <CODE><A HREF="$$INFOLINK(keywords/case)">case</A></CODE> for one or more of the named codes of that
+enumeration.  (The presence of a <CODE>default</CODE> label prevents this
+warning.)  <CODE>case</CODE> labels outside the enumeration range also
+provoke warnings when this option is used.
+<BR><BR>
+<DT><B>-Wswitch-default</B>
+<DD>Warn whenever a <CODE>switch</CODE> statement does not have a <CODE>default</CODE>
+case.
+<BR><BR>
+<DT><B>-Wswitch-enum</B>
+<DD>Warn whenever a <CODE>switch</CODE> statement has an index of enumeral type
+and lacks a <CODE>case</CODE> for one or more of the named codes of that
+enumeration.  <CODE>case</CODE> labels outside the enumeration range also
+provoke warnings when this option is used.
+<BR><BR>
+<DT><B>-Wtrigraphs</B>
+<DD>Warn if any trigraphs are encountered that might change the meaning of
+the program (trigraphs within comments are not warned about).
+For more information about trigraphs, see <A HREF="$$LINK(SEC11)">Options Controlling the Preprocessor</A>.
+<BR><BR>
+<DT><B>-Wunused-function</B>
+<DD>Warn whenever a static function is declared but not defined or a
+non\-inline static function is unused.
+<BR><BR>
+To suppress this warning, use the <CODE><A HREF="$$INFOLINK(gnuexts/SEC85_unused)">unused</A></CODE> attribute.
+<BR><BR>
+<DT><B>-Wunused-label</B>
+<DD>Warn whenever a label is declared but not used.
+<BR><BR>
+To suppress this warning, use the <CODE><A HREF="$$INFOLINK(gnuexts/SEC91_unused)">unused</A></CODE> attribute.
+<BR><BR>
+<DT><B>-Wunused-parameter</B>
+<DD>Warn whenever a function parameter is unused aside from its declaration.
+<BR><BR>
+To suppress this warning, use the <CODE><A HREF="$$INFOLINK(gnuexts/SEC91_unused)">unused</A></CODE> attribute.
+<BR><BR>
+<DT><B>-Wunused-variable</B>
+<DD>Warn whenever a local variable or non-constant static variable is unused
+aside from its declaration
+<BR><BR>
+To suppress this warning, use the <CODE><A HREF="$$INFOLINK(gnuexts/SEC91_unused)">unused</A></CODE> attribute.
+<BR><BR>
+<DT><B>-Wunused-value</B>
+<DD>Warn whenever a statement computes a result that is explicitly not used.
+<BR><BR>
+To suppress this warning, cast the expression to <CODE><A HREF="$$INFOLINK(keywords/void)">void</A></CODE>.
+<BR><BR>
+<DT><B>-Wunused</B>
+<DD>All the above <B>'-Wunused'</B> options combined.
+<BR><BR>
+In order to get a warning about an unused function parameter, you must
+either specify <B>'-W -Wunused'</B> or separately specify
+<B>'-Wunused-parameter'</B>.
+<BR><BR>
+<DT><B>-Wuninitialized</B>
+<DD>Warn if an automatic variable is used without first being initialized or
+if a variable may be clobbered by a <A HREF="$$LINK(setjmp.h/setjmp)">setjmp</A> call
+(I am not sure whether <A HREF="$$LINK(setjmp.h/setjmp)">setjmp</A> problems may be detected in TIGCC).
+<BR><BR>
+These warnings are possible only in optimizing compilation,
+because they require data flow information that is computed only
+when optimizing.  If you don't specify <B>'-O'</B>, you simply won't
+get these warnings.
+<BR><BR>
+These warnings occur only for variables that are candidates for
+register allocation.  Therefore, they do not occur for a variable that
+is declared <CODE><A HREF="$$INFOLINK(keywords/volatile)">volatile</A></CODE>, or whose address is taken, or whose size
+is other than 1, 2, 4 or 8 bytes.  Also, they do not occur for
+structures, unions or arrays, even when they are in registers.
+<BR><BR>
+Note that there may be no warning about a variable that is used only
+to compute a value that itself is never used, because such
+computations may be deleted by data flow analysis before the warnings
+are printed.
+<BR><BR>
+These warnings are made optional because GCC is not smart
+enough to see all the reasons why the code might be correct
+despite appearing to have an error.  Here is one example of how
+this can happen:
+<PRE>{
+  int x;
+  switch (y)
+    {
+    case 1: x = 1;
+      break;
+    case 2: x = 4;
+      break;
+    case 3: x = 5;
+    }
+  foo (x);
+}
+</PRE>
+If the value of <I>y</I> is always 1, 2 or 3, then <I>x</I> is
+always initialized, but GCC doesn't know this.  Here is
+another common case:
+<PRE>{
+  int save_y;
+  if (change_y) save_y = y, y = new_y;
+  ...
+  if (change_y) y = save_y;
+}
+</PRE>
+This has no bug because <I>save_y</I> is used only if it is set.
+<BR><BR>
+This option also warns when a non-volatile automatic variable might be
+changed by a call to <A HREF="$$LINK(setjmp.h/longjmp)">longjmp</A>.  These warnings as well are possible
+only in optimizing compilation
+(although I am not sure whether they can be caught at all in TIGCC).
+<BR><BR>
+The compiler sees only the calls to <A HREF="$$LINK(setjmp.h/setjmp)">setjmp</A>.  It cannot know
+where <A HREF="$$LINK(setjmp.h/longjmp)">longjmp</A> will be called; in fact, an interrupt handler could
+call it at any point in the code.  As a result, you may get a warning
+even when there is in fact no problem because <A HREF="$$LINK(setjmp.h/longjmp)">longjmp</A> cannot
+in fact be called at the place which would cause a problem.
+<BR><BR>
+Some spurious warnings can be avoided if you declare all the functions
+you use that never return as <A HREF="$$INFOLINK(gnuexts/SEC85_noreturn)">noreturn</A>.
+<BR><BR>
+<DT><B>-Wunknown-pragmas</B>
+<DD>Warn when a <CODE><A HREF="$$INFOLINK(cpp/SEC46)">#pragma</A></CODE> directive is encountered which is not understood by
+GCC.  If this command line option is used, warnings will even be issued
+for unknown pragmas in system header files.  This is not the case if
+the warnings were only enabled by the <B>'-Wall'</B> command line option.
+<BR><BR>
+<DT><B>-Wstrict-aliasing</B>
+<DD>This option is only active when <B>'-fstrict-aliasing'</B> is active.
+It warns about code which might break the strict aliasing rules that the
+compiler is using for optimization. The warning does not catch all
+cases, but does attempt to catch the more common pitfalls. It is
+included in <B>'-Wall'</B>.
+<BR><BR>
+<DT><B>-Wall</B>
+<DD>All of the above <B>'-W'</B> options combined.  This enables all the
+warnings about constructions that some users consider questionable, and
+that are easy to avoid (or modify to prevent the warning), even in
+conjunction with macros.
+</DL>
+The following <B>'-W...'</B> options are not implied by <B>'-Wall'</B>.
+Some of them warn about constructions that users generally do not
+consider questionable, but which occasionally you might wish to check
+for; others warn about constructions that are necessary or hard to avoid
+in some cases, and there is no simple way to modify the code to suppress
+the warning.
+<DL>
+<DT><B>-W</B>
+<DD>Print extra warning messages for these events:
+<UL>
+<LI>
+A function can return either with or without a value.  (Falling
+off the end of the function body is considered returning without
+a value.)  For example, this function would evoke such a
+warning:
+<PRE>foo (a)
+{
+  if (a &gt; 0)
+    return a;
+}
+</PRE>
+</LI>
+<LI>
+An expression-statement or the left-hand side of a comma expression
+contains no side effects.
+To suppress the warning, cast the unused expression to void.
+For example, an expression such as <CODE>x[i,j]</CODE> will cause a warning,
+but <CODE>x[(void)i,j]</CODE> will not.
+<BR><BR>
+</LI>
+<LI>
+An unsigned value is compared against zero with <CODE>&lt;</CODE> or <CODE>&lt;=</CODE>.
+<BR><BR>
+</LI>
+<LI>
+A comparison like <CODE>x&lt;=y&lt;=z</CODE> appears; this is equivalent to
+<CODE>(x&lt;=y&nbsp;?&nbsp;1&nbsp;:&nbsp;0)&nbsp;&lt;=&nbsp;z</CODE>, which is a different interpretation from
+that of ordinary mathematical notation.
+<BR><BR>
+</LI>
+<LI>
+Storage-class specifiers like <CODE>static</CODE> are not the first things in
+a declaration.  According to the C Standard, this usage is obsolescent.
+<BR><BR>
+</LI>
+<LI>
+The return type of a function has a type qualifier such as <CODE>const</CODE>.
+Such a type qualifier has no effect, since the value returned by a
+function is not an lvalue.  (But don't warn about the GNU extension of
+<CODE>volatile&nbsp;void</CODE> return types.  That extension will be warned about
+if <B>'-pedantic'</B> is specified.)
+<BR><BR>
+</LI>
+<LI>
+If <B>'-Wall'</B> or <B>'-Wunused'</B> is also specified, warn about unused
+arguments.
+<BR><BR>
+</LI>
+<LI>
+A comparison between signed and unsigned values could produce an
+incorrect result when the signed value is converted to unsigned.
+(But don't warn if <B>'-Wno-sign-compare'</B> is also specified.)
+<BR><BR>
+</LI>
+<LI>
+An aggregate has a partly bracketed initializer.
+For example, the following code would evoke such a warning,
+because braces are missing around the initializer for <I>x</I>.<I>h</I>:
+<PRE>struct s { int f, g; };
+struct t { struct s h; int i; };
+struct t x = { 1, 2, 3 };
+</PRE>
+</LI>
+<LI>
+An aggregate has an initializer which does not initialize all members.
+For example, the following code would cause such a warning, because
+<I>x</I>.<I>h</I> would be implicitly initialized to zero:
+<PRE>struct s { int f, g, h; };
+struct s x = { 3, 4 };
+</PRE>
+</LI>
+</UL>
+<DT><B>-Wno-div-by-zero</B>
+<DD>Do not warn about compile-time integer division by zero.  Floating point
+division by zero is not warned about, as it can be a legitimate way of
+obtaining infinities and NaNs.
+<BR><BR>
+<DT><B>-Wsystem-headers</B>
+<DD>Print warning messages for constructs found in system header files.
+Warnings from system headers are normally suppressed, on the assumption
+that they usually do not indicate real problems and would only make the
+compiler output harder to read.  Using this command line option tells
+GCC to emit warnings from system headers as if they occurred in user
+code.  However, note that using <B>'-Wall'</B> in conjunction with this
+option will <I>not</I> warn about unknown pragmas in system
+headers - for that, <B>'-Wunknown-pragmas'</B> must also be used.
+<BR><BR>
+Note that the TIGCC Library header files are not included as system header
+files.
+<BR><BR>
+<DT><B>-Wfloat-equal</B>
+<DD>Warn if floating point values are used in equality comparisons.
+<BR><BR>
+The idea behind this is that sometimes it is convenient (for the
+programmer) to consider floating-point values as approximations to
+infinitely precise real numbers.  If you are doing this, then you need
+to compute (by analyzing the code, or in some other way) the maximum or
+likely maximum error that the computation introduces, and allow for it
+when performing comparisons (and when producing output, but that's a
+different problem).  In particular, instead of testing for equality, you
+would check to see whether the two values have ranges that overlap; and
+this is done with the relational operators, so equality comparisons are
+probably mistaken.
+<BR><BR>
+<DT><B>-Wtraditional</B>
+<DD>Warn about certain constructs that behave differently in traditional and
+ISO C.  Also warn about ISO C constructs that have no traditional C
+equivalent, and/or problematic constructs which should be avoided.
+<UL>
+<LI>
+Macro parameters that appear within string literals in the macro body.
+In traditional C macro replacement takes place within string literals,
+but does not in ISO C.
+<BR><BR>
+</LI>
+<LI>
+In traditional C, some preprocessor directives did not exist.
+Traditional preprocessors would only consider a line to be a directive
+if the <CODE>#</CODE> appeared in column 1 on the line.  Therefore
+<B>'-Wtraditional'</B> warns about directives that traditional C
+understands but would ignore because the <CODE>#</CODE> does not appear as the
+first character on the line.  It also suggests you hide directives like
+<CODE><A HREF="$$INFOLINK(cpp/SEC46)">#pragma</A></CODE> not understood by traditional C by indenting them.  Some
+traditional implementations would not recognize <CODE><A HREF="$$INFOLINK(cpp/SEC36)">#elif</A></CODE>, so it
+suggests avoiding it altogether.
+<BR><BR>
+</LI>
+<LI>
+A function-like macro that appears without arguments.
+<BR><BR>
+</LI>
+<LI>
+The unary plus operator.
+<BR><BR>
+</LI>
+<LI>
+The <CODE>U</CODE> integer constant suffix, or the <CODE>F</CODE> or <CODE>L</CODE> floating point
+constant suffixes.  (Traditional C does support the <CODE>L</CODE> suffix on integer
+constants.)  Note, these suffixes appear in macros defined in <A HREF="$$LINK(limits.h/)">limits.h</A>,
+for example.
+<BR><BR>
+</LI>
+<LI>
+A function declared external in one block and then used after the end of
+the block.
+<BR><BR>
+</LI>
+<LI>
+A <CODE><A HREF="$$INFOLINK(keywords/switch)">switch</A></CODE> statement has an operand of type <CODE><A HREF="$$INFOLINK(keywords/long)">long</A></CODE>.
+<BR><BR>
+</LI>
+<LI>
+A non-<CODE><A HREF="$$INFOLINK(keywords/static)">static</A></CODE> function declaration follows a <CODE>static</CODE> one.
+This construct is not accepted by some traditional C compilers.
+<BR><BR>
+</LI>
+<LI>
+The ISO type of an integer constant has a different width or
+signedness from its traditional type.  This warning is only issued if
+the base of the constant is 10, i.e. hexadecimal or octal values, which
+typically represent bit patterns, are not warned about.
+<BR><BR>
+</LI>
+<LI>
+Usage of ISO string concatenation is detected.
+<BR><BR>
+</LI>
+<LI>
+Initialization of automatic aggregates.
+<BR><BR>
+</LI>
+<LI>
+Identifier conflicts with labels.  Traditional C lacks a separate
+namespace for labels.
+<BR><BR>
+</LI>
+<LI>
+Initialization of unions.  If the initializer is zero, the warning is
+omitted.  This is done under the assumption that the zero initializer in
+user code appears conditioned on e.g. <A HREF="$$INFOLINK(cpp/SEC15_STDC)">__STDC__</A> to avoid missing
+initializer warnings and relies on default initialization to zero in the
+traditional C case.
+<BR><BR>
+</LI>
+<LI>
+Conversions by prototypes between fixed/floating point values and vice
+versa.  The absence of these prototypes when compiling with traditional
+C would cause serious problems.  This is a subset of the possible
+conversion warnings, for the full set use <B>'-Wconversion'</B>.
+<BR><BR>
+</LI>
+<LI>
+Use of ISO C style function definitions.  This warning intentionally is
+<I>not</I> issued for prototype declarations or variadic functions
+because these ISO C features will appear in your code when using
+libiberty's traditional C compatibility macros, <CODE>PARAMS</CODE> and
+<CODE>VPARAMS</CODE>.  This warning is also bypassed for nested functions
+because that feature is already a gcc extension and thus not relevant to
+traditional C compatibility.
+</LI>
+</UL>
+<DT><B>-Wundef</B>
+<DD>Warn if an undefined identifier is evaluated in an <CODE>#if</CODE> directive.
+<BR><BR>
+<DT><B>-Wendif-labels</B>
+<DD>Warn whenever an <CODE>#else</CODE> or an <CODE>#endif</CODE> are followed by text.
+<BR><BR>
+<DT><B>-Wshadow</B>
+<DD>Warn whenever a local variable shadows another local variable, parameter or
+global variable or whenever a built-in function is shadowed.
+<BR><BR>
+<DT><B>-Wlarger-than-<I>len</I></B>
+<DD>Warn whenever an object of larger than <I>len</I> bytes is defined.
+<BR><BR>
+<DT><B>-Wpointer-arith</B>
+<DD>Warn about anything that depends on the &quot;size of&quot; a function type or
+of <CODE><A HREF="$$INFOLINK(keywords/void)">void</A></CODE>.  GNU C assigns these types a size of 1, for
+convenience in calculations with <CODE>void*</CODE> pointers and pointers
+to functions.
+<BR><BR>
+<DT><B>-Wbad-function-cast</B>
+<DD>Warn whenever a function call is cast to a non-matching type.
+For example, warn if <CODE>int&nbsp;malloc()</CODE> is cast to <CODE>anything&nbsp;*</CODE>.
+<BR><BR>
+<DT><B>-Wcast-qual</B>
+<DD>Warn whenever a pointer is cast so as to remove a type qualifier from
+the target type.  For example, warn if a <CODE>const&nbsp;char&nbsp;*</CODE> is cast
+to an ordinary <CODE>char&nbsp;*</CODE>.
+<BR><BR>
+<DT><B>-Wcast-align</B>
+<DD>Warn whenever a pointer is cast such that the required alignment of the
+target is increased.  For example, warn if a <CODE>char&nbsp;*</CODE> is cast to
+an <CODE>int&nbsp;*</CODE> on machines where integers can only be accessed at
+two- or four-byte boundaries.
+<BR><BR>
+<DT><B>-Wwrite-strings</B>
+<DD>When compiling C, give string constants the type <CODE>const
+char[<I>length</I>]</CODE> so that
+copying the address of one into a non-<CODE>const</CODE> <CODE>char&nbsp;*</CODE>
+pointer will get a warning; when compiling C++, warn about the
+deprecated conversion from string constants to <CODE>char&nbsp;*</CODE>.
+These warnings will help you find at
+compile time code that can try to write into a string constant, but
+only if you have been very careful about using <CODE>const</CODE> in
+declarations and prototypes.  Otherwise, it will just be a nuisance;
+this is why we did not make <B>'-Wall'</B> request these warnings.
+<BR><BR>
+<DT><B>-Wconversion</B>
+<DD>Warn if a prototype causes a type conversion that is different from what
+would happen to the same argument in the absence of a prototype.  This
+includes conversions of fixed point to floating and vice versa, and
+conversions changing the width or signedness of a fixed point argument
+except when the same as the default promotion.
+<BR><BR>
+Also, warn if a negative integer constant expression is implicitly
+converted to an unsigned type.  For example, warn about the assignment
+<CODE>x&nbsp;=&nbsp;-1</CODE> if <CODE>x</CODE> is unsigned.  But do not warn about explicit
+casts like <CODE>(unsigned)&nbsp;-1</CODE>.
+<BR><BR>
+<DT><B>-Wsign-compare</B>
+<DD>Warn when a comparison between signed and unsigned values could produce
+an incorrect result when the signed value is converted to unsigned.
+This warning is enabled by <B>'-W'</B>, and by <B>'-Wall'</B>
+in C++ only.
+<BR><BR>
+<DT><B>-Waggregate-return</B>
+<DD>Warn if any functions that return structures or unions are defined or
+called.
+<BR><BR>
+<DT><B>-Wstrict-prototypes</B>
+<DD>Warn if a function is declared or defined without specifying the
+argument types.  (An old-style function definition is permitted without
+a warning if preceded by a declaration which specifies the argument
+types.)
+<BR><BR>
+<DT><B>-Wmissing-prototypes</B>
+<DD>Warn if a global function is defined without a previous prototype
+declaration.  This warning is issued even if the definition itself
+provides a prototype.  The aim is to detect global functions that fail
+to be declared in header files.
+<BR><BR>
+<DT><B>-Wmissing-declarations (C only)</B>
+<DD>Warn if a global function is defined without a previous declaration.
+Do so even if the definition itself provides a prototype.
+Use this option to detect global functions that are not declared in
+header files.
+<BR><BR>
+<DT><B>-Wmissing-noreturn</B>
+<DD>Warn about functions which might be candidates for attribute <A HREF="$$INFOLINK(gnuexts/SEC85_noreturn)">noreturn</A>.
+Note these are only possible candidates, not absolute ones.  Care should
+be taken to manually verify functions actually do not ever return before
+adding the <A HREF="$$INFOLINK(gnuexts/SEC85_noreturn)">noreturn</A> attribute, otherwise subtle code generation
+bugs could be introduced.
+<BR><BR>
+<DT><B>-Wmissing-format-attribute</B>
+<DD>If <B>'-Wformat'</B> is enabled, also warn about functions which might be
+candidates for <A HREF="$$INFOLINK(gnuexts/SEC85_format)">format</A> attributes.  Note these are only possible
+candidates, not absolute ones.  GCC will guess that <A HREF="$$INFOLINK(gnuexts/SEC85_format)">format</A>
+attributes might be appropriate for any function that calls a function
+like <A HREF="$$LINK(stdio.h/vprintf)">vprintf</A> or <A HREF="$$LINK(stdio.h/vscanf)">vscanf</A>, but this might not always be the
+case, and some functions for which <A HREF="$$INFOLINK(gnuexts/SEC85_format)">format</A> attributes are
+appropriate may not be detected.  This option has no effect unless
+<B>'-Wformat'</B> is enabled (possibly by <B>'-Wall'</B>).
+<BR><BR>
+<DT><B>-Wno-multichar</B>
+<DD>Do not warn if a multicharacter constant (<CODE>'FOOF'</CODE>) is used.
+Usually they indicate a typo in the user's code, as they have
+implementation-defined values, and should not be used in portable code.
+<BR><BR>
+<DT><B>-Wno-deprecated-declarations</B>
+<DD>Do not warn about uses of functions, variables, and types marked as
+deprecated by using the <A HREF="$$INFOLINK(gnuexts/SEC85_deprecated)">deprecated</A> attribute.
+<BR><BR>
+<DT><B>-Wpacked</B>
+<DD>Warn if a structure is given the <A HREF="$$INFOLINK(gnuexts/SEC92_packed)">packed</A> attribute, but the <A HREF="$$INFOLINK(gnuexts/SEC92_packed)">packed</A>
+attribute has no effect on the layout or size of the structure.
+Such structures may be mis-aligned for little benefit.  For
+instance, in this code, the variable <I>f</I>.<I>x</I> in <CODE>struct&nbsp;bar</CODE>
+will be misaligned even though <CODE>struct&nbsp;bar</CODE> does not itself
+have the packed attribute:
+<PRE>struct foo {
+  int x;
+  char a, b, c, d;
+} __attribute__((packed));
+struct bar {
+  char z;
+  struct foo f;
+};
+</PRE>
+<DT><B>-Wpadded</B>
+<DD>Warn if padding is included in a structure, either to align an element
+of the structure or to align the whole structure.  Sometimes when this
+happens it is possible to rearrange the fields of the structure to
+reduce the padding and so make the structure smaller.
+<BR><BR>
+<DT><B>-Wredundant-decls</B>
+<DD>Warn if anything is declared more than once in the same scope, even in
+cases where multiple declaration is valid and changes nothing.
+<BR><BR>
+<DT><B>-Wnested-externs</B>
+<DD>Warn if an <CODE><A HREF="$$INFOLINK(keywords/extern)">extern</A></CODE> declaration is encountered within a function.
+<BR><BR>
+<DT><B>-Wunreachable-code</B>
+<DD>Warn if the compiler detects that code will never be executed.
+<BR><BR>
+This option is intended to warn when the compiler detects that at
+least a whole line of source code will never be executed, because
+some condition is never satisfied or because it is after a
+procedure that never returns.
+<BR><BR>
+It is possible for this option to produce a warning even though there
+are circumstances under which part of the affected line can be executed,
+so care should be taken when removing apparently-unreachable code.
+<BR><BR>
+For instance, when a function is inlined, a warning may mean that the
+line is unreachable in only one inlined copy of the function.
+<BR><BR>
+This option is not made part of <B>'-Wall'</B> because in a debugging
+version of a program there is often substantial code which checks
+correct functioning of the program and is, hopefully, unreachable
+because the program does work.  Another common use of unreachable
+code is to provide behavior which is selectable at compile-time.
+<BR><BR>
+<DT><B>-Winline</B>
+<DD>Warn if a function can not be inlined and it was declared as inline.
+Even with this option, the compiler will not warn about failures to
+inline functions declared in system headers.
+<BR><BR>
+The compiler uses a variety of heuristics to determine whether or not
+to inline a function.  For example, the compiler takes into account
+the size of the function being inlined and the the amount of inlining
+that has already been done in the current function.  Therefore,
+seemingly insignificant changes in the source program can cause the
+warnings produced by <B>'-Winline'</B> to appear or disappear.
+<BR><BR>
+<DT><B>-Wlong-long</B>
+<DD>Warn if <CODE>long&nbsp;long</CODE> type is used.  This is default.  To inhibit
+the warning messages, use <B>'-Wno-long-long'</B>.  Flags
+<B>'-Wlong-long'</B> and <B>'-Wno-long-long'</B> are taken into account
+only when <B>'-pedantic'</B> flag is used.
+<BR><BR>
+<DT><B>-Wdisabled-optimization</B>
+<DD>Warn if a requested optimization pass is disabled.  This warning does
+not generally indicate that there is anything wrong with your code; it
+merely indicates that GCC's optimizers were unable to handle the code
+effectively.  Often, the problem is that your code is too big or too
+complex; GCC will refuse to optimize programs when the optimization
+itself is likely to take inordinate amounts of time.
+<BR><BR>
+<DT><B>-Werror</B>
+<DD>Make all warnings into errors.
+</DL>

+ 93 - 93
tigcc/doc/System/Info/comopts/SEC9.hss

@@ -1,93 +1,93 @@
-[Main]
-Title=Options for Debugging Your Program
-
-[Top]
-GCC has various special options that are used for debugging
-either your program or GCC.
-However, this manual is not meant to explain anything about the internals of
-GCC, so you will have to go to the
-<A HREF="http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html">official version</A>
-of this page on the internet if you want to debug GCC itself.
-<BR><BR>
-In order to debug TIGCC programs, you need a GDB-enabled version of the
-TiEmu emulator.
-<DL>
-<DT><B>-g</B>
-<DD>Produce debugging information in the operating system's native format
-(stabs is the default for the MC68000).  GDB can work with this debugging
-information.
-Note that the <CODE>tigcc</CODE> frontend defaults to DWARF 2 debugging
-information instead, see <A HREF="$$LINK(SEC3)">Options Available in the
-Command Line Compiler</A>.
-<BR><BR>
-Unlike most other C compilers, GCC allows you to use <B>'-g'</B> with
-<B>'-O'</B>.  The shortcuts taken by optimized code may occasionally
-produce surprising results: some variables you declared may not exist
-at all; flow of control may briefly move where you did not expect it;
-some statements may not be executed because they compute constant
-results or their values were already at hand; some statements may
-execute in different places because they were moved out of loops.
-<BR><BR>
-Nevertheless it proves possible to debug optimized output.  This makes
-it reasonable to use the optimizer for programs that might have bugs.
-<BR><BR>
-The following options are useful when GCC is generated with the
-capability for more than one debugging format.
-<BR><BR>
-<DT><B>-ggdb</B>
-<DD>Produce debugging information for use by GDB.  This means to use the
-most expressive format available, including GDB extensions if at all
-possible.
-<BR><BR>
-<DT><B>-gstabs</B>
-<DD>Produce debugging information in stabs format.
-<BR><BR>
-<DT><B>-gstabs+</B>
-<DD>Produce debugging information in stabs format,
-using GNU extensions understood only by the GNU debugger (GDB).
-<BR><BR>
-<DT><B>-gcoff</B>
-<DD>Produce debugging information in COFF format.
-<BR><BR>
-<DT><B>-g<I>level</I></B>
-<BR><B>-ggdb<I>level</I></B>
-<BR><B>-gstabs<I>level</I></B>
-<BR><B>-gcoff<I>level</I></B>
-<DD>Request debugging information and also use <I>level</I> to specify how
-much information.  The default level is 2.
-<BR><BR>
-Level 1 produces minimal information, enough for making backtraces in
-parts of the program that you don't plan to debug.  This includes
-descriptions of functions and external variables, but no information
-about local variables and no line numbers.
-<BR><BR>
-Level 3 includes extra information, such as all the macro definitions
-present in the program.  Some debuggers support macro expansion when
-you use <B>'-g3'</B>.
-<BR><BR>
-<DT><B>-p</B>
-<DD>Generate extra code to write profile information suitable for the
-analysis program <CODE>prof</CODE>.  You must use this option when compiling
-the source files you want data about, and you must also use it when
-linking.
-This option is probably useless in TIGCC.
-<BR><BR>
-<DT><B>-pg</B>
-<DD>Generate extra code to write profile information suitable for the
-analysis program <CODE>gprof</CODE>.  You must use this option when compiling
-the source files you want data about, and you must also use it when
-linking.
-This option is probably useless in TIGCC.
-<BR><BR>
-<DT><B>-Q</B>
-<DD>Makes the compiler print out each function name as it is compiled, and
-print some statistics about each pass when it finishes.
-<BR><BR>
-<DT><B>-save-temps</B>
-<DD>Store the usual &quot;temporary&quot; intermediate files permanently; place them
-in the current directory and name them based on the source file.  Thus,
-compiling <CODE>foo.c</CODE> with <B>'-c -save-temps'</B> would produce files
-<CODE>foo.i</CODE> and <CODE>foo.s</CODE>, as well as <CODE>foo.o</CODE>.  This creates a
-preprocessed <CODE>foo.i</CODE> output file even though the compiler now
-normally uses an integrated preprocessor.
-</DL>
+[Main]
+Title=Options for Debugging Your Program
+
+[Top]
+GCC has various special options that are used for debugging
+either your program or GCC.
+However, this manual is not meant to explain anything about the internals of
+GCC, so you will have to go to the
+<A HREF="http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html">official version</A>
+of this page on the internet if you want to debug GCC itself.
+<BR><BR>
+In order to debug TIGCC programs, you need a GDB-enabled version of the
+TiEmu emulator.
+<DL>
+<DT><B>-g</B>
+<DD>Produce debugging information in the operating system's native format
+(stabs is the default for the MC68000).  GDB can work with this debugging
+information.
+Note that the <CODE>tigcc</CODE> frontend defaults to DWARF 2 debugging
+information instead, see <A HREF="$$LINK(SEC3)">Options Available in the
+Command Line Compiler</A>.
+<BR><BR>
+Unlike most other C compilers, GCC allows you to use <B>'-g'</B> with
+<B>'-O'</B>.  The shortcuts taken by optimized code may occasionally
+produce surprising results: some variables you declared may not exist
+at all; flow of control may briefly move where you did not expect it;
+some statements may not be executed because they compute constant
+results or their values were already at hand; some statements may
+execute in different places because they were moved out of loops.
+<BR><BR>
+Nevertheless it proves possible to debug optimized output.  This makes
+it reasonable to use the optimizer for programs that might have bugs.
+<BR><BR>
+The following options are useful when GCC is generated with the
+capability for more than one debugging format.
+<BR><BR>
+<DT><B>-ggdb</B>
+<DD>Produce debugging information for use by GDB.  This means to use the
+most expressive format available, including GDB extensions if at all
+possible.
+<BR><BR>
+<DT><B>-gstabs</B>
+<DD>Produce debugging information in stabs format.
+<BR><BR>
+<DT><B>-gstabs+</B>
+<DD>Produce debugging information in stabs format,
+using GNU extensions understood only by the GNU debugger (GDB).
+<BR><BR>
+<DT><B>-gcoff</B>
+<DD>Produce debugging information in COFF format.
+<BR><BR>
+<DT><B>-g<I>level</I></B>
+<BR><B>-ggdb<I>level</I></B>
+<BR><B>-gstabs<I>level</I></B>
+<BR><B>-gcoff<I>level</I></B>
+<DD>Request debugging information and also use <I>level</I> to specify how
+much information.  The default level is 2.
+<BR><BR>
+Level 1 produces minimal information, enough for making backtraces in
+parts of the program that you don't plan to debug.  This includes
+descriptions of functions and external variables, but no information
+about local variables and no line numbers.
+<BR><BR>
+Level 3 includes extra information, such as all the macro definitions
+present in the program.  Some debuggers support macro expansion when
+you use <B>'-g3'</B>.
+<BR><BR>
+<DT><B>-p</B>
+<DD>Generate extra code to write profile information suitable for the
+analysis program <CODE>prof</CODE>.  You must use this option when compiling
+the source files you want data about, and you must also use it when
+linking.
+This option is probably useless in TIGCC.
+<BR><BR>
+<DT><B>-pg</B>
+<DD>Generate extra code to write profile information suitable for the
+analysis program <CODE>gprof</CODE>.  You must use this option when compiling
+the source files you want data about, and you must also use it when
+linking.
+This option is probably useless in TIGCC.
+<BR><BR>
+<DT><B>-Q</B>
+<DD>Makes the compiler print out each function name as it is compiled, and
+print some statistics about each pass when it finishes.
+<BR><BR>
+<DT><B>-save-temps</B>
+<DD>Store the usual &quot;temporary&quot; intermediate files permanently; place them
+in the current directory and name them based on the source file.  Thus,
+compiling <CODE>foo.c</CODE> with <B>'-c -save-temps'</B> would produce files
+<CODE>foo.i</CODE> and <CODE>foo.s</CODE>, as well as <CODE>foo.o</CODE>.  This creates a
+preprocessed <CODE>foo.i</CODE> output file even though the compiler now
+normally uses an integrated preprocessor.
+</DL>

+ 85 - 85
tigcc/doc/System/Info/comopts/comopts.hss

@@ -1,85 +1,85 @@
-[Main]
-Title=GCC Command-Line Options
-Subsections=SEC3, SEC4, SEC6, SEC8, SEC9, SEC10, SEC11, SEC12, SEC14, SEC15, SEC16, SEC44, SEC45, history, gnugpl/gnugpl, gnugpl/gnufdl, gnugpl/funding
-
-[Top]
-This part of the documentation is a modified version of the
-<A HREF="http://gcc.gnu.org/onlinedocs/gcc/Invoking-GCC.html">Command-Line Options</A>
-section of the <A HREF="http://gcc.gnu.org/onlinedocs/gcc/">GCC Manual</A>.
-Therefore it is licensed under the
-<A HREF="$$INFOLINK(gnugpl/gnufdl)">GNU Free Documentation License</A>.
-<BR><BR>
-This section describes the options supported by <CODE>gcc</CODE>,
-the driver program of the GNU Compiler Collection, whose C compiler
-and assembler are used here.  This program is called either by
-<CODE>tigcc</CODE> or by the IDE.  <CODE>tigcc</CODE>
-simulates some of these options itself, namely <B>'-E'</B>,
-<B>'-S'</B>, and <B>'-c'</B>, and it also has some additional ones.
-In the IDE, there is an item in the project settings where you can
-set the options described here, with some exceptions, including the
-switches mentioned above.
-<BR><BR>
-TIGCC normally does preprocessing, compilation, assembly and linking
-all in one step, and finally produces a file which is executable on
-the calculator.  The &quot;overall options&quot; allow you to stop this
-process at an intermediate stage.  For example, the <B>'-c'</B> option
-says not to run the linker.  Then the output consists of object files
-output by the assembler.
-<BR><BR>
-Other options are passed on to one stage of processing.  Some options
-control the preprocessor and others the compiler itself.  Yet other
-options control the assembler and linker; most of these are not
-documented here, since you rarely need to use any of them.
-In fact, only those options which may be more or less useful with TIGCC
-are mentioned here (although we didn't check whether all of them are
-really usable in TIGCC).  For more info about standard options that are
-recognized by the compiler, read the
-<A HREF="http://gcc.gnu.org/onlinedocs/gcc/Invoking-GCC.html">official manual</A>.
-<BR><BR>
-We suggest that you use the <B>'-O2'</B> switch in all of your
-compilations; it increases speed and decreases the program size at the
-cost of compilation time.
-<BR><BR>
-<CODE>tigcc</CODE> accepts options and file names as operands.  Many
-options have multi-letter names; therefore multiple single-letter options
-may <I>not</I> be grouped: <B>'-dr'</B> is very different from <B>'-d
--r'</B>.
-<BR><BR>
-You can mix options and other arguments.  For the most part, the order
-you use doesn't matter.  Order does matter when you use several options
-of the same kind; for example, if you specify <B>'-L'</B> more than once,
-the directories are searched in the order specified.
-<BR><BR>
-Many options have long names starting with <B>'-f'</B> or with
-<B>'-W'</B> - for example, <B>'-fforce-mem'</B>,
-<B>'-fstrength-reduce'</B>, <B>'-Wformat'</B> and so on.  Most of
-these have both positive and negative forms; the negative form of
-<B>'-ffoo'</B> would be <B>'-fno-foo'</B>.  This manual documents
-only one of these two forms, whichever one is not the default.
-
-[Bottom]
-Original author: Free Software Foundation, Inc.
-<BR>
-Authors of the modifications: Zeljko Juric, Sebastian Reichelt, and Kevin Kofler
-<BR>
-Published by the TIGCC Team.
-<BR>
-See the <A HREF="$$LINK(history)">History</A> section for details and copyright information.
-<BR><BR>
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the <A HREF="$$INFOLINK(gnugpl/gnufdl)">GNU Free Documentation License</A>, Version 1.1 or any
-later version published by the Free Software Foundation; with the Invariant
-Sections being "<A HREF="$$INFOLINK(gnugpl)">GNU General Public License</A>" and "<A HREF="$$INFOLINK(gnugpl/funding)">Funding Free Software</A>", the
-Front-Cover texts being (a) (see below), and with the Back-Cover Texts being
-(b) (see below).  A copy of the license is included in the section entitled
-"<A HREF="$$INFOLINK(gnugpl/gnufdl)">GNU Free Documentation License</A>".
-<BR><BR>
-(a) The FSF's Front-Cover Text is:
-<BR><BR>
-A GNU Manual
-<BR><BR>
-(b) The FSF's Back-Cover Text is:
-<BR><BR>
-You have freedom to copy and modify this GNU Manual, like GNU software.
-Copies published by the Free Software Foundation raise funds for GNU
-development.
+[Main]
+Title=GCC Command-Line Options
+Subsections=SEC3, SEC4, SEC6, SEC8, SEC9, SEC10, SEC11, SEC12, SEC14, SEC15, SEC16, SEC44, SEC45, history, gnugpl/gnugpl, gnugpl/gnufdl, gnugpl/funding
+
+[Top]
+This part of the documentation is a modified version of the
+<A HREF="http://gcc.gnu.org/onlinedocs/gcc/Invoking-GCC.html">Command-Line Options</A>
+section of the <A HREF="http://gcc.gnu.org/onlinedocs/gcc/">GCC Manual</A>.
+Therefore it is licensed under the
+<A HREF="$$INFOLINK(gnugpl/gnufdl)">GNU Free Documentation License</A>.
+<BR><BR>
+This section describes the options supported by <CODE>gcc</CODE>,
+the driver program of the GNU Compiler Collection, whose C compiler
+and assembler are used here.  This program is called either by
+<CODE>tigcc</CODE> or by the IDE.  <CODE>tigcc</CODE>
+simulates some of these options itself, namely <B>'-E'</B>,
+<B>'-S'</B>, and <B>'-c'</B>, and it also has some additional ones.
+In the IDE, there is an item in the project settings where you can
+set the options described here, with some exceptions, including the
+switches mentioned above.
+<BR><BR>
+TIGCC normally does preprocessing, compilation, assembly and linking
+all in one step, and finally produces a file which is executable on
+the calculator.  The &quot;overall options&quot; allow you to stop this
+process at an intermediate stage.  For example, the <B>'-c'</B> option
+says not to run the linker.  Then the output consists of object files
+output by the assembler.
+<BR><BR>
+Other options are passed on to one stage of processing.  Some options
+control the preprocessor and others the compiler itself.  Yet other
+options control the assembler and linker; most of these are not
+documented here, since you rarely need to use any of them.
+In fact, only those options which may be more or less useful with TIGCC
+are mentioned here (although we didn't check whether all of them are
+really usable in TIGCC).  For more info about standard options that are
+recognized by the compiler, read the
+<A HREF="http://gcc.gnu.org/onlinedocs/gcc/Invoking-GCC.html">official manual</A>.
+<BR><BR>
+We suggest that you use the <B>'-O2'</B> switch in all of your
+compilations; it increases speed and decreases the program size at the
+cost of compilation time.
+<BR><BR>
+<CODE>tigcc</CODE> accepts options and file names as operands.  Many
+options have multi-letter names; therefore multiple single-letter options
+may <I>not</I> be grouped: <B>'-dr'</B> is very different from <B>'-d
+-r'</B>.
+<BR><BR>
+You can mix options and other arguments.  For the most part, the order
+you use doesn't matter.  Order does matter when you use several options
+of the same kind; for example, if you specify <B>'-L'</B> more than once,
+the directories are searched in the order specified.
+<BR><BR>
+Many options have long names starting with <B>'-f'</B> or with
+<B>'-W'</B> - for example, <B>'-fforce-mem'</B>,
+<B>'-fstrength-reduce'</B>, <B>'-Wformat'</B> and so on.  Most of
+these have both positive and negative forms; the negative form of
+<B>'-ffoo'</B> would be <B>'-fno-foo'</B>.  This manual documents
+only one of these two forms, whichever one is not the default.
+
+[Bottom]
+Original author: Free Software Foundation, Inc.
+<BR>
+Authors of the modifications: Zeljko Juric, Sebastian Reichelt, and Kevin Kofler
+<BR>
+Published by the TIGCC Team.
+<BR>
+See the <A HREF="$$LINK(history)">History</A> section for details and copyright information.
+<BR><BR>
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the <A HREF="$$INFOLINK(gnugpl/gnufdl)">GNU Free Documentation License</A>, Version 1.1 or any
+later version published by the Free Software Foundation; with the Invariant
+Sections being "<A HREF="$$INFOLINK(gnugpl)">GNU General Public License</A>" and "<A HREF="$$INFOLINK(gnugpl/funding)">Funding Free Software</A>", the
+Front-Cover texts being (a) (see below), and with the Back-Cover Texts being
+(b) (see below).  A copy of the license is included in the section entitled
+"<A HREF="$$INFOLINK(gnugpl/gnufdl)">GNU Free Documentation License</A>".
+<BR><BR>
+(a) The FSF's Front-Cover Text is:
+<BR><BR>
+A GNU Manual
+<BR><BR>
+(b) The FSF's Back-Cover Text is:
+<BR><BR>
+You have freedom to copy and modify this GNU Manual, like GNU software.
+Copies published by the Free Software Foundation raise funds for GNU
+development.

+ 24 - 24
tigcc/doc/System/Info/comopts/history.hss

@@ -1,24 +1,24 @@
-[Main]
-Title=History
-
-[Top]
-<UL>
-<LI><B>Original Version:</B> <A HREF="http://gcc.gnu.org/onlinedocs/gcc/Invoking-GCC.html">GCC Command Options</A>
-<BR><BR>
-Published by the Free Software Foundation
-<BR>
-59 Temple Place - Suite 330
-<BR>
-Boston, MA 02111-1307 USA
-<BR><BR>
-Copyright &copy; 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-2000, 2001, 2002 Free Software Foundation, Inc.
-<BR><BR>
-</LI>
-<LI><B>Modifications for TIGCC:</B> <A HREF="$$LINK(comopts)">GCC Command-Line Options</A>
-<BR><BR>
-Published by the TIGCC Team
-<BR><BR>
-Copyright &copy; 2000, 2001, 2002 Zeljko Juric, Sebastian Reichelt, Kevin Kofler
-</LI>
-</UL>
+[Main]
+Title=History
+
+[Top]
+<UL>
+<LI><B>Original Version:</B> <A HREF="http://gcc.gnu.org/onlinedocs/gcc/Invoking-GCC.html">GCC Command Options</A>
+<BR><BR>
+Published by the Free Software Foundation
+<BR>
+59 Temple Place - Suite 330
+<BR>
+Boston, MA 02111-1307 USA
+<BR><BR>
+Copyright &copy; 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+2000, 2001, 2002 Free Software Foundation, Inc.
+<BR><BR>
+</LI>
+<LI><B>Modifications for TIGCC:</B> <A HREF="$$LINK(comopts)">GCC Command-Line Options</A>
+<BR><BR>
+Published by the TIGCC Team
+<BR><BR>
+Copyright &copy; 2000, 2001, 2002 Zeljko Juric, Sebastian Reichelt, Kevin Kofler
+</LI>
+</UL>

+ 29 - 29
tigcc/doc/System/Info/contact/contact.hss

@@ -1,29 +1,29 @@
-[Main]
-Title=Contact Information
-
-[Top]
-As I wrote this documentation, surely the most of all questions will be addressed to me.
-So, if you have any questions, suggestions, problems, corrections, bug reports, and especially
-if you have some information about TIOS routines not known to me, please mail me at
-<BR><BR><BR>
-<B>
-<A HREF="mailto:zjuric@utic.net.ba">zjuric@utic.net.ba</A>
-<BR><BR>
-Zeljko Juric
-<BR>
-Sarajevo, Bosnia &amp; Herzegovina
-</B>
-<BR><BR><BR>
-Please, inform me about any noticed problem with the library and the documentation (including wrong links in the
-documentation). This will help me to correct the problem in a next release.
-However, please use the bug report form on
-<A HREF="http://tigcc.ticalc.org/"><B>tigcc.ticalc.org</B></A>
-for all other problems.
-<BR><BR>
-If you have a general TIGCC programming question, it is a good idea to see whether it is already
-answered on the <A HREF="http://pub26.ezboard.com/ftichessteamhqfrm5"><B>TIGCC programming message board</B></A>.
-If not, you can post your question there.
-<BR><BR>
-<B>Note:</B> Before asking me a question, please check whether this question is
-already answered in the <A HREF="$$INFOLINK(faq)"><B>Frequently Asked Question</B></A> list:
-I am tired of answering questions which are already answered there!
+[Main]
+Title=Contact Information
+
+[Top]
+As I wrote this documentation, surely the most of all questions will be addressed to me.
+So, if you have any questions, suggestions, problems, corrections, bug reports, and especially
+if you have some information about TIOS routines not known to me, please mail me at
+<BR><BR><BR>
+<B>
+<A HREF="mailto:zjuric@utic.net.ba">zjuric@utic.net.ba</A>
+<BR><BR>
+Zeljko Juric
+<BR>
+Sarajevo, Bosnia &amp; Herzegovina
+</B>
+<BR><BR><BR>
+Please, inform me about any noticed problem with the library and the documentation (including wrong links in the
+documentation). This will help me to correct the problem in a next release.
+However, please use the bug report form on
+<A HREF="http://tigcc.ticalc.org/"><B>tigcc.ticalc.org</B></A>
+for all other problems.
+<BR><BR>
+If you have a general TIGCC programming question, it is a good idea to see whether it is already
+answered on the <A HREF="http://pub26.ezboard.com/ftichessteamhqfrm5"><B>TIGCC programming message board</B></A>.
+If not, you can post your question there.
+<BR><BR>
+<B>Note:</B> Before asking me a question, please check whether this question is
+already answered in the <A HREF="$$INFOLINK(faq)"><B>Frequently Asked Question</B></A> list:
+I am tired of answering questions which are already answered there!

+ 50 - 50
tigcc/doc/System/Info/copyright/copyright.hss

@@ -1,51 +1,51 @@
-[Main]
-Title=Copyright Notes
-
-[Top]
-As TIGCC is a complex team project, various parts of it have been made by different authors:
-<BR><BR>
-<CODE>ld-tigcc</CODE> Copyright (C) 2002-2006 Sebastian Reichelt and Kevin Kofler, licensed under the GPL
-<BR>
-Library &amp; Documentation Copyright (C) 2000-2006 Zeljko Juric and contributors, licensed under the GPL with libgcc exception
-<BR>
-IDE Copyright (C) 2000-2006 Sebastian Reichelt and contributors, licensed under the GPL
-<BR><BR>
-Some parts of the TIGCC package (<CODE>cpp</CODE>, <CODE>gcc</CODE>, <CODE>as</CODE>,
-<CODE>ld</CODE>, <CODE>ar</CODE>, <CODE>objcopy</CODE>)
-are modified parts from the GNU Compiler Collection and GNU BinUtils packages.
-These parts are free software; you can redistribute them
-and/or modify them under the terms of the <A HREF="$$INFOLINK(gnugpl)">GNU General Public License</A> as
-published by the Free Software Foundation; either version 2 of the License, or (at your option) any later
-version.
-<BR><BR>
-Parameter passing by register Copyright (C) 1998-2003 Fred Fish from <A HREF="http://www.geekgadgets.org/">Geek Gadgets</A>;
-converted to GCC 3.0 and higher by Kevin Kofler.
-<BR><BR>
-Thomas Nussbaumer holds the copyright for the TIGCC Tools Suite, from which the compression feature was taken.
-It is licensed under the LGPL.
-<BR><BR>
-<CODE>a68k</CODE> (also included in the package) is a freeware assembler by Charlie Gibbs (it
-is a somewhat modified Amiga version).
-<BR><BR>
-<HR>
-<B>Special copyright notes about the documentation and the library:</B>
-<BR><BR>
-All information presented in the documentation are strictly mine, not by Texas Instruments (except
-information about GNU products, which are based on the original GNU manuals). All of TIOS-specific
-information in this document are result of a hours of work with the debugger. But I need to give credits
-to Gareth James: his informational files, although extremely briefly, help me a lot to
-understand some particular TIOS secrets.
-<BR><BR>
-The TIGCC library and documentation is absolutely free for any distribution if you don't change anything in this package.
-But, to give credit to my hard work, please do the following:
-<UL>
-<LI>If you use any routine from this library in your program, put this fact in the
-documentation of your program;</LI>
-<LI>If you use a routine in your assembly program which usage wasn't known to you
-before reading this documentation, put this fact in the documentation of your
-program.</LI>
-</UL>
-I simply want that this documentation to become known to as many C and assembly programmers
-as possible.
-<BR><BR>
+[Main]
+Title=Copyright Notes
+
+[Top]
+As TIGCC is a complex team project, various parts of it have been made by different authors:
+<BR><BR>
+<CODE>ld-tigcc</CODE> Copyright (C) 2002-2006 Sebastian Reichelt and Kevin Kofler, licensed under the GPL
+<BR>
+Library &amp; Documentation Copyright (C) 2000-2006 Zeljko Juric and contributors, licensed under the GPL with libgcc exception
+<BR>
+IDE Copyright (C) 2000-2006 Sebastian Reichelt and contributors, licensed under the GPL
+<BR><BR>
+Some parts of the TIGCC package (<CODE>cpp</CODE>, <CODE>gcc</CODE>, <CODE>as</CODE>,
+<CODE>ld</CODE>, <CODE>ar</CODE>, <CODE>objcopy</CODE>)
+are modified parts from the GNU Compiler Collection and GNU BinUtils packages.
+These parts are free software; you can redistribute them
+and/or modify them under the terms of the <A HREF="$$INFOLINK(gnugpl)">GNU General Public License</A> as
+published by the Free Software Foundation; either version 2 of the License, or (at your option) any later
+version.
+<BR><BR>
+Parameter passing by register Copyright (C) 1998-2003 Fred Fish from <A HREF="http://www.geekgadgets.org/">Geek Gadgets</A>;
+converted to GCC 3.0 and higher by Kevin Kofler.
+<BR><BR>
+Thomas Nussbaumer holds the copyright for the TIGCC Tools Suite, from which the compression feature was taken.
+It is licensed under the LGPL.
+<BR><BR>
+<CODE>a68k</CODE> (also included in the package) is a freeware assembler by Charlie Gibbs (it
+is a somewhat modified Amiga version).
+<BR><BR>
+<HR>
+<B>Special copyright notes about the documentation and the library:</B>
+<BR><BR>
+All information presented in the documentation are strictly mine, not by Texas Instruments (except
+information about GNU products, which are based on the original GNU manuals). All of TIOS-specific
+information in this document are result of a hours of work with the debugger. But I need to give credits
+to Gareth James: his informational files, although extremely briefly, help me a lot to
+understand some particular TIOS secrets.
+<BR><BR>
+The TIGCC library and documentation is absolutely free for any distribution if you don't change anything in this package.
+But, to give credit to my hard work, please do the following:
+<UL>
+<LI>If you use any routine from this library in your program, put this fact in the
+documentation of your program;</LI>
+<LI>If you use a routine in your assembly program which usage wasn't known to you
+before reading this documentation, put this fact in the documentation of your
+program.</LI>
+</UL>
+I simply want that this documentation to become known to as many C and assembly programmers
+as possible.
+<BR><BR>
 <I>Note that this is Zeljko's <B>original</B> license for the library. Zeljko has since approved its release under the GPL with the libgcc exception (allowing you to freely link the code with both GPLed and non-GPLed programs without restrictions). Still, we would appreciate being credited for our work.</I>

+ 18 - 18
tigcc/doc/System/Info/cpp/SEC10.hss

@@ -1,18 +1,18 @@
-[Main]
-Title=Macros
-Subsections=SEC11, SEC12, SEC17, SEC18, SEC19, SEC14, SEC20, SEC22
-Index=#define
-
-[Top]
-A <U>macro</U> is a fragment of code which has been given a name.
-Whenever the name is used, it is replaced by the contents of the macro.
-There are two kinds of macros.  They differ mostly in what they look
-like when they are used.  <U>Object-like</U> macros resemble data objects
-when used, <U>function-like</U> macros resemble function calls.
-<BR><BR>
-You may define any valid identifier as a macro, even if it is a C
-keyword.  The preprocessor does not know anything about keywords.  This
-can be useful if you wish to hide a keyword such as <CODE><A HREF="$$INFOLINK(keywords/const)">const</A></CODE> from an
-older compiler that does not understand it.  However, the preprocessor
-operator <CODE><A HREF="$$LINK(SEC38a)">defined</A></CODE> can never be defined as a
-macro.
+[Main]
+Title=Macros
+Subsections=SEC11, SEC12, SEC17, SEC18, SEC19, SEC14, SEC20, SEC22
+Index=#define
+
+[Top]
+A <U>macro</U> is a fragment of code which has been given a name.
+Whenever the name is used, it is replaced by the contents of the macro.
+There are two kinds of macros.  They differ mostly in what they look
+like when they are used.  <U>Object-like</U> macros resemble data objects
+when used, <U>function-like</U> macros resemble function calls.
+<BR><BR>
+You may define any valid identifier as a macro, even if it is a C
+keyword.  The preprocessor does not know anything about keywords.  This
+can be useful if you wish to hide a keyword such as <CODE><A HREF="$$INFOLINK(keywords/const)">const</A></CODE> from an
+older compiler that does not understand it.  However, the preprocessor
+operator <CODE><A HREF="$$LINK(SEC38a)">defined</A></CODE> can never be defined as a
+macro.

+ 92 - 92
tigcc/doc/System/Info/cpp/SEC11.hss

@@ -1,92 +1,92 @@
-[Main]
-Title=Object-like Macros
-
-[Top]
-An <U>object-like macro</U> is a simple identifier which will be replaced
-by a code fragment.  It is called object-like because it looks like a
-data object in code that uses it.  They are most commonly used to give
-symbolic names to numeric constants.
-<BR><BR>
-You create macros with the <CODE>#define</CODE> directive.  <CODE>#define</CODE> is
-followed by the name of the macro and then the token sequence it should
-be an abbreviation for, which is variously referred to as the macro's
-<U>body</U>, <U>expansion</U> or <U>replacement list</U>.  For example,
-<PRE>#define BUFFER_SIZE 1024
-</PRE>
-defines a macro named <CODE>BUFFER_SIZE</CODE> as an abbreviation for the
-token <CODE>1024</CODE>.  If somewhere after this <CODE>#define</CODE> directive
-there comes a C statement of the form
-<PRE>foo = (char *) malloc (BUFFER_SIZE);
-</PRE>
-then the C preprocessor will recognize and <U>expand</U> the macro
-<CODE>BUFFER_SIZE</CODE>.  The C compiler will see the same tokens as it would
-if you had written
-<PRE>foo = (char *) malloc (1024);
-</PRE>
-By convention, macro names are written in upper case.  Programs are
-easier to read when it is possible to tell at a glance which names are
-macros.
-<BR><BR>
-The macro's body ends at the end of the <CODE>#define</CODE> line.  You may
-continue the definition onto multiple lines, if necessary, using
-backslash-newline.  When the macro is expanded, however, it will all
-come out on one line.  For example,
-<PRE>#define NUMBERS 1, \
-                2, \
-                3
-int x[] = { NUMBERS };
-     expands to int x[] = { 1, 2, 3 };
-</PRE>
-The most common visible consequence of this is surprising line numbers
-in error messages.
-<BR><BR>
-There is no restriction on what can go in a macro body provided it
-decomposes into valid preprocessing tokens.  Parentheses need not
-balance, and the body need not resemble valid C code.  (If it does not,
-you may get error messages from the C compiler when you use the macro.)
-<BR><BR>
-The C preprocessor scans your program sequentially.  Macro definitions
-take effect at the place you write them.  Therefore, the following input
-to the C preprocessor
-<PRE>foo = X;
-#define X 4
-bar = X;
-</PRE>
-produces
-<PRE>foo = X;
-bar = 4;
-</PRE>
-When the preprocessor expands a macro name, the macro's expansion
-replaces the macro invocation, then the expansion is examined for more
-macros to expand.  For example,
-<PRE>#define TABLESIZE BUFSIZE
-#define BUFSIZE 1024
-TABLESIZE
-     expands to BUFSIZE
-     expands to 1024
-</PRE>
-<CODE>TABLESIZE</CODE> is expanded first to produce <CODE>BUFSIZE</CODE>, then that
-macro is expanded to produce the final result, <CODE>1024</CODE>.
-<BR><BR>
-Notice that <CODE>BUFSIZE</CODE> was not defined when <CODE>TABLESIZE</CODE> was
-defined.  The <CODE>#define</CODE> for <CODE>TABLESIZE</CODE> uses exactly the
-expansion you specify - in this case, <CODE>BUFSIZE</CODE> - and does not
-check to see whether it too contains macro names.  Only when you
-<I>use</I> <CODE>TABLESIZE</CODE> is the result of its expansion scanned for
-more macro names.
-<BR><BR>
-This makes a difference if you change the definition of <CODE>BUFSIZE</CODE>
-at some point in the source file.  <CODE>TABLESIZE</CODE>, defined as shown,
-will always expand using the definition of <CODE>BUFSIZE</CODE> that is
-currently in effect:
-<PRE>#define BUFSIZE 1020
-#define TABLESIZE BUFSIZE
-#undef BUFSIZE
-#define BUFSIZE 37
-</PRE>
-Now <CODE>TABLESIZE</CODE> expands (in two stages) to <CODE>37</CODE>.
-<BR><BR>
-If the expansion of a macro contains its own name, either directly or
-via intermediate macros, it is not expanded again when the expansion is
-examined for more macros.  This prevents infinite recursion.
-See <A HREF="$$LINK(SEC27)">Self-Referential Macros</A> for the precise details.
+[Main]
+Title=Object-like Macros
+
+[Top]
+An <U>object-like macro</U> is a simple identifier which will be replaced
+by a code fragment.  It is called object-like because it looks like a
+data object in code that uses it.  They are most commonly used to give
+symbolic names to numeric constants.
+<BR><BR>
+You create macros with the <CODE>#define</CODE> directive.  <CODE>#define</CODE> is
+followed by the name of the macro and then the token sequence it should
+be an abbreviation for, which is variously referred to as the macro's
+<U>body</U>, <U>expansion</U> or <U>replacement list</U>.  For example,
+<PRE>#define BUFFER_SIZE 1024
+</PRE>
+defines a macro named <CODE>BUFFER_SIZE</CODE> as an abbreviation for the
+token <CODE>1024</CODE>.  If somewhere after this <CODE>#define</CODE> directive
+there comes a C statement of the form
+<PRE>foo = (char *) malloc (BUFFER_SIZE);
+</PRE>
+then the C preprocessor will recognize and <U>expand</U> the macro
+<CODE>BUFFER_SIZE</CODE>.  The C compiler will see the same tokens as it would
+if you had written
+<PRE>foo = (char *) malloc (1024);
+</PRE>
+By convention, macro names are written in upper case.  Programs are
+easier to read when it is possible to tell at a glance which names are
+macros.
+<BR><BR>
+The macro's body ends at the end of the <CODE>#define</CODE> line.  You may
+continue the definition onto multiple lines, if necessary, using
+backslash-newline.  When the macro is expanded, however, it will all
+come out on one line.  For example,
+<PRE>#define NUMBERS 1, \
+                2, \
+                3
+int x[] = { NUMBERS };
+     expands to int x[] = { 1, 2, 3 };
+</PRE>
+The most common visible consequence of this is surprising line numbers
+in error messages.
+<BR><BR>
+There is no restriction on what can go in a macro body provided it
+decomposes into valid preprocessing tokens.  Parentheses need not
+balance, and the body need not resemble valid C code.  (If it does not,
+you may get error messages from the C compiler when you use the macro.)
+<BR><BR>
+The C preprocessor scans your program sequentially.  Macro definitions
+take effect at the place you write them.  Therefore, the following input
+to the C preprocessor
+<PRE>foo = X;
+#define X 4
+bar = X;
+</PRE>
+produces
+<PRE>foo = X;
+bar = 4;
+</PRE>
+When the preprocessor expands a macro name, the macro's expansion
+replaces the macro invocation, then the expansion is examined for more
+macros to expand.  For example,
+<PRE>#define TABLESIZE BUFSIZE
+#define BUFSIZE 1024
+TABLESIZE
+     expands to BUFSIZE
+     expands to 1024
+</PRE>
+<CODE>TABLESIZE</CODE> is expanded first to produce <CODE>BUFSIZE</CODE>, then that
+macro is expanded to produce the final result, <CODE>1024</CODE>.
+<BR><BR>
+Notice that <CODE>BUFSIZE</CODE> was not defined when <CODE>TABLESIZE</CODE> was
+defined.  The <CODE>#define</CODE> for <CODE>TABLESIZE</CODE> uses exactly the
+expansion you specify - in this case, <CODE>BUFSIZE</CODE> - and does not
+check to see whether it too contains macro names.  Only when you
+<I>use</I> <CODE>TABLESIZE</CODE> is the result of its expansion scanned for
+more macro names.
+<BR><BR>
+This makes a difference if you change the definition of <CODE>BUFSIZE</CODE>
+at some point in the source file.  <CODE>TABLESIZE</CODE>, defined as shown,
+will always expand using the definition of <CODE>BUFSIZE</CODE> that is
+currently in effect:
+<PRE>#define BUFSIZE 1020
+#define TABLESIZE BUFSIZE
+#undef BUFSIZE
+#define BUFSIZE 37
+</PRE>
+Now <CODE>TABLESIZE</CODE> expands (in two stages) to <CODE>37</CODE>.
+<BR><BR>
+If the expansion of a macro contains its own name, either directly or
+via intermediate macros, it is not expanded again when the expansion is
+examined for more macros.  This prevents infinite recursion.
+See <A HREF="$$LINK(SEC27)">Self-Referential Macros</A> for the precise details.

+ 39 - 39
tigcc/doc/System/Info/cpp/SEC12.hss

@@ -1,39 +1,39 @@
-[Main]
-Title=Function-like Macros
-Subsections=SEC12a, SEC13
-
-[Top]
-You can also define macros whose use looks like a function call.  These
-are called <U>function-like macros</U>.  To define a function-like macro,
-you use the same <CODE>#define</CODE> directive, but you put a pair of
-parentheses immediately after the macro name.  For example,
-<PRE>#define lang_init()  c_init()
-lang_init()
-     expands to c_init()
-</PRE>
-A function-like macro is only expanded if its name appears with a pair
-of parentheses after it.  If you write just the name, it is left alone.
-This can be useful when you have a function and a macro of the same
-name, and you wish to use the function sometimes.
-<PRE>extern void foo(void);
-#define foo() /* optimized inline version */
-...
-  foo();
-  funcptr = foo;
-</PRE>
-Here the call to <CODE>foo()</CODE> will use the macro, but the function
-pointer will get the address of the real function.  If the macro were to
-be expanded, it would cause a syntax error.
-<BR><BR>
-If you put spaces between the macro name and the parentheses in the
-macro definition, that does not define a function-like macro, it defines
-an object-like macro whose expansion happens to begin with a pair of
-parentheses.
-<PRE>#define lang_init ()    c_init()
-lang_init()
-     expands to () c_init()()
-</PRE>
-The first two pairs of parentheses in this expansion come from the
-macro.  The third is the pair that was originally after the macro
-invocation.  Since <CODE>lang_init</CODE> is an object-like macro, it does not
-consume those parentheses.
+[Main]
+Title=Function-like Macros
+Subsections=SEC12a, SEC13
+
+[Top]
+You can also define macros whose use looks like a function call.  These
+are called <U>function-like macros</U>.  To define a function-like macro,
+you use the same <CODE>#define</CODE> directive, but you put a pair of
+parentheses immediately after the macro name.  For example,
+<PRE>#define lang_init()  c_init()
+lang_init()
+     expands to c_init()
+</PRE>
+A function-like macro is only expanded if its name appears with a pair
+of parentheses after it.  If you write just the name, it is left alone.
+This can be useful when you have a function and a macro of the same
+name, and you wish to use the function sometimes.
+<PRE>extern void foo(void);
+#define foo() /* optimized inline version */
+...
+  foo();
+  funcptr = foo;
+</PRE>
+Here the call to <CODE>foo()</CODE> will use the macro, but the function
+pointer will get the address of the real function.  If the macro were to
+be expanded, it would cause a syntax error.
+<BR><BR>
+If you put spaces between the macro name and the parentheses in the
+macro definition, that does not define a function-like macro, it defines
+an object-like macro whose expansion happens to begin with a pair of
+parentheses.
+<PRE>#define lang_init ()    c_init()
+lang_init()
+     expands to () c_init()()
+</PRE>
+The first two pairs of parentheses in this expansion come from the
+macro.  The third is the pair that was originally after the macro
+invocation.  Since <CODE>lang_init</CODE> is an object-like macro, it does not
+consume those parentheses.

+ 86 - 86
tigcc/doc/System/Info/cpp/SEC12a.hss

@@ -1,86 +1,86 @@
-[Main]
-Title=Macro Arguments
-
-[Top]
-Function-like macros can take <U>arguments</U>, just like true functions.
-To define a macro that uses arguments, you insert <U>parameters</U>
-between the pair of parentheses in the macro definition that make the
-macro function-like.  The parameters must be valid C identifiers,
-separated by commas and optionally whitespace.
-<BR><BR>
-To invoke a macro that takes arguments, you write the name of the macro
-followed by a list of <U>actual arguments</U> in parentheses, separated
-by commas.  The invocation of the macro need not be restricted to a
-single logical line - it can cross as many lines in the source file as
-you wish.  The number of arguments you give must match the number of
-parameters in the macro definition.  When the macro is expanded, each
-use of a parameter in its body is replaced by the tokens of the
-corresponding argument.  (You need not use all of the parameters in the
-macro body.)
-<BR><BR>
-As an example, here is a macro that computes the minimum of two numeric
-values, as it is defined in many C programs, and some uses.
-<PRE>#define min(X, Y)  ((X) &lt; (Y) ? (X) : (Y))
-  x = min(a, b);          expands to  x = ((a) &lt; (b) ? (a) : (b));
-  y = min(1, 2);          expands to  y = ((1) &lt; (2) ? (1) : (2));
-  z = min(a + 28, *p);    expands to  z = ((a + 28) &lt; (*p) ? (a + 28) : (*p));
-</PRE>
-(In this small example you can already see several of the dangers of
-macro arguments.  See <A HREF="$$LINK(SEC22)">Macro Pitfalls</A> for detailed explanations.)
-<BR><BR>
-Leading and trailing whitespace in each argument is dropped, and all
-whitespace between the tokens of an argument is reduced to a single
-space.  Parentheses within each argument must balance; a comma within
-such parentheses does not end the argument.  However, there is no
-requirement for square brackets or braces to balance, and they do not
-prevent a comma from separating arguments.  Thus,
-<PRE>macro (array[x = y, x + 1])
-</PRE>
-passes two arguments to <CODE>macro</CODE>: <CODE>array[x&nbsp;=&nbsp;y</CODE> and <CODE>x&nbsp;+
-1]</CODE>.  If you want to supply <CODE>array[x&nbsp;=&nbsp;y,&nbsp;x&nbsp;+&nbsp;1]</CODE> as an argument,
-you can write it as <CODE>array[(x&nbsp;=&nbsp;y,&nbsp;x&nbsp;+&nbsp;1)]</CODE>, which is equivalent C
-code.
-<BR><BR>
-All arguments to a macro are completely macro-expanded before they are
-substituted into the macro body.  After substitution, the complete text
-is scanned again for macros to expand, including the arguments.  This rule
-may seem strange, but it is carefully designed so you need not worry
-about whether any function call is actually a macro invocation.  You can
-run into trouble if you try to be too clever, though.  See <A HREF="$$LINK(SEC28)">Argument
-Prescan</A> for detailed discussion.
-<BR><BR>
-For example, <CODE>min&nbsp;(min&nbsp;(a,&nbsp;b),&nbsp;c)</CODE> is first expanded to
-<PRE>  min (((a) &lt; (b) ? (a) : (b)), (c))
-</PRE>
-and then to
-<PRE>((((a) &lt; (b) ? (a) : (b))) &lt; (c)
- ? (((a) &lt; (b) ? (a) : (b)))
- : (c))
-</PRE>
-(Line breaks shown here for clarity would not actually be generated.)
-<BR><BR>
-You can leave macro arguments empty; this is not an error to the
-preprocessor (but many macros will then expand to invalid code).
-You cannot leave out arguments entirely; if a macro takes two arguments,
-there must be exactly one comma at the top level of its argument list.
-Here are some silly examples using <CODE>min</CODE>:
-<PRE>min(, b)        expands to ((   ) &lt; (b) ? (   ) : (b))
-min(a, )        expands to ((a  ) &lt; ( ) ? (a  ) : ( ))
-min(,)          expands to ((   ) &lt; ( ) ? (   ) : ( ))
-min((,),)       expands to (((,)) &lt; ( ) ? ((,)) : ( ))
-
-min()      Error: macro &quot;min&quot; requires 2 arguments, but only 1 given
-min(,,)    Error: macro &quot;min&quot; passed 3 arguments, but takes just 2
-</PRE>
-Whitespace is not a preprocessing token, so if a macro <CODE>foo</CODE> takes
-one argument, <CODE>foo&nbsp;()</CODE> and <CODE>foo&nbsp;(&nbsp;)</CODE> both supply it an
-empty argument.  Previous GNU preprocessor implementations and
-documentation were incorrect on this point, insisting that a
-function-like macro that takes a single argument be passed a space if an
-empty argument was required.
-<BR><BR>
-Macro parameters appearing inside string literals are not replaced by
-their corresponding actual arguments.
-<PRE>#define foo(x) x, &quot;x&quot;
-foo(bar)        expands to bar, &quot;x&quot;
-</PRE>
+[Main]
+Title=Macro Arguments
+
+[Top]
+Function-like macros can take <U>arguments</U>, just like true functions.
+To define a macro that uses arguments, you insert <U>parameters</U>
+between the pair of parentheses in the macro definition that make the
+macro function-like.  The parameters must be valid C identifiers,
+separated by commas and optionally whitespace.
+<BR><BR>
+To invoke a macro that takes arguments, you write the name of the macro
+followed by a list of <U>actual arguments</U> in parentheses, separated
+by commas.  The invocation of the macro need not be restricted to a
+single logical line - it can cross as many lines in the source file as
+you wish.  The number of arguments you give must match the number of
+parameters in the macro definition.  When the macro is expanded, each
+use of a parameter in its body is replaced by the tokens of the
+corresponding argument.  (You need not use all of the parameters in the
+macro body.)
+<BR><BR>
+As an example, here is a macro that computes the minimum of two numeric
+values, as it is defined in many C programs, and some uses.
+<PRE>#define min(X, Y)  ((X) &lt; (Y) ? (X) : (Y))
+  x = min(a, b);          expands to  x = ((a) &lt; (b) ? (a) : (b));
+  y = min(1, 2);          expands to  y = ((1) &lt; (2) ? (1) : (2));
+  z = min(a + 28, *p);    expands to  z = ((a + 28) &lt; (*p) ? (a + 28) : (*p));
+</PRE>
+(In this small example you can already see several of the dangers of
+macro arguments.  See <A HREF="$$LINK(SEC22)">Macro Pitfalls</A> for detailed explanations.)
+<BR><BR>
+Leading and trailing whitespace in each argument is dropped, and all
+whitespace between the tokens of an argument is reduced to a single
+space.  Parentheses within each argument must balance; a comma within
+such parentheses does not end the argument.  However, there is no
+requirement for square brackets or braces to balance, and they do not
+prevent a comma from separating arguments.  Thus,
+<PRE>macro (array[x = y, x + 1])
+</PRE>
+passes two arguments to <CODE>macro</CODE>: <CODE>array[x&nbsp;=&nbsp;y</CODE> and <CODE>x&nbsp;+
+1]</CODE>.  If you want to supply <CODE>array[x&nbsp;=&nbsp;y,&nbsp;x&nbsp;+&nbsp;1]</CODE> as an argument,
+you can write it as <CODE>array[(x&nbsp;=&nbsp;y,&nbsp;x&nbsp;+&nbsp;1)]</CODE>, which is equivalent C
+code.
+<BR><BR>
+All arguments to a macro are completely macro-expanded before they are
+substituted into the macro body.  After substitution, the complete text
+is scanned again for macros to expand, including the arguments.  This rule
+may seem strange, but it is carefully designed so you need not worry
+about whether any function call is actually a macro invocation.  You can
+run into trouble if you try to be too clever, though.  See <A HREF="$$LINK(SEC28)">Argument
+Prescan</A> for detailed discussion.
+<BR><BR>
+For example, <CODE>min&nbsp;(min&nbsp;(a,&nbsp;b),&nbsp;c)</CODE> is first expanded to
+<PRE>  min (((a) &lt; (b) ? (a) : (b)), (c))
+</PRE>
+and then to
+<PRE>((((a) &lt; (b) ? (a) : (b))) &lt; (c)
+ ? (((a) &lt; (b) ? (a) : (b)))
+ : (c))
+</PRE>
+(Line breaks shown here for clarity would not actually be generated.)
+<BR><BR>
+You can leave macro arguments empty; this is not an error to the
+preprocessor (but many macros will then expand to invalid code).
+You cannot leave out arguments entirely; if a macro takes two arguments,
+there must be exactly one comma at the top level of its argument list.
+Here are some silly examples using <CODE>min</CODE>:
+<PRE>min(, b)        expands to ((   ) &lt; (b) ? (   ) : (b))
+min(a, )        expands to ((a  ) &lt; ( ) ? (a  ) : ( ))
+min(,)          expands to ((   ) &lt; ( ) ? (   ) : ( ))
+min((,),)       expands to (((,)) &lt; ( ) ? ((,)) : ( ))
+
+min()      Error: macro &quot;min&quot; requires 2 arguments, but only 1 given
+min(,,)    Error: macro &quot;min&quot; passed 3 arguments, but takes just 2
+</PRE>
+Whitespace is not a preprocessing token, so if a macro <CODE>foo</CODE> takes
+one argument, <CODE>foo&nbsp;()</CODE> and <CODE>foo&nbsp;(&nbsp;)</CODE> both supply it an
+empty argument.  Previous GNU preprocessor implementations and
+documentation were incorrect on this point, insisting that a
+function-like macro that takes a single argument be passed a space if an
+empty argument was required.
+<BR><BR>
+Macro parameters appearing inside string literals are not replaced by
+their corresponding actual arguments.
+<PRE>#define foo(x) x, &quot;x&quot;
+foo(bar)        expands to bar, &quot;x&quot;
+</PRE>

+ 95 - 95
tigcc/doc/System/Info/cpp/SEC13.hss

@@ -1,95 +1,95 @@
-[Main]
-Title=Variadic Macros
-
-[Top]
-A macro can be declared to accept a variable number of arguments much as
-a function can.  The syntax for defining the macro is similar to that of
-a function.  Here is an example:
-<PRE>#define lprintf(...) fprintf (log, __VA_ARGS__)
-</PRE>
-This kind of macro is called <U>variadic</U>.  When the macro is invoked,
-all the tokens in its argument list after the last named argument (this
-macro has none), including any commas, become the <U>variable
-argument</U>.  This sequence of tokens replaces the identifier
-<CODE>__VA_ARGS__</CODE> in the macro body wherever it appears.  Thus, we
-have this expansion:
-<PRE>lprintf (&quot;%s:%d: &quot;, input_file, lineno);
-  --&gt; fprintf (log, &quot;%s:%d: &quot;, input_file, lineno);
-</PRE>
-The variable argument is completely macro-expanded before it is inserted
-into the macro expansion, just like an ordinary argument.  You may use
-the <CODE>#</CODE> and <CODE>##</CODE> operators to stringify the variable argument
-or to paste its leading or trailing token with another token.  (But see
-below for an important special case for <CODE>##</CODE>.)
-<BR><BR>
-If your macro is complicated, you may want a more descriptive name for
-the variable argument than <CODE>__VA_ARGS__</CODE>.  CPP permits
-this, as an extension.  You may write an argument name immediately
-before the <CODE>...</CODE>; that name is used for the variable argument.
-The <CODE>lprintf</CODE> macro above could be written
-<PRE>#define lprintf(args...) fprintf (log, args)
-</PRE>
-using this extension.  You cannot use <CODE>__VA_ARGS__</CODE> and this
-extension in the same macro.
-<BR><BR>
-You can have named arguments as well as variable arguments in a variadic
-macro.  We could define <CODE>lprintf</CODE> like this, instead:
-<PRE>#define lprintf(format, ...) fprintf (log, format, __VA_ARGS__)
-</PRE>
-This formulation looks more descriptive, but unfortunately it is less
-flexible: you must now supply at least one argument after the format
-string.  In standard C, you cannot omit the comma separating the named
-argument from the variable arguments.  Furthermore, if you leave the
-variable argument empty, you will get a syntax error, because
-there will be an extra comma after the format string.
-<PRE>lprintf (&quot;success!\n&quot;, );
-  --&gt; fprintf (log, &quot;success!\n&quot;, );
-</PRE>
-GNU CPP has a pair of extensions which deal with this problem.  First,
-you are allowed to leave the variable argument out entirely:
-<PRE>lprintf (&quot;success!\n&quot;);
-  --&gt; fprintf (log, &quot;success!\n&quot;, );
-</PRE>
-Second, the <CODE>##</CODE> token paste operator has a special meaning when
-placed between a comma and a variable argument.  If you write
-<PRE>#define lprintf(format, ...) fprintf (log, format, ##__VA_ARGS__)
-</PRE>
-and the variable argument is left out when the <CODE>lprintf</CODE> macro is
-used, then the comma before the <CODE>##</CODE> will be deleted.  This does
-<I>not</I> happen if you pass an empty argument, nor does it happen if
-the token preceding <CODE>##</CODE> is anything other than a comma.
-<PRE>lprintf (&quot;success!\n&quot;)
-  --&gt; fprintf (log, &quot;success!\n&quot;);
-</PRE>
-The above explanation is ambiguous about the case where the only macro
-parameter is a variable arguments parameter, as it is meaningless to
-try to distinguish whether no argument at all is an empty argument or
-a missing argument.  In this case the C99 standard is clear that the
-comma must remain, however the existing GCC extension used to swallow
-the comma.  So CPP retains the comma when conforming to a specific C
-standard, and drops it otherwise.
-<BR><BR>
-C99 mandates that the only place the identifier <CODE>__VA_ARGS__</CODE>
-can appear is in the replacement list of a variadic macro.  It may not
-be used as a macro name, macro argument name, or within a different type
-of macro.  It may also be forbidden in open text; the standard is
-ambiguous.  We recommend you avoid using it except for its defined
-purpose.
-<BR><BR>
-Variadic macros are a new feature in C99.  GNU CPP has supported them
-for a long time, but only with a named variable argument
-(<CODE>args...</CODE>, not <CODE>...</CODE> and <CODE>__VA_ARGS__</CODE>).  If you are
-concerned with portability to previous versions of GCC, you should use
-only named variable arguments.  On the other hand, if you are concerned
-with portability to other conforming implementations of C99, you should
-use only <CODE>__VA_ARGS__</CODE>.
-<BR><BR>
-Previous versions of CPP implemented the comma-deletion extension
-much more generally.  We have restricted it in this release to minimize
-the differences from C99.  To get the same effect with both this and
-previous versions of GCC, the token preceding the special <CODE>##</CODE> must
-be a comma, and there must be white space between that comma and
-whatever comes immediately before it:
-<PRE>#define lprintf(format, args...) fprintf (log, format , ##args)
-</PRE>
-See <A HREF="$$LINK(SEC86)">Differences from Previous Versions</A> for the gory details.
+[Main]
+Title=Variadic Macros
+
+[Top]
+A macro can be declared to accept a variable number of arguments much as
+a function can.  The syntax for defining the macro is similar to that of
+a function.  Here is an example:
+<PRE>#define lprintf(...) fprintf (log, __VA_ARGS__)
+</PRE>
+This kind of macro is called <U>variadic</U>.  When the macro is invoked,
+all the tokens in its argument list after the last named argument (this
+macro has none), including any commas, become the <U>variable
+argument</U>.  This sequence of tokens replaces the identifier
+<CODE>__VA_ARGS__</CODE> in the macro body wherever it appears.  Thus, we
+have this expansion:
+<PRE>lprintf (&quot;%s:%d: &quot;, input_file, lineno);
+  --&gt; fprintf (log, &quot;%s:%d: &quot;, input_file, lineno);
+</PRE>
+The variable argument is completely macro-expanded before it is inserted
+into the macro expansion, just like an ordinary argument.  You may use
+the <CODE>#</CODE> and <CODE>##</CODE> operators to stringify the variable argument
+or to paste its leading or trailing token with another token.  (But see
+below for an important special case for <CODE>##</CODE>.)
+<BR><BR>
+If your macro is complicated, you may want a more descriptive name for
+the variable argument than <CODE>__VA_ARGS__</CODE>.  CPP permits
+this, as an extension.  You may write an argument name immediately
+before the <CODE>...</CODE>; that name is used for the variable argument.
+The <CODE>lprintf</CODE> macro above could be written
+<PRE>#define lprintf(args...) fprintf (log, args)
+</PRE>
+using this extension.  You cannot use <CODE>__VA_ARGS__</CODE> and this
+extension in the same macro.
+<BR><BR>
+You can have named arguments as well as variable arguments in a variadic
+macro.  We could define <CODE>lprintf</CODE> like this, instead:
+<PRE>#define lprintf(format, ...) fprintf (log, format, __VA_ARGS__)
+</PRE>
+This formulation looks more descriptive, but unfortunately it is less
+flexible: you must now supply at least one argument after the format
+string.  In standard C, you cannot omit the comma separating the named
+argument from the variable arguments.  Furthermore, if you leave the
+variable argument empty, you will get a syntax error, because
+there will be an extra comma after the format string.
+<PRE>lprintf (&quot;success!\n&quot;, );
+  --&gt; fprintf (log, &quot;success!\n&quot;, );
+</PRE>
+GNU CPP has a pair of extensions which deal with this problem.  First,
+you are allowed to leave the variable argument out entirely:
+<PRE>lprintf (&quot;success!\n&quot;);
+  --&gt; fprintf (log, &quot;success!\n&quot;, );
+</PRE>
+Second, the <CODE>##</CODE> token paste operator has a special meaning when
+placed between a comma and a variable argument.  If you write
+<PRE>#define lprintf(format, ...) fprintf (log, format, ##__VA_ARGS__)
+</PRE>
+and the variable argument is left out when the <CODE>lprintf</CODE> macro is
+used, then the comma before the <CODE>##</CODE> will be deleted.  This does
+<I>not</I> happen if you pass an empty argument, nor does it happen if
+the token preceding <CODE>##</CODE> is anything other than a comma.
+<PRE>lprintf (&quot;success!\n&quot;)
+  --&gt; fprintf (log, &quot;success!\n&quot;);
+</PRE>
+The above explanation is ambiguous about the case where the only macro
+parameter is a variable arguments parameter, as it is meaningless to
+try to distinguish whether no argument at all is an empty argument or
+a missing argument.  In this case the C99 standard is clear that the
+comma must remain, however the existing GCC extension used to swallow
+the comma.  So CPP retains the comma when conforming to a specific C
+standard, and drops it otherwise.
+<BR><BR>
+C99 mandates that the only place the identifier <CODE>__VA_ARGS__</CODE>
+can appear is in the replacement list of a variadic macro.  It may not
+be used as a macro name, macro argument name, or within a different type
+of macro.  It may also be forbidden in open text; the standard is
+ambiguous.  We recommend you avoid using it except for its defined
+purpose.
+<BR><BR>
+Variadic macros are a new feature in C99.  GNU CPP has supported them
+for a long time, but only with a named variable argument
+(<CODE>args...</CODE>, not <CODE>...</CODE> and <CODE>__VA_ARGS__</CODE>).  If you are
+concerned with portability to previous versions of GCC, you should use
+only named variable arguments.  On the other hand, if you are concerned
+with portability to other conforming implementations of C99, you should
+use only <CODE>__VA_ARGS__</CODE>.
+<BR><BR>
+Previous versions of CPP implemented the comma-deletion extension
+much more generally.  We have restricted it in this release to minimize
+the differences from C99.  To get the same effect with both this and
+previous versions of GCC, the token preceding the special <CODE>##</CODE> must
+be a comma, and there must be white space between that comma and
+whatever comes immediately before it:
+<PRE>#define lprintf(format, args...) fprintf (log, format , ##args)
+</PRE>
+See <A HREF="$$LINK(SEC86)">Differences from Previous Versions</A> for the gory details.

+ 11 - 11
tigcc/doc/System/Info/cpp/SEC14.hss

@@ -1,11 +1,11 @@
-[Main]
-Title=Predefined Macros
-Subsections=SEC15, SEC15a, SEC16
-
-[Top]
-Several object-like macros are predefined; you use them without
-supplying their definitions.  They fall into three classes: standard,
-common, and system-specific.
-<BR><BR>
-In C++, there is a fourth category, the named operators.  They act like
-predefined macros, but you cannot undefine them.
+[Main]
+Title=Predefined Macros
+Subsections=SEC15, SEC15a, SEC16
+
+[Top]
+Several object-like macros are predefined; you use them without
+supplying their definitions.  They fall into three classes: standard,
+common, and system-specific.
+<BR><BR>
+In C++, there is a fourth category, the named operators.  They act like
+predefined macros, but you cannot undefine them.

+ 9 - 9
tigcc/doc/System/Info/cpp/SEC15.hss

@@ -1,9 +1,9 @@
-[Main]
-Title=Standard Predefined Macros
-Subsections=SEC15_FILE, SEC15_LINE, SEC15_DATE, SEC15_TIME, SEC15_STDC, SEC15_STDC_VERSION, SEC15_STDC_HOSTED
-
-[Top]
-The standard predefined macros are specified by the C and/or C++
-language standards, so they are available with all compilers that
-implement those standards.  Older compilers may not provide all of
-them.  Their names all start with double underscores.
+[Main]
+Title=Standard Predefined Macros
+Subsections=SEC15_FILE, SEC15_LINE, SEC15_DATE, SEC15_TIME, SEC15_STDC, SEC15_STDC_VERSION, SEC15_STDC_HOSTED
+
+[Top]
+The standard predefined macros are specified by the C and/or C++
+language standards, so they are available with all compilers that
+implement those standards.  Older compilers may not provide all of
+them.  Their names all start with double underscores.

+ 6 - 6
tigcc/doc/System/Info/cpp/SEC15_BASE_FILE.hss

@@ -1,7 +1,7 @@
-[Main]
-Title=__BASE_FILE__
-
-[Top]
-This macro expands to the name of the main input file, in the form
-of a C string constant.  This is the source file that was specified
+[Main]
+Title=__BASE_FILE__
+
+[Top]
+This macro expands to the name of the main input file, in the form
+of a C string constant.  This is the source file that was specified
 on the command line of the preprocessor or C compiler.

+ 8 - 8
tigcc/doc/System/Info/cpp/SEC15_CHAR_BIT.hss

@@ -1,8 +1,8 @@
-[Main]
-Title=__CHAR_BIT__
-
-[Top]
-Defined to the number of bits used in the representation of the
-<CODE><A HREF="$$INFOLINK(keywords/char)">char</A></CODE> data type.
-It exists to make the standard header given numerical limits work correctly.
-You should not use this macro directly; instead, include the appropriate headers.
+[Main]
+Title=__CHAR_BIT__
+
+[Top]
+Defined to the number of bits used in the representation of the
+<CODE><A HREF="$$INFOLINK(keywords/char)">char</A></CODE> data type.
+It exists to make the standard header given numerical limits work correctly.
+You should not use this macro directly; instead, include the appropriate headers.

+ 10 - 10
tigcc/doc/System/Info/cpp/SEC15_CHAR_UNSIGNED.hss

@@ -1,10 +1,10 @@
-[Main]
-Title=__CHAR_UNSIGNED__
-
-[Top]
-This macro is defined if and only if the data type <CODE><A HREF="$$INFOLINK(keywords/char)">char</A></CODE> is
-unsigned.  Note that this is not true on TIGCC by default, but it may be changed using
-some compiler command switches.  It exists to cause the standard header
-file <A HREF="$$LINK(limits.h/)">limits.h</A> to work correctly.  You should not refer to this
-macro yourself; instead, refer to the standard macros defined in
-<A HREF="$$LINK(limits.h/)">limits.h</A>.
+[Main]
+Title=__CHAR_UNSIGNED__
+
+[Top]
+This macro is defined if and only if the data type <CODE><A HREF="$$INFOLINK(keywords/char)">char</A></CODE> is
+unsigned.  Note that this is not true on TIGCC by default, but it may be changed using
+some compiler command switches.  It exists to cause the standard header
+file <A HREF="$$LINK(limits.h/)">limits.h</A> to work correctly.  You should not refer to this
+macro yourself; instead, refer to the standard macros defined in
+<A HREF="$$LINK(limits.h/)">limits.h</A>.

+ 12 - 12
tigcc/doc/System/Info/cpp/SEC15_DATE.hss

@@ -1,12 +1,12 @@
-[Main]
-Title=__DATE__
-
-[Top]
-This macro expands to a string constant that describes the date on which
-the preprocessor is being run.  The string constant contains eleven
-characters and looks like <CODE>&quot;Feb&nbsp;12&nbsp;1996&quot;</CODE>.  If the day of the
-month is less than 10, it is padded with a space on the left.
-<BR><BR>
-If GCC cannot determine the current date, it will emit a warning message
-(once per compilation) and <CODE>__DATE__</CODE> will expand to
-<CODE>&quot;???&nbsp;??&nbsp;????&quot;</CODE>.
+[Main]
+Title=__DATE__
+
+[Top]
+This macro expands to a string constant that describes the date on which
+the preprocessor is being run.  The string constant contains eleven
+characters and looks like <CODE>&quot;Feb&nbsp;12&nbsp;1996&quot;</CODE>.  If the day of the
+month is less than 10, it is padded with a space on the left.
+<BR><BR>
+If GCC cannot determine the current date, it will emit a warning message
+(once per compilation) and <CODE>__DATE__</CODE> will expand to
+<CODE>&quot;???&nbsp;??&nbsp;????&quot;</CODE>.

+ 9 - 9
tigcc/doc/System/Info/cpp/SEC15_FILE.hss

@@ -1,10 +1,10 @@
-[Main]
-Title=__FILE__
-
-[Top]
-This macro expands to the name of the current input file, in the form of
-a C string constant.  This is the path by which the preprocessor opened
-the file, not the short name specified in <CODE><A HREF="$$LINK(SEC6)">#include</A></CODE> or as the
-input file name argument.  For example,
-<CODE>&quot;/usr/local/include/myheader.h&quot;</CODE> is a possible expansion of this
+[Main]
+Title=__FILE__
+
+[Top]
+This macro expands to the name of the current input file, in the form of
+a C string constant.  This is the path by which the preprocessor opened
+the file, not the short name specified in <CODE><A HREF="$$LINK(SEC6)">#include</A></CODE> or as the
+input file name argument.  For example,
+<CODE>&quot;/usr/local/include/myheader.h&quot;</CODE> is a possible expansion of this
 macro.

+ 32 - 32
tigcc/doc/System/Info/cpp/SEC15_GNUC.hss

@@ -1,32 +1,32 @@
-[Main]
-Title=__GNUC__
-See Also=SEC15_GNUC_MINOR: __GNUC_MINOR__, SEC15_GNUC_PATCHLEVEL: __GNUC_PATCHLEVEL__
-
-[Top]
-This macro is always defined in GCC.  The value identifies the GCC major
-version number (currently '3').
-<BR><BR>
-If all you need to know is whether or not your program is being compiled
-by GCC, you can simply test <CODE>__GNUC__</CODE>.  If you need to write code
-which depends on a specific version, you must be more careful.  Each
-time the minor version is increased, the patch level is reset to zero;
-each time the major version is increased (which happens rarely), the
-minor version and patch level are reset.  If you wish to use the
-predefined macros directly in the conditional, you will need to write it
-like this:
-<PRE>/* Test for GCC &gt; 3.2.0 */
-#if __GNUC__ &gt; 3 || \
-    (__GNUC__ == 3 &amp;&amp; (__GNUC_MINOR__ &gt; 2 || \
-                       (__GNUC_MINOR__ == 2 &amp;&amp; \
-                        __GNUC_PATCHLEVEL__ &gt; 0))
-</PRE>
-Another approach is to use the predefined macros to
-calculate a single number, then compare that against a threshold:
-<PRE>#define GCC_VERSION (__GNUC__ * 10000 \
-                     + __GNUC_MINOR__ * 100 \
-                     + __GNUC_PATCHLEVEL__)
-...
-/* Test for GCC &gt; 3.2.0 */
-#if GCC_VERSION &gt; 30200
-</PRE>
-Many people find this form easier to understand.
+[Main]
+Title=__GNUC__
+See Also=SEC15_GNUC_MINOR: __GNUC_MINOR__, SEC15_GNUC_PATCHLEVEL: __GNUC_PATCHLEVEL__
+
+[Top]
+This macro is always defined in GCC.  The value identifies the GCC major
+version number (currently '3').
+<BR><BR>
+If all you need to know is whether or not your program is being compiled
+by GCC, you can simply test <CODE>__GNUC__</CODE>.  If you need to write code
+which depends on a specific version, you must be more careful.  Each
+time the minor version is increased, the patch level is reset to zero;
+each time the major version is increased (which happens rarely), the
+minor version and patch level are reset.  If you wish to use the
+predefined macros directly in the conditional, you will need to write it
+like this:
+<PRE>/* Test for GCC &gt; 3.2.0 */
+#if __GNUC__ &gt; 3 || \
+    (__GNUC__ == 3 &amp;&amp; (__GNUC_MINOR__ &gt; 2 || \
+                       (__GNUC_MINOR__ == 2 &amp;&amp; \
+                        __GNUC_PATCHLEVEL__ &gt; 0))
+</PRE>
+Another approach is to use the predefined macros to
+calculate a single number, then compare that against a threshold:
+<PRE>#define GCC_VERSION (__GNUC__ * 10000 \
+                     + __GNUC_MINOR__ * 100 \
+                     + __GNUC_PATCHLEVEL__)
+...
+/* Test for GCC &gt; 3.2.0 */
+#if GCC_VERSION &gt; 30200
+</PRE>
+Many people find this form easier to understand.

+ 8 - 8
tigcc/doc/System/Info/cpp/SEC15_GNUC_MINOR.hss

@@ -1,8 +1,8 @@
-[Main]
-Title=__GNUC_MINOR__
-
-[Top]
-The macro contains the minor version number of the compiler.  This can
-be used to work around differences between different releases of the
-compiler.  It must always be used together with
-<CODE><A HREF="$$LINK(SEC15_GNUC)">__GNUC__</A></CODE>.
+[Main]
+Title=__GNUC_MINOR__
+
+[Top]
+The macro contains the minor version number of the compiler.  This can
+be used to work around differences between different releases of the
+compiler.  It must always be used together with
+<CODE><A HREF="$$LINK(SEC15_GNUC)">__GNUC__</A></CODE>.

+ 13 - 13
tigcc/doc/System/Info/cpp/SEC15_GNUC_PATCHLEVEL.hss

@@ -1,13 +1,13 @@
-[Main]
-Title=__GNUC_PATCHLEVEL__
-
-[Top]
-The macro contains the bugfix version number of the compiler.  This can
-be used to work around differences between different releases of the
-compiler.  It must always be used together with
-<CODE><A HREF="$$LINK(SEC15_GNUC)">__GNUC__</A></CODE> and
-<CODE><A HREF="$$LINK(SEC15_GNUC_MINOR)">__GNUC_MINOR__</A></CODE>.
-<BR><BR>
-<CODE>__GNUC_PATCHLEVEL__</CODE> is new to GCC 3.0; it is also present in the
-widely-used development snapshots leading up to 3.0 (which identify
-themselves as GCC 2.96 or 2.97, depending on which snapshot you have).
+[Main]
+Title=__GNUC_PATCHLEVEL__
+
+[Top]
+The macro contains the bugfix version number of the compiler.  This can
+be used to work around differences between different releases of the
+compiler.  It must always be used together with
+<CODE><A HREF="$$LINK(SEC15_GNUC)">__GNUC__</A></CODE> and
+<CODE><A HREF="$$LINK(SEC15_GNUC_MINOR)">__GNUC_MINOR__</A></CODE>.
+<BR><BR>
+<CODE>__GNUC_PATCHLEVEL__</CODE> is new to GCC 3.0; it is also present in the
+widely-used development snapshots leading up to 3.0 (which identify
+themselves as GCC 2.96 or 2.97, depending on which snapshot you have).

+ 9 - 9
tigcc/doc/System/Info/cpp/SEC15_INCLUDE_LEVEL.hss

@@ -1,9 +1,9 @@
-[Main]
-Title=__INCLUDE_LEVEL__
-
-[Top]
-This macro expands to a decimal integer constant that represents the
-depth of nesting in include files.  The value of this macro is
-incremented on every <CODE><A HREF="$$LINK(SEC6)">#include</A></CODE> directive and decremented at the
-end of every included file.  It starts out at 0, its value within the
-base file specified on the command line.
+[Main]
+Title=__INCLUDE_LEVEL__
+
+[Top]
+This macro expands to a decimal integer constant that represents the
+depth of nesting in include files.  The value of this macro is
+incremented on every <CODE><A HREF="$$LINK(SEC6)">#include</A></CODE> directive and decremented at the
+end of every included file.  It starts out at 0, its value within the
+base file specified on the command line.

+ 11 - 11
tigcc/doc/System/Info/cpp/SEC15_INT_SHORT.hss

@@ -1,11 +1,11 @@
-[Main]
-Title=__INT_SHORT__
-
-[Top]
-TIGCC defines this macro if and only if the data type <CODE><A HREF="$$INFOLINK(keywords/int)">int</A></CODE>
-represents a short integer (<CODE><A HREF="$$INFOLINK(keywords/short)">short</A></CODE>).
-Note that this is always true in TIGCC by default, but it may be changed using
-some compiler command line switches.  It exists to cause the standard header
-file <A HREF="$$LINK(limits.h/)">limits.h</A> to work correctly.  You should not refer to this
-macro yourself; instead, refer to the standard macros defined in
-<A HREF="$$LINK(limits.h/)">limits.h</A>.
+[Main]
+Title=__INT_SHORT__
+
+[Top]
+TIGCC defines this macro if and only if the data type <CODE><A HREF="$$INFOLINK(keywords/int)">int</A></CODE>
+represents a short integer (<CODE><A HREF="$$INFOLINK(keywords/short)">short</A></CODE>).
+Note that this is always true in TIGCC by default, but it may be changed using
+some compiler command line switches.  It exists to cause the standard header
+file <A HREF="$$LINK(limits.h/)">limits.h</A> to work correctly.  You should not refer to this
+macro yourself; instead, refer to the standard macros defined in
+<A HREF="$$LINK(limits.h/)">limits.h</A>.

+ 35 - 35
tigcc/doc/System/Info/cpp/SEC15_LINE.hss

@@ -1,35 +1,35 @@
-[Main]
-Title=__LINE__
-
-[Top]
-This macro expands to the current input line number, in the form of a
-decimal integer constant.  While we call it a predefined macro, it's
-a pretty strange macro, since its &quot;definition&quot; changes with each
-new line of source code.
-<BR><BR>
-<CODE><A HREF="$$LINK(SEC15_FILE)">__FILE__</A></CODE> and <CODE>__LINE__</CODE> are useful in generating an error
-message to report an inconsistency detected by the program; the message
-can state the source line at which the inconsistency was detected.  For
-example,
-<PRE>fprintf (stderr, &quot;Internal error: &quot;
-                 &quot;negative string length &quot;
-                 &quot;%d at %s, line %d.&quot;,
-         length, __FILE__, __LINE__);
-</PRE>
-An <CODE>#include</CODE> directive changes the expansions of <CODE>__FILE__</CODE>
-and <CODE>__LINE__</CODE> to correspond to the included file.  At the end of
-that file, when processing resumes on the input file that contained
-the <CODE>#include</CODE> directive, the expansions of <CODE>__FILE__</CODE> and
-<CODE>__LINE__</CODE> revert to the values they had before the
-<CODE>#include</CODE> (but <CODE>__LINE__</CODE> is then incremented by one as
-processing moves to the line after the <CODE>#include</CODE>).
-<BR><BR>
-A <CODE>#line</CODE> directive changes <CODE>__LINE__</CODE>, and may change
-<CODE>__FILE__</CODE> as well.  See <A HREF="$$LINK(SEC41)">Line Control</A>.
-<BR><BR>
-C99 introduces <CODE>__func__</CODE>, and GCC has provided <CODE>__FUNCTION__</CODE>
-for a long time.  Both of these are strings containing the name of the
-current function (there are slight semantic differences; see <A HREF="$$INFOLINK(gnuexts/SEC102)">Function Names as Strings</A>).
-Neither of them is a macro; the preprocessor does not know the
-name of the current function.  They tend to be useful in conjunction
-with <CODE>__FILE__</CODE> and <CODE>__LINE__</CODE>, though.
+[Main]
+Title=__LINE__
+
+[Top]
+This macro expands to the current input line number, in the form of a
+decimal integer constant.  While we call it a predefined macro, it's
+a pretty strange macro, since its &quot;definition&quot; changes with each
+new line of source code.
+<BR><BR>
+<CODE><A HREF="$$LINK(SEC15_FILE)">__FILE__</A></CODE> and <CODE>__LINE__</CODE> are useful in generating an error
+message to report an inconsistency detected by the program; the message
+can state the source line at which the inconsistency was detected.  For
+example,
+<PRE>fprintf (stderr, &quot;Internal error: &quot;
+                 &quot;negative string length &quot;
+                 &quot;%d at %s, line %d.&quot;,
+         length, __FILE__, __LINE__);
+</PRE>
+An <CODE>#include</CODE> directive changes the expansions of <CODE>__FILE__</CODE>
+and <CODE>__LINE__</CODE> to correspond to the included file.  At the end of
+that file, when processing resumes on the input file that contained
+the <CODE>#include</CODE> directive, the expansions of <CODE>__FILE__</CODE> and
+<CODE>__LINE__</CODE> revert to the values they had before the
+<CODE>#include</CODE> (but <CODE>__LINE__</CODE> is then incremented by one as
+processing moves to the line after the <CODE>#include</CODE>).
+<BR><BR>
+A <CODE>#line</CODE> directive changes <CODE>__LINE__</CODE>, and may change
+<CODE>__FILE__</CODE> as well.  See <A HREF="$$LINK(SEC41)">Line Control</A>.
+<BR><BR>
+C99 introduces <CODE>__func__</CODE>, and GCC has provided <CODE>__FUNCTION__</CODE>
+for a long time.  Both of these are strings containing the name of the
+current function (there are slight semantic differences; see <A HREF="$$INFOLINK(gnuexts/SEC102)">Function Names as Strings</A>).
+Neither of them is a macro; the preprocessor does not know the
+name of the current function.  They tend to be useful in conjunction
+with <CODE>__FILE__</CODE> and <CODE>__LINE__</CODE>, though.

+ 13 - 13
tigcc/doc/System/Info/cpp/SEC15_MAX.hss

@@ -1,13 +1,13 @@
-[Main]
-Title=__SCHAR_MAX__, __SHRT_MAX__, __INT_MAX__, __LONG_MAX__, __LONG_LONG_MAX__
-
-[Top]
-Defined to the maximum value of the
-<CODE><A HREF="$$INFOLINK(keywords/signed)">signed</A>&nbsp;<A HREF="$$INFOLINK(keywords/char)">char</A></CODE>,
-<CODE><A HREF="$$INFOLINK(keywords/signed)">signed</A>&nbsp;<A HREF="$$INFOLINK(keywords/short)">short</A></CODE>,
-<CODE><A HREF="$$INFOLINK(keywords/signed)">signed</A>&nbsp;<A HREF="$$INFOLINK(keywords/int)">int</A></CODE>,
-<CODE><A HREF="$$INFOLINK(keywords/signed)">signed</A>&nbsp;<A HREF="$$INFOLINK(keywords/long)">long</A></CODE>, and
-<CODE><A HREF="$$INFOLINK(keywords/signed)">signed</A>&nbsp;<A HREF="$$INFOLINK(keywords/long)">long</A>&nbsp;<A HREF="$$INFOLINK(keywords/long)">long</A></CODE>
-types, respectively.  They exist to make the standard header given numerical limits
-work correctly.  You should not use these macros directly; instead, include
-the appropriate headers.
+[Main]
+Title=__SCHAR_MAX__, __SHRT_MAX__, __INT_MAX__, __LONG_MAX__, __LONG_LONG_MAX__
+
+[Top]
+Defined to the maximum value of the
+<CODE><A HREF="$$INFOLINK(keywords/signed)">signed</A>&nbsp;<A HREF="$$INFOLINK(keywords/char)">char</A></CODE>,
+<CODE><A HREF="$$INFOLINK(keywords/signed)">signed</A>&nbsp;<A HREF="$$INFOLINK(keywords/short)">short</A></CODE>,
+<CODE><A HREF="$$INFOLINK(keywords/signed)">signed</A>&nbsp;<A HREF="$$INFOLINK(keywords/int)">int</A></CODE>,
+<CODE><A HREF="$$INFOLINK(keywords/signed)">signed</A>&nbsp;<A HREF="$$INFOLINK(keywords/long)">long</A></CODE>, and
+<CODE><A HREF="$$INFOLINK(keywords/signed)">signed</A>&nbsp;<A HREF="$$INFOLINK(keywords/long)">long</A>&nbsp;<A HREF="$$INFOLINK(keywords/long)">long</A></CODE>
+types, respectively.  They exist to make the standard header given numerical limits
+work correctly.  You should not use these macros directly; instead, include
+the appropriate headers.

+ 7 - 7
tigcc/doc/System/Info/cpp/SEC15_NO_INLINE.hss

@@ -1,7 +1,7 @@
-[Main]
-Title=__NO_INLINE__
-
-[Top]
-This macro is defined if no functions will be inlined into
-their callers (when not optimizing, or when inlining has been
-specifically disabled by <B>'-fno-inline'</B>).
+[Main]
+Title=__NO_INLINE__
+
+[Top]
+This macro is defined if no functions will be inlined into
+their callers (when not optimizing, or when inlining has been
+specifically disabled by <B>'-fno-inline'</B>).

+ 12 - 12
tigcc/doc/System/Info/cpp/SEC15_OPTIMIZE.hss

@@ -1,12 +1,12 @@
-[Main]
-Title=__OPTIMIZE__
-See Also=SEC15_OPTIMIZE_SIZE: __OPTIMIZE_SIZE__, SEC15_NO_INLINE: __NO_INLINE__
-
-[Top]
-GNU CC defines this macro in optimizing compilations.  Along with
-<CODE><A HREF="$$LINK(SEC15_OPTIMIZE_SIZE)">__OPTIMIZE_SIZE__</A></CODE> and
-<CODE><A HREF="$$LINK(SEC15_NO_INLINE)">__NO_INLINE__</A></CODE>, it allows certain
-header files to define alternative macro definitions for some system
-library functions.  You should not refer to or test the definition of
-this macro unless you make very sure that programs will execute with the
-same effect regardless.  If it is defined, its value is 1.
+[Main]
+Title=__OPTIMIZE__
+See Also=SEC15_OPTIMIZE_SIZE: __OPTIMIZE_SIZE__, SEC15_NO_INLINE: __NO_INLINE__
+
+[Top]
+GNU CC defines this macro in optimizing compilations.  Along with
+<CODE><A HREF="$$LINK(SEC15_OPTIMIZE_SIZE)">__OPTIMIZE_SIZE__</A></CODE> and
+<CODE><A HREF="$$LINK(SEC15_NO_INLINE)">__NO_INLINE__</A></CODE>, it allows certain
+header files to define alternative macro definitions for some system
+library functions.  You should not refer to or test the definition of
+this macro unless you make very sure that programs will execute with the
+same effect regardless.  If it is defined, its value is 1.

+ 6 - 6
tigcc/doc/System/Info/cpp/SEC15_OPTIMIZE_SIZE.hss

@@ -1,6 +1,6 @@
-[Main]
-Title=__OPTIMIZE_SIZE__
-
-[Top]
-This macro is defined in addition to <A HREF="$$LINK(SEC15_OPTIMIZE)">__OPTIMIZE__</A>
-if the compiler is optimizing for size, not speed.
+[Main]
+Title=__OPTIMIZE_SIZE__
+
+[Top]
+This macro is defined in addition to <A HREF="$$LINK(SEC15_OPTIMIZE)">__OPTIMIZE__</A>
+if the compiler is optimizing for size, not speed.

+ 10 - 10
tigcc/doc/System/Info/cpp/SEC15_REGISTER_PREFIX.hss

@@ -1,10 +1,10 @@
-[Main]
-Title=__REGISTER_PREFIX__
-
-[Top]
-This macro expands to a single token (not a string constant) which is
-the prefix applied to CPU register names in assembly language for this
-target.  You can use it to write assembly that is usable in multiple
-environments.  For example, in the <CODE>m68k-aout</CODE> environment it
-expands to nothing, but in the <CODE>m68k-coff</CODE> environment (as TIGCC is) it expands
-to a single <CODE>%</CODE>.
+[Main]
+Title=__REGISTER_PREFIX__
+
+[Top]
+This macro expands to a single token (not a string constant) which is
+the prefix applied to CPU register names in assembly language for this
+target.  You can use it to write assembly that is usable in multiple
+environments.  For example, in the <CODE>m68k-aout</CODE> environment it
+expands to nothing, but in the <CODE>m68k-coff</CODE> environment (as TIGCC is) it expands
+to a single <CODE>%</CODE>.

+ 11 - 11
tigcc/doc/System/Info/cpp/SEC15_STDC.hss

@@ -1,11 +1,11 @@
-[Main]
-Title=__STDC__
-
-[Top]
-In normal operation, this macro expands to the constant 1, to signify
-that this compiler conforms to ISO Standard C.  If GNU CPP is used with
-a compiler other than GCC, this is not necessarily true; however, the
-preprocessor always conforms to the standard unless the
-<B>'-traditional-cpp'</B> option is used.
-<BR><BR>
-This macro is not defined if the <B>'-traditional-cpp'</B> option is used.
+[Main]
+Title=__STDC__
+
+[Top]
+In normal operation, this macro expands to the constant 1, to signify
+that this compiler conforms to ISO Standard C.  If GNU CPP is used with
+a compiler other than GCC, this is not necessarily true; however, the
+preprocessor always conforms to the standard unless the
+<B>'-traditional-cpp'</B> option is used.
+<BR><BR>
+This macro is not defined if the <B>'-traditional-cpp'</B> option is used.

+ 7 - 7
tigcc/doc/System/Info/cpp/SEC15_STDC_HOSTED.hss

@@ -1,7 +1,7 @@
-[Main]
-Title=__STDC_HOSTED__
-
-[Top]
-This macro is defined, with value 1, if the compiler's target is a
-<U>hosted environment</U>.  A hosted environment has the complete
-facilities of the standard C library available.
+[Main]
+Title=__STDC_HOSTED__
+
+[Top]
+This macro is defined, with value 1, if the compiler's target is a
+<U>hosted environment</U>.  A hosted environment has the complete
+facilities of the standard C library available.

+ 15 - 15
tigcc/doc/System/Info/cpp/SEC15_STDC_VERSION.hss

@@ -1,15 +1,15 @@
-[Main]
-Title=__STDC_VERSION__
-
-[Top]
-This macro expands to the C Standard's version number, a long integer
-constant of the form <CODE><I>yyyy</I><I>mm</I>L</CODE> where <I>yyyy</I> and
-<I>mm</I> are the year and month of the Standard version.  This signifies
-which version of the C Standard the compiler conforms to.
-<BR><BR>
-The value <CODE>199409L</CODE> signifies the 1989 C standard as amended in
-1994, which is the current default; the value <CODE>199901L</CODE> signifies
-the 1999 revision of the C standard.  Support for the 1999 revision is
-not yet complete.
-<BR><BR>
-This macro is not defined if the <B>'-traditional-cpp'</B> option is used.
+[Main]
+Title=__STDC_VERSION__
+
+[Top]
+This macro expands to the C Standard's version number, a long integer
+constant of the form <CODE><I>yyyy</I><I>mm</I>L</CODE> where <I>yyyy</I> and
+<I>mm</I> are the year and month of the Standard version.  This signifies
+which version of the C Standard the compiler conforms to.
+<BR><BR>
+The value <CODE>199409L</CODE> signifies the 1989 C standard as amended in
+1994, which is the current default; the value <CODE>199901L</CODE> signifies
+the 1999 revision of the C standard.  Support for the 1999 revision is
+not yet complete.
+<BR><BR>
+This macro is not defined if the <B>'-traditional-cpp'</B> option is used.

+ 10 - 10
tigcc/doc/System/Info/cpp/SEC15_STRICT_ANSI.hss

@@ -1,10 +1,10 @@
-[Main]
-Title=__STRICT_ANSI__
-
-[Top]
-GCC defines this macro if and only if the <B>'-ansi'</B> switch, or a
-<B>'-std'</B> switch specifying strict conformance to some version of ISO C,
-was specified when GCC was invoked.  It is defined to <CODE>1</CODE>.
-This macro exists primarily to direct GNU libc's header files to
-restrict their definitions to the minimal set found in the 1989 C
-standard.
+[Main]
+Title=__STRICT_ANSI__
+
+[Top]
+GCC defines this macro if and only if the <B>'-ansi'</B> switch, or a
+<B>'-std'</B> switch specifying strict conformance to some version of ISO C,
+was specified when GCC was invoked.  It is defined to <CODE>1</CODE>.
+This macro exists primarily to direct GNU libc's header files to
+restrict their definitions to the minimal set found in the 1989 C
+standard.

+ 11 - 11
tigcc/doc/System/Info/cpp/SEC15_TIME.hss

@@ -1,11 +1,11 @@
-[Main]
-Title=__TIME__
-
-[Top]
-This macro expands to a string constant that describes the time at
-which the preprocessor is being run.  The string constant contains
-eight characters and looks like <CODE>&quot;23:59:01&quot;</CODE>.
-<BR><BR>
-If GCC cannot determine the current time, it will emit a warning message
-(once per compilation) and <CODE>__TIME__</CODE> will expand to
-<CODE>&quot;??:??:??&quot;</CODE>.
+[Main]
+Title=__TIME__
+
+[Top]
+This macro expands to a string constant that describes the time at
+which the preprocessor is being run.  The string constant contains
+eight characters and looks like <CODE>&quot;23:59:01&quot;</CODE>.
+<BR><BR>
+If GCC cannot determine the current time, it will emit a warning message
+(once per compilation) and <CODE>__TIME__</CODE> will expand to
+<CODE>&quot;??:??:??&quot;</CODE>.

+ 13 - 13
tigcc/doc/System/Info/cpp/SEC15_USER_LABEL_PREFIX.hss

@@ -1,13 +1,13 @@
-[Main]
-Title=__USER_LABEL_PREFIX__
-
-[Top]
-This macro expands to a single token which is the prefix applied to
-user labels (symbols visible to C code) in assembly.  For example, in
-the <CODE>m68k-aout</CODE> environment it expands to an <CODE>_</CODE>, but in the
-<CODE>m68k-coff</CODE> environment (as TIGCC is) it expands to nothing.
-<BR><BR>
-This macro will have the correct definition even if
-<B>'-f(no-)underscores'</B> is in use, but it will not be correct if
-target-specific options that adjust this prefix are used (e.g. the
-OSF/rose <B>'-mno-underscores'</B> option).
+[Main]
+Title=__USER_LABEL_PREFIX__
+
+[Top]
+This macro expands to a single token which is the prefix applied to
+user labels (symbols visible to C code) in assembly.  For example, in
+the <CODE>m68k-aout</CODE> environment it expands to an <CODE>_</CODE>, but in the
+<CODE>m68k-coff</CODE> environment (as TIGCC is) it expands to nothing.
+<BR><BR>
+This macro will have the correct definition even if
+<B>'-f(no-)underscores'</B> is in use, but it will not be correct if
+target-specific options that adjust this prefix are used (e.g. the
+OSF/rose <B>'-mno-underscores'</B> option).

+ 8 - 8
tigcc/doc/System/Info/cpp/SEC15_VERSION.hss

@@ -1,8 +1,8 @@
-[Main]
-Title=__VERSION__
-
-[Top]
-This macro expands to a string constant which describes the version of
-the compiler in use.  You should not rely on its contents having any
-particular form, but it can be counted on to contain at least the
-release number.
+[Main]
+Title=__VERSION__
+
+[Top]
+This macro expands to a string constant which describes the version of
+the compiler in use.  You should not rely on its contents having any
+particular form, but it can be counted on to contain at least the
+release number.

+ 9 - 9
tigcc/doc/System/Info/cpp/SEC15a.hss

@@ -1,9 +1,9 @@
-[Main]
-Title=Common Predefined Macros
-Subsections=SEC15_GNUC, SEC15_GNUC_MINOR, SEC15_GNUC_PATCHLEVEL, SEC15_VERSION, SEC15_STRICT_ANSI, SEC15_BASE_FILE, SEC15_INCLUDE_LEVEL, SEC15_OPTIMIZE, SEC15_OPTIMIZE_SIZE, SEC15_NO_INLINE, SEC15_CHAR_UNSIGNED, SEC15_CHAR_BIT, SEC15_INT_SHORT, SEC15_MAX, SEC15_REGISTER_PREFIX, SEC15_USER_LABEL_PREFIX
-
-[Top]
-The common predefined macros are GNU C extensions.  They are available
-with the same meanings regardless of the machine or operating system on
-which you are using GNU C.  Their names all start with double
-underscores.
+[Main]
+Title=Common Predefined Macros
+Subsections=SEC15_GNUC, SEC15_GNUC_MINOR, SEC15_GNUC_PATCHLEVEL, SEC15_VERSION, SEC15_STRICT_ANSI, SEC15_BASE_FILE, SEC15_INCLUDE_LEVEL, SEC15_OPTIMIZE, SEC15_OPTIMIZE_SIZE, SEC15_NO_INLINE, SEC15_CHAR_UNSIGNED, SEC15_CHAR_BIT, SEC15_INT_SHORT, SEC15_MAX, SEC15_REGISTER_PREFIX, SEC15_USER_LABEL_PREFIX
+
+[Top]
+The common predefined macros are GNU C extensions.  They are available
+with the same meanings regardless of the machine or operating system on
+which you are using GNU C.  Their names all start with double
+underscores.

+ 37 - 37
tigcc/doc/System/Info/cpp/SEC16.hss

@@ -1,37 +1,37 @@
-[Main]
-Title=System-specific Predefined Macros
-
-[Top]
-The C preprocessor normally predefines several macros that indicate what
-type of system and machine is in use.  They are obviously different on
-each target supported by GCC.  TIGCC currently defines only two such macros:
-<CODE>mc68000</CODE> (predefined on most computers whose CPU is a Motorola 68000, 68010 or 68020) and
-<CODE>__embedded__</CODE>.  You can use <CODE>cpp&nbsp;-dM</CODE> to see all macros defined
-(see <A HREF="$$LINK(SEC44)">Invocation</A>).  All system-specific
-predefined macros expand to the constant 1, so you can test them with
-either <CODE><A HREF="$$LINK(SEC38)">#ifdef</A></CODE> or <CODE><A HREF="$$LINK(SEC34)">#if</A></CODE>.
-<BR><BR>
-The C standard requires that all system-specific macros be part of the
-<U>reserved namespace</U>.  All names which begin with two underscores,
-or an underscore and a capital letter, are reserved for the compiler and
-library to use as they wish.  However, historically system-specific
-macros have had names with no special prefix; for instance, it is common
-to find <CODE>unix</CODE> defined on Unix systems.  For all such macros, GCC
-provides a parallel macro with two underscores added at the beginning
-and the end.  If <CODE>unix</CODE> is defined, <CODE>__unix__</CODE> will be defined
-too.  There will never be more than two underscores; the parallel of
-<CODE>_mips</CODE> is <CODE>__mips__</CODE>.
-<BR><BR>
-When the <B>'-ansi'</B> option, or any <B>'-std'</B> option that
-requests strict conformance, is given to the compiler, all the
-system-specific predefined macros outside the reserved namespace are
-suppressed.  The parallel macros, inside the reserved namespace, remain
-defined.
-<BR><BR>
-We are slowly phasing out all predefined macros which are outside the
-reserved namespace.  You should never use them in new programs, and we
-encourage you to correct older code to use the parallel macros whenever
-you find it.  We don't recommend you use the system-specific macros that
-are in the reserved namespace, either.  It is better in the long run to
-check specifically for features you need, using a tool such as
-<CODE>autoconf</CODE>.
+[Main]
+Title=System-specific Predefined Macros
+
+[Top]
+The C preprocessor normally predefines several macros that indicate what
+type of system and machine is in use.  They are obviously different on
+each target supported by GCC.  TIGCC currently defines only two such macros:
+<CODE>mc68000</CODE> (predefined on most computers whose CPU is a Motorola 68000, 68010 or 68020) and
+<CODE>__embedded__</CODE>.  You can use <CODE>cpp&nbsp;-dM</CODE> to see all macros defined
+(see <A HREF="$$LINK(SEC44)">Invocation</A>).  All system-specific
+predefined macros expand to the constant 1, so you can test them with
+either <CODE><A HREF="$$LINK(SEC38)">#ifdef</A></CODE> or <CODE><A HREF="$$LINK(SEC34)">#if</A></CODE>.
+<BR><BR>
+The C standard requires that all system-specific macros be part of the
+<U>reserved namespace</U>.  All names which begin with two underscores,
+or an underscore and a capital letter, are reserved for the compiler and
+library to use as they wish.  However, historically system-specific
+macros have had names with no special prefix; for instance, it is common
+to find <CODE>unix</CODE> defined on Unix systems.  For all such macros, GCC
+provides a parallel macro with two underscores added at the beginning
+and the end.  If <CODE>unix</CODE> is defined, <CODE>__unix__</CODE> will be defined
+too.  There will never be more than two underscores; the parallel of
+<CODE>_mips</CODE> is <CODE>__mips__</CODE>.
+<BR><BR>
+When the <B>'-ansi'</B> option, or any <B>'-std'</B> option that
+requests strict conformance, is given to the compiler, all the
+system-specific predefined macros outside the reserved namespace are
+suppressed.  The parallel macros, inside the reserved namespace, remain
+defined.
+<BR><BR>
+We are slowly phasing out all predefined macros which are outside the
+reserved namespace.  You should never use them in new programs, and we
+encourage you to correct older code to use the parallel macros whenever
+you find it.  We don't recommend you use the system-specific macros that
+are in the reserved namespace, either.  It is better in the long run to
+check specifically for features you need, using a tool such as
+<CODE>autoconf</CODE>.

+ 72 - 72
tigcc/doc/System/Info/cpp/SEC17.hss

@@ -1,72 +1,72 @@
-[Main]
-Title=Stringification
-
-[Top]
-Sometimes you may want to convert a macro argument into a string
-constant.  Parameters are not replaced inside string constants, but you
-can use the <CODE>#</CODE> preprocessing operator instead.  When a macro
-parameter is used with a leading <CODE>#</CODE>, the preprocessor replaces it
-with the literal text of the actual argument, converted to a string
-constant.  Unlike normal parameter replacement, the argument is not
-macro-expanded first.  This is called <U>stringification</U>.
-<BR><BR>
-There is no way to combine an argument with surrounding text and
-stringify it all together.  Instead, you can write a series of adjacent
-string constants and stringified arguments.  The preprocessor will
-replace the stringified arguments with string constants.  The C
-compiler will then combine all the adjacent string constants into one
-long string.
-<BR><BR>
-Here is an example of a macro definition that uses stringification:
-<PRE>#define WARN_IF(EXP) \
-do { if (EXP) \
-        fprintf (stderr, &quot;Warning: &quot; #EXP &quot;\n&quot;); } \
-while (0)
-WARN_IF (x == 0);
-     expands to do { if (x == 0)
-           fprintf (stderr, &quot;Warning: &quot; &quot;x == 0&quot; &quot;\n&quot;); } while (0);
-</PRE>
-The argument for <CODE>EXP</CODE> is substituted once, as-is, into the
-<CODE>if</CODE> statement, and once, stringified, into the argument to
-<CODE>fprintf</CODE>.  If <CODE>x</CODE> were a macro, it would be expanded in the
-<CODE>if</CODE> statement, but not in the string.
-<BR><BR>
-The <CODE>do</CODE> and <CODE>while&nbsp;(0)</CODE> are a kludge to make it possible to
-write <CODE>WARN_IF&nbsp;(<I>arg</I>);</CODE>, which the resemblance of
-<CODE>WARN_IF</CODE> to a function would make C programmers want to do; see
-<A HREF="$$LINK(SEC25)">Swallowing the Semicolon</A>.
-<BR><BR>
-Stringification in C involves more than putting double-quote characters
-around the fragment.  The preprocessor backslash-escapes the quotes
-surrounding embedded string constants, and all backslashes within string and
-character constants, in order to get a valid C string constant with the
-proper contents.  Thus, stringifying <CODE>p&nbsp;=&nbsp;&quot;foo\n&quot;;</CODE> results in
-<CODE>&quot;p&nbsp;=&nbsp;\&quot;foo\\n\&quot;;&quot;</CODE>.  However, backslashes that are not inside string
-or character constants are not duplicated: <CODE>\n</CODE> by itself
-stringifies to <CODE>&quot;\n&quot;</CODE>.
-<BR><BR>
-All leading and trailing whitespace in text being stringified is
-ignored.  Any sequence of whitespace in the middle of the text is
-converted to a single space in the stringified result.  Comments are
-replaced by whitespace long before stringification happens, so they
-never appear in stringified text.
-<BR><BR>
-There is no way to convert a macro argument into a character constant.
-<BR><BR>
-If you want to stringify the result of expansion of a macro argument,
-you have to use two levels of macros.
-<PRE>#define xstr(s) str(s)
-#define str(s) #s
-#define foo 4
-str (foo)
-     expands to &quot;foo&quot;
-xstr (foo)
-     expands to xstr (4)
-     expands to str (4)
-     expands to &quot;4&quot;
-</PRE>
-<CODE>s</CODE> is stringified when it is used in <CODE>str</CODE>, so it is not
-macro-expanded first.  But <CODE>s</CODE> is an ordinary argument to
-<CODE>xstr</CODE>, so it is completely macro-expanded before <CODE>xstr</CODE>
-itself is expanded (see <A HREF="$$LINK(SEC28)">Argument Prescan</A>).  Therefore, by the time
-<CODE>str</CODE> gets to its argument, it has already been macro-expanded.
+[Main]
+Title=Stringification
+
+[Top]
+Sometimes you may want to convert a macro argument into a string
+constant.  Parameters are not replaced inside string constants, but you
+can use the <CODE>#</CODE> preprocessing operator instead.  When a macro
+parameter is used with a leading <CODE>#</CODE>, the preprocessor replaces it
+with the literal text of the actual argument, converted to a string
+constant.  Unlike normal parameter replacement, the argument is not
+macro-expanded first.  This is called <U>stringification</U>.
+<BR><BR>
+There is no way to combine an argument with surrounding text and
+stringify it all together.  Instead, you can write a series of adjacent
+string constants and stringified arguments.  The preprocessor will
+replace the stringified arguments with string constants.  The C
+compiler will then combine all the adjacent string constants into one
+long string.
+<BR><BR>
+Here is an example of a macro definition that uses stringification:
+<PRE>#define WARN_IF(EXP) \
+do { if (EXP) \
+        fprintf (stderr, &quot;Warning: &quot; #EXP &quot;\n&quot;); } \
+while (0)
+WARN_IF (x == 0);
+     expands to do { if (x == 0)
+           fprintf (stderr, &quot;Warning: &quot; &quot;x == 0&quot; &quot;\n&quot;); } while (0);
+</PRE>
+The argument for <CODE>EXP</CODE> is substituted once, as-is, into the
+<CODE>if</CODE> statement, and once, stringified, into the argument to
+<CODE>fprintf</CODE>.  If <CODE>x</CODE> were a macro, it would be expanded in the
+<CODE>if</CODE> statement, but not in the string.
+<BR><BR>
+The <CODE>do</CODE> and <CODE>while&nbsp;(0)</CODE> are a kludge to make it possible to
+write <CODE>WARN_IF&nbsp;(<I>arg</I>);</CODE>, which the resemblance of
+<CODE>WARN_IF</CODE> to a function would make C programmers want to do; see
+<A HREF="$$LINK(SEC25)">Swallowing the Semicolon</A>.
+<BR><BR>
+Stringification in C involves more than putting double-quote characters
+around the fragment.  The preprocessor backslash-escapes the quotes
+surrounding embedded string constants, and all backslashes within string and
+character constants, in order to get a valid C string constant with the
+proper contents.  Thus, stringifying <CODE>p&nbsp;=&nbsp;&quot;foo\n&quot;;</CODE> results in
+<CODE>&quot;p&nbsp;=&nbsp;\&quot;foo\\n\&quot;;&quot;</CODE>.  However, backslashes that are not inside string
+or character constants are not duplicated: <CODE>\n</CODE> by itself
+stringifies to <CODE>&quot;\n&quot;</CODE>.
+<BR><BR>
+All leading and trailing whitespace in text being stringified is
+ignored.  Any sequence of whitespace in the middle of the text is
+converted to a single space in the stringified result.  Comments are
+replaced by whitespace long before stringification happens, so they
+never appear in stringified text.
+<BR><BR>
+There is no way to convert a macro argument into a character constant.
+<BR><BR>
+If you want to stringify the result of expansion of a macro argument,
+you have to use two levels of macros.
+<PRE>#define xstr(s) str(s)
+#define str(s) #s
+#define foo 4
+str (foo)
+     expands to &quot;foo&quot;
+xstr (foo)
+     expands to xstr (4)
+     expands to str (4)
+     expands to &quot;4&quot;
+</PRE>
+<CODE>s</CODE> is stringified when it is used in <CODE>str</CODE>, so it is not
+macro-expanded first.  But <CODE>s</CODE> is an ordinary argument to
+<CODE>xstr</CODE>, so it is completely macro-expanded before <CODE>xstr</CODE>
+itself is expanded (see <A HREF="$$LINK(SEC28)">Argument Prescan</A>).  Therefore, by the time
+<CODE>str</CODE> gets to its argument, it has already been macro-expanded.

+ 72 - 72
tigcc/doc/System/Info/cpp/SEC18.hss

@@ -1,72 +1,72 @@
-[Main]
-Title=Concatenation
-
-[Top]
-It is often useful to merge two tokens into one while expanding macros.
-This is called <U>token pasting</U> or <U>token concatenation</U>.  The
-<CODE>##</CODE> preprocessing operator performs token pasting.  When a macro
-is expanded, the two tokens on either side of each <CODE>##</CODE> operator
-are combined into a single token, which then replaces the <CODE>##</CODE> and
-the two original tokens in the macro expansion.  Usually both will be
-identifiers, or one will be an identifier and the other a preprocessing
-number.  When pasted, they make a longer identifier.  This isn't the
-only valid case.  It is also possible to concatenate two numbers (or a
-number and a name, such as <CODE>1.5</CODE> and <CODE>e3</CODE>) into a number.
-Also, multi-character operators such as <CODE>+=</CODE> can be formed by
-token pasting.
-<BR><BR>
-However, two tokens that don't together form a valid token cannot be
-pasted together.  For example, you cannot concatenate <CODE>x</CODE> with
-<CODE>+</CODE> in either order.  If you try, the preprocessor issues a warning
-and emits the two tokens.  Whether it puts white space between the
-tokens is undefined.  It is common to find unnecessary uses of <CODE>##</CODE>
-in complex macros.  If you get this warning, it is likely that you can
-simply remove the <CODE>##</CODE>.
-<BR><BR>
-Both the tokens combined by <CODE>##</CODE> could come from the macro body,
-but you could just as well write them as one token in the first place.
-Token pasting is most useful when one or both of the tokens comes from a
-macro argument.  If either of the tokens next to an <CODE>##</CODE> is a
-parameter name, it is replaced by its actual argument before <CODE>##</CODE>
-executes.  As with stringification, the actual argument is not
-macro-expanded first.  If the argument is empty, that <CODE>##</CODE> has no
-effect.
-<BR><BR>
-Keep in mind that the C preprocessor converts comments to whitespace
-before macros are even considered.  Therefore, you cannot create a
-comment by concatenating <CODE>/</CODE> and <CODE>*</CODE>.  You can put as much
-whitespace between <CODE>##</CODE> and its operands as you like, including
-comments, and you can put comments in arguments that will be
-concatenated.  However, it is an error if <CODE>##</CODE> appears at either
-end of a macro body.
-<BR><BR>
-Consider a C program that interprets named commands.  There probably
-needs to be a table of commands, perhaps an array of structures declared
-as follows:
-<PRE>struct command
-{
-  char *name;
-  void (*function) (void);
-};
-
-struct command commands[] =
-{
-  { &quot;quit&quot;, quit_command },
-  { &quot;help&quot;, help_command },
-  ...
-};
-</PRE>
-It would be cleaner not to have to give each command name twice, once in
-the string constant and once in the function name.  A macro which takes the
-name of a command as an argument can make this unnecessary.  The string
-constant can be created with stringification, and the function name by
-concatenating the argument with <CODE>_command</CODE>.  Here is how it is done:
-<PRE>#define COMMAND(NAME)  { #NAME, NAME ## _command }
-
-struct command commands[] =
-{
-  COMMAND (quit),
-  COMMAND (help),
-  ...
-};
-</PRE>
+[Main]
+Title=Concatenation
+
+[Top]
+It is often useful to merge two tokens into one while expanding macros.
+This is called <U>token pasting</U> or <U>token concatenation</U>.  The
+<CODE>##</CODE> preprocessing operator performs token pasting.  When a macro
+is expanded, the two tokens on either side of each <CODE>##</CODE> operator
+are combined into a single token, which then replaces the <CODE>##</CODE> and
+the two original tokens in the macro expansion.  Usually both will be
+identifiers, or one will be an identifier and the other a preprocessing
+number.  When pasted, they make a longer identifier.  This isn't the
+only valid case.  It is also possible to concatenate two numbers (or a
+number and a name, such as <CODE>1.5</CODE> and <CODE>e3</CODE>) into a number.
+Also, multi-character operators such as <CODE>+=</CODE> can be formed by
+token pasting.
+<BR><BR>
+However, two tokens that don't together form a valid token cannot be
+pasted together.  For example, you cannot concatenate <CODE>x</CODE> with
+<CODE>+</CODE> in either order.  If you try, the preprocessor issues a warning
+and emits the two tokens.  Whether it puts white space between the
+tokens is undefined.  It is common to find unnecessary uses of <CODE>##</CODE>
+in complex macros.  If you get this warning, it is likely that you can
+simply remove the <CODE>##</CODE>.
+<BR><BR>
+Both the tokens combined by <CODE>##</CODE> could come from the macro body,
+but you could just as well write them as one token in the first place.
+Token pasting is most useful when one or both of the tokens comes from a
+macro argument.  If either of the tokens next to an <CODE>##</CODE> is a
+parameter name, it is replaced by its actual argument before <CODE>##</CODE>
+executes.  As with stringification, the actual argument is not
+macro-expanded first.  If the argument is empty, that <CODE>##</CODE> has no
+effect.
+<BR><BR>
+Keep in mind that the C preprocessor converts comments to whitespace
+before macros are even considered.  Therefore, you cannot create a
+comment by concatenating <CODE>/</CODE> and <CODE>*</CODE>.  You can put as much
+whitespace between <CODE>##</CODE> and its operands as you like, including
+comments, and you can put comments in arguments that will be
+concatenated.  However, it is an error if <CODE>##</CODE> appears at either
+end of a macro body.
+<BR><BR>
+Consider a C program that interprets named commands.  There probably
+needs to be a table of commands, perhaps an array of structures declared
+as follows:
+<PRE>struct command
+{
+  char *name;
+  void (*function) (void);
+};
+
+struct command commands[] =
+{
+  { &quot;quit&quot;, quit_command },
+  { &quot;help&quot;, help_command },
+  ...
+};
+</PRE>
+It would be cleaner not to have to give each command name twice, once in
+the string constant and once in the function name.  A macro which takes the
+name of a command as an argument can make this unnecessary.  The string
+constant can be created with stringification, and the function name by
+concatenating the argument with <CODE>_command</CODE>.  Here is how it is done:
+<PRE>#define COMMAND(NAME)  { #NAME, NAME ## _command }
+
+struct command commands[] =
+{
+  COMMAND (quit),
+  COMMAND (help),
+  ...
+};
+</PRE>

+ 58 - 58
tigcc/doc/System/Info/cpp/SEC19.hss

@@ -1,58 +1,58 @@
-[Main]
-Title=Undefining and Redefining Macros
-
-[Top]
-If a macro ceases to be useful, it may be <U>undefined</U> with the
-<CODE>#undef</CODE> directive.  <CODE>#undef</CODE> takes a single argument, the
-name of the macro to undefine.  You use the bare macro name, even if the
-macro is function-like.  It is an error if anything appears on the line
-after the macro name.  <CODE>#undef</CODE> has no effect if the name is not a
-macro.
-<PRE>#define FOO 4
-x = FOO;        expands to x = 4;
-#undef FOO
-x = FOO;        expands to x = FOO;
-</PRE>
-Once a macro has been undefined, that identifier may be <U>redefined</U>
-as a macro by a subsequent <CODE>#define</CODE> directive.  The new definition
-need not have any resemblance to the old definition.
-<BR><BR>
-However, if an identifier which is currently a macro is redefined, then
-the new definition must be <U>effectively the same</U> as the old one.
-Two macro definitions are effectively the same if:
-<UL>
-<LI>
-Both are the same type of macro (object- or function-like).
-<BR><BR>
-</LI>
-<LI>
-All the tokens of the replacement list are the same.
-<BR><BR>
-</LI>
-<LI>
-If there are any parameters, they are the same.
-<BR><BR>
-</LI>
-<LI>
-Whitespace appears in the same places in both.  It need not be
-exactly the same amount of whitespace, though.  Remember that comments
-count as whitespace.
-</LI>
-</UL>
-These definitions are effectively the same:
-<PRE>#define FOUR (2 + 2)
-#define FOUR         (2    +    2)
-#define FOUR (2 /* two */ + 2)
-</PRE>
-but these are not:
-<PRE>#define FOUR (2 + 2)
-#define FOUR ( 2+2 )
-#define FOUR (2 * 2)
-#define FOUR(score,and,seven,years,ago) (2 + 2)
-</PRE>
-If a macro is redefined with a definition that is not effectively the
-same as the old one, the preprocessor issues a warning and changes the
-macro to use the new definition.  If the new definition is effectively
-the same, the redefinition is silently ignored.  This allows, for
-instance, two different headers to define a common macro.  The
-preprocessor will only complain if the definitions do not match.
+[Main]
+Title=Undefining and Redefining Macros
+
+[Top]
+If a macro ceases to be useful, it may be <U>undefined</U> with the
+<CODE>#undef</CODE> directive.  <CODE>#undef</CODE> takes a single argument, the
+name of the macro to undefine.  You use the bare macro name, even if the
+macro is function-like.  It is an error if anything appears on the line
+after the macro name.  <CODE>#undef</CODE> has no effect if the name is not a
+macro.
+<PRE>#define FOO 4
+x = FOO;        expands to x = 4;
+#undef FOO
+x = FOO;        expands to x = FOO;
+</PRE>
+Once a macro has been undefined, that identifier may be <U>redefined</U>
+as a macro by a subsequent <CODE>#define</CODE> directive.  The new definition
+need not have any resemblance to the old definition.
+<BR><BR>
+However, if an identifier which is currently a macro is redefined, then
+the new definition must be <U>effectively the same</U> as the old one.
+Two macro definitions are effectively the same if:
+<UL>
+<LI>
+Both are the same type of macro (object- or function-like).
+<BR><BR>
+</LI>
+<LI>
+All the tokens of the replacement list are the same.
+<BR><BR>
+</LI>
+<LI>
+If there are any parameters, they are the same.
+<BR><BR>
+</LI>
+<LI>
+Whitespace appears in the same places in both.  It need not be
+exactly the same amount of whitespace, though.  Remember that comments
+count as whitespace.
+</LI>
+</UL>
+These definitions are effectively the same:
+<PRE>#define FOUR (2 + 2)
+#define FOUR         (2    +    2)
+#define FOUR (2 /* two */ + 2)
+</PRE>
+but these are not:
+<PRE>#define FOUR (2 + 2)
+#define FOUR ( 2+2 )
+#define FOUR (2 * 2)
+#define FOUR(score,and,seven,years,ago) (2 + 2)
+</PRE>
+If a macro is redefined with a definition that is not effectively the
+same as the old one, the preprocessor issues a warning and changes the
+macro to use the new definition.  If the new definition is effectively
+the same, the redefinition is silently ignored.  This allows, for
+instance, two different headers to define a common macro.  The
+preprocessor will only complain if the definitions do not match.

+ 52 - 52
tigcc/doc/System/Info/cpp/SEC2.hss

@@ -1,52 +1,52 @@
-[Main]
-Title=Preprocessor Overview
-Subsections=SEC3, SEC3a, SEC3b
-
-[Top]
-The C preprocessor, often known as <U>cpp</U>, is a <U>macro processor</U>
-that is used automatically by the C compiler to transform your program
-before compilation.  It is called a macro processor because it allows
-you to define <U>macros</U>, which are brief abbreviations for longer
-constructs.
-<BR><BR>
-The C preprocessor is intended to be used only with C, C++, and
-Objective-C source code.  In the past, it has been abused as a general
-text processor.  It will choke on input which does not obey C's lexical
-rules.  For example, apostrophes will be interpreted as the beginning of
-character constants, and cause errors.  Also, you cannot rely on it
-preserving characteristics of the input which are not significant to
-C-family languages.  If a Makefile is preprocessed, all the hard tabs
-will be removed, and the Makefile will not work.
-<BR><BR>
-Having said that, you can often get away with using cpp on things which
-are not C.  Other Algol-ish programming languages are often safe
-(Pascal, Ada, etc.) So is assembly, with caution.  <B>'-traditional-cpp'</B>
-mode preserves more white space, and is otherwise more permissive.  Many
-of the problems can be avoided by writing C or C++ style comments
-instead of native language comments, and keeping macros simple.
-<BR><BR>
-Wherever possible, you should use a preprocessor geared to the language
-you are writing in.  Modern versions of the GNU assembler have macro
-facilities.  Most high level programming languages have their own
-conditional compilation and inclusion mechanism.  If all else fails,
-try a true general text processor, such as GNU M4.
-<BR><BR>
-C preprocessors vary in some details.  This manual discusses the GNU C
-preprocessor, which provides a small superset of the features of ISO
-Standard C.  In its default mode, the GNU C preprocessor does not do a
-few things required by the standard.  These are features which are
-rarely, if ever, used, and may cause surprising changes to the meaning
-of a program which does not expect them.  To get strict ISO Standard C,
-you should use the <B>'-std=c89'</B> or <B>'-std=c99'</B> options, depending
-on which version of the standard you want.  To get all the mandatory
-diagnostics, you must also use <B>'-pedantic'</B>.  See <A HREF="$$LINK(SEC44)">Invocation</A>.
-<BR><BR>
-This manual describes the behavior of the ISO preprocessor.  To
-minimize gratuitous differences, where the ISO preprocessor's
-behavior does not conflict with traditional semantics, the
-traditional preprocessor should behave the same way.  The various
-differences that do exist are detailed in the section <A HREF="$$LINK(SEC70)">Traditional
-Mode</A>.
-<BR><BR>
-For clarity, unless noted otherwise, references to <CODE>CPP</CODE> in this
-manual refer to GNU CPP.
+[Main]
+Title=Preprocessor Overview
+Subsections=SEC3, SEC3a, SEC3b
+
+[Top]
+The C preprocessor, often known as <U>cpp</U>, is a <U>macro processor</U>
+that is used automatically by the C compiler to transform your program
+before compilation.  It is called a macro processor because it allows
+you to define <U>macros</U>, which are brief abbreviations for longer
+constructs.
+<BR><BR>
+The C preprocessor is intended to be used only with C, C++, and
+Objective-C source code.  In the past, it has been abused as a general
+text processor.  It will choke on input which does not obey C's lexical
+rules.  For example, apostrophes will be interpreted as the beginning of
+character constants, and cause errors.  Also, you cannot rely on it
+preserving characteristics of the input which are not significant to
+C-family languages.  If a Makefile is preprocessed, all the hard tabs
+will be removed, and the Makefile will not work.
+<BR><BR>
+Having said that, you can often get away with using cpp on things which
+are not C.  Other Algol-ish programming languages are often safe
+(Pascal, Ada, etc.) So is assembly, with caution.  <B>'-traditional-cpp'</B>
+mode preserves more white space, and is otherwise more permissive.  Many
+of the problems can be avoided by writing C or C++ style comments
+instead of native language comments, and keeping macros simple.
+<BR><BR>
+Wherever possible, you should use a preprocessor geared to the language
+you are writing in.  Modern versions of the GNU assembler have macro
+facilities.  Most high level programming languages have their own
+conditional compilation and inclusion mechanism.  If all else fails,
+try a true general text processor, such as GNU M4.
+<BR><BR>
+C preprocessors vary in some details.  This manual discusses the GNU C
+preprocessor, which provides a small superset of the features of ISO
+Standard C.  In its default mode, the GNU C preprocessor does not do a
+few things required by the standard.  These are features which are
+rarely, if ever, used, and may cause surprising changes to the meaning
+of a program which does not expect them.  To get strict ISO Standard C,
+you should use the <B>'-std=c89'</B> or <B>'-std=c99'</B> options, depending
+on which version of the standard you want.  To get all the mandatory
+diagnostics, you must also use <B>'-pedantic'</B>.  See <A HREF="$$LINK(SEC44)">Invocation</A>.
+<BR><BR>
+This manual describes the behavior of the ISO preprocessor.  To
+minimize gratuitous differences, where the ISO preprocessor's
+behavior does not conflict with traditional semantics, the
+traditional preprocessor should behave the same way.  The various
+differences that do exist are detailed in the section <A HREF="$$LINK(SEC70)">Traditional
+Mode</A>.
+<BR><BR>
+For clarity, unless noted otherwise, references to <CODE>CPP</CODE> in this
+manual refer to GNU CPP.

+ 35 - 35
tigcc/doc/System/Info/cpp/SEC20.hss

@@ -1,35 +1,35 @@
-[Main]
-Title=Directives Within Macro Arguments
-
-[Top]
-Occasionally it is convenient to use preprocessor directives within
-the arguments of a macro.  The C and C++ standards declare that
-behavior in these cases is undefined.
-<BR><BR>
-Versions of CPP prior to 3.2 would reject such constructs with an
-error message.  This was the only syntactic difference between normal
-functions and function-like macros, so it seemed attractive to remove
-this limitation, and people would often be surprised that they could
-not use macros in this way.  Moreover, sometimes people would use
-conditional compilation in the argument list to a normal library
-function like <CODE>printf</CODE>, only to find that after a library upgrade
-<CODE>printf</CODE> had changed to be a function-like macro, and their code
-would no longer compile.  So from version 3.2 we changed CPP to
-successfully process arbitrary directives within macro arguments in
-exactly the same way as it would have processed the directive were the
-function-like macro invocation not present.
-<BR><BR>
-If, within a macro invocation, that macro is redefined, then the new
-definition takes effect in time for argument pre-expansion, but the
-original definition is still used for argument replacement.  Here is a
-pathological example:
-<PRE>#define f(x) x x
-f (1
-#undef f
-#define f 2
-f)
-</PRE>
-which expands to
-<PRE>1 2 1 2
-</PRE>
-with the semantics described above.
+[Main]
+Title=Directives Within Macro Arguments
+
+[Top]
+Occasionally it is convenient to use preprocessor directives within
+the arguments of a macro.  The C and C++ standards declare that
+behavior in these cases is undefined.
+<BR><BR>
+Versions of CPP prior to 3.2 would reject such constructs with an
+error message.  This was the only syntactic difference between normal
+functions and function-like macros, so it seemed attractive to remove
+this limitation, and people would often be surprised that they could
+not use macros in this way.  Moreover, sometimes people would use
+conditional compilation in the argument list to a normal library
+function like <CODE>printf</CODE>, only to find that after a library upgrade
+<CODE>printf</CODE> had changed to be a function-like macro, and their code
+would no longer compile.  So from version 3.2 we changed CPP to
+successfully process arbitrary directives within macro arguments in
+exactly the same way as it would have processed the directive were the
+function-like macro invocation not present.
+<BR><BR>
+If, within a macro invocation, that macro is redefined, then the new
+definition takes effect in time for argument pre-expansion, but the
+original definition is still used for argument replacement.  Here is a
+pathological example:
+<PRE>#define f(x) x x
+f (1
+#undef f
+#define f 2
+f)
+</PRE>
+which expands to
+<PRE>1 2 1 2
+</PRE>
+with the semantics described above.

+ 8 - 8
tigcc/doc/System/Info/cpp/SEC22.hss

@@ -1,8 +1,8 @@
-[Main]
-Title=Macro Pitfalls
-Subsections=SEC23, SEC24, SEC25, SEC26, SEC27, SEC28, SEC30
-
-[Top]
-In this section, we describe some special rules that apply to macros and
-macro expansion, and point out certain cases in which the rules have
-counter-intuitive consequences that you must watch out for.
+[Main]
+Title=Macro Pitfalls
+Subsections=SEC23, SEC24, SEC25, SEC26, SEC27, SEC28, SEC30
+
+[Top]
+In this section, we describe some special rules that apply to macros and
+macro expansion, and point out certain cases in which the rules have
+counter-intuitive consequences that you must watch out for.

+ 27 - 27
tigcc/doc/System/Info/cpp/SEC23.hss

@@ -1,27 +1,27 @@
-[Main]
-Title=Misnesting
-
-[Top]
-When a macro is called with arguments, the arguments are substituted
-into the macro body and the result is checked, together with the rest of
-the input file, for more macro calls.  It is possible to piece together
-a macro call coming partially from the macro body and partially from the
-arguments.  For example,
-<PRE>#define twice(x) (2*(x))
-#define call_with_1(x) x(1)
-call_with_1 (twice)
-     expands to twice(1)
-     expands to (2*(1))
-</PRE>
-Macro definitions do not have to have balanced parentheses.  By writing
-an unbalanced open parenthesis in a macro body, it is possible to create
-a macro call that begins inside the macro body but ends outside of it.
-For example,
-<PRE>#define strange(file) fprintf (file, &quot;%s %d&quot;,
-...
-strange(stderr) p, 35)
-     expands to fprintf (stderr, &quot;%s %d&quot;, p, 35)
-</PRE>
-The ability to piece together a macro call can be useful, but the use of
-unbalanced open parentheses in a macro body is just confusing, and
-should be avoided.
+[Main]
+Title=Misnesting
+
+[Top]
+When a macro is called with arguments, the arguments are substituted
+into the macro body and the result is checked, together with the rest of
+the input file, for more macro calls.  It is possible to piece together
+a macro call coming partially from the macro body and partially from the
+arguments.  For example,
+<PRE>#define twice(x) (2*(x))
+#define call_with_1(x) x(1)
+call_with_1 (twice)
+     expands to twice(1)
+     expands to (2*(1))
+</PRE>
+Macro definitions do not have to have balanced parentheses.  By writing
+an unbalanced open parenthesis in a macro body, it is possible to create
+a macro call that begins inside the macro body but ends outside of it.
+For example,
+<PRE>#define strange(file) fprintf (file, &quot;%s %d&quot;,
+...
+strange(stderr) p, 35)
+     expands to fprintf (stderr, &quot;%s %d&quot;, p, 35)
+</PRE>
+The ability to piece together a macro call can be useful, but the use of
+unbalanced open parentheses in a macro body is just confusing, and
+should be avoided.

+ 45 - 45
tigcc/doc/System/Info/cpp/SEC24.hss

@@ -1,45 +1,45 @@
-[Main]
-Title=Operator Precedence Problems
-
-[Top]
-You may have noticed that in most of the macro definition examples shown
-above, each occurrence of a macro argument name had parentheses around
-it.  In addition, another pair of parentheses usually surround the
-entire macro definition.  Here is why it is best to write macros that
-way.
-<BR><BR>
-Suppose you define a macro as follows,
-<PRE>#define ceil_div(x, y) (x + y - 1) / y
-</PRE>
-whose purpose is to divide, rounding up.  (One use for this operation is
-to compute how many <CODE>int</CODE> objects are needed to hold a certain
-number of <CODE>char</CODE> objects.)  Then suppose it is used as follows:
-<PRE>a = ceil_div (b &amp; c, sizeof (int));
-     expands to a = (b &amp; c + sizeof (int) - 1) / sizeof (int);
-</PRE>
-This does not do what is intended.  The operator-precedence rules of
-C make it equivalent to this:
-<PRE>a = (b &amp; (c + sizeof (int) - 1)) / sizeof (int);
-</PRE>
-What we want is this:
-<PRE>a = ((b &amp; c) + sizeof (int) - 1)) / sizeof (int);
-</PRE>
-Defining the macro as
-<PRE>#define ceil_div(x, y) ((x) + (y) - 1) / (y)
-</PRE>
-provides the desired result.
-<BR><BR>
-Unintended grouping can result in another way.  Consider <CODE>sizeof
-ceil_div(1,&nbsp;2)</CODE>.  That has the appearance of a C expression that would
-compute the size of the type of <CODE>ceil_div&nbsp;(1,&nbsp;2)</CODE>, but in fact it
-means something very different.  Here is what it expands to:
-<PRE>sizeof ((1) + (2) - 1) / (2)
-</PRE>
-This would take the size of an integer and divide it by two.  The
-precedence rules have put the division outside the <CODE>sizeof</CODE> when it
-was intended to be inside.
-<BR><BR>
-Parentheses around the entire macro definition prevent such problems.
-Here, then, is the recommended way to define <CODE>ceil_div</CODE>:
-<PRE>#define ceil_div(x, y) (((x) + (y) - 1) / (y))
-</PRE>
+[Main]
+Title=Operator Precedence Problems
+
+[Top]
+You may have noticed that in most of the macro definition examples shown
+above, each occurrence of a macro argument name had parentheses around
+it.  In addition, another pair of parentheses usually surround the
+entire macro definition.  Here is why it is best to write macros that
+way.
+<BR><BR>
+Suppose you define a macro as follows,
+<PRE>#define ceil_div(x, y) (x + y - 1) / y
+</PRE>
+whose purpose is to divide, rounding up.  (One use for this operation is
+to compute how many <CODE>int</CODE> objects are needed to hold a certain
+number of <CODE>char</CODE> objects.)  Then suppose it is used as follows:
+<PRE>a = ceil_div (b &amp; c, sizeof (int));
+     expands to a = (b &amp; c + sizeof (int) - 1) / sizeof (int);
+</PRE>
+This does not do what is intended.  The operator-precedence rules of
+C make it equivalent to this:
+<PRE>a = (b &amp; (c + sizeof (int) - 1)) / sizeof (int);
+</PRE>
+What we want is this:
+<PRE>a = ((b &amp; c) + sizeof (int) - 1)) / sizeof (int);
+</PRE>
+Defining the macro as
+<PRE>#define ceil_div(x, y) ((x) + (y) - 1) / (y)
+</PRE>
+provides the desired result.
+<BR><BR>
+Unintended grouping can result in another way.  Consider <CODE>sizeof
+ceil_div(1,&nbsp;2)</CODE>.  That has the appearance of a C expression that would
+compute the size of the type of <CODE>ceil_div&nbsp;(1,&nbsp;2)</CODE>, but in fact it
+means something very different.  Here is what it expands to:
+<PRE>sizeof ((1) + (2) - 1) / (2)
+</PRE>
+This would take the size of an integer and divide it by two.  The
+precedence rules have put the division outside the <CODE>sizeof</CODE> when it
+was intended to be inside.
+<BR><BR>
+Parentheses around the entire macro definition prevent such problems.
+Here, then, is the recommended way to define <CODE>ceil_div</CODE>:
+<PRE>#define ceil_div(x, y) (((x) + (y) - 1) / (y))
+</PRE>

+ 49 - 49
tigcc/doc/System/Info/cpp/SEC25.hss

@@ -1,49 +1,49 @@
-[Main]
-Title=Swallowing the Semicolon
-
-[Top]
-Often it is desirable to define a macro that expands into a compound
-statement.  Consider, for example, the following macro, that advances a
-pointer (the argument <CODE>p</CODE> says where to find it) across whitespace
-characters:
-<PRE>#define SKIP_SPACES(p, limit)  \
-{ char *lim = (limit);         \
-  while (p &lt; lim) {            \
-    if (*p++ != ' ') {         \
-      p--; break; }}}
-</PRE>
-Here backslash-newline is used to split the macro definition, which must
-be a single logical line, so that it resembles the way such code would
-be laid out if not part of a macro definition.
-<BR><BR>
-A call to this macro might be <CODE>SKIP_SPACES&nbsp;(p,&nbsp;lim)</CODE>.  Strictly
-speaking, the call expands to a compound statement, which is a complete
-statement with no need for a semicolon to end it.  However, since it
-looks like a function call, it minimizes confusion if you can use it
-like a function call, writing a semicolon afterward, as in
-<CODE>SKIP_SPACES&nbsp;(p,&nbsp;lim);</CODE>
-<BR><BR>
-This can cause trouble before <CODE>else</CODE> statements, because the
-semicolon is actually a null statement.  Suppose you write
-<PRE>if (*p != 0)
-  SKIP_SPACES (p, lim);
-else ...
-</PRE>
-The presence of two statements - the compound statement and a null
-statement - in between the <CODE>if</CODE> condition and the <CODE>else</CODE>
-makes invalid C code.
-<BR><BR>
-The definition of the macro <CODE>SKIP_SPACES</CODE> can be altered to solve
-this problem, using a <CODE>do&nbsp;...&nbsp;while</CODE> statement.  Here is how:
-<PRE>#define SKIP_SPACES(p, limit)     \
-do { char *lim = (limit);         \
-     while (p &lt; lim) {            \
-       if (*p++ != ' ') {         \
-         p--; break; }}}          \
-while (0)
-</PRE>
-Now <CODE>SKIP_SPACES&nbsp;(p,&nbsp;lim);</CODE> expands into
-<PRE>do {...} while (0);
-</PRE>
-which is one statement.  The loop executes exactly once; most compilers
-generate no extra code for it.
+[Main]
+Title=Swallowing the Semicolon
+
+[Top]
+Often it is desirable to define a macro that expands into a compound
+statement.  Consider, for example, the following macro, that advances a
+pointer (the argument <CODE>p</CODE> says where to find it) across whitespace
+characters:
+<PRE>#define SKIP_SPACES(p, limit)  \
+{ char *lim = (limit);         \
+  while (p &lt; lim) {            \
+    if (*p++ != ' ') {         \
+      p--; break; }}}
+</PRE>
+Here backslash-newline is used to split the macro definition, which must
+be a single logical line, so that it resembles the way such code would
+be laid out if not part of a macro definition.
+<BR><BR>
+A call to this macro might be <CODE>SKIP_SPACES&nbsp;(p,&nbsp;lim)</CODE>.  Strictly
+speaking, the call expands to a compound statement, which is a complete
+statement with no need for a semicolon to end it.  However, since it
+looks like a function call, it minimizes confusion if you can use it
+like a function call, writing a semicolon afterward, as in
+<CODE>SKIP_SPACES&nbsp;(p,&nbsp;lim);</CODE>
+<BR><BR>
+This can cause trouble before <CODE>else</CODE> statements, because the
+semicolon is actually a null statement.  Suppose you write
+<PRE>if (*p != 0)
+  SKIP_SPACES (p, lim);
+else ...
+</PRE>
+The presence of two statements - the compound statement and a null
+statement - in between the <CODE>if</CODE> condition and the <CODE>else</CODE>
+makes invalid C code.
+<BR><BR>
+The definition of the macro <CODE>SKIP_SPACES</CODE> can be altered to solve
+this problem, using a <CODE>do&nbsp;...&nbsp;while</CODE> statement.  Here is how:
+<PRE>#define SKIP_SPACES(p, limit)     \
+do { char *lim = (limit);         \
+     while (p &lt; lim) {            \
+       if (*p++ != ' ') {         \
+         p--; break; }}}          \
+while (0)
+</PRE>
+Now <CODE>SKIP_SPACES&nbsp;(p,&nbsp;lim);</CODE> expands into
+<PRE>do {...} while (0);
+</PRE>
+which is one statement.  The loop executes exactly once; most compilers
+generate no extra code for it.

+ 52 - 52
tigcc/doc/System/Info/cpp/SEC26.hss

@@ -1,52 +1,52 @@
-[Main]
-Title=Duplication of Side Effects
-
-[Top]
-Many C programs define a macro <CODE>min</CODE>, for &quot;minimum&quot;, like this:
-<PRE>#define min(X, Y)  ((X) &lt; (Y) ? (X) : (Y))
-</PRE>
-When you use this macro with an argument containing a side effect,
-as shown here,
-<PRE>next = min (x + y, foo (z));
-</PRE>
-it expands as follows:
-<PRE>next = ((x + y) &lt; (foo (z)) ? (x + y) : (foo (z)));
-</PRE>
-where <CODE>x&nbsp;+&nbsp;y</CODE> has been substituted for <CODE>X</CODE> and <CODE>foo&nbsp;(z)</CODE>
-for <CODE>Y</CODE>.
-<BR><BR>
-The function <CODE>foo</CODE> is used only once in the statement as it appears
-in the program, but the expression <CODE>foo&nbsp;(z)</CODE> has been substituted
-twice into the macro expansion.  As a result, <CODE>foo</CODE> might be called
-two times when the statement is executed.  If it has side effects or if
-it takes a long time to compute, the results might not be what you
-intended.  We say that <CODE>min</CODE> is an <U>unsafe</U> macro.
-<BR><BR>
-The best solution to this problem is to define <CODE>min</CODE> in a way that
-computes the value of <CODE>foo&nbsp;(z)</CODE> only once.  The C language offers
-no standard way to do this, but it can be done with GNU extensions as
-follows:
-<PRE>#define min(X, Y)                \
-({ typeof (X) x_ = (X);          \
-   typeof (Y) y_ = (Y);          \
-   (x_ &lt; y_) ? x_ : y_; })
-</PRE>
-The <CODE>({&nbsp;...&nbsp;})</CODE> notation produces a compound statement that
-acts as an expression.  Its value is the value of its last statement.
-This permits us to define local variables and assign each argument to
-one.  The local variables have underscores after their names to reduce
-the risk of conflict with an identifier of wider scope (it is impossible
-to avoid this entirely).  Now each argument is evaluated exactly once.
-<BR><BR>
-If you do not wish to use GNU C extensions, the only solution is to be
-careful when <I>using</I> the macro <CODE>min</CODE>.  For example, you can
-calculate the value of <CODE>foo&nbsp;(z)</CODE>, save it in a variable, and use
-that variable in <CODE>min</CODE>:
-<PRE>#define min(X, Y)  ((X) &lt; (Y) ? (X) : (Y))
-...
-{
-  int tem = foo (z);
-  next = min (x + y, tem);
-}
-</PRE>
-(where we assume that <CODE>foo</CODE> returns type <CODE>int</CODE>).
+[Main]
+Title=Duplication of Side Effects
+
+[Top]
+Many C programs define a macro <CODE>min</CODE>, for &quot;minimum&quot;, like this:
+<PRE>#define min(X, Y)  ((X) &lt; (Y) ? (X) : (Y))
+</PRE>
+When you use this macro with an argument containing a side effect,
+as shown here,
+<PRE>next = min (x + y, foo (z));
+</PRE>
+it expands as follows:
+<PRE>next = ((x + y) &lt; (foo (z)) ? (x + y) : (foo (z)));
+</PRE>
+where <CODE>x&nbsp;+&nbsp;y</CODE> has been substituted for <CODE>X</CODE> and <CODE>foo&nbsp;(z)</CODE>
+for <CODE>Y</CODE>.
+<BR><BR>
+The function <CODE>foo</CODE> is used only once in the statement as it appears
+in the program, but the expression <CODE>foo&nbsp;(z)</CODE> has been substituted
+twice into the macro expansion.  As a result, <CODE>foo</CODE> might be called
+two times when the statement is executed.  If it has side effects or if
+it takes a long time to compute, the results might not be what you
+intended.  We say that <CODE>min</CODE> is an <U>unsafe</U> macro.
+<BR><BR>
+The best solution to this problem is to define <CODE>min</CODE> in a way that
+computes the value of <CODE>foo&nbsp;(z)</CODE> only once.  The C language offers
+no standard way to do this, but it can be done with GNU extensions as
+follows:
+<PRE>#define min(X, Y)                \
+({ typeof (X) x_ = (X);          \
+   typeof (Y) y_ = (Y);          \
+   (x_ &lt; y_) ? x_ : y_; })
+</PRE>
+The <CODE>({&nbsp;...&nbsp;})</CODE> notation produces a compound statement that
+acts as an expression.  Its value is the value of its last statement.
+This permits us to define local variables and assign each argument to
+one.  The local variables have underscores after their names to reduce
+the risk of conflict with an identifier of wider scope (it is impossible
+to avoid this entirely).  Now each argument is evaluated exactly once.
+<BR><BR>
+If you do not wish to use GNU C extensions, the only solution is to be
+careful when <I>using</I> the macro <CODE>min</CODE>.  For example, you can
+calculate the value of <CODE>foo&nbsp;(z)</CODE>, save it in a variable, and use
+that variable in <CODE>min</CODE>:
+<PRE>#define min(X, Y)  ((X) &lt; (Y) ? (X) : (Y))
+...
+{
+  int tem = foo (z);
+  next = min (x + y, tem);
+}
+</PRE>
+(where we assume that <CODE>foo</CODE> returns type <CODE>int</CODE>).

+ 55 - 55
tigcc/doc/System/Info/cpp/SEC27.hss

@@ -1,55 +1,55 @@
-[Main]
-Title=Self-Referential Macros
-
-[Top]
-A <U>self-referential</U> macro is one whose name appears in its
-definition.  Recall that all macro definitions are rescanned for more
-macros to replace.  If the self-reference were considered a use of the
-macro, it would produce an infinitely large expansion.  To prevent this,
-the self-reference is not considered a macro call.  It is passed into
-the preprocessor output unchanged.  Let's consider an example:
-<PRE>#define foo (4 + foo)
-</PRE>
-where <CODE>foo</CODE> is also a variable in your program.
-<BR><BR>
-Following the ordinary rules, each reference to <CODE>foo</CODE> will expand
-into <CODE>(4&nbsp;+&nbsp;foo)</CODE>; then this will be rescanned and will expand into
-<CODE>(4&nbsp;+&nbsp;(4&nbsp;+&nbsp;foo))</CODE>; and so on until the computer runs out of memory.
-<BR><BR>
-The self-reference rule cuts this process short after one step, at
-<CODE>(4&nbsp;+&nbsp;foo)</CODE>.  Therefore, this macro definition has the possibly
-useful effect of causing the program to add 4 to the value of <CODE>foo</CODE>
-wherever <CODE>foo</CODE> is referred to.
-<BR><BR>
-In most cases, it is a bad idea to take advantage of this feature.  A
-person reading the program who sees that <CODE>foo</CODE> is a variable will
-not expect that it is a macro as well.  The reader will come across the
-identifier <CODE>foo</CODE> in the program and think its value should be that
-of the variable <CODE>foo</CODE>, whereas in fact the value is four greater.
-<BR><BR>
-One common, useful use of self-reference is to create a macro which
-expands to itself.  If you write
-<PRE>#define EPERM EPERM
-</PRE>
-then the macro <CODE>EPERM</CODE> expands to <CODE>EPERM</CODE>.  Effectively, it is
-left alone by the preprocessor whenever it's used in running text.  You
-can tell that it's a macro with <CODE>#ifdef</CODE>.  You might do this if you
-want to define numeric constants with an <CODE>enum</CODE>, but have
-<CODE>#ifdef</CODE> be true for each constant.
-<BR><BR>
-If a macro <CODE>x</CODE> expands to use a macro <CODE>y</CODE>, and the expansion of
-<CODE>y</CODE> refers to the macro <CODE>x</CODE>, that is an <U>indirect
-self-reference</U> of <CODE>x</CODE>.  <CODE>x</CODE> is not expanded in this case
-either.  Thus, if we have
-<PRE>#define x (4 + y)
-#define y (2 * x)
-</PRE>
-then <CODE>x</CODE> and <CODE>y</CODE> expand as follows:
-<PRE>x    expands to (4 + y)
-     expands to (4 + (2 * x))
-
-y    expands to (2 * x)
-     expands to (2 * (4 + y))
-</PRE>
-Each macro is expanded when it appears in the definition of the other
-macro, but not when it indirectly appears in its own definition.
+[Main]
+Title=Self-Referential Macros
+
+[Top]
+A <U>self-referential</U> macro is one whose name appears in its
+definition.  Recall that all macro definitions are rescanned for more
+macros to replace.  If the self-reference were considered a use of the
+macro, it would produce an infinitely large expansion.  To prevent this,
+the self-reference is not considered a macro call.  It is passed into
+the preprocessor output unchanged.  Let's consider an example:
+<PRE>#define foo (4 + foo)
+</PRE>
+where <CODE>foo</CODE> is also a variable in your program.
+<BR><BR>
+Following the ordinary rules, each reference to <CODE>foo</CODE> will expand
+into <CODE>(4&nbsp;+&nbsp;foo)</CODE>; then this will be rescanned and will expand into
+<CODE>(4&nbsp;+&nbsp;(4&nbsp;+&nbsp;foo))</CODE>; and so on until the computer runs out of memory.
+<BR><BR>
+The self-reference rule cuts this process short after one step, at
+<CODE>(4&nbsp;+&nbsp;foo)</CODE>.  Therefore, this macro definition has the possibly
+useful effect of causing the program to add 4 to the value of <CODE>foo</CODE>
+wherever <CODE>foo</CODE> is referred to.
+<BR><BR>
+In most cases, it is a bad idea to take advantage of this feature.  A
+person reading the program who sees that <CODE>foo</CODE> is a variable will
+not expect that it is a macro as well.  The reader will come across the
+identifier <CODE>foo</CODE> in the program and think its value should be that
+of the variable <CODE>foo</CODE>, whereas in fact the value is four greater.
+<BR><BR>
+One common, useful use of self-reference is to create a macro which
+expands to itself.  If you write
+<PRE>#define EPERM EPERM
+</PRE>
+then the macro <CODE>EPERM</CODE> expands to <CODE>EPERM</CODE>.  Effectively, it is
+left alone by the preprocessor whenever it's used in running text.  You
+can tell that it's a macro with <CODE>#ifdef</CODE>.  You might do this if you
+want to define numeric constants with an <CODE>enum</CODE>, but have
+<CODE>#ifdef</CODE> be true for each constant.
+<BR><BR>
+If a macro <CODE>x</CODE> expands to use a macro <CODE>y</CODE>, and the expansion of
+<CODE>y</CODE> refers to the macro <CODE>x</CODE>, that is an <U>indirect
+self-reference</U> of <CODE>x</CODE>.  <CODE>x</CODE> is not expanded in this case
+either.  Thus, if we have
+<PRE>#define x (4 + y)
+#define y (2 * x)
+</PRE>
+then <CODE>x</CODE> and <CODE>y</CODE> expand as follows:
+<PRE>x    expands to (4 + y)
+     expands to (4 + (2 * x))
+
+y    expands to (2 * x)
+     expands to (2 * (4 + y))
+</PRE>
+Each macro is expanded when it appears in the definition of the other
+macro, but not when it indirectly appears in its own definition.

+ 84 - 84
tigcc/doc/System/Info/cpp/SEC28.hss

@@ -1,84 +1,84 @@
-[Main]
-Title=Argument Prescan
-
-[Top]
-Macro arguments are completely macro-expanded before they are
-substituted into a macro body, unless they are stringified or pasted
-with other tokens.  After substitution, the entire macro body, including
-the substituted arguments, is scanned again for macros to be expanded.
-The result is that the arguments are scanned <I>twice</I> to expand
-macro calls in them.
-<BR><BR>
-Most of the time, this has no effect.  If the argument contained any
-macro calls, they are expanded during the first scan.  The result
-therefore contains no macro calls, so the second scan does not change
-it.  If the argument were substituted as given, with no prescan, the
-single remaining scan would find the same macro calls and produce the
-same results.
-<BR><BR>
-You might expect the double scan to change the results when a
-self-referential macro is used in an argument of another macro
-(see <A HREF="$$LINK(SEC27)">Self-Referential Macros</A>): the self-referential macro would be
-expanded once in the first scan, and a second time in the second scan.
-However, this is not what happens.  The self-references that do not
-expand in the first scan are marked so that they will not expand in the
-second scan either.
-<BR><BR>
-You might wonder, &quot;Why mention the prescan, if it makes no difference?
-And why not skip it and make the preprocessor faster?&quot;  The answer is
-that the prescan does make a difference in three special cases:
-<UL>
-<LI>
-Nested calls to a macro.
-<BR><BR>
-We say that <U>nested</U> calls to a macro occur when a macro's argument
-contains a call to that very macro.  For example, if <CODE>f</CODE> is a macro
-that expects one argument, <CODE>f&nbsp;(f&nbsp;(1))</CODE> is a nested pair of calls to
-<CODE>f</CODE>.  The desired expansion is made by expanding <CODE>f&nbsp;(1)</CODE> and
-substituting that into the definition of <CODE>f</CODE>.  The prescan causes
-the expected result to happen.  Without the prescan, <CODE>f&nbsp;(1)</CODE> itself
-would be substituted as an argument, and the inner use of <CODE>f</CODE> would
-appear during the main scan as an indirect self-reference and would not
-be expanded.
-<BR><BR>
-</LI>
-<LI>
-Macros that call other macros that stringify or concatenate.
-<BR><BR>
-If an argument is stringified or concatenated, the prescan does not
-occur.  If you <I>want</I> to expand a macro, then stringify or
-concatenate its expansion, you can do that by causing one macro to call
-another macro that does the stringification or concatenation.  For
-instance, if you have
-<PRE>#define AFTERX(x) X_ ## x
-#define XAFTERX(x) AFTERX(x)
-#define TABLESIZE 1024
-#define BUFSIZE TABLESIZE
-</PRE>
-then <CODE>AFTERX(BUFSIZE)</CODE> expands to <CODE>X_BUFSIZE</CODE>, and
-<CODE>XAFTERX(BUFSIZE)</CODE> expands to <CODE>X_1024</CODE>.  (Not to
-<CODE>X_TABLESIZE</CODE>.  Prescan always does a complete expansion.)
-<BR><BR>
-</LI>
-<LI>
-Macros used in arguments, whose expansions contain unshielded commas.
-<BR><BR>
-This can cause a macro expanded on the second scan to be called with the
-wrong number of arguments.  Here is an example:
-<PRE>#define foo  a,b
-#define bar(x) lose(x)
-#define lose(x) (1 + (x))
-</PRE>
-We would like <CODE>bar(foo)</CODE> to turn into <CODE>(1&nbsp;+&nbsp;(foo))</CODE>, which
-would then turn into <CODE>(1&nbsp;+&nbsp;(a,b))</CODE>.  Instead, <CODE>bar(foo)</CODE>
-expands into <CODE>lose(a,b)</CODE>, and you get an error because <CODE>lose</CODE>
-requires a single argument.  In this case, the problem is easily solved
-by the same parentheses that ought to be used to prevent misnesting of
-arithmetic operations:
-<PRE>#define foo (a,b)
-or#define bar(x) lose((x))
-</PRE>
-The extra pair of parentheses prevents the comma in <CODE>foo</CODE>'s
-definition from being interpreted as an argument separator.
-</LI>
-</UL>
+[Main]
+Title=Argument Prescan
+
+[Top]
+Macro arguments are completely macro-expanded before they are
+substituted into a macro body, unless they are stringified or pasted
+with other tokens.  After substitution, the entire macro body, including
+the substituted arguments, is scanned again for macros to be expanded.
+The result is that the arguments are scanned <I>twice</I> to expand
+macro calls in them.
+<BR><BR>
+Most of the time, this has no effect.  If the argument contained any
+macro calls, they are expanded during the first scan.  The result
+therefore contains no macro calls, so the second scan does not change
+it.  If the argument were substituted as given, with no prescan, the
+single remaining scan would find the same macro calls and produce the
+same results.
+<BR><BR>
+You might expect the double scan to change the results when a
+self-referential macro is used in an argument of another macro
+(see <A HREF="$$LINK(SEC27)">Self-Referential Macros</A>): the self-referential macro would be
+expanded once in the first scan, and a second time in the second scan.
+However, this is not what happens.  The self-references that do not
+expand in the first scan are marked so that they will not expand in the
+second scan either.
+<BR><BR>
+You might wonder, &quot;Why mention the prescan, if it makes no difference?
+And why not skip it and make the preprocessor faster?&quot;  The answer is
+that the prescan does make a difference in three special cases:
+<UL>
+<LI>
+Nested calls to a macro.
+<BR><BR>
+We say that <U>nested</U> calls to a macro occur when a macro's argument
+contains a call to that very macro.  For example, if <CODE>f</CODE> is a macro
+that expects one argument, <CODE>f&nbsp;(f&nbsp;(1))</CODE> is a nested pair of calls to
+<CODE>f</CODE>.  The desired expansion is made by expanding <CODE>f&nbsp;(1)</CODE> and
+substituting that into the definition of <CODE>f</CODE>.  The prescan causes
+the expected result to happen.  Without the prescan, <CODE>f&nbsp;(1)</CODE> itself
+would be substituted as an argument, and the inner use of <CODE>f</CODE> would
+appear during the main scan as an indirect self-reference and would not
+be expanded.
+<BR><BR>
+</LI>
+<LI>
+Macros that call other macros that stringify or concatenate.
+<BR><BR>
+If an argument is stringified or concatenated, the prescan does not
+occur.  If you <I>want</I> to expand a macro, then stringify or
+concatenate its expansion, you can do that by causing one macro to call
+another macro that does the stringification or concatenation.  For
+instance, if you have
+<PRE>#define AFTERX(x) X_ ## x
+#define XAFTERX(x) AFTERX(x)
+#define TABLESIZE 1024
+#define BUFSIZE TABLESIZE
+</PRE>
+then <CODE>AFTERX(BUFSIZE)</CODE> expands to <CODE>X_BUFSIZE</CODE>, and
+<CODE>XAFTERX(BUFSIZE)</CODE> expands to <CODE>X_1024</CODE>.  (Not to
+<CODE>X_TABLESIZE</CODE>.  Prescan always does a complete expansion.)
+<BR><BR>
+</LI>
+<LI>
+Macros used in arguments, whose expansions contain unshielded commas.
+<BR><BR>
+This can cause a macro expanded on the second scan to be called with the
+wrong number of arguments.  Here is an example:
+<PRE>#define foo  a,b
+#define bar(x) lose(x)
+#define lose(x) (1 + (x))
+</PRE>
+We would like <CODE>bar(foo)</CODE> to turn into <CODE>(1&nbsp;+&nbsp;(foo))</CODE>, which
+would then turn into <CODE>(1&nbsp;+&nbsp;(a,b))</CODE>.  Instead, <CODE>bar(foo)</CODE>
+expands into <CODE>lose(a,b)</CODE>, and you get an error because <CODE>lose</CODE>
+requires a single argument.  In this case, the problem is easily solved
+by the same parentheses that ought to be used to prevent misnesting of
+arithmetic operations:
+<PRE>#define foo (a,b)
+or#define bar(x) lose((x))
+</PRE>
+The extra pair of parentheses prevents the comma in <CODE>foo</CODE>'s
+definition from being interpreted as an argument separator.
+</LI>
+</UL>

+ 144 - 144
tigcc/doc/System/Info/cpp/SEC3.hss

@@ -1,144 +1,144 @@
-[Main]
-Title=Initial processing
-
-[Top]
-The preprocessor performs a series of textual transformations on its
-input.  These happen before all other processing.  Conceptually, they
-happen in a rigid order, and the entire file is run through each
-transformation before the next one begins.  CPP actually does them
-all at once, for performance reasons.  These transformations correspond
-roughly to the first three &quot;phases of translation&quot; described in the C
-standard.
-<OL>
-<LI>
-The input file is read into memory and broken into lines.
-<BR><BR>
-CPP expects its input to be a text file, that is, an unstructured
-stream of ASCII characters, with some characters indicating the end of a
-line of text.  Extended ASCII character sets, such as ISO Latin-1 or
-Unicode encoded in UTF-8, are also acceptable.  Character sets that are
-not strict supersets of seven-bit ASCII will not work.  We plan to add
-complete support for international character sets in a future release.
-<BR><BR>
-Different systems use different conventions to indicate the end of a
-line.  GCC accepts the ASCII control sequences <CODE>LF</CODE>, <CODE>CR
-LF</CODE>, <CODE>CR</CODE>, and <CODE>LF&nbsp;CR</CODE> as end-of-line markers.  The first
-three are the canonical sequences used by Unix, DOS and VMS, and the
-classic Mac OS (before OSX) respectively.  You may therefore safely copy
-source code written on any of those systems to a different one and use
-it without conversion.  (GCC may lose track of the current line number
-if a file doesn't consistently use one convention, as sometimes happens
-when it is edited on computers with different conventions that share a
-network file system.)  <CODE>LF&nbsp;CR</CODE> is included because it has been
-reported as an end-of-line marker under exotic conditions.
-<BR><BR>
-If the last line of any input file lacks an end-of-line marker, the end
-of the file is considered to implicitly supply one.  The C standard says
-that this condition provokes undefined behavior, so GCC will emit a
-warning message.
-<BR><BR>
-</LI>
-<LI>
-If trigraphs are enabled, they are replaced by their
-corresponding single characters.  By default GCC ignores trigraphs,
-but if you request a strictly conforming mode with the <B>'-std'</B>
-option, or you specify the <B>'-trigraphs'</B> option, then it
-converts them.
-<BR><BR>
-These are nine three-character sequences, all starting with <CODE>??</CODE>,
-that are defined by ISO C to stand for single characters.  They permit
-obsolete systems that lack some of C's punctuation to use C.  For
-example, <CODE>??/</CODE> stands for <CODE>\</CODE>, so <CODE>'??/n'</CODE> is a character
-constant for a newline.
-<BR><BR>
-Trigraphs are not popular and many compilers implement them incorrectly.
-Portable code should not rely on trigraphs being either converted or
-ignored.  If you use the <B>'-Wall'</B> or <B>'-Wtrigraphs'</B> options,
-GCC will warn you when a trigraph would change the meaning of your
-program if it were converted.
-<BR><BR>
-In a string constant, you can prevent a sequence of question marks from
-being confused with a trigraph by inserting a backslash between the
-question marks.  <CODE>&quot;(??\?)&quot;</CODE> is the string <CODE>(???)</CODE>, not
-<CODE>(?]</CODE>.  Traditional C compilers do not recognize this idiom.
-<BR><BR>
-The nine trigraphs and their replacements are
-<PRE>Trigraph:       ??(  ??)  ??&lt;  ??&gt;  ??=  ??/  ??'  ??!  ??-
-Replacement:      [    ]    {    }    #    \    ^    |    ~
-</PRE>
-</LI>
-<LI>
-Continued lines are merged into one long line.
-<BR><BR>
-A continued line is a line which ends with a backslash, <CODE>\</CODE>.  The
-backslash is removed and the following line is joined with the current
-one.  No space is inserted, so you may split a line anywhere, even in
-the middle of a word.  (It is generally more readable to split lines
-only at white space.)
-<BR><BR>
-The trailing backslash on a continued line is commonly referred to as a
-<U>backslash-newline</U>.
-<BR><BR>
-If there is white space between a backslash and the end of a line, that
-is still a continued line.  However, as this is usually the result of an
-editing mistake, and many compilers will not accept it as a continued
-line, GCC will warn you about it.
-<BR><BR>
-</LI>
-<LI>
-All comments are replaced with single spaces.
-<BR><BR>
-There are two kinds of comments.  <U>Block comments</U> begin with
-<CODE>/*</CODE> and continue until the next <CODE>*/</CODE>.  Block comments do not
-nest:
-<PRE>/* this is /* one comment */ text outside comment
-</PRE>
-<U>Line comments</U> begin with <CODE>//</CODE> and continue to the end of the
-current line.  Line comments do not nest either, but it does not matter,
-because they would end in the same place anyway.
-<PRE>// this is // one comment
-text outside comment
-</PRE>
-</LI>
-</OL>
-It is safe to put line comments inside block comments, or vice versa.
-<PRE>/* block comment
-   // contains line comment
-   yet more comment
- */ outside comment
-
-// line comment /* contains block comment */
-</PRE>
-But beware of commenting out one end of a block comment with a line
-comment.
-<PRE> // l.c.  /* block comment begins
-    oops! this isn't a comment anymore */
-</PRE>
-Comments are not recognized within string literals.  <CODE>&quot;/*&nbsp;blah
-*/&quot;</CODE> is the string constant <CODE>/*&nbsp;blah&nbsp;*/</CODE>, not an empty string.
-<BR><BR>
-Line comments are not in the 1989 edition of the C standard, but they
-are recognized by GCC as an extension.  In C++ and in the 1999 edition
-of the C standard, they are an official part of the language.
-<BR><BR>
-Since these transformations happen before all other processing, you can
-split a line mechanically with backslash-newline anywhere.  You can
-comment out the end of a line.  You can continue a line comment onto the
-next line with backslash-newline.  You can even split <CODE>/*</CODE>,
-<CODE>*/</CODE>, and <CODE>//</CODE> onto multiple lines with backslash-newline.
-For example:
-<PRE>/\
-*
-*/ # /*
-*/ defi\
-ne FO\
-O 10\
-20
-</PRE>
-is equivalent to <CODE>#define&nbsp;FOO&nbsp;1020</CODE>.  All these tricks are
-extremely confusing and should not be used in code intended to be
-readable.
-<BR><BR>
-There is no way to prevent a backslash at the end of a line from being
-interpreted as a backslash-newline.  This cannot affect any correct
-program, however.
+[Main]
+Title=Initial processing
+
+[Top]
+The preprocessor performs a series of textual transformations on its
+input.  These happen before all other processing.  Conceptually, they
+happen in a rigid order, and the entire file is run through each
+transformation before the next one begins.  CPP actually does them
+all at once, for performance reasons.  These transformations correspond
+roughly to the first three &quot;phases of translation&quot; described in the C
+standard.
+<OL>
+<LI>
+The input file is read into memory and broken into lines.
+<BR><BR>
+CPP expects its input to be a text file, that is, an unstructured
+stream of ASCII characters, with some characters indicating the end of a
+line of text.  Extended ASCII character sets, such as ISO Latin-1 or
+Unicode encoded in UTF-8, are also acceptable.  Character sets that are
+not strict supersets of seven-bit ASCII will not work.  We plan to add
+complete support for international character sets in a future release.
+<BR><BR>
+Different systems use different conventions to indicate the end of a
+line.  GCC accepts the ASCII control sequences <CODE>LF</CODE>, <CODE>CR
+LF</CODE>, <CODE>CR</CODE>, and <CODE>LF&nbsp;CR</CODE> as end-of-line markers.  The first
+three are the canonical sequences used by Unix, DOS and VMS, and the
+classic Mac OS (before OSX) respectively.  You may therefore safely copy
+source code written on any of those systems to a different one and use
+it without conversion.  (GCC may lose track of the current line number
+if a file doesn't consistently use one convention, as sometimes happens
+when it is edited on computers with different conventions that share a
+network file system.)  <CODE>LF&nbsp;CR</CODE> is included because it has been
+reported as an end-of-line marker under exotic conditions.
+<BR><BR>
+If the last line of any input file lacks an end-of-line marker, the end
+of the file is considered to implicitly supply one.  The C standard says
+that this condition provokes undefined behavior, so GCC will emit a
+warning message.
+<BR><BR>
+</LI>
+<LI>
+If trigraphs are enabled, they are replaced by their
+corresponding single characters.  By default GCC ignores trigraphs,
+but if you request a strictly conforming mode with the <B>'-std'</B>
+option, or you specify the <B>'-trigraphs'</B> option, then it
+converts them.
+<BR><BR>
+These are nine three-character sequences, all starting with <CODE>??</CODE>,
+that are defined by ISO C to stand for single characters.  They permit
+obsolete systems that lack some of C's punctuation to use C.  For
+example, <CODE>??/</CODE> stands for <CODE>\</CODE>, so <CODE>'??/n'</CODE> is a character
+constant for a newline.
+<BR><BR>
+Trigraphs are not popular and many compilers implement them incorrectly.
+Portable code should not rely on trigraphs being either converted or
+ignored.  If you use the <B>'-Wall'</B> or <B>'-Wtrigraphs'</B> options,
+GCC will warn you when a trigraph would change the meaning of your
+program if it were converted.
+<BR><BR>
+In a string constant, you can prevent a sequence of question marks from
+being confused with a trigraph by inserting a backslash between the
+question marks.  <CODE>&quot;(??\?)&quot;</CODE> is the string <CODE>(???)</CODE>, not
+<CODE>(?]</CODE>.  Traditional C compilers do not recognize this idiom.
+<BR><BR>
+The nine trigraphs and their replacements are
+<PRE>Trigraph:       ??(  ??)  ??&lt;  ??&gt;  ??=  ??/  ??'  ??!  ??-
+Replacement:      [    ]    {    }    #    \    ^    |    ~
+</PRE>
+</LI>
+<LI>
+Continued lines are merged into one long line.
+<BR><BR>
+A continued line is a line which ends with a backslash, <CODE>\</CODE>.  The
+backslash is removed and the following line is joined with the current
+one.  No space is inserted, so you may split a line anywhere, even in
+the middle of a word.  (It is generally more readable to split lines
+only at white space.)
+<BR><BR>
+The trailing backslash on a continued line is commonly referred to as a
+<U>backslash-newline</U>.
+<BR><BR>
+If there is white space between a backslash and the end of a line, that
+is still a continued line.  However, as this is usually the result of an
+editing mistake, and many compilers will not accept it as a continued
+line, GCC will warn you about it.
+<BR><BR>
+</LI>
+<LI>
+All comments are replaced with single spaces.
+<BR><BR>
+There are two kinds of comments.  <U>Block comments</U> begin with
+<CODE>/*</CODE> and continue until the next <CODE>*/</CODE>.  Block comments do not
+nest:
+<PRE>/* this is /* one comment */ text outside comment
+</PRE>
+<U>Line comments</U> begin with <CODE>//</CODE> and continue to the end of the
+current line.  Line comments do not nest either, but it does not matter,
+because they would end in the same place anyway.
+<PRE>// this is // one comment
+text outside comment
+</PRE>
+</LI>
+</OL>
+It is safe to put line comments inside block comments, or vice versa.
+<PRE>/* block comment
+   // contains line comment
+   yet more comment
+ */ outside comment
+
+// line comment /* contains block comment */
+</PRE>
+But beware of commenting out one end of a block comment with a line
+comment.
+<PRE> // l.c.  /* block comment begins
+    oops! this isn't a comment anymore */
+</PRE>
+Comments are not recognized within string literals.  <CODE>&quot;/*&nbsp;blah
+*/&quot;</CODE> is the string constant <CODE>/*&nbsp;blah&nbsp;*/</CODE>, not an empty string.
+<BR><BR>
+Line comments are not in the 1989 edition of the C standard, but they
+are recognized by GCC as an extension.  In C++ and in the 1999 edition
+of the C standard, they are an official part of the language.
+<BR><BR>
+Since these transformations happen before all other processing, you can
+split a line mechanically with backslash-newline anywhere.  You can
+comment out the end of a line.  You can continue a line comment onto the
+next line with backslash-newline.  You can even split <CODE>/*</CODE>,
+<CODE>*/</CODE>, and <CODE>//</CODE> onto multiple lines with backslash-newline.
+For example:
+<PRE>/\
+*
+*/ # /*
+*/ defi\
+ne FO\
+O 10\
+20
+</PRE>
+is equivalent to <CODE>#define&nbsp;FOO&nbsp;1020</CODE>.  All these tricks are
+extremely confusing and should not be used in code intended to be
+readable.
+<BR><BR>
+There is no way to prevent a backslash at the end of a line from being
+interpreted as a backslash-newline.  This cannot affect any correct
+program, however.

+ 22 - 22
tigcc/doc/System/Info/cpp/SEC30.hss

@@ -1,22 +1,22 @@
-[Main]
-Title=Newlines in Arguments
-
-[Top]
-The invocation of a function-like macro can extend over many logical
-lines.  However, in the present implementation, the entire expansion
-comes out on one line.  Thus line numbers emitted by the compiler or
-debugger refer to the line the invocation started on, which might be
-different to the line containing the argument causing the problem.
-<BR><BR>
-Here is an example illustrating this:
-<PRE>#define ignore_second_arg(a,b,c) a; c
-
-ignore_second_arg (foo (),
-                   ignored (),
-                   syntax error);
-</PRE>
-The syntax error triggered by the tokens <CODE>syntax&nbsp;error</CODE> results in
-an error message citing line three - the line of ignore_second_arg -
-even though the problematic code comes from line five.
-<BR><BR>
-We consider this a bug, and intend to fix it in the near future.
+[Main]
+Title=Newlines in Arguments
+
+[Top]
+The invocation of a function-like macro can extend over many logical
+lines.  However, in the present implementation, the entire expansion
+comes out on one line.  Thus line numbers emitted by the compiler or
+debugger refer to the line the invocation started on, which might be
+different to the line containing the argument causing the problem.
+<BR><BR>
+Here is an example illustrating this:
+<PRE>#define ignore_second_arg(a,b,c) a; c
+
+ignore_second_arg (foo (),
+                   ignored (),
+                   syntax error);
+</PRE>
+The syntax error triggered by the tokens <CODE>syntax&nbsp;error</CODE> results in
+an error message citing line three - the line of ignore_second_arg -
+even though the problematic code comes from line five.
+<BR><BR>
+We consider this a bug, and intend to fix it in the near future.

+ 33 - 33
tigcc/doc/System/Info/cpp/SEC31.hss

@@ -1,33 +1,33 @@
-[Main]
-Title=Conditionals
-Subsections=SEC32, SEC33, SEC37
-
-[Top]
-A <U>conditional</U> is a directive that instructs the preprocessor to
-select whether or not to include a chunk of code in the final token
-stream passed to the compiler.  Preprocessor conditionals can test
-arithmetic expressions, or whether a name is defined as a macro, or both
-simultaneously using the special <CODE>defined</CODE> operator.
-<BR><BR>
-A conditional in the C preprocessor resembles in some ways an <CODE>if</CODE>
-statement in C, but it is important to understand the difference between
-them.  The condition in an <CODE>if</CODE> statement is tested during the
-execution of your program.  Its purpose is to allow your program to
-behave differently from run to run, depending on the data it is
-operating on.  The condition in a preprocessing conditional directive is
-tested when your program is compiled.  Its purpose is to allow different
-code to be included in the program depending on the situation at the
-time of compilation.
-<BR><BR>
-However, the distinction is becoming less clear.  Modern compilers often
-do test <CODE>if</CODE> statements when a program is compiled, if their
-conditions are known not to vary at run time, and eliminate code which
-can never be executed.  If you can count on your compiler to do this,
-you may find that your program is more readable if you use <CODE>if</CODE>
-statements with constant conditions (perhaps determined by macros).  Of
-course, you can only use this to exclude code, not type definitions or
-other preprocessing directives, and you can only do it if the code
-remains syntactically valid when it is not to be used.
-<BR><BR>
-GCC version 3 eliminates this kind of never-executed code even when
-not optimizing.  Older versions did it only when optimizing.
+[Main]
+Title=Conditionals
+Subsections=SEC32, SEC33, SEC37
+
+[Top]
+A <U>conditional</U> is a directive that instructs the preprocessor to
+select whether or not to include a chunk of code in the final token
+stream passed to the compiler.  Preprocessor conditionals can test
+arithmetic expressions, or whether a name is defined as a macro, or both
+simultaneously using the special <CODE>defined</CODE> operator.
+<BR><BR>
+A conditional in the C preprocessor resembles in some ways an <CODE>if</CODE>
+statement in C, but it is important to understand the difference between
+them.  The condition in an <CODE>if</CODE> statement is tested during the
+execution of your program.  Its purpose is to allow your program to
+behave differently from run to run, depending on the data it is
+operating on.  The condition in a preprocessing conditional directive is
+tested when your program is compiled.  Its purpose is to allow different
+code to be included in the program depending on the situation at the
+time of compilation.
+<BR><BR>
+However, the distinction is becoming less clear.  Modern compilers often
+do test <CODE>if</CODE> statements when a program is compiled, if their
+conditions are known not to vary at run time, and eliminate code which
+can never be executed.  If you can count on your compiler to do this,
+you may find that your program is more readable if you use <CODE>if</CODE>
+statements with constant conditions (perhaps determined by macros).  Of
+course, you can only use this to exclude code, not type definitions or
+other preprocessing directives, and you can only do it if the code
+remains syntactically valid when it is not to be used.
+<BR><BR>
+GCC version 3 eliminates this kind of never-executed code even when
+not optimizing.  Older versions did it only when optimizing.

+ 35 - 35
tigcc/doc/System/Info/cpp/SEC32.hss

@@ -1,35 +1,35 @@
-[Main]
-Title=Conditional Uses
-
-[Top]
-There are three general reasons to use a conditional.
-<UL>
-<LI>
-A program may need to use different code depending on the machine or
-operating system it is to run on.  In some cases the code for one
-operating system may be erroneous on another operating system; for
-example, it might refer to data types or constants that do not exist on
-the other system.  When this happens, it is not enough to avoid
-executing the invalid code.  Its mere presence will cause the compiler
-to reject the program.  With a preprocessing conditional, the offending
-code can be effectively excised from the program when it is not valid.
-<BR><BR>
-</LI>
-<LI>
-You may want to be able to compile the same source file into two
-different programs.  One version might make frequent time-consuming
-consistency checks on its intermediate data, or print the values of
-those data for debugging, and the other not.
-<BR><BR>
-</LI>
-<LI>
-A conditional whose condition is always false is one way to exclude code
-from the program but keep it as a sort of comment for future reference.
-</LI>
-</UL>
-Simple programs that do not need system-specific logic or complex
-debugging hooks generally will not need to use preprocessing
-conditionals.
-In TIGCC, conditionals are useful to select appropriate constants depending
-on which calculator and operating system the program is intended to run on,
-and to enable or disable certain features.
+[Main]
+Title=Conditional Uses
+
+[Top]
+There are three general reasons to use a conditional.
+<UL>
+<LI>
+A program may need to use different code depending on the machine or
+operating system it is to run on.  In some cases the code for one
+operating system may be erroneous on another operating system; for
+example, it might refer to data types or constants that do not exist on
+the other system.  When this happens, it is not enough to avoid
+executing the invalid code.  Its mere presence will cause the compiler
+to reject the program.  With a preprocessing conditional, the offending
+code can be effectively excised from the program when it is not valid.
+<BR><BR>
+</LI>
+<LI>
+You may want to be able to compile the same source file into two
+different programs.  One version might make frequent time-consuming
+consistency checks on its intermediate data, or print the values of
+those data for debugging, and the other not.
+<BR><BR>
+</LI>
+<LI>
+A conditional whose condition is always false is one way to exclude code
+from the program but keep it as a sort of comment for future reference.
+</LI>
+</UL>
+Simple programs that do not need system-specific logic or complex
+debugging hooks generally will not need to use preprocessing
+conditionals.
+In TIGCC, conditionals are useful to select appropriate constants depending
+on which calculator and operating system the program is intended to run on,
+and to enable or disable certain features.

+ 7 - 7
tigcc/doc/System/Info/cpp/SEC33.hss

@@ -1,7 +1,7 @@
-[Main]
-Title=Conditional Syntax
-Subsections=SEC38, SEC34, SEC35, SEC36
-
-[Top]
-A conditional in the C preprocessor begins with a <U>conditional
-directive</U>: <CODE><A HREF="$$LINK(SEC34)">#if</A></CODE>, <CODE><A HREF="$$LINK(SEC38)">#ifdef</A></CODE>, or <CODE><A HREF="$$LINK(SEC38)">#ifndef</A></CODE>.
+[Main]
+Title=Conditional Syntax
+Subsections=SEC38, SEC34, SEC35, SEC36
+
+[Top]
+A conditional in the C preprocessor begins with a <U>conditional
+directive</U>: <CODE><A HREF="$$LINK(SEC34)">#if</A></CODE>, <CODE><A HREF="$$LINK(SEC38)">#ifdef</A></CODE>, or <CODE><A HREF="$$LINK(SEC38)">#ifndef</A></CODE>.

+ 71 - 71
tigcc/doc/System/Info/cpp/SEC34.hss

@@ -1,71 +1,71 @@
-[Main]
-Title=#if
-Subsections=SEC38a
-Index=#endif
-
-[Top]
-The <CODE>#if</CODE> directive allows you to test the value of an arithmetic
-expression, rather than the mere existence of one macro.  Its syntax is
-<PRE>#if <I>expression</I>
-
-<I>controlled text</I>
-
-#endif /* <I>expression</I> */
-</PRE>
-<I>expression</I> is a C expression of integer type, subject to stringent
-restrictions.  It may contain
-<UL>
-<LI>
-Integer constants.
-<BR><BR>
-</LI>
-<LI>
-Character constants, which are interpreted as they would be in normal
-code.
-<BR><BR>
-</LI>
-<LI>
-Arithmetic operators for addition, subtraction, multiplication,
-division, bitwise operations, shifts, comparisons, and logical
-operations (<CODE>&amp;&amp;</CODE> and <CODE>||</CODE>).  The latter two obey the usual
-short-circuiting rules of standard C.
-<BR><BR>
-</LI>
-<LI>
-Macros.  All macros in the expression are expanded before actual
-computation of the expression's value begins.
-<BR><BR>
-</LI>
-<LI>
-Uses of the <CODE>defined</CODE> operator, which lets you check whether macros
-are defined in the middle of an <CODE>#if</CODE>.
-<BR><BR>
-</LI>
-<LI>
-Identifiers that are not macros, which are all considered to be the
-number zero.  This allows you to write <CODE>#if&nbsp;MACRO</CODE> instead of
-<CODE>#ifdef&nbsp;MACRO</CODE>, if you know that MACRO, when defined, will
-always have a nonzero value.  Function-like macros used without their
-function call parentheses are also treated as zero.
-<BR><BR>
-In some contexts this shortcut is undesirable.  The <B>'-Wundef'</B>
-option causes GCC to warn whenever it encounters an identifier which is
-not a macro in an <CODE>#if</CODE>.
-</LI>
-</UL>
-The preprocessor does not know anything about types in the language.
-Therefore, <CODE>sizeof</CODE> operators are not recognized in <CODE>#if</CODE>, and
-neither are <CODE>enum</CODE> constants.  They will be taken as identifiers
-which are not macros, and replaced by zero.  In the case of
-<CODE>sizeof</CODE>, this is likely to cause the expression to be invalid.
-<BR><BR>
-The preprocessor calculates the value of <I>expression</I>.  It carries
-out all calculations in the widest integer type known to the compiler;
-on most machines supported by GCC this is 64 bits.  This is not the same
-rule as the compiler uses to calculate the value of a constant
-expression, and may give different results in some cases.  If the value
-comes out to be nonzero, the <CODE>#if</CODE> succeeds and the <I>controlled
-text</I> is included; otherwise it is skipped.
-<BR><BR>
-If <I>expression</I> is not correctly formed, GCC issues an error and
-treats the conditional as having failed.
+[Main]
+Title=#if
+Subsections=SEC38a
+Index=#endif
+
+[Top]
+The <CODE>#if</CODE> directive allows you to test the value of an arithmetic
+expression, rather than the mere existence of one macro.  Its syntax is
+<PRE>#if <I>expression</I>
+
+<I>controlled text</I>
+
+#endif /* <I>expression</I> */
+</PRE>
+<I>expression</I> is a C expression of integer type, subject to stringent
+restrictions.  It may contain
+<UL>
+<LI>
+Integer constants.
+<BR><BR>
+</LI>
+<LI>
+Character constants, which are interpreted as they would be in normal
+code.
+<BR><BR>
+</LI>
+<LI>
+Arithmetic operators for addition, subtraction, multiplication,
+division, bitwise operations, shifts, comparisons, and logical
+operations (<CODE>&amp;&amp;</CODE> and <CODE>||</CODE>).  The latter two obey the usual
+short-circuiting rules of standard C.
+<BR><BR>
+</LI>
+<LI>
+Macros.  All macros in the expression are expanded before actual
+computation of the expression's value begins.
+<BR><BR>
+</LI>
+<LI>
+Uses of the <CODE>defined</CODE> operator, which lets you check whether macros
+are defined in the middle of an <CODE>#if</CODE>.
+<BR><BR>
+</LI>
+<LI>
+Identifiers that are not macros, which are all considered to be the
+number zero.  This allows you to write <CODE>#if&nbsp;MACRO</CODE> instead of
+<CODE>#ifdef&nbsp;MACRO</CODE>, if you know that MACRO, when defined, will
+always have a nonzero value.  Function-like macros used without their
+function call parentheses are also treated as zero.
+<BR><BR>
+In some contexts this shortcut is undesirable.  The <B>'-Wundef'</B>
+option causes GCC to warn whenever it encounters an identifier which is
+not a macro in an <CODE>#if</CODE>.
+</LI>
+</UL>
+The preprocessor does not know anything about types in the language.
+Therefore, <CODE>sizeof</CODE> operators are not recognized in <CODE>#if</CODE>, and
+neither are <CODE>enum</CODE> constants.  They will be taken as identifiers
+which are not macros, and replaced by zero.  In the case of
+<CODE>sizeof</CODE>, this is likely to cause the expression to be invalid.
+<BR><BR>
+The preprocessor calculates the value of <I>expression</I>.  It carries
+out all calculations in the widest integer type known to the compiler;
+on most machines supported by GCC this is 64 bits.  This is not the same
+rule as the compiler uses to calculate the value of a constant
+expression, and may give different results in some cases.  If the value
+comes out to be nonzero, the <CODE>#if</CODE> succeeds and the <I>controlled
+text</I> is included; otherwise it is skipped.
+<BR><BR>
+If <I>expression</I> is not correctly formed, GCC issues an error and
+treats the conditional as having failed.

+ 18 - 18
tigcc/doc/System/Info/cpp/SEC35.hss

@@ -1,18 +1,18 @@
-[Main]
-Title=#else
-
-[Top]
-The <CODE>#else</CODE> directive can be added to a conditional to provide
-alternative text to be used if the condition fails.  This is what it
-looks like:
-<PRE>#if <I>expression</I>
-<I>text-if-true</I>
-#else /* Not <I>expression</I> */
-<I>text-if-false</I>
-#endif /* Not <I>expression</I> */
-</PRE>
-If <I>expression</I> is nonzero, the <I>text-if-true</I> is included and
-the <I>text-if-false</I> is skipped.  If <I>expression</I> is zero, the
-opposite happens.
-<BR><BR>
-You can use <CODE>#else</CODE> with <CODE>#ifdef</CODE> and <CODE>#ifndef</CODE>, too.
+[Main]
+Title=#else
+
+[Top]
+The <CODE>#else</CODE> directive can be added to a conditional to provide
+alternative text to be used if the condition fails.  This is what it
+looks like:
+<PRE>#if <I>expression</I>
+<I>text-if-true</I>
+#else /* Not <I>expression</I> */
+<I>text-if-false</I>
+#endif /* Not <I>expression</I> */
+</PRE>
+If <I>expression</I> is nonzero, the <I>text-if-true</I> is included and
+the <I>text-if-false</I> is skipped.  If <I>expression</I> is zero, the
+opposite happens.
+<BR><BR>
+You can use <CODE>#else</CODE> with <CODE>#ifdef</CODE> and <CODE>#ifndef</CODE>, too.

+ 40 - 40
tigcc/doc/System/Info/cpp/SEC36.hss

@@ -1,40 +1,40 @@
-[Main]
-Title=#elif
-
-[Top]
-One common case of nested conditionals is used to check for more than two
-possible alternatives.  For example, you might have
-<PRE>#if X == 1
-...
-#else /* X != 1 */
-#if X == 2
-...
-#else /* X != 2 */
-...
-#endif /* X != 2 */
-#endif /* X != 1 */
-</PRE>
-Another conditional directive, <CODE>#elif</CODE>, allows this to be
-abbreviated as follows:
-<PRE>#if X == 1
-...
-#elif X == 2
-...
-#else /* X != 2 and X != 1 */
-...
-#endif /* X != 2 and X != 1 */
-</PRE>
-<CODE>#elif</CODE> stands for &quot;else if&quot;.  Like <CODE>#else</CODE>, it goes in the
-middle of a conditional group and subdivides it; it does not require a
-matching <CODE>#endif</CODE> of its own.  Like <CODE>#if</CODE>, the <CODE>#elif</CODE>
-directive includes an expression to be tested.  The text following the
-<CODE>#elif</CODE> is processed only if the original <CODE>#if</CODE>-condition
-failed and the <CODE>#elif</CODE> condition succeeds.
-<BR><BR>
-More than one <CODE>#elif</CODE> can go in the same conditional group.  Then
-the text after each <CODE>#elif</CODE> is processed only if the <CODE>#elif</CODE>
-condition succeeds after the original <CODE>#if</CODE> and all previous
-<CODE>#elif</CODE> directives within it have failed.
-<BR><BR>
-<CODE>#else</CODE> is allowed after any number of <CODE>#elif</CODE> directives, but
-<CODE>#elif</CODE> may not follow <CODE>#else</CODE>.
+[Main]
+Title=#elif
+
+[Top]
+One common case of nested conditionals is used to check for more than two
+possible alternatives.  For example, you might have
+<PRE>#if X == 1
+...
+#else /* X != 1 */
+#if X == 2
+...
+#else /* X != 2 */
+...
+#endif /* X != 2 */
+#endif /* X != 1 */
+</PRE>
+Another conditional directive, <CODE>#elif</CODE>, allows this to be
+abbreviated as follows:
+<PRE>#if X == 1
+...
+#elif X == 2
+...
+#else /* X != 2 and X != 1 */
+...
+#endif /* X != 2 and X != 1 */
+</PRE>
+<CODE>#elif</CODE> stands for &quot;else if&quot;.  Like <CODE>#else</CODE>, it goes in the
+middle of a conditional group and subdivides it; it does not require a
+matching <CODE>#endif</CODE> of its own.  Like <CODE>#if</CODE>, the <CODE>#elif</CODE>
+directive includes an expression to be tested.  The text following the
+<CODE>#elif</CODE> is processed only if the original <CODE>#if</CODE>-condition
+failed and the <CODE>#elif</CODE> condition succeeds.
+<BR><BR>
+More than one <CODE>#elif</CODE> can go in the same conditional group.  Then
+the text after each <CODE>#elif</CODE> is processed only if the <CODE>#elif</CODE>
+condition succeeds after the original <CODE>#if</CODE> and all previous
+<CODE>#elif</CODE> directives within it have failed.
+<BR><BR>
+<CODE>#else</CODE> is allowed after any number of <CODE>#elif</CODE> directives, but
+<CODE>#elif</CODE> may not follow <CODE>#else</CODE>.

+ 26 - 26
tigcc/doc/System/Info/cpp/SEC37.hss

@@ -1,26 +1,26 @@
-[Main]
-Title=Deleted Code
-
-[Top]
-If you replace or delete a part of the program but want to keep the old
-code around for future reference, you often cannot simply comment it
-out.  Block comments do not nest, so the first comment inside the old
-code will end the commenting-out.  The probable result is a flood of
-syntax errors.
-<BR><BR>
-One way to avoid this problem is to use an always-false conditional
-instead.  For instance, put <CODE>#if&nbsp;0</CODE> before the deleted code and
-<CODE>#endif</CODE> after it.  This works even if the code being turned
-off contains conditionals, but they must be entire conditionals
-(balanced <CODE>#if</CODE> and <CODE>#endif</CODE>).
-<BR><BR>
-Some people use <CODE>#ifdef&nbsp;notdef</CODE> instead.  This is risky, because
-<CODE>notdef</CODE> might be accidentally defined as a macro, and then the
-conditional would succeed.  <CODE>#if&nbsp;0</CODE> can be counted on to fail.
-<BR><BR>
-Do not use <CODE>#if&nbsp;0</CODE> for comments which are not C code.  Use a real
-comment, instead.  The interior of <CODE>#if&nbsp;0</CODE> must consist of complete
-tokens; in particular, single-quote characters must balance.  Comments
-often contain unbalanced single-quote characters (known in English as
-apostrophes).  These confuse <CODE>#if&nbsp;0</CODE>.  They don't confuse
-<CODE>/*</CODE>.
+[Main]
+Title=Deleted Code
+
+[Top]
+If you replace or delete a part of the program but want to keep the old
+code around for future reference, you often cannot simply comment it
+out.  Block comments do not nest, so the first comment inside the old
+code will end the commenting-out.  The probable result is a flood of
+syntax errors.
+<BR><BR>
+One way to avoid this problem is to use an always-false conditional
+instead.  For instance, put <CODE>#if&nbsp;0</CODE> before the deleted code and
+<CODE>#endif</CODE> after it.  This works even if the code being turned
+off contains conditionals, but they must be entire conditionals
+(balanced <CODE>#if</CODE> and <CODE>#endif</CODE>).
+<BR><BR>
+Some people use <CODE>#ifdef&nbsp;notdef</CODE> instead.  This is risky, because
+<CODE>notdef</CODE> might be accidentally defined as a macro, and then the
+conditional would succeed.  <CODE>#if&nbsp;0</CODE> can be counted on to fail.
+<BR><BR>
+Do not use <CODE>#if&nbsp;0</CODE> for comments which are not C code.  Use a real
+comment, instead.  The interior of <CODE>#if&nbsp;0</CODE> must consist of complete
+tokens; in particular, single-quote characters must balance.  Comments
+often contain unbalanced single-quote characters (known in English as
+apostrophes).  These confuse <CODE>#if&nbsp;0</CODE>.  They don't confuse
+<CODE>/*</CODE>.

Some files were not shown because too many files changed in this diff