* possible defines for compiler compilation updated

+ FPU_EMULATION define
  * many updates to be consistent with version 1.0.7
This commit is contained in:
carl 2002-09-29 14:41:14 +00:00
parent 10278b42e6
commit 65c373f682

View File

@ -2167,7 +2167,7 @@ MMX operations, so be careful.
The MMX instructions are optimized for multi media (what else?).
So it isn't possible to perform each operation, some operations
give a type mismatch, see section \ref {se:SupportedMMX} for the supported
give a type mismatch, see section \ref{se:SupportedMMX} for the supported
MMX operations
An important restriction is that MMX operations aren't range or overflow
@ -2301,7 +2301,7 @@ scratch regs. & N/A \\
\begin{FPCltable}{ll}{Motorola 680x0 Register table}{680x0Regs} \hline
Generic register name & CPU Register name \\ \hline
accumulator & D0 \\
accumulator & D0\footnotemark \\
accumulator (64-bit) high / low & D0:D1 \\
float result & FP0\footnotemark\\
self & A5 \\
@ -2310,7 +2310,10 @@ stack pointer & A7 \\
scratch regs. & D0, D1, A0, A1, FP0, FP1 \\
\end{FPCltable}
\footnotetext{On simulated FPU's the result is returned in D0}
\addtocounter{footnote}{-1}\footnotetext{For compatibility with some C compilers, when
the function result is a pointer and is declared with the cdecl convention,
the result is also stored in the A0 register}
\addtocounter{footnote}{1}\footnotetext{On simulated FPU's the result is returned in D0}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Name mangling
@ -2717,12 +2720,11 @@ Standard entry code for procedures and functions is as follows on the
move.l sp,a6
\end{verbatim}
The generated exit sequence for procedure and functions looks as follows:
The generated exit sequence for procedure and functions looks as follows
(in the default processor mode):
\begin{verbatim}
unlk a6
move.l (sp)+,a0 ; Get return address
add.l #xx,sp ; Remove allocated stack
move.l a0,-(sp) ; Put back return address on top of the stack
rtd #xx
\end{verbatim}
Where \var{xx} is the total size of the pushed parameters.
@ -2779,8 +2781,9 @@ parameter actually takes less then 4 bytes to store on the stack (such
as passing a byte value parameter to the stack).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Processor limitations}
\label{se:ProcessorLimits}
Certain processors have limitations on the size of the parameters
and local variables in routines. This is shown in \seet{CPULimits}.
@ -4835,6 +4838,9 @@ use longword and longint variables.
\item Write your if/then/else statements so that the code in the "then"-part
gets executed most of the time (improves the rate of successful jump prediction).
\item Do not use ansistrings, widestrings and exception support, as these
require a lot of code overhead.
\item Profile your code (see the -pg switch) to find out where the
bottlenecks are. If you want, you can rewrite those parts in assembler.
You can take the code generated by the compiler as a starting point. When
@ -4865,11 +4871,13 @@ about 1 additional instruction after each subroutine call.
\item Use the smartlinking options for all your units
(including the \var{system} unit).
\item Do not use ansistrings and exception support, as these require
a lot of code overhead.
\item Do not use ansistrings, widestrings and exception support, as these
require a lot of code overhead.
\item Turn off range checking and stack-checking.
\item Turn off runtime type information generation
\end{itemize}
@ -5617,17 +5625,18 @@ units as well as generic versions of processor specific routines.
\chapter{Compiler limits}
\label{ch:AppC}
Although many of the restrictions imposed by the MS-DOS system are removed
by use of an extender, or use of another operating system, there still are
some limitations to the compiler:
There are certain compiler limits inherent to the compiler:
\begin{enumerate}
\item Procedure or Function definitions can be nested to a level of 32.
\item Maximally 255 units can be used in a program when using the real-mode
compiler (i.e. a binary that was compiled by Borland Pascal). When using the 32-bit compiler, the limit is set to 1024. You can
change this by redefining the \var{maxunits} constant in the
\file{files.pas} compiler source file.
\item Maximally 1024 units can be used in a program when using the compiler.
You can change this by redefining the \var{maxunits} constant in the compiler
source file.
\item Arrays are limited to 2 GBytes in size in the default processor mode.
\end{enumerate}
For processor specific compiler limitations refer to the Processor
Limitations section in this guide (\ref{se:ProcessorLimits}).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Appendix D
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@ -5653,7 +5662,8 @@ parameters when implementing the function or procedure.
\item PChars are converted to strings automatically.
\end{enumerate}
\section{TP mode}
This mode is selected by the \var{{\$MODE TP}} switch. On the command-line,
This mode is selected by the \var{{\$MODE TP}} switch. It tries to emulate,
as closely as possible, the behavior of Turbo Pascal 7. On the command-line,
this mode is selected by the \var{-So} switch.
\begin{enumerate}
@ -5669,7 +5679,8 @@ parameters when implementing the function or procedure.
\item You can not use the cvar type.
\end{enumerate}
\section{Delphi mode}
This mode is selected by the \var{{\$MODE DELPHI}} switch. On the command-line,
This mode is selected by the \var{{\$MODE DELPHI}} switch. It tries to emulate,
as closely as possible, the behavior of Delphi 4. On the command-line,
this mode is selected by the \var{-Sd} switch.
\begin{enumerate}
\item You can not use the address operator to assign procedural variables.
@ -6685,14 +6696,13 @@ is on the system. If the compiler should be compiled with the RTL that was
compiled first, this should be \file{../rtl/OS} (replace the OS with the
appropriate operating system subdirectory of the RTL).
\item A define with the processor for which the compiler is compiled for. Required.
\item \var{-dGDB} is not strictly needed, but is better to add since
otherwise compiling with debug information will not be possible.
\item \var{-dGDB}. Required.
\item \var{-Sg} is needed, some parts of the compiler use \var{goto}
statements (to be specific: the scanner).
\end{enumerate}
So the absolute minimal command line is
\begin{verbatim}
ppc386 -di386 -Sg pp.pas
ppc386 -di386 -dGDB -Sg pp.pas
\end{verbatim}
Some other command-line options can be used, but the above are the
@ -6700,22 +6710,19 @@ minimum. A list of recognised options can be found in \seet{FPCdefines}.
\begin{FPCltable}{ll}{Possible defines when compiling FPC}{FPCdefines}
Define & does what \\ \hline
USE\_RHIDE & Generates errors and warnings in a format recognized\\
& by \file{rhide}. \\
TP & Needed to compile the compiler with Turbo or Borland Pascal. \\
Delphi & Needed to compile the compiler with Delphi from Borland. \\
GDB & Support of the GNU Debugger. \\
GDB & Support of the GNU Debugger (required switch). \\
I386 & Generate a compiler for the Intel i386+ processor family. \\
M68K & Generate a compiler for the M68000 processor family. \\
USEOVERLAY & Compiles a TP version which uses overlays. \\
M68K & Generate a compiler for the M680x0 processor family. \\
EXTDEBUG & Some extra debug code is executed. \\
MEMDEBUG & Some memory usage information is displayed. \\
SUPPORT\_MMX & only i386: enables the compiler switch \var{MMX} which \\
&allows the compiler to generate MMX instructions.\\
EXTERN\_MSG & Don't compile the msgfiles in the compiler, always use \\
& external messagefiles (default for TP).\\
NOAG386INT & no Intel Assembler output.\\
NOAG386NSM & no NASM output.\\
NOAG386BIN & leaves out the binary writer.\\ \hline
LOGSECONDPASS & Write compiler node information in assembler output. \\
NOOPT & Do not include the optimizer in the compiler. \\
\hline
\end{FPCltable}
This list may be subject to change, the source file \file{pp.pas} always
contains an up-to-date list.
@ -6750,6 +6757,8 @@ ENDIAN\_LITTLE & Defined when the \fpc target is a little-endian processor \\
& (80x86, Alpha, ARM). \\
ENDIAN\_BIG & Defined when the \fpc target is a big-endian processor \\
& (680x0, PowerPC, SPARC, MIPS). \\
FPU\_EMULATION & Defined when the \fpc target uses floating-point software \\
& emulation. \\
FPC\_DELPHI & \fpc is in Delphi mode, either using compiler switch -Sd or \\
& using the \var{\$MODE DELPHI} directive. \\
FPC\_OBJFPC & \fpc is in Delphi mode, either using compiler switch -S2 or \\
@ -6762,7 +6771,8 @@ FPC\_GPC & \fpc is in GNU Pascal mode, either using compiler switch -Sp or \\
\begin{remark}
The \var{ENDIAN\_LITTLE} and \var{ENDIAN\_BIG} defines were added
starting from \fpc version 1.0.5.
starting from \fpc version 1.0.5. The \var{FPU\_EMULATION} define
was added starting from \fpc version 1.0.7.
\end{remark}
\begin{FPCltable}{ll}{Possible CPU defines when compiling using FPC}{FPCCPUdefines}