[qfcc] Make ruamoko the default and update the docs

It's time to do the dog-food.
This commit is contained in:
Bill Currie 2022-02-04 10:46:31 +09:00
parent f3770cc647
commit 26fca581fc
2 changed files with 54 additions and 22 deletions

View file

@ -56,8 +56,10 @@ understand.
.TP
.B \-\-advanced
Use advanced Ruamoko features.
This is the default when using separate compilation.
Use advanced Ruamoko language features limited to the v6p ISA. This
provides access to structs, arrays, pointers, integers, quaternions,
doubles and object-oriented features mostly compatible with Objective-C
(ie, Objective-QuakeC). For access to SIMD vector types, see --ruamoko.
.TP
.B \-C, \-\-code OPTION,...
@ -179,6 +181,15 @@ Counteracts the effects of \fB-v\fP.
Incremental linking.
Generate a larger object file from other object files and libraries.
.TP
.B \-\-raumoko, \-\-ruamoko
In addition to the Ruamoko language features added by --advanced, this
option provides access to SIMD vector types (and instructions), a data
stack for local variables and parameters (allowing pointers to local
variables to be passed to other functions!), and other features still
under development.
This is the default when using separate compilation.
.TP
.B \-S, \-\-save\-temps
Do not delete temporary files.
@ -346,16 +357,17 @@ Also disables compiler features (such as integers and string manipulation
support) that require extensions.
.TP
.B v6p
Quakeforge extended v6 instructions.
This is not compatible with older server, nor with most (any?) other Quake
engine. It adds a variety of instructions and types, including integers,
QuakeForge extended v6 instructions.
This is not compatible with older servers, nor with most (any?) other Quake
engines. It adds a variety of instructions and types, including integers,
quaternions, pointers, doubles, structs, arrays and Objective-C style classes.
.TP
.B ruamoko
Quakeforge SIMD instructions. This is currently under development
and thus not the default.
QuakeForge SIMD and stack instructions.
.RE
Defaults to v6 for traditional mode and v6p for advanced mode.
Defaults to v6 for traditional mode, v6p for advanced mode, and ruamoko
for Ruamoko mode (actually, trying to take Ruamoko's power after
granting it may not end well).
.SH "WARNING OPTIONS"
@ -718,13 +730,13 @@ gold digits.
\fB\-\-qccx\-escapes\fP has no effect on sequences that do not conflict.
.SH TRADITIONAL VS ADVANCED
Compared to \fBqcc\fP, \*[qfcc] has many advanced features and is much stricter
about type checking.
.SH TRADITIONAL VS ADVANCED VS RUAMOKO
Compared to \fBqcc\fP, \*[qfcc] has many advanced features and is much
stricter about type checking.
\*[qfcc] also uses the same operator semantics and precedence rules as
standard \fBC\fP.
Unfortunately, this means that most older QuakeC code will not compile, or even
worse, will compile incorrectly.
Unfortunately, this means that most older QuakeC code will not compile,
or even worse, will compile incorrectly.
.P
To address this situation, \*[qfcc] has a \*(lqtraditional\*(rq mode for
compiling old progs.
@ -732,20 +744,32 @@ This mode, enabled with \fB--traditional\fP or by default in \fBprogs.src\fP
mode, removes the new keywords required by \*[qfcc]'s advanced features,
converts new errors to warnings, some warnings to notices and inverts
precedence order where required (eg, (!var & flag)).
Traditional mode also affects several code generation options (as always, this
can be overridden):
Traditional mode also affects several code generation options (as
always, this can be overridden):
.IP \(bu 4
code output is restricted to version 6 progs instructions
.IP \(bu 4
short circuit boolean logic is disabled
.IP \(bu 4
each function has a private area of data for its local variables (this wastes
a lot of data space).
each function has a private area of data for its local variables (this
wastes a lot of data space).
.P
Advanced mode is simply \*[qfcc] in its natural state.
Using \fB--advanced\fP, \*[qfcc] can be put in to advanced mode while using the
\fBprogs.src\fP compilation mode.
Advanced mode is \*[qfcc] in what was its natural state until the
introduction of Ruamoko mode. Advanced mode adds several data types and
Objective-C object oriented programming.
Using \fB--advanced\fP, \*[qfcc] can be put in to advanced mode while
using the \fBprogs.src\fP compilation mode.
.P
Ruamoko mode is \*[qfcc] in its natural state. On top of the features
added by Advanced mode, Ruamoko mode adds SIMD types and instructions,
and a data stack for locals and parameters.
.SH RUAMOKO PROGRAMMING LANGUAGE
Ruamoko evolved from the original QuakeC language, gaining standard C
syntax and most features (the char type is not supported, and function
pointers are a little weird (design bug?)), Objective-C object oriented
extensions, and (with the Ruamoko ISA) SIMD vectors and the ability to
pass pointers to local variables to other functions.
.SH "FAQ"
@ -756,6 +780,11 @@ Sky-father, and Papatuanuku, the Earth-mother.
Ruamoko is the god of volcanoes and earthquakes.
For more information, see the Web site at <\fBhttp://maori.com/kmst1.htm\fP>.
.TP
.B Why both Ruamoko and Raumoko?
They are alternative spellings and pronunciations. Use whichever one you
prefer.
.TP
.B qfcc hangs
This is almost always caused by qfcc incorrectly invoking \*[cpp].

View file

@ -142,7 +142,6 @@ usage (int status)
printf (
"Options:\n"
" --advanced Advanced Ruamoko mode\n"
" default for separate compilation mode\n"
" --bug OPTION,... Set bug options\n"
" -C, --code OPTION,... Set code generation options\n"
" -c Only compile, don't link\n"
@ -172,6 +171,10 @@ usage (int status)
" C/QuakeForge sequences.\n"
" -q, --quiet Inhibit usual output\n"
" -r, --relocatable Incremental linking\n"
" --raumoko Use both Ruamoko language features and the\n"
" --ruamoko Ruamoko ISA, providing access to SIMD types\n"
" and a stack for locals.\n"
" default for separate compilation mode\n"
" -S, --save-temps Do not delete temporary files\n"
" -s, --source DIR Look for progs.src in DIR instead of \".\"\n"
" --traditional Traditional QuakeC mode: implies v6only\n"
@ -719,7 +722,7 @@ DecodeArgs (int argc, char **argv)
options.code.vector_components = true;
}
if (!options.code.progsversion)
options.code.progsversion = PROG_V6P_VERSION;
options.code.progsversion = PROG_VERSION;
if (!options.traditional) {
// avanced=2 requires the Ruamoko ISA
options.advanced = 2 - (options.code.progsversion < PROG_VERSION);