Bläddra i källkod

* possible defines for compiler compilation updated
+ FPU_EMULATION define
* many updates to be consistent with version 1.0.7

carl 23 år sedan
förälder
incheckning
65c373f682
1 ändrade filer med 42 tillägg och 32 borttagningar
  1. 42 32
      docs/prog.tex

+ 42 - 32
docs/prog.tex

@@ -2167,7 +2167,7 @@ MMX operations, so be careful.
 
 
 The MMX instructions are optimized for multi media (what else?).
 The MMX instructions are optimized for multi media (what else?).
 So it isn't possible to perform each operation, some operations
 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
 MMX operations
 
 
 An important restriction is that MMX operations aren't range or overflow
 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
 \begin{FPCltable}{ll}{Motorola 680x0 Register table}{680x0Regs} \hline
 Generic register name & CPU Register name \\ \hline
 Generic register name & CPU Register name \\ \hline
-accumulator & D0 \\
+accumulator & D0\footnotemark \\
 accumulator (64-bit) high / low & D0:D1 \\
 accumulator (64-bit) high / low & D0:D1 \\
 float result & FP0\footnotemark\\
 float result & FP0\footnotemark\\
 self & A5 \\
 self & A5 \\
@@ -2310,7 +2310,10 @@ stack pointer & A7 \\
 scratch regs. & D0, D1, A0, A1, FP0, FP1 \\
 scratch regs. & D0, D1, A0, A1, FP0, FP1 \\
 \end{FPCltable}
 \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
 % Name mangling
@@ -2717,12 +2720,11 @@ Standard entry code for procedures and functions is as follows on the
    move.l  sp,a6
    move.l  sp,a6
 \end{verbatim}
 \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}
 \begin{verbatim}
    unlk   a6
    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}
 \end{verbatim}
 
 
 Where \var{xx} is the total size of the pushed parameters.
 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).
 as passing a byte value parameter to the stack).
 
 
 
 
-
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \section{Processor limitations}
 \section{Processor limitations}
+\label{se:ProcessorLimits}
 
 
 Certain processors have limitations on the size of the parameters
 Certain processors have limitations on the size of the parameters
 and local variables in routines. This is shown in \seet{CPULimits}.
 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
 \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).
 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
 \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.
 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
 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
 \item Use the smartlinking options for all your units
 (including the \var{system} unit).
 (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 range checking and stack-checking.
 
 
+\item Turn off runtime type information generation
+
 \end{itemize}
 \end{itemize}
 
 
 
 
@@ -5617,17 +5625,18 @@ units as well as generic versions of processor specific routines.
 
 
 \chapter{Compiler limits}
 \chapter{Compiler limits}
 \label{ch:AppC}
 \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}
 \begin{enumerate}
 \item Procedure or Function definitions can be nested to a level of 32.
 \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}
 \end{enumerate}
 
 
+For processor specific compiler limitations refer to the Processor
+Limitations section in this guide (\ref{se:ProcessorLimits}).
+
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % Appendix D
 % Appendix D
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -5653,7 +5662,8 @@ parameters when implementing the function or procedure.
 \item PChars are converted to strings automatically.
 \item PChars are converted to strings automatically.
 \end{enumerate}
 \end{enumerate}
 \section{TP mode}
 \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.
 this mode is selected by the \var{-So} switch.
 
 
 \begin{enumerate}
 \begin{enumerate}
@@ -5669,7 +5679,8 @@ parameters when implementing the function or procedure.
 \item You can not use the cvar type.
 \item You can not use the cvar type.
 \end{enumerate}
 \end{enumerate}
 \section{Delphi mode}
 \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.
 this mode is selected by the \var{-Sd} switch.
 \begin{enumerate}
 \begin{enumerate}
 \item You can not use the address operator to assign procedural variables.
 \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 
 compiled first, this should be \file{../rtl/OS} (replace the OS with the 
 appropriate operating system subdirectory of the RTL).
 appropriate operating system subdirectory of the RTL).
 \item A define with the processor for which the compiler is compiled for. Required.
 \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}
 \item \var{-Sg} is needed, some parts of the compiler use \var{goto}
 statements (to be specific: the scanner).
 statements (to be specific: the scanner).
 \end{enumerate}
 \end{enumerate}
 So the absolute minimal command line is
 So the absolute minimal command line is
 \begin{verbatim}
 \begin{verbatim}
-ppc386 -di386 -Sg pp.pas
+ppc386 -di386 -dGDB -Sg pp.pas
 \end{verbatim}
 \end{verbatim}
 
 
 Some other command-line options can be used, but the above are the
 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}
 \begin{FPCltable}{ll}{Possible defines when compiling FPC}{FPCdefines}
 Define & does what \\ \hline
 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. \\
 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. \\
 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. \\
 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 \\
 SUPPORT\_MMX & only i386: enables the compiler switch \var{MMX} which \\
  &allows the compiler to generate  MMX instructions.\\
  &allows the compiler to generate  MMX instructions.\\
 EXTERN\_MSG & Don't compile the msgfiles in the compiler, always use \\
 EXTERN\_MSG & Don't compile the msgfiles in the compiler, always use \\
 & external messagefiles (default for TP).\\
 & 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}
 \end{FPCltable}
 This list may be subject to change, the source file \file{pp.pas} always
 This list may be subject to change, the source file \file{pp.pas} always
 contains an up-to-date list.
 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). \\
 & (80x86, Alpha, ARM). \\
 ENDIAN\_BIG & Defined when the \fpc target is a big-endian processor \\
 ENDIAN\_BIG & Defined when the \fpc target is a big-endian processor \\
 & (680x0, PowerPC, SPARC, MIPS). \\
 & (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 \\
 FPC\_DELPHI & \fpc is in Delphi mode, either using compiler switch -Sd or \\
 & using the \var{\$MODE DELPHI} directive. \\
 & using the \var{\$MODE DELPHI} directive. \\
 FPC\_OBJFPC & \fpc is in Delphi mode, either using compiler switch -S2 or \\
 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}
 \begin{remark}
 The \var{ENDIAN\_LITTLE} and \var{ENDIAN\_BIG} defines were added
 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}
 \end{remark}
 
 
 \begin{FPCltable}{ll}{Possible CPU defines when compiling using FPC}{FPCCPUdefines}
 \begin{FPCltable}{ll}{Possible CPU defines when compiling using FPC}{FPCCPUdefines}