]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - doc/gmqcc.1
-Olocaltemps -> -Olocal-temps for consistency; added manpage entry; removed leftover...
[xonotic/gmqcc.git] / doc / gmqcc.1
index 451e8ddad00e4d3ee91f5ad01e772e2741318318..474ec518d683782a4db1a202ca34cb66a3ba7fd5 100644 (file)
@@ -38,7 +38,7 @@ Default optimization level
 .IP 1
 Minimal optimization level
 .IP 0
-Disable optimization entierly
+Disable optimization entirely
 .RE
 .TP
 .BI "-O" name "\fR, " "" -Ono- name
@@ -56,6 +56,12 @@ Enable or disable a warning.
 .B -Wall
 Enable all warnings. Overrides preceding -W parameters.
 .TP
+.BR -Werror ", " -Wno-error
+Controls whether or not all warnings should be treated as errors.
+.TP
+.BI -Werror- warning "\fR, " "" -Wno-error- warning
+Controls whether a specific warning should be an error.
+.TP
 .B -Whelp
 List all possible warn flags.
 .TP
@@ -69,7 +75,7 @@ List all possible compile flags.
 .B -nocolor
 Disables colored output
 .TP
-.BI "-config " file
+.BI -config= file
 Use an ini file to read all the -O, -W and -f flag from. See the
 CONFIG section about the file format.
 .TP
@@ -110,7 +116,7 @@ them.
 -f\fIno-\fRcorrect-ternary
 .fi
 .in
-.SH Warnings
+.SH COMPILE WARNINGS
 .TP
 .B -Wunused-variable
 Generate a warning about variables which are declared but never used.
@@ -190,7 +196,12 @@ function to an entity's .think function pointer.
 .TP
 .B -Wpreprocessor
 Enable warnings coming from the preprocessor. Like duplicate macro
-declarations.
+declarations. This warning triggers when there's a problem with the
+way the preprocessor has been used, it will \fBnot\fR affect warnings
+generated with the '#warning' directive. See -Wcpp.
+.TP
+.B -Wcpp
+Show warnings created using the preprocessor's '#warning' directive.
 .TP
 .B -Wmultifile-if
 Warn if there's a preprocessor \fI#if\fR spanning across several
@@ -220,14 +231,18 @@ actually want. We recommend the \fI-fcorrect-ternary\fR option.
 .B -Wunknown-pragmas
 Warn when encountering an unrecognized \fI#pragma\fR line.
 .TP
+.B -Wunreachable-code
+Warn about unreachable code. That is: code after a return statement,
+or code after a call to a function marked as 'noreturn'.
+.TP
 .B -Wdebug
 Enable some warnings added in order to help debugging in the compiler.
 You won't need this.
-.SH Compile Flags
-.TP
-.B -foverlap-locals
-Allow local variables to overlap with each other if they don't
-interfer with each other. (Not implemented right now)
+.B -Wunknown-attribute
+Warn on an unknown attribute. The warning will inlclude only the first
+token inside the enclosing attribute-brackets. This may change when
+the actual attribute syntax is better defined.
+.SH COMPILE FLAGS
 .TP
 .B -fdarkplaces-string-table-bug
 Add some additional characters to the string table in order to
@@ -287,6 +302,66 @@ soption.
 Normally vectors generate 4 defs, once for the vector, and once for
 its components with _x, _y, _z suffixes. This option
 prevents components from being listed.
+.TP
+.B -fcorrect-logic
+Most QC compilers translate if(a_vector) directly as an IF on the
+vector, which means only the x-component is checked. This causes
+vectors to be cast to actual booleans via a NOT_V and, if necessary, a
+NOT_F chained to it.
+.in +4
+.nf
+if (a_vector) // becomes
+if not(!a_vector)
+// likewise
+a = a_vector && a_float // becomes
+a = !!a_vector && a_float
+.fi
+.in
+.TP
+.B -ftrue-empty-strings
+An empty string is considered to be true everywhere. The NOT_S
+instruction usually considers an empty string to be false, this option
+effectively causes the unary not in strings to use NOT_F instead.
+.TP
+.B -ffalse-empty-strings
+An empty string is considered to be false everywhere. This means loops
+and if statements which depend on a string will perform a NOT_S
+instruction on the string before using it.
+.TP
+.B -futf8
+Enable utf8 characters. This allows utf-8 encoded character constants,
+and escape sequence codepoints in the valid utf-8 range. Effectively
+enabling escape sequences like '\\{x2211}'.
+.SH OPTIMIZATIONS
+.TP
+.B -Opeephole
+Some general peephole optimizations. For instance the code `a = b + c`
+typically generates 2 instructions, an ADD and a STORE. This
+optimization removes the STORE and lets the ADD write directly into A.
+.TP
+.B -Otail-recursion
+Tail recursive function calls will be turned into loops to avoid the
+overhead of the CALL and RETURN instructions.
+.TP
+.B -Ooverlap-locals
+Make all functions which use neither local arrays nor have locals
+which are seen as possibly uninitialized use the same local section.
+This should be pretty safe compared to other compilers which do not
+check for uninitialized values properly. The problem is that there's
+QC code out there which really doesn't initialize some values. This is
+fine as long as this kind of optimization isn't used, but also, only
+as long as the functions cannot be called in a recursive manner. Since
+it's hard to know whether or not an array is actually fully
+initialized, especially when initializing it via a loop, we assume
+functions with arrays to be too dangerous for this optimization.
+.TP
+.B -Olocal-temps
+This promotes locally declared variables to "temps". Meaning when a
+temporary result of an operation has to be stored somewhere, a local
+variable which is not 'alive' at that point can be used to keep the
+result. This can reduce the size of the global section.
+This will not have declared variables overlap, even if it was
+possible.
 .SH CONFIG
 The configuration file is similar to regular .ini files. Comments
 start with hashtags or semicolons, sections are written in square
@@ -318,3 +393,14 @@ Here's an example:
     TAIL_RECURSION = true
 .fi
 .in
+.SH BUGS
+Please report bugs on <http://github.com/graphitemaster/gmqcc/issues>,
+or see <http://graphitemaster.github.com/gmqcc> on how to contact us.
+.SH FILES
+.TP 20
+.B gmqcc.ini.example
+A documented example for a gmqcc.ini file.
+.SH SEE ALSO
+.IR qcvm (1)
+.SH AUTHOR
+See <http://graphitemaster.github.com/gmqcc>.