switch: <tt/-Or/ will enable both, the optmizer and register variables.
For more information about register variables see <ref id="regvars"
- name="register variables">.
+ name="register variables">.
+
+ The compiler setting can also be changed within the source file by using
+ <tt><ref id="pragma-regvars" name="#pragma regvars"></tt>.
<tag><tt>--register-space</tt></tag>
<sect>#pragmas<label id="pragmas"><p>
The compiler understands some pragmas that may be used to change code
-generation and other stuff.
-
+generation and other stuff. Some of these pragmas understand a special form:
+If the first parameter is <tt/push/, the old value is saved onto a stack
+before changing it. The value may later be restored by using the <tt/pop/
+parameter with the <tt/#pragma/.
<sect1><tt>#pragma bssseg (<name>)</tt><p>
</verb></tscreen>
-<sect1><tt>#pragma checkstack (on|off)</tt><label
-id="pragma-checkstack"><p>
+<sect1><tt>#pragma checkstack (on|off)</tt><label id="pragma-checkstack"><p>
Tells the compiler to insert calls to a stack checking subroutine to detect
stack overflows. The stack checking code will lead to somewhat larger and
If the argument is "off", stack checks are disabled (the default), otherwise
they're enabled.
+ The <tt/#pragma/ understands the push and pop parameters as explained above.
<sect1><tt>#pragma codeseg (<name>)</tt><p>
</verb></tscreen>
-<sect1><tt>#pragma regvaraddr (on|off)</tt><p>
+<sect1><tt>#pragma regvaraddr ([push,]on|off)</tt><p>
The compiler does not allow to take the address of register variables.
The regvaraddr pragma changes this. Taking the address of a register
and this subroutine (or a subroutine called from there) uses itself
register variables. So be careful with this #pragma.
+ The <tt/#pragma/ understands the push and pop parameters as explained above.
+
Example:
<tscreen><verb>
- #pragma regvaraddr(1) /* Allow taking the address
+ #pragma regvaraddr(on) /* Allow taking the address
* of register variables
*/
</verb></tscreen>
+<sect1><tt>#pragma regvars ([push,]on|off)</tt><label id="pragma-regvars"><p>
+
+ Enables or disables use of register variables. If register variables are
+ disabled (the default), the <tt/register/ keyword is ignored. Register
+ variables are explained in more detail in <ref id="regvars" name="a separate
+ chapter">.
+
+ The <tt/#pragma/ understands the push and pop parameters as explained above.
+
+
<sect1><tt>#pragma signedchars (on|off)</tt><label id="pragma-signedchars"><p>
Changes the signedness of the default character type. If the argument is
lot better code. This default may be overridden by the <tt/--signed-chars/
command line option.
+ The <tt/#pragma/ understands the push and pop parameters as explained above.
-<sect1><tt>#pragma staticlocals (on|off)</tt><label
-id="pragma-staticlocals"<p>
+
+<sect1><tt>#pragma staticlocals (on|off)</tt><label id="pragma-staticlocals"<p>
Use variables in the bss segment instead of variables on the stack. This
pragma changes the default set by the compiler option <tt/-Cl/. If the
argument is "on", local variables are allocated in the BSS segment,
leading to shorter and in most cases faster, but non-reentrant code.
+ The <tt/#pragma/ understands the push and pop parameters as explained above.
+
<sect1><tt>#pragma zpsym (<name>)</tt><p>