Răsfoiți Sursa

* Florian's culmutative nr. 1; contains:
- invalid calling conventions for a certain cpu are rejected
- arm softfloat calling conventions
- -Sp for cpu dependend code generation
- several arm fixes
- remaining code for value open array paras on heap

florian 22 ani în urmă
părinte
comite
bbf7300a0c

+ 28 - 7
compiler/aasmtai.pas

@@ -144,7 +144,11 @@ interface
 
     type
       { Types of operand }
-      toptype=(top_none,top_reg,top_ref,top_const,top_symbol,top_bool,top_local);
+      toptype=(top_none,top_reg,top_ref,top_const,top_symbol,top_bool,top_local,
+       { ARM only }
+       top_regset,
+       { ARM only }
+       top_shifterop);
 
       toper=record
         ot : longint;
@@ -158,6 +162,10 @@ interface
          { local varsym that will be inserted in pass_2 }
          top_local  : (localsym:pointer;localsymderef:tderef;localsymofs:longint;localindexreg:tregister;
                        localscale:byte;localgetoffset:boolean);
+      {$ifdef arm}
+         top_regset : (regset:^tcpuregisterset);
+         top_shifterop : (shifterop : pshifterop);
+      {$endif arm}
       end;
       poper=^toper;
 
@@ -1678,13 +1686,18 @@ implementation
     procedure taicpu_abstract.clearop(opidx:longint);
       begin
         with oper[opidx]^ do
-          case typ of
-            top_ref:
-              dispose(ref);
+          begin
+            case typ of
+              top_ref:
+                dispose(ref);
 {$ifdef ARM}
-            top_shifterop:
-              dispose(shifterop);
+              top_shifterop:
+                dispose(shifterop);
+              top_regset:
+                dispose(regset);
 {$endif ARM}
+            end;
+            typ:=top_none;
           end;
       end;
 
@@ -2140,7 +2153,15 @@ implementation
 end.
 {
   $Log$
-  Revision 1.53  2003-10-30 19:59:00  peter
+  Revision 1.54  2003-11-07 15:58:32  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.53  2003/10/30 19:59:00  peter
     * support scalefactor for opr_local
     * support reference with opr_local set, fixes tw2631
 

+ 15 - 6
compiler/arm/agarmgas.pas

@@ -51,7 +51,8 @@ unit agarmgas;
        systems,
        assemble,
        aasmcpu,
-       itarmgas;
+       itarmgas,
+       cgbase;
 
     const
        as_arm_gas_info : tasminfo =
@@ -140,7 +141,7 @@ unit agarmgas;
       var
         hs : string;
         first : boolean;
-        r : tregister;
+        r : tsuperregister;
       begin
         case o.typ of
           top_reg:
@@ -206,12 +207,12 @@ unit agarmgas;
                { LDM and STM use references as first operand but they are written like a register }
                if (i=0) and (op in [A_LDM,A_STM]) then
                  begin
-                   s:=s+sep+gas_regname(taicpu(hp).oper[0].ref^.index);
-                   if taicpu(hp).oper[0].ref^.addressmode=AM_PREINDEXED then
+                   s:=s+sep+gas_regname(taicpu(hp).oper[0]^.ref^.index);
+                   if taicpu(hp).oper[0]^.ref^.addressmode=AM_PREINDEXED then
                      s:=s+'!';
                  end
                else
-                  s:=s+sep+getopstr(taicpu(hp).oper[i]);
+                  s:=s+sep+getopstr(taicpu(hp).oper[i]^);
 
                sep:=',';
             end;
@@ -225,7 +226,15 @@ begin
 end.
 {
   $Log$
-  Revision 1.12  2003-11-02 14:30:03  florian
+  Revision 1.13  2003-11-07 15:58:32  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.12  2003/11/02 14:30:03  florian
     * fixed ARM for new reg. allocation scheme
 
   Revision 1.11  2003/09/06 11:21:49  florian

+ 12 - 4
compiler/arm/cgcpu.pas

@@ -89,7 +89,7 @@ unit cgcpu;
 
         procedure g_flags2reg(list: taasmoutput; size: TCgSize; const f: TResFlags; reg: TRegister); override;
 
-        procedure g_copyvaluepara_openarray(list : taasmoutput;const ref, lenref:treference;elesize:integer);override;
+        procedure g_copyvaluepara_openarray(list : taasmoutput;const ref, lenref:treference;elesize:aword);override;
         procedure g_stackframe_entry(list : taasmoutput;localsize : longint);override;
         procedure g_return_from_proc(list : taasmoutput;parasize : aword); override;
         procedure g_restore_frame_pointer(list : taasmoutput);override;
@@ -141,7 +141,7 @@ unit cgcpu;
         rgfpu:=trgcpu.create(R_FPUREGISTER,R_SUBNONE,
             [RS_F0,RS_F1,RS_F2,RS_F3,RS_F4,RS_F5,RS_F6,RS_F7],first_fpu_imreg,[]);
         rgmm:=trgcpu.create(R_MMREGISTER,R_SUBNONE,
-            [RS_S0..RS_S31],first_mm_imreg,[]);
+            [RS_S0,RS_S1,RS_R2,RS_R3,RS_R4,RS_S31],first_mm_imreg,[]);
       end;
 
 
@@ -866,7 +866,7 @@ unit cgcpu;
       end;
 
 
-    procedure tcgarm.g_copyvaluepara_openarray(list : taasmoutput;const ref, lenref:treference;elesize:integer);
+    procedure tcgarm.g_copyvaluepara_openarray(list : taasmoutput;const ref, lenref:treference;elesize:aword);
       begin
       end;
 
@@ -1282,7 +1282,15 @@ begin
 end.
 {
   $Log$
-  Revision 1.21  2003-11-02 14:30:03  florian
+  Revision 1.22  2003-11-07 15:58:32  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.21  2003/11/02 14:30:03  florian
     * fixed ARM for new reg. allocation scheme
 
   Revision 1.20  2003/10/11 16:06:42  florian

+ 46 - 2
compiler/arm/cpuinfo.pas

@@ -17,6 +17,9 @@ Unit CPUInfo;
 
 Interface
 
+  uses
+    globtype;
+
 Type
    { Architecture word - Native unsigned type }
    AWord  = Longword;
@@ -42,12 +45,15 @@ Type
    { possible supported processors for this target }
    tprocessors =
       (no_processor,
-       armv4
+       armv3,
+       armv4,
+       armv5
       );
 
    tfputype =
      (no_fpuprocessor,
       fpu_soft,
+      fpu_libgcc,
       fpu_fpa,
       fpu_fpa10,
       fpu_fpa11,
@@ -70,12 +76,50 @@ Const
    { for linux: }
    jmp_buf_size = 220; { according to sizeof(jmp_buf) on my Zaurus (FK) }
 
+   { calling conventions supported by the code generator }
+   supported_calling_conventions = [
+     pocall_internproc,
+     pocall_compilerproc,
+     pocall_inline,
+     pocall_stdcall,
+     { same as stdcall only different name mangling }
+     pocall_cdecl,
+     { same as stdcall only different name mangling }
+     pocall_cppdecl,
+     { same as stdcall but floating point numbers are handled like equal sized integers }
+     pocall_softfloat
+   ];
+
+   processorsstr : array[tprocessors] of string[5] = ('',
+     'ARMV3',
+     'ARMV4',
+     'ARMV5'
+   );
+
+   fputypestr : array[tfputype] of string[6] = ('',
+     'SOFT',
+     'LIBGCC',
+     'FPA',
+     'FPA10',
+     'FPA11',
+     'VFP'
+   );
+
+
 Implementation
 
 end.
 {
   $Log$
-  Revision 1.2  2003-08-25 23:20:38  florian
+  Revision 1.3  2003-11-07 15:58:32  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.2  2003/08/25 23:20:38  florian
     + started to implement FPU support for the ARM
     * fixed a lot of other things
 

+ 20 - 12
compiler/arm/cpupara.pas

@@ -86,7 +86,7 @@ unit cpupara;
       end;
 }
 
-    function getparaloc(p : tdef) : tcgloc;
+    function getparaloc(calloption : tproccalloption; p : tdef) : tcgloc;
       begin
          { Later, the LOC_REFERENCE is in most cases changed into LOC_REGISTER
            if push_addr_param for the def is true
@@ -95,7 +95,10 @@ unit cpupara;
             orddef:
               getparaloc:=LOC_REGISTER;
             floatdef:
-              getparaloc:=LOC_FPUREGISTER;
+              if calloption=pocall_softfloat then
+                getparaloc:=LOC_REGISTER
+              else
+                getparaloc:=LOC_FPUREGISTER;
             enumdef:
               getparaloc:=LOC_REGISTER;
             pointerdef:
@@ -207,10 +210,6 @@ unit cpupara;
         nextmmreg:=RS_D0;
         stack_offset:=0;
 
-        { frame pointer for nested procedures? }
-        { inc(nextintreg);                     }
-        { constructor? }
-        { destructor? }
         hp:=tparaitem(p.para.first);
         while assigned(hp) do
           begin
@@ -222,7 +221,7 @@ unit cpupara;
              else
                begin
                  paradef := hp.paratype.def;
-                 loc:=getparaloc(paradef);
+                 loc:=getparaloc(p.proccalloption,paradef);
                end;
              { make sure all alignment bytes are 0 as well }
              fillchar(paraloc,sizeof(paraloc),0);
@@ -233,16 +232,17 @@ unit cpupara;
                      { for things like formaldef }
                      if paraloc.size = OS_NO then
                        paraloc.size := OS_ADDR;
-                     is_64bit := paraloc.size in [OS_64,OS_S64];
+                     is_64bit := paraloc.size in [OS_64,OS_S64,OS_F64];
                      if nextintreg<=(RS_R3-ord(is_64bit)) then
                        begin
                           paraloc.loc:=LOC_REGISTER;
-		           if is_64bit then
+                          { big endian }
+		          if is_64bit then
                             begin
-                              paraloc.registerhigh:=newreg(R_INTREGISTER,nextintreg,R_SUBWHOLE);;
+                              paraloc.registerhigh:=newreg(R_INTREGISTER,nextintreg,R_SUBWHOLE);
                               inc(nextintreg);
                             end;
-                          paraloc.registerlow:=newreg(R_INTREGISTER,nextintreg,R_SUBWHOLE);;
+                          paraloc.registerlow:=newreg(R_INTREGISTER,nextintreg,R_SUBWHOLE);
                           inc(nextintreg);
                        end
                      else
@@ -336,7 +336,15 @@ begin
 end.
 {
   $Log$
-  Revision 1.8  2003-11-02 14:30:03  florian
+  Revision 1.9  2003-11-07 15:58:32  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.8  2003/11/02 14:30:03  florian
     * fixed ARM for new reg. allocation scheme
 
   Revision 1.7  2003/09/11 11:55:00  florian

+ 46 - 2
compiler/globals.pas

@@ -307,6 +307,8 @@ interface
 
     Function SetCompileMode(const s:string; changeInit: boolean):boolean;
     function SetAktProcCall(const s:string; changeInit: boolean):boolean;
+    function SetProcessor(const s:string; changeInit: boolean):boolean;
+    function SetFpuType(const s:string; changeInit: boolean):boolean;
 
     procedure InitGlobals;
     procedure DoneGlobals;
@@ -1376,7 +1378,8 @@ implementation
          'PASCAL',
          'REGISTER',
          'SAFECALL',
-         'STDCALL'
+         'STDCALL',
+         'SOFTFLOAT'
         );
       var
         t : tproccalloption;
@@ -1394,6 +1397,39 @@ implementation
       end;
 
 
+    function SetProcessor(const s:string; changeInit: boolean):boolean;
+      var
+        t : tprocessors;
+      begin
+        SetProcessor:=false;
+        for t:=low(tprocessors) to high(tprocessors) do
+          if processorsstr[t]=s then
+            begin
+              aktspecificoptprocessor:=t;
+              SetProcessor:=true;
+              break;
+            end;
+        if changeinit then
+          initspecificoptprocessor:=aktspecificoptprocessor;
+      end;
+
+
+    function SetFpuType(const s:string; changeInit: boolean):boolean;
+      var
+        t : tfputype;
+      begin
+        SetFpuType:=false;
+        for t:=low(tfputype) to high(tfputype) do
+          if fputypestr[t]=s then
+            begin
+              aktfputype:=t;
+              SetFpuType:=true;
+              break;
+            end;
+        if changeinit then
+          initfputype:=aktfputype;
+      end;
+
 
     { '('D1:'00000000-'D2:'0000-'D3:'0000-'D4:'0000-000000000000)' }
     function string2guid(const s: string; var GUID: TGUID): boolean;
@@ -1713,7 +1749,15 @@ implementation
 end.
 {
   $Log$
-  Revision 1.112  2003-10-23 17:18:56  peter
+  Revision 1.113  2003-11-07 15:58:32  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.112  2003/10/23 17:18:56  peter
     * delphi mode uses packenum 1
 
   Revision 1.111  2003/10/22 15:40:44  marco

+ 43 - 15
compiler/globtype.pas

@@ -123,23 +123,42 @@ interface
 
        { currently parsed block type }
        tblock_type = (bt_none,
-         bt_general,bt_type,bt_const,bt_except
+         bt_general,bt_type,bt_const,bt_except,bt_body
        );
 
        { calling convention for tprocdef and tprocvardef }
        tproccalloption=(pocall_none,
-         pocall_cdecl,         { procedure uses C styled calling }
-         pocall_cppdecl,       { C++ calling conventions }
-         pocall_compilerproc,  { Procedure is used for internal compiler calls }
-         pocall_far16,         { Far16 for OS/2 }
-         pocall_oldfpccall,    { Old style FPC default calling }
-         pocall_inline,        { Procedure is an assembler macro }
-         pocall_internproc,    { Procedure has compiler magic}
-         pocall_palmossyscall, { procedure is a PalmOS system call }
-         pocall_pascal,        { pascal standard left to right }
-         pocall_register,      { procedure uses register (fastcall) calling }
-         pocall_safecall,      { safe call calling conventions }
-         pocall_stdcall        { procedure uses stdcall call }
+         { procedure uses C styled calling }
+         pocall_cdecl,
+         { C++ calling conventions }
+         pocall_cppdecl,
+         { Procedure is used for internal compiler calls }
+         pocall_compilerproc,
+         { Far16 for OS/2 }
+         pocall_far16,
+         { Old style FPC default calling }
+         pocall_oldfpccall,
+         { Procedure is an assembler macro }
+         pocall_inline,
+         { Procedure has compiler magic}
+         pocall_internproc,
+         { procedure is a PalmOS system call }
+         pocall_palmossyscall,
+         { pascal standard left to right }
+         pocall_pascal,
+         { procedure uses register (fastcall) calling }
+         pocall_register,
+         { safe call calling conventions }
+         pocall_safecall,
+         { procedure uses stdcall call }
+         pocall_stdcall,
+         { Special calling convention for cpus without a floating point
+           unit. Floating point numbers are passed in integer registers
+           instead of floating point registers. Depending on the other
+           available calling conventions available for the cpu
+           this replaces either pocall_fastcall or pocall_stdcall.
+         }
+         pocall_softfloat
        );
        tproccalloptions = set of tproccalloption;
 
@@ -157,7 +176,8 @@ interface
            'Pascal',
            'Register',
            'SafeCall',
-           'StdCall'
+           'StdCall',
+           'SoftFloat'
          );
 
        { Default calling convention }
@@ -210,7 +230,15 @@ implementation
 end.
 {
   $Log$
-  Revision 1.43  2003-09-28 13:39:58  peter
+  Revision 1.44  2003-11-07 15:58:32  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.43  2003/09/28 13:39:58  peter
     * default calling convention changed to stdcall
 
   Revision 1.42  2003/09/07 22:09:35  peter

+ 45 - 3
compiler/i386/cpuinfo.pas

@@ -26,6 +26,9 @@ Unit cpuinfo;
 
 Interface
 
+  uses
+    globtype;
+
 Type
    { Natural integer register type and size for the target machine }
    AWord = longword;
@@ -50,8 +53,10 @@ Type
    tprocessors =
       (no_processor,
        Class386,
-       ClassP5,
-       ClassP6
+       ClassPentium,
+       ClassPentium2,
+       ClassPentium3,
+       ClassPentium4
       );
 
    tfputype =
@@ -79,13 +84,50 @@ Const
    }
    jmp_buf_size = 24;
 
+   { calling conventions supported by the code generator }
+   supported_calling_conventions = [
+     pocall_internproc,
+     pocall_compilerproc,
+     pocall_inline,
+     pocall_register,
+     pocall_safecall,
+     pocall_stdcall,
+     pocall_cdecl,
+     pocall_cppdecl,
+     pocall_far16,
+     pocall_pascal,
+     pocall_oldfpccall
+   ];
+
+   processorsstr : array[tprocessors] of string[10] = ('',
+     '386',
+     'PENTIUM',
+     'PENTIUM2',
+     'PENTIUM3',
+     'PENTIUM4'
+   );
+
+   fputypestr : array[tfputype] of string[6] = ('',
+     'SOFT',
+     'X87',
+     'SSE',
+     'SSE2'
+   );
 
 Implementation
 
 end.
 {
   $Log$
-  Revision 1.17  2003-09-03 11:18:37  florian
+  Revision 1.18  2003-11-07 15:58:32  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.17  2003/09/03 11:18:37  florian
     * fixed arm concatcopy
     + arm support in the common compiler sources added
     * moved some generic cg code around

+ 12 - 17
compiler/i386/cpuswtch.pas

@@ -79,28 +79,15 @@ begin
                        Begin
                          Case opt[j+1] Of
                            '1': initoptprocessor := Class386;
-                           '2': initoptprocessor := ClassP5;
-                           '3': initoptprocessor := ClassP6
+                           '2': initoptprocessor := ClassPentium;
+                           '3': initoptprocessor := ClassPentium2;
+                           '4': initoptprocessor := ClassPentium4;
                            Else IllegalPara(Opt)
                          End;
                          Inc(j);
                        End
                      Else IllegalPara(opt)
                    End;
-{$ifdef USECMOV}
-                 's' :
-                   Begin
-                     If j < Length(Opt) Then
-                       Begin
-                         Case opt[j+1] Of
-                           '3': initspecificoptprocessor:=ClassP6
-                           Else IllegalPara(Opt)
-                         End;
-                         Inc(j);
-                       End
-                     Else IllegalPara(opt)
-                   End
-{$endif USECMOV}
                  else IllegalPara(opt);
                End;
                Inc(j)
@@ -129,7 +116,15 @@ initialization
 end.
 {
   $Log$
-  Revision 1.10  2003-08-09 18:56:54  daniel
+  Revision 1.11  2003-11-07 15:58:32  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.10  2003/08/09 18:56:54  daniel
     * cs_regalloc renamed to cs_regvars to avoid confusion with register
       allocator
     * Some preventive changes to i386 spillinh code

+ 10 - 2
compiler/i386/n386cal.pas

@@ -139,7 +139,7 @@ implementation
         else
           if (pop_size=8) and
              not(cs_littlesize in aktglobalswitches) and
-             (aktoptprocessor=ClassP5) then
+             (aktoptprocessor=ClassPentium) then
             begin
                hreg:=cg.getintregister(exprasmlist,OS_INT);
                exprasmlist.concat(taicpu.op_reg(A_POP,S_L,hreg));
@@ -164,7 +164,15 @@ begin
 end.
 {
   $Log$
-  Revision 1.98  2003-10-10 17:48:14  peter
+  Revision 1.99  2003-11-07 15:58:32  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.98  2003/10/10 17:48:14  peter
     * old trgobj moved to x86/rgcpu and renamed to trgx86fpu
     * tregisteralloctor renamed to trgobj
     * removed rgobj from a lot of units

+ 14 - 4
compiler/i386/n386set.pas

@@ -508,10 +508,12 @@ implementation
         { a jump table crashes the pipeline! }
         if aktoptprocessor=Class386 then
           inc(max_linear_list,3)
-        else if aktoptprocessor=ClassP5 then
+        else if aktoptprocessor=ClassPentium then
           inc(max_linear_list,6)
-        else if aktoptprocessor>=ClassP6 then
-          inc(max_linear_list,9);
+        else if aktoptprocessor in [ClassPentium2,ClassPentium3] then
+          inc(max_linear_list,9)
+        else if aktoptprocessor=ClassPentium4 then
+          inc(max_linear_list,14);
       end;
 
 
@@ -672,7 +674,15 @@ begin
 end.
 {
   $Log$
-  Revision 1.69  2003-10-10 17:48:14  peter
+  Revision 1.70  2003-11-07 15:58:32  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.69  2003/10/10 17:48:14  peter
     * old trgobj moved to x86/rgcpu and renamed to trgx86fpu
     * tregisteralloctor renamed to trgobj
     * removed rgobj from a lot of units

+ 10 - 5
compiler/i386/popt386.pas

@@ -1672,9 +1672,7 @@ end;
 
 Procedure PeepHoleOptPass2(AsmL: TAAsmOutput; BlockStart, BlockEnd: Tai);
 
-{$ifdef USECMOV}
   function CanBeCMOV(p : Tai) : boolean;
-
     begin
        CanBeCMOV:=assigned(p) and (p.typ=ait_instruction) and
          (Taicpu(p).opcode=A_MOV) and
@@ -1682,7 +1680,6 @@ Procedure PeepHoleOptPass2(AsmL: TAAsmOutput; BlockStart, BlockEnd: Tai);
          (Taicpu(p).oper[0].typ in [top_reg,top_ref]) and
          (Taicpu(p).oper[1].typ in [top_reg]);
     end;
-{$endif USECMOV}
 
 var
   p,hp1,hp2: Tai;
@@ -1705,7 +1702,7 @@ Begin
             Case Taicpu(p).opcode Of
 {$ifdef USECMOV}
               A_Jcc:
-                if (aktspecificoptprocessor=ClassP6) then
+                if (aktspecificoptprocessor>=ClassPentium2) then
                   begin
                      { check for
                             jCC   xxx
@@ -2058,7 +2055,15 @@ End.
 
 {
   $Log$
-  Revision 1.48  2003-08-09 18:56:54  daniel
+  Revision 1.49  2003-11-07 15:58:32  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.48  2003/08/09 18:56:54  daniel
     * cs_regalloc renamed to cs_regvars to avoid confusion with register
       allocator
     * Some preventive changes to i386 spillinh code

+ 23 - 1
compiler/m68k/cpuinfo.pas

@@ -62,12 +62,34 @@ Const
    { target cpu string (used by compiler options) }
    target_cpu_string = 'm68k';
 
+   { calling conventions supported by the code generator }
+   supported_calling_conventions = [
+     pocall_internproc,
+     pocall_compilerproc,
+     pocall_inline,
+     pocall_stdcall,
+     { the difference to stdcall is only the name mangling }
+     pocall_cdecl,
+     { the difference to stdcall is only the name mangling }
+     pocall_cppdecl,
+     { this used by the PalmOS port only }
+     pocall_syscall
+   ];
+
 Implementation
 
 end.
 {
   $Log$
-  Revision 1.6  2002-12-14 15:02:03  carl
+  Revision 1.7  2003-11-07 15:58:32  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.6  2002/12/14 15:02:03  carl
     * maxoperands -> max_operands (for portability in rautils.pas)
     * fix some range-check errors with loadconst
     + add ncgadd unit to m68k

+ 3 - 0
compiler/msg/errore.msg

@@ -909,6 +909,9 @@ parser_e_msg_only_for_classes=03193_E_Message directive is only allowed in Class
 % The message directive is only supported for Class types.
 parser_e_procedure_or_function_expected=03194_E_Procedure or Function expected
 % A class method can only be specified for procedures and functions.
+parser_e_illegal_calling_convention=03195_E_This calling convention isn't supported by the current CPU target: "$1"
+% Some calling conventions are supported only by certain CPUs. I.e. most non-i386 ports support
+% only the standard ABI calling convention of the CPU.
 % \end{description}
 #
 # Type Checking

+ 3 - 2
compiler/msgidx.inc

@@ -253,6 +253,7 @@ const
   parser_e_initialized_not_for_threadvar=03192;
   parser_e_msg_only_for_classes=03193;
   parser_e_procedure_or_function_expected=03194;
+  parser_e_illegal_calling_convention=03195;
   type_e_mismatch=04000;
   type_e_incompatible_types=04001;
   type_e_not_equal_types=04002;
@@ -630,9 +631,9 @@ const
   option_info=11024;
   option_help_pages=11025;
 
-  MsgTxtSize = 35734;
+  MsgTxtSize = 35814;
 
   MsgIdxMax : array[1..20] of longint=(
-    17,63,195,53,57,44,98,20,35,60,
+    17,63,196,53,57,44,98,20,35,60,
     40,1,1,1,1,1,1,1,1,1
   );

+ 212 - 210
compiler/msgtxt.inc

@@ -1,7 +1,7 @@
 {$ifdef Delphi}
-const msgtxt : array[0..000148] of string[240]=(
+const msgtxt : array[0..000149] of string[240]=(
 {$else Delphi}
-const msgtxt : array[0..000148,1..240] of char=(
+const msgtxt : array[0..000149,1..240] of char=(
 {$endif Delphi}
   '01000_T_Compiler: $1'#000+
   '01001_D_Compiler OS: $1'#000+
@@ -285,587 +285,589 @@ const msgtxt : array[0..000148,1..240] of char=(
   '03192_E_Cannot initialize variables declared as threadvar'#000+
   '03193_E_Message directive is only allowed in Cla','sses'#000+
   '03194_E_Procedure or Function expected'#000+
+  '03195_E_This calling convention isn'#039't supported by the current CPU'+
+  ' target: "$1"'#000+
   '04000_E_Type mismatch'#000+
   '04001_E_Incompatible types: got "$1" expected "$2"'#000+
-  '04002_E_Type mismatch between "$1" and "$2"'#000+
+  '04002_E_Type mismatch between "$1" and "$2"',#000+
   '04003_E_Type identifier expected'#000+
   '04004_E_Variable identifier expected'#000+
-  '04005_E_I','nteger expression expected, but got "$1"'#000+
+  '04005_E_Integer expression expected, but got "$1"'#000+
   '04006_E_Boolean expression expected, but got "$1"'#000+
   '04007_E_Ordinal expression expected'#000+
-  '04008_E_pointer type expected, but got "$1"'#000+
+  '04008_E_pointer type expected, bu','t got "$1"'#000+
   '04009_E_class type expected, but got "$1"'#000+
-  '04011_E_Can'#039't evaluate cons','tant expression'#000+
+  '04011_E_Can'#039't evaluate constant expression'#000+
   '04012_E_Set elements are not compatible'#000+
   '04013_E_Operation not implemented for sets'#000+
-  '04014_W_Automatic type conversion from floating type to COMP which is '+
-  'an integer type'#000+
+  '04014_W_Automatic type conversion from floating type to COMP ','which i'+
+  's an integer type'#000+
   '04015_H_use DIV instead to get an integer result'#000+
-  '04016_','E_string types doesn'#039't match, because of $V+ mode'#000+
+  '04016_E_string types doesn'#039't match, because of $V+ mode'#000+
   '04017_E_succ or pred on enums with assignments not possible'#000+
-  '04018_E_Can'#039't read or write variables of this type'#000+
+  '04018_E_Can'#039't read or write variables of this type',#000+
   '04019_E_Can'#039't use readln or writeln on typed file'#000+
-  '04020_E_Can'#039't use read or wri','te on untyped file.'#000+
+  '04020_E_Can'#039't use read or write on untyped file.'#000+
   '04021_E_Type conflict between set elements'#000+
   '04022_W_lo/hi(dword/qword) returns the upper/lower word/dword'#000+
-  '04023_E_Integer or real expression expected'#000+
+  '04023_E_Integer or real expression ','expected'#000+
   '04024_E_Wrong type "$1" in array constructor'#000+
-  '04025_E_Incompatible type ','for arg no. $1: Got "$2", expected "$3"'#000+
+  '04025_E_Incompatible type for arg no. $1: Got "$2", expected "$3"'#000+
   '04026_E_Method (variable) and Procedure (variable) are not compatible'#000+
-  '04027_E_Illegal constant passed to internal math function'#000+
+  '04027_E_Illegal constant passed to internal math f','unction'#000+
   '04028_E_Can'#039't get the address of constants'#000+
-  '04029_E_Argument can'#039't be ass','igned to'#000+
+  '04029_E_Argument can'#039't be assigned to'#000+
   '04030_E_Can'#039't assign local procedure/function to procedure variabl'+
   'e'#000+
   '04031_E_Can'#039't assign values to an address'#000+
-  '04032_E_Can'#039't assign values to const variable'#000+
+  '04032_E_Can'#039't assign values to const vari','able'#000+
   '04033_E_Array type required'#000+
   '04034_E_interface type expected, but got "$1"'#000+
-  '0','4035_W_Mixing signed expressions and longwords gives a 64bit result'+
-  #000+
+  '04035_W_Mixing signed expressions and longwords gives a 64bit result'#000+
   '04036_W_Mixing signed expressions and cardinals here may cause a range'+
   ' check error'#000+
-  '04037_E_Typecast has different size ($1 -> $2) in assignment'#000+
-  '04038_E_enums with assignmen','ts can'#039't be used as array index'#000+
+  '04037_E_T','ypecast has different size ($1 -> $2) in assignment'#000+
+  '04038_E_enums with assignments can'#039't be used as array index'#000+
   '04039_E_Class or Object types "$1" and "$2" are not related'#000+
   '04040_W_Class types "$1" and "$2" are not related'#000+
-  '04041_E_Class or interface type expected, but got "$1"'#000+
-  '04042_E_Type "$1" is not completely defined',#000+
+  '04041_E_Class or i','nterface type expected, but got "$1"'#000+
+  '04042_E_Type "$1" is not completely defined'#000+
   '04043_W_String literal has more characters than short string length'#000+
   '04044_W_Comparison is always false due to range of values'#000+
-  '04045_W_Comparison is always true due to range of values'#000+
-  '04046_W_Constructing a class "$1" with abstract methods'#000,
+  '04045_W_Comparison is always true',' due to range of values'#000+
+  '04046_W_Constructing a class "$1" with abstract methods'#000+
   '04047_H_The left operand of the IN operator should be byte sized'#000+
   '04048_W_Type size mismatch, possible loss of data / range check error'#000+
-  '04049_H_Type size mismatch, possible loss of data / range check error'#000+
-  '04050_E_The address of an abstract ','method can'#039't be taken'#000+
+  '04049_H_Type size mismatc','h, possible loss of data / range check erro'+
+  'r'#000+
+  '04050_E_The address of an abstract method can'#039't be taken'#000+
   '04051_E_The operator is not applicable for the operand type'#000+
   '04052_E_Constant Expression expected'#000+
   '05000_E_Identifier not found "$1"'#000+
-  '05001_F_Internal Error in SymTableStack()'#000+
+  '05001_F','_Internal Error in SymTableStack()'#000+
   '05002_E_Duplicate identifier "$1"'#000+
-  '05003_H_Ide','ntifier already defined in $1 at line $2'#000+
+  '05003_H_Identifier already defined in $1 at line $2'#000+
   '05004_E_Unknown identifier "$1"'#000+
   '05005_E_Forward declaration not solved "$1"'#000+
   '05007_E_Error in type definition'#000+
-  '05009_E_Forward type not resolved "$1"'#000+
-  '05010_E_Only static variables can be used in static',' methods or outsi'+
-  'de methods'#000+
+  '05009_E_Fo','rward type not resolved "$1"'#000+
+  '05010_E_Only static variables can be used in static methods or outside'+
+  ' methods'#000+
   '05012_F_record or class type expected'#000+
   '05013_E_Instances of classes or objects with an abstract method are no'+
   't allowed'#000+
-  '05014_W_Label not defined "$1"'#000+
+  '05014_W_Label ','not defined "$1"'#000+
   '05015_E_Label used but not defined "$1"'#000+
-  '05016_E_Illegal label d','eclaration'#000+
+  '05016_E_Illegal label declaration'#000+
   '05017_E_GOTO and LABEL are not supported (use switch -Sg)'#000+
   '05018_E_Label not found'#000+
   '05019_E_identifier isn'#039't a label'#000+
   '05020_E_label already defined'#000+
-  '05021_E_illegal type declaration of set elements'#000+
-  '05022_E_Forward class definition no','t resolved "$1"'#000+
+  '0502','1_E_illegal type declaration of set elements'#000+
+  '05022_E_Forward class definition not resolved "$1"'#000+
   '05023_H_Unit "$1" not used in $2'#000+
   '05024_H_Parameter "$1" not used'#000+
   '05025_N_Local variable "$1" not used'#000+
-  '05026_H_Value parameter "$1" is assigned but never used'#000+
+  '05026_H_Value parameter "$1" is assigned b','ut never used'#000+
   '05027_N_Local variable "$1" is assigned but never used'#000+
-  '05028_H_Loc','al $1 "$2" is not used'#000+
+  '05028_H_Local $1 "$2" is not used'#000+
   '05029_N_Private field "$1.$2" is never used'#000+
   '05030_N_Private field "$1.$2" is assigned but never used'#000+
-  '05031_N_Private method "$1.$2" never used'#000+
+  '05031_N_Private method "$1.$2" never',' used'#000+
   '05032_E_Set type expected'#000+
-  '05033_W_Function result does not seem to be set'#000,
+  '05033_W_Function result does not seem to be set'#000+
   '05034_W_Type "$1" is not aligned correctly in current record for C'#000+
   '05035_E_Unknown record field identifier "$1"'#000+
-  '05036_W_Local variable "$1" does not seem to be initialized'#000+
+  '05036_W_Local variable "$1" does not seem to be ','initialized'#000+
   '05037_W_Variable "$1" does not seem to be initialized'#000+
-  '05038_E_identi','fier idents no member "$1"'#000+
+  '05038_E_identifier idents no member "$1"'#000+
   '05039_H_Found declaration: $1'#000+
   '05040_E_Data element too large'#000+
   '05042_E_No matching implementation for interface method "$1" found'#000+
-  '05043_W_Symbol "$1" is deprecated'#000+
+  '05043','_W_Symbol "$1" is deprecated'#000+
   '05044_W_Symbol "$1" is not portable'#000+
-  '05055_W_Symbol ','"$1" is not implemented'#000+
+  '05055_W_Symbol "$1" is not implemented'#000+
   '05056_E_Can'#039't create unique type from this type'#000+
   '06000_E_BREAK not allowed'#000+
   '06001_E_CONTINUE not allowed'#000+
-  '06002_E_Expression too complicated - FPU stack overflow'#000+
+  '06002_E_Expression too complicate','d - FPU stack overflow'#000+
   '06003_E_Illegal expression'#000+
-  '06004_E_Invalid integer expres','sion'#000+
+  '06004_E_Invalid integer expression'#000+
   '06005_E_Illegal qualifier'#000+
   '06006_E_High range limit < low range limit'#000+
   '06007_E_Illegal counter variable'#000+
-  '06008_E_Can'#039't determine which overloaded function to call'#000+
+  '06008_E_Can'#039't determine which overloaded function to ','call'#000+
   '06009_E_Parameter list size exceeds 65535 bytes'#000+
-  '06010_E_Illegal type conver','sion'#000+
+  '06010_E_Illegal type conversion'#000+
   '06011_H_Conversion between ordinals and pointers are not portable'#000+
   '06012_E_File types must be var parameters'#000+
-  '06013_E_The use of a far pointer isn'#039't allowed there'#000+
+  '06013_E_The use of a far pointer isn'#039't allowed ','there'#000+
   '06014_E_illegal call by reference parameters'#000+
-  '06015_E_EXPORT declared funct','ions can'#039't be called'#000+
+  '06015_E_EXPORT declared functions can'#039't be called'#000+
   '06016_W_Possible illegal call of constructor or destructor'#000+
   '06017_N_Inefficient code'#000+
   '06018_W_unreachable code'#000+
-  '06020_E_Abstract methods can'#039't be called directly'#000+
+  '06020_E_Abstract methods can'#039't',' be called directly'#000+
   '06027_DL_Register $1 weight $2 $3'#000+
-  '06029_DL_Stack frame is om','itted'#000+
+  '06029_DL_Stack frame is omitted'#000+
   '06031_E_Object or class methods can'#039't be inline.'#000+
   '06032_E_Procvar calls cannot be inline.'#000+
   '06033_E_No code for inline procedure stored'#000+
-  '06035_E_Element zero of an ansi/wide- or longstring can'#039't be acces'+
-  'sed, use (set)length instead'#000+
-  '06037_','E_Constructors or destructors can not be called inside a '#039'w'+
-  'ith'#039' clause'#000+
+  '06035_E_Element zero ','of an ansi/wide- or longstring can'#039't be acc'+
+  'essed, use (set)length instead'#000+
+  '06037_E_Constructors or destructors can not be called inside a '#039'wi'+
+  'th'#039' clause'#000+
   '06038_E_Cannot call message handler methods directly'#000+
-  '06039_E_Jump in or outside of an exception block'#000+
+  '06039_E_Jump in or outside of an exc','eption block'#000+
   '06040_E_Control flow statements aren'#039't allowed in a finally block'#000+
-  '0','6041_W_Parameters size exceeds limit for certain cpu'#039's'#000+
+  '06041_W_Parameters size exceeds limit for certain cpu'#039's'#000+
   '06042_W_Local variable size exceed limit for certain cpu'#039's'#000+
-  '06043_E_Local variables size exceeds supported limit'#000+
+  '06043_E_Local variables size exceeds supported',' limit'#000+
   '07000_DL_Starting $1 styled assembler parsing'#000+
-  '07001_DL_Finished $1 styled',' assembler parsing'#000+
+  '07001_DL_Finished $1 styled assembler parsing'#000+
   '07002_E_Non-label pattern contains @'#000+
   '07004_E_Error building record offset'#000+
   '07005_E_OFFSET used without identifier'#000+
-  '07006_E_TYPE used without identifier'#000+
+  '07006_E_TYPE used without id','entifier'#000+
   '07007_E_Cannot use local variable or parameters here'#000+
-  '07008_E_need to us','e OFFSET here'#000+
+  '07008_E_need to use OFFSET here'#000+
   '07009_E_need to use $ here'#000+
   '07010_E_Cannot use multiple relocatable symbols'#000+
   '07011_E_Relocatable symbol can only be added'#000+
-  '07012_E_Invalid constant expression'#000+
+  '07012_E_Invalid constant e','xpression'#000+
   '07013_E_Relocatable symbol is not allowed'#000+
-  '07014_E_Invalid reference sy','ntax'#000+
+  '07014_E_Invalid reference syntax'#000+
   '07015_E_You can not reach $1 from that code'#000+
   '07016_E_Local symbols/labels aren'#039't allowed as references'#000+
   '07017_E_Invalid base and index register usage'#000+
-  '07018_W_Possible error in object field handling'#000+
+  '07018_W','_Possible error in object field handling'#000+
   '07019_E_Wrong scale factor specified'#000+
-  '07','020_E_Multiple index register usage'#000+
+  '07020_E_Multiple index register usage'#000+
   '07021_E_Invalid operand type'#000+
   '07022_E_Invalid string as opcode operand: $1'#000+
   '07023_W_@CODE and @DATA not supported'#000+
-  '07024_E_Null label references are not allowed'#000+
+  '07024_E_Null',' label references are not allowed'#000+
   '07025_E_Divide by zero in asm evaluator'#000+
-  '07026_','E_Illegal expression'#000+
+  '07026_E_Illegal expression'#000+
   '07027_E_escape sequence ignored: $1'#000+
   '07028_E_Invalid symbol reference'#000+
   '07029_W_Fwait can cause emulation problems with emu387'#000+
-  '07030_W_$1 without operand translated into $1P'#000+
-  '07031_W_ENTER instruction is not supported by Li','nux kernel'#000+
+  '07030_W_$1 with','out operand translated into $1P'#000+
+  '07031_W_ENTER instruction is not supported by Linux kernel'#000+
   '07032_W_Calling an overload function in assembler'#000+
   '07033_E_Unsupported symbol type for operand'#000+
   '07034_E_Constant value out of bounds'#000+
-  '07035_E_Error converting decimal $1'#000+
+  '07035_E_Error conv','erting decimal $1'#000+
   '07036_E_Error converting octal $1'#000+
-  '07037_E_Error converting bin','ary $1'#000+
+  '07037_E_Error converting binary $1'#000+
   '07038_E_Error converting hexadecimal $1'#000+
   '07039_H_$1 translated to $2'#000+
   '07040_W_$1 is associated to an overloaded function'#000+
-  '07041_E_Cannot use SELF outside a method'#000+
+  '07041_E_Cannot use SELF outside a ','method'#000+
   '07042_E_Cannot use OLDEBP outside a nested procedure'#000+
-  '07043_W_Procedures c','an'#039't return any value in asm code'#000+
+  '07043_W_Procedures can'#039't return any value in asm code'#000+
   '07044_E_SEG not supported'#000+
   '07045_E_Size suffix and destination or source size do not match'#000+
-  '07046_W_Size suffix and destination or source size do not match'#000+
+  '07046_W_Size suffix and destination ','or source size do not match'#000+
   '07047_E_Assembler syntax error'#000+
-  '07048_E_Invalid combi','nation of opcode and operands'#000+
+  '07048_E_Invalid combination of opcode and operands'#000+
   '07049_E_Assembler syntax error in operand'#000+
   '07050_E_Assembler syntax error in constant'#000+
   '07051_E_Invalid String expression'#000+
-  '07052_W_constant with symbol $1 for address which is not on a pointer'#000+
-  '07053_E_Unrecognized ','opcode $1'#000+
+  '07052_W_con','stant with symbol $1 for address which is not on a pointe'+
+  'r'#000+
+  '07053_E_Unrecognized opcode $1'#000+
   '07054_E_Invalid or missing opcode'#000+
   '07055_E_Invalid combination of prefix and opcode: $1'#000+
   '07056_E_Invalid combination of override and opcode: $1'#000+
-  '07057_E_Too many operands on line'#000+
+  '07057_E_','Too many operands on line'#000+
   '07058_W_NEAR ignored'#000+
   '07059_W_FAR ignored'#000+
-  '07060_E_Dupli','cate local symbol $1'#000+
+  '07060_E_Duplicate local symbol $1'#000+
   '07061_E_Undefined local symbol $1'#000+
   '07062_E_Unknown label identifier $1'#000+
   '07063_E_Invalid register name'#000+
-  '07064_E_Invalid floating point register name'#000+
+  '07064_E_Invalid floating point register',' name'#000+
   '07066_W_Modulo not supported'#000+
   '07067_E_Invalid floating point constant $1'#000+
-  '07','068_E_Invalid floating point expression'#000+
+  '07068_E_Invalid floating point expression'#000+
   '07069_E_Wrong symbol type'#000+
   '07070_E_Cannot index a local var or parameter with a register'#000+
-  '07071_E_Invalid segment override expression'#000+
+  '07071_E_Invalid segment override',' expression'#000+
   '07072_W_Identifier $1 supposed external'#000+
-  '07073_E_Strings not allowed ','as constants'#000+
+  '07073_E_Strings not allowed as constants'#000+
   '07074_No type of variable specified'#000+
   '07075_E_assembler code not returned to text section'#000+
   '07076_E_Not a directive or local symbol $1'#000+
-  '07077_E_Using a defined name as a local label'#000+
-  '07078_E_Dollar token is used without an identifier',#000+
+  '07077_E_Using a ','defined name as a local label'#000+
+  '07078_E_Dollar token is used without an identifier'#000+
   '07079_W_32bit constant created for address'#000+
   '07080_N_.align is target specific, use .balign or .p2align'#000+
   '07081_E_Can'#039't access fields directly for parameters'#000+
-  '07082_E_Can'#039't access fields of objects/classes directly'#000+
-  '07083_E_No size specified and',' unable to determine the size of the op'+
-  'erands'#000+
+  '07082','_E_Can'#039't access fields of objects/classes directly'#000+
+  '07083_E_No size specified and unable to determine the size of the oper'+
+  'ands'#000+
   '07084_E_Cannot use RESULT in this function'#000+
   '07086_W_"$1" without operand translated into "$1 %st,%st(1)"'#000+
-  '07087_W_"$1 %st(n)" translated into "$1 %st,%st(n)"'#000+
-  '07088_W_"$1 %st(n)" translated into "$','1 %st(n),%st"'#000+
+  '07087_W_"$','1 %st(n)" translated into "$1 %st,%st(n)"'#000+
+  '07088_W_"$1 %st(n)" translated into "$1 %st(n),%st"'#000+
   '07089_E_Char < not allowed here'#000+
   '07090_E_Char > not allowed here'#000+
   '07093_W_ALIGN not supported'#000+
   '07094_E_Inc and Dec cannot be together'#000+
-  '07095_E_Invalid reglist for movem'#000+
+  '07095_E_Invalid',' reglist for movem'#000+
   '07096_E_Reglist invalid for opcode'#000+
-  '07097_E_Higher cpu mode re','quired ($1)'#000+
+  '07097_E_Higher cpu mode required ($1)'#000+
   '08000_F_Too many assembler files'#000+
   '08001_F_Selected assembler output not supported'#000+
   '08002_F_Comp not supported'#000+
-  '08003_F_Direct not support for binary writers'#000+
+  '08003_F_Direct not support for binary wr','iters'#000+
   '08004_E_Allocating of data is only allowed in bss section'#000+
-  '08005_F_No binar','y writer selected'#000+
+  '08005_F_No binary writer selected'#000+
   '08006_E_Asm: Opcode $1 not in table'#000+
   '08007_E_Asm: $1 invalid combination of opcode and operands'#000+
   '08008_E_Asm: 16 Bit references not supported'#000+
-  '08009_E_Asm: Invalid effective address'#000+
-  '08010_E_Asm: Immediate or reference expecte','d'#000+
+  '08','009_E_Asm: Invalid effective address'#000+
+  '08010_E_Asm: Immediate or reference expected'#000+
   '08011_E_Asm: $1 value exceeds bounds $2'#000+
   '08012_E_Asm: Short jump is out of range $1'#000+
   '08013_E_Asm: Undefined label $1'#000+
-  '08014_E_Asm: Comp type not supported for this target'#000+
+  '08014_E_Asm: Comp type not supported for th','is target'#000+
   '08015_E_Asm: Extended type not supported for this target'#000+
-  '08016_E_Asm: ','Duplicate label $1'#000+
+  '08016_E_Asm: Duplicate label $1'#000+
   '08017_E_Asm: Redefined label $1'#000+
   '08018_E_Asm: First defined here'#000+
   '08019_E_Asm: Invalid register $1'#000+
   '09000_W_Source operating system redefined'#000+
-  '09001_I_Assembling (pipe) $1'#000+
+  '09','001_I_Assembling (pipe) $1'#000+
   '09002_E_Can'#039't create assember file: $1'#000+
-  '09003_E_Can'#039't ','create object file: $1'#000+
+  '09003_E_Can'#039't create object file: $1'#000+
   '09004_E_Can'#039't create archive file: $1'#000+
   '09005_E_Assembler $1 not found, switching to external assembling'#000+
   '09006_T_Using assembler: $1'#000+
-  '09007_E_Error while assembling exitcode $1'#000+
-  '09008_E_Can'#039't call the assembler, error $1 ','switching to external'+
-  ' assembling'#000+
+  '09007_','E_Error while assembling exitcode $1'#000+
+  '09008_E_Can'#039't call the assembler, error $1 switching to external a'+
+  'ssembling'#000+
   '09009_I_Assembling $1'#000+
   '09010_I_Assembling with smartlinking $1'#000+
   '09011_W_Object $1 not found, Linking may fail !'#000+
-  '09012_W_Library $1 not found, Linking may fail !'#000+
+  '09012_W_Library $','1 not found, Linking may fail !'#000+
   '09013_E_Error while linking'#000+
-  '09014_E_Can'#039't call t','he linker, switching to external linking'#000+
+  '09014_E_Can'#039't call the linker, switching to external linking'#000+
   '09015_I_Linking $1'#000+
   '09016_E_Util $1 not found, switching to external linking'#000+
   '09017_T_Using util $1'#000+
-  '09018_E_Creation of Executables not supported'#000+
-  '09019_E_Creation of Dynamic/Shared Libraries not suppor','ted'#000+
+  '09018_E_Creation of E','xecutables not supported'#000+
+  '09019_E_Creation of Dynamic/Shared Libraries not supported'#000+
   '09020_I_Closing script $1'#000+
   '09021_E_resource compiler not found, switching to external mode'#000+
   '09022_I_Compiling resource $1'#000+
-  '09023_T_unit $1 can'#039't be statically linked, switching to smart lin'+
-  'king'#000+
-  '09024_T_unit $1 can'#039't be smart linked, switch','ing to static linki'+
-  'ng'#000+
+  '09023_T_unit $1 can'#039't be statically ','linked, switching to smart l'+
+  'inking'#000+
+  '09024_T_unit $1 can'#039't be smart linked, switching to static linking'+
+  #000+
   '09025_T_unit $1 can'#039't be shared linked, switching to static linkin'+
   'g'#000+
   '09026_E_unit $1 can'#039't be smart or static linked'#000+
-  '09027_E_unit $1 can'#039't be shared or static linked'#000+
+  '09027_E_unit $1 can'#039't ','be shared or static linked'#000+
   '09028_F_Can'#039't post process executable $1'#000+
-  '09029_F_Can'#039,'t open executable $1'#000+
+  '09029_F_Can'#039't open executable $1'#000+
   '09030_X_Size of Code: $1 bytes'#000+
   '09031_X_Size of initialized data: $1 bytes'#000+
   '09032_X_Size of uninitialized data: $1 bytes'#000+
-  '09033_X_Stack space reserved: $1 bytes'#000+
+  '09033_X_Stack space ','reserved: $1 bytes'#000+
   '09034_X_Stack space commited: $1 bytes'#000+
-  '10000_T_Unitsearch: $1',#000+
+  '10000_T_Unitsearch: $1'#000+
   '10001_T_PPU Loading $1'#000+
   '10002_U_PPU Name: $1'#000+
   '10003_U_PPU Flags: $1'#000+
   '10004_U_PPU Crc: $1'#000+
   '10005_U_PPU Time: $1'#000+
   '10006_U_PPU File too short'#000+
-  '10007_U_PPU Invalid Header (no PPU at the begin)'#000+
+  '10007_U_PPU Invalid Heade','r (no PPU at the begin)'#000+
   '10008_U_PPU Invalid Version $1'#000+
-  '10009_U_PPU is compiled f','or another processor'#000+
+  '10009_U_PPU is compiled for another processor'#000+
   '10010_U_PPU is compiled for an other target'#000+
   '10011_U_PPU Source: $1'#000+
   '10012_U_Writing $1'#000+
   '10013_F_Can'#039't Write PPU-File'#000+
-  '10014_F_Error reading PPU-File'#000+
+  '10014_F_Error reading PP','U-File'#000+
   '10015_F_unexpected end of PPU-File'#000+
   '10016_F_Invalid PPU-File entry: $1'#000+
-  '100','17_F_PPU Dbx count problem'#000+
+  '10017_F_PPU Dbx count problem'#000+
   '10018_E_Illegal unit name: $1'#000+
   '10019_F_Too much units'#000+
   '10020_F_Circular unit reference between $1 and $2'#000+
-  '10021_F_Can'#039't compile unit $1, no sources available'#000+
+  '10021_F_Can'#039't compile unit $1,',' no sources available'#000+
   '10022_F_Can'#039't find unit $1'#000+
-  '10023_W_Unit $1 was not found b','ut $2 exists'#000+
+  '10023_W_Unit $1 was not found but $2 exists'#000+
   '10024_F_Unit $1 searched but $2 found'#000+
   '10025_W_Compiling the system unit requires the -Us switch'#000+
-  '10026_F_There were $1 errors compiling module, stopping'#000+
+  '10026_F_There were $1 errors compiling module, stop','ping'#000+
   '10027_U_Load from $1 ($2) unit $3'#000+
-  '10028_U_Recompiling $1, checksum changed ','for $2'#000+
+  '10028_U_Recompiling $1, checksum changed for $2'#000+
   '10029_U_Recompiling $1, source found only'#000+
   '10030_U_Recompiling unit, static lib is older than ppufile'#000+
-  '10031_U_Recompiling unit, shared lib is older than ppufile'#000+
+  '10031_U_Recompiling unit, shared lib is older than p','pufile'#000+
   '10032_U_Recompiling unit, obj and asm are older than ppufile'#000+
-  '10033_U_Reco','mpiling unit, obj is older than asm'#000+
+  '10033_U_Recompiling unit, obj is older than asm'#000+
   '10034_U_Parsing interface of $1'#000+
   '10035_U_Parsing implementation of $1'#000+
   '10036_U_Second load for unit $1'#000+
-  '10037_U_PPU Check file $1 time $2'#000+
-  '10038_H_Conditional $1 was not set at startup in last compilation of ',
-  '$2'#000+
+  '10037_U_PPU Check file ','$1 time $2'#000+
+  '10038_H_Conditional $1 was not set at startup in last compilation of $'+
+  '2'#000+
   '10039_H_Conditional $1 was set at startup in last compilation of $2'#000+
   '10040_W_Can'#039't recompile unit $1, but found modifed include files'#000+
-  '10041_H_File $1 is newer than Release PPU file $2'#000+
-  '10042_U_Using a unit which was not compiled with corre','ct FPU mode'#000+
+  '10041_H_File $1 is newer',' than Release PPU file $2'#000+
+  '10042_U_Using a unit which was not compiled with correct FPU mode'#000+
   '10043_U_Loading interface units from $1'#000+
   '10044_U_Loading implementation units from $1'#000+
   '10045_U_Interface CRC changed for unit $1'#000+
-  '10046_U_Implementation CRC changed for unit $1'#000+
+  '10046_U_Implementatio','n CRC changed for unit $1'#000+
   '10047_U_Finished compiling unit $1'#000+
-  '10048_U_Add depende','ncy of $1 to $2'#000+
+  '10048_U_Add dependency of $1 to $2'#000+
   '10049_U_No reload, is caller: $1'#000+
   '10050_U_No reload, already in second compile: $1'#000+
   '10051_U_Flag for reload: $1'#000+
   '10052_U_Forced reloading'#000+
-  '10053_U_Previous state of $1: $2'#000+
+  '10053_U_P','revious state of $1: $2'#000+
   '10054_U_Already compiling $1, setting second compile'#000+
-  '100','55_U_Loading unit $1'#000+
+  '10055_U_Loading unit $1'#000+
   '10056_U_Finished loading unit $1'#000+
   '10057_U_Registering new unit $1'#000+
   '10058_U_Re-resolving unit $1'#000+
-  '10059_U_Skipping re-resolving unit $1, still loading used units'#000+
+  '10059_U_Skipping re-resolving unit $1, still ','loading used units'#000+
   '11000_$1 [options] <inputfile> [options]'#000+
-  '11001_W_Only one sou','rce file supported'#000+
+  '11001_W_Only one source file supported'#000+
   '11002_W_DEF file can be created only for OS/2'#000+
   '11003_E_nested response files are not supported'#000+
   '11004_F_No source file name in command line'#000+
-  '11005_N_No option inside $1 config file'#000+
+  '110','05_N_No option inside $1 config file'#000+
   '11006_E_Illegal parameter: $1'#000+
-  '11007_H_-? wr','ites help pages'#000+
+  '11007_H_-? writes help pages'#000+
   '11008_F_Too many config files nested'#000+
   '11009_F_Unable to open file $1'#000+
   '11010_D_Reading further options from $1'#000+
-  '11011_W_Target is already set to: $1'#000+
+  '11011_W_Target is already set to: $1',#000+
   '11012_W_Shared libs not supported on DOS platform, reverting to static'+
   #000+
-  '11013_F_','too many IF(N)DEFs'#000+
+  '11013_F_too many IF(N)DEFs'#000+
   '11014_F_too many ENDIFs'#000+
   '11015_F_open conditional at the end of the file'#000+
-  '11016_W_Debug information generation is not supported by this executab'+
-  'le'#000+
+  '11016_W_Debug information generation is not supported by this executa',
+  'ble'#000+
   '11017_H_Try recompiling with -dGDB'#000+
-  '11018_E_You are using the obsolete switch',' $1'#000+
+  '11018_E_You are using the obsolete switch $1'#000+
   '11019_E_You are using the obsolete switch $1, please use $2'#000+
   '11020_N_Switching assembler to default source writing assembler'#000+
-  '11021_W_Assembler output selected "$1" is not compatible with "$2"'#000+
+  '11021_W_Assembler output selecte','d "$1" is not compatible with "$2"'#000+
   '11022_W_"$1" assembler use forced'#000+
-  '11026_T_Rea','ding options from file $1'#000+
+  '11026_T_Reading options from file $1'#000+
   '11027_T_Reading options from environment $1'#000+
   '11028_D_Handling option "$1"'#000+
   '11029__*** press enter ***'#000+
-  '11030_H_Start of reading config file $1'#000+
+  '11030_H_Start of reading config fi','le $1'#000+
   '11031_H_End of reading config file $1'#000+
   '11032_D_interpreting option "$1"'#000+
-  '110','36_D_interpreting firstpass option "$1"'#000+
+  '11036_D_interpreting firstpass option "$1"'#000+
   '11033_D_interpreting file option "$1"'#000+
   '11034_D_Reading config file "$1"'#000+
   '11035_D_found source file name "$1"'#000+
-  '11037_D_Defining symbol $1'#000+
+  '11037_D_Defin','ing symbol $1'#000+
   '11038_D_Undefining symbol $1'#000+
   '11039_E_Unknown code page'#000+
-  '11023_Free ','Pascal Compiler version $FPCVER [$FPCDATE] for $FPCTARGET'+
-  #010+
+  '11023_Free Pascal Compiler version $FPCVER [$FPCDATE] for $FPCTARGET'#010+
   'Copyright (c) 1993-2002 by Florian Klaempfl'#000+
   '11024_Free Pascal Compiler version $FPCVER'#010+
   #010+
-  'Compiler Date  : $FPCDATE'#010+
+  'Compiler Date ',' : $FPCDATE'#010+
   'Compiler Target: $FPCTARGET'#010+
   #010+
   'Supported targets:'#010+
   '  $OSTARGETS'#010+
   #010+
-  'This p','rogram comes under the GNU General Public Licence'#010+
+  'This program comes under the GNU General Public Licence'#010+
   'For more information read COPYING.FPC'#010+
   #010+
   'Report bugs,suggestions etc to:'#010+
-  '                 [email protected]'#000+
+  '                 [email protected]'#000,
   '11025_**0*_put + after a boolean switch option to enable it, - to disa'+
   'ble it'#010+
-  '**1','a_the compiler doesn'#039't delete the generated assembler file'#010+
+  '**1a_the compiler doesn'#039't delete the generated assembler file'#010+
   '**2al_list sourcecode lines in assembler file'#010+
-  '**2ar_list register allocation/release info in assembler file'#010+
+  '**2ar_list register allocation/release info in assemble','r file'#010+
   '**2at_list temp allocation/release info in assembler file'#010+
-  '**1b_generate b','rowser info'#010+
+  '**1b_generate browser info'#010+
   '**2bl_generate local symbol info'#010+
   '**1B_build all modules'#010+
   '**1C<x>_code generation options:'#010+
   '**2CD_create also dynamic library (not supported)'#010+
-  '**2Ce_Compilation with emulated floating point opcodes'#010+
-  '**2Ch<n>_<n> bytes heap (between 1','023 and 67107840)'#010+
+  '**2Ce_Com','pilation with emulated floating point opcodes'#010+
+  '**2Ch<n>_<n> bytes heap (between 1023 and 67107840)'#010+
   '**2Ci_IO-checking'#010+
   '**2Cn_omit linking stage'#010+
   '**2Co_check overflow of integer operations'#010+
   '**2Cr_range checking'#010+
-  '**2CR_verify object method call validity'#010+
+  '**2CR_verify object method call val','idity'#010+
   '**2Cs<n>_set stack size to <n>'#010+
   '**2Ct_stack checking'#010+
-  '**2CX_create also smar','tlinked library'#010+
+  '**2CX_create also smartlinked library'#010+
   '**1d<x>_defines the symbol <x>'#010+
   '*O1D_generate a DEF file'#010+
   '*O2Dd<x>_set description to <x>'#010+
   '*O2Dw_PM application'#010+
   '**1e<x>_set path to executable'#010+
-  '**1E_same as -Cn'#010+
+  '**1E','_same as -Cn'#010+
   '**1F<x>_set file names and paths:'#010+
-  '**2FD<x>_sets the directory where',' to search for compiler utilities'#010+
+  '**2FD<x>_sets the directory where to search for compiler utilities'#010+
   '**2Fe<x>_redirect error output to <x>'#010+
   '**2FE<x>_set exe/unit output path to <x>'#010+
   '**2Fi<x>_adds <x> to include path'#010+
-  '**2Fl<x>_adds <x> to library path'#010+
+  '**2Fl<x>_adds',' <x> to library path'#010+
   '*L2FL<x>_uses <x> as dynamic linker'#010+
-  '**2Fo<x>_adds <x> to ob','ject path'#010+
+  '**2Fo<x>_adds <x> to object path'#010+
   '**2Fr<x>_load error message file <x>'#010+
   '**2Fu<x>_adds <x> to unit path'#010+
   '**2FU<x>_set unit output path to <x>, overrides -FE'#010+
-  '*g1g_generate debugger information:'#010+
+  '*g1g_generate debugger informa','tion:'#010+
   '*g2gg_use gsym'#010+
   '*g2gd_use dbx'#010+
-  '*g2gh_use heap trace unit (for memory leak de','bugging)'#010+
+  '*g2gh_use heap trace unit (for memory leak debugging)'#010+
   '*g2gl_use line info unit to show more info for backtraces'#010+
   '*g2gc_generate checks for pointers'#010+
   '**1i_information'#010+
   '**2iD_return compiler date'#010+
-  '**2iV_return compiler version'#010+
+  '**2iV_return c','ompiler version'#010+
   '**2iSO_return compiler OS'#010+
   '**2iSP_return compiler processor'#010+
-  '**2iT','O_return target OS'#010+
+  '**2iTO_return target OS'#010+
   '**2iTP_return target processor'#010+
   '**1I<x>_adds <x> to include path'#010+
   '**1k<x>_Pass <x> to the linker'#010+
   '**1l_write logo'#010+
-  '**1M<x>_set language mode to <x>'#010+
+  '**1M<x>_set language mode to <','x>'#010+
   '**2Mfpc_free pascal dialect (default)'#010+
-  '**2Mobjfpc_switch some Delphi 2 extensi','ons on'#010+
+  '**2Mobjfpc_switch some Delphi 2 extensions on'#010+
   '**2Mdelphi_tries to be Delphi compatible'#010+
   '**2Mtp_tries to be TP/BP 7.0 compatible'#010+
   '**2Mgpc_tries to be gpc compatible'#010+
-  '**2Mmac_tries to be compatible to the macintosh pascal dialects'#010+
+  '**2Mmac_tries to be compatible to the',' macintosh pascal dialects'#010+
   '**1n_don'#039't read the default config file'#010+
-  '**1o<x>_chang','e the name of the executable produced to <x>'#010+
+  '**1o<x>_change the name of the executable produced to <x>'#010+
   '**1pg_generate profile code for gprof (defines FPC_PROFILE)'#010+
-  '*L1P_use pipes instead of creating temporary assembler files'#010+
+  '*L1P_use pipes instead of creating temporary assembler ','files'#010+
   '**1S<x>_syntax options:'#010+
   '**2S2_same as -Mobjfpc'#010+
-  '**2Sc_supports operators li','ke C (*=,+=,/= and -=)'#010+
+  '**2Sc_supports operators like C (*=,+=,/= and -=)'#010+
   '**2Sa_include assertion code.'#010+
   '**2Sd_same as -Mdelphi'#010+
   '**2Se<x>_compiler stops after the <x> errors (default is 1)'#010+
-  '**2Sg_allow LABEL and GOTO'#010+
+  '**2Sg_allow LABEL and GO','TO'#010+
   '**2Sh_Use ansistrings'#010+
   '**2Si_support C++ styled INLINE'#010+
-  '**2Sm_support macros li','ke C (global)'#010+
+  '**2Sm_support macros like C (global)'#010+
   '**2So_same as -Mtp'#010+
   '**2Sp_same as -Mgpc'#010+
   '**2Ss_constructor name must be init (destructor must be done)'#010+
   '**2St_allow static keyword in objects'#010+
-  '**1s_don'#039't call assembler and linker (only with -a)'#010+
-  '**2sh_Generate script to link on ho','st'#010+
+  '**1s_do','n'#039't call assembler and linker (only with -a)'#010+
+  '**2sh_Generate script to link on host'#010+
   '**2sr_Skip register allocation phase (optimizations will be disabled)'#010+
   '**2st_Generate script to link on target'#010+
   '**1u<x>_undefines the symbol <x>'#010+
-  '**1U_unit options:'#010+
+  '**1U_unit opti','ons:'#010+
   '**2Un_don'#039't check the unit name'#010+
   '**2Ur_generate release unit files'#010+
-  '**2Us_com','pile a system unit'#010+
+  '**2Us_compile a system unit'#010+
   '**1v<x>_Be verbose. <x> is a combination of the following letters:'#010+
   '**2*_e : Show errors (default)       d : Show debug info'#010+
-  '**2*_w : Show warnings               u : Show unit info'#010+
-  '**2*_n : Show notes                  t : ','Show tried/used files'#010+
+  '**2*_w : Show war','nings               u : Show unit info'#010+
+  '**2*_n : Show notes                  t : Show tried/used files'#010+
   '**2*_h : Show hints                  m : Show defined macros'#010+
   '**2*_i : Show general info           p : Show compiled procedures'#010+
-  '**2*_l : Show linenumbers            c : Show conditionals'#010+
-  '**2*_a : Show everything        ','     0 : Show nothing (except errors'+
-  ')'#010+
+  '**2*_l : Sh','ow linenumbers            c : Show conditionals'#010+
+  '**2*_a : Show everything             0 : Show nothing (except errors)'#010+
   '**2*_b : Show all procedure          r : Rhide/GCC compatibility mode'#010+
-  '**2*_    declarations if an error    x : Executable info (Win32 only)'#010+
+  '**2*_    declarations if an error    x : Executable ','info (Win32 only'+
+  ')'#010+
   '**2*_    occurs'#010+
-  '**1V_write fpcdebug.txt file with lots of debu','gging info'#010+
+  '**1V_write fpcdebug.txt file with lots of debugging info'#010+
   '**1X_executable options:'#010+
   '*L2Xc_link with the c library'#010+
   '**2Xs_strip all symbols from executable'#010+
-  '**2XD_try to link dynamic          (defines FPC_LINK_DYNAMIC)'#010+
+  '**2XD_try to link dynamic          (defines FPC_LINK_D','YNAMIC)'#010+
   '**2XS_try to link static (default) (defines FPC_LINK_STATIC)'#010+
-  '**2XX_try t','o link smart            (defines FPC_LINK_SMART)'#010+
+  '**2XX_try to link smart            (defines FPC_LINK_SMART)'#010+
   '**0*_Processor specific options:'#010+
   '3*1A<x>_output format:'#010+
   '3*2Aas_assemble using GNU AS'#010+
-  '3*2Anasmcoff_coff (Go32v2) file using Nasm'#010+
+  '3*2Anasmcoff_coff (Go32v2)',' file using Nasm'#010+
   '3*2Anasmelf_elf32 (Linux) file using Nasm'#010+
-  '3*2Awasm_obj file usi','ng Wasm (Watcom)'#010+
+  '3*2Awasm_obj file using Wasm (Watcom)'#010+
   '3*2Anasmobj_obj file using Nasm'#010+
   '3*2Amasm_obj file using Masm (Microsoft)'#010+
   '3*2Atasm_obj file using Tasm (Borland)'#010+
-  '3*2Acoff_coff (Go32v2) using internal writer'#010+
+  '3*2Acoff_coff (Go32v2) using in','ternal writer'#010+
   '3*2Apecoff_pecoff (Win32) using internal writer'#010+
-  '3*1R<x>_assembler ','reading style:'#010+
+  '3*1R<x>_assembler reading style:'#010+
   '3*2Ratt_read AT&T style assembler'#010+
   '3*2Rintel_read Intel style assembler'#010+
   '3*2Rdirect_copy assembler text directly to assembler file'#010+
-  '3*1O<x>_optimizations:'#010+
+  '3*1O<x>_optimiza','tions:'#010+
   '3*2Og_generate smaller code'#010+
   '3*2OG_generate faster code (default)'#010+
-  '3*2Or_ke','ep certain variables in registers'#010+
+  '3*2Or_keep certain variables in registers'#010+
   '3*2Ou_enable uncertain optimizations (see docs)'#010+
   '3*2O1_level 1 optimizations (quick optimizations)'#010+
-  '3*2O2_level 2 optimizations (-O1 + slower optimizations)'#010+
-  '3*2O3_level 3 optimizations (-O2 repeatedly, max 5 ','times)'#010+
+  '3*2O2_level 2 optimizations ','(-O1 + slower optimizations)'#010+
+  '3*2O3_level 3 optimizations (-O2 repeatedly, max 5 times)'#010+
   '3*2Op<x>_target processor:'#010+
   '3*3Op1_set target processor to 386/486'#010+
   '3*3Op2_set target processor to Pentium/PentiumMMX (tm)'#010+
-  '3*3Op3_set target processor to PPro/PII/c6x86/K6 (tm)'#010+
+  '3*3Op3_set target processor to P','Pro/PII/c6x86/K6 (tm)'#010+
   '3*1T<x>_Target operating system:'#010+
-  '3*2Temx_OS/2 via EMX (inc','luding EMX/RSX extender)'#010+
+  '3*2Temx_OS/2 via EMX (including EMX/RSX extender)'#010+
   '3*2Tgo32v2_Version 2 of DJ Delorie DOS extender'#010+
   '3*2Tlinux_Linux'#010+
   '3*2Tnetware_Novell Netware Module (clib)'#010+
   '3*2Tos2_OS/2 / eComStation'#010+
-  '3*2Tsunos_SunOS/Solaris'#010+
+  '3*2','Tsunos_SunOS/Solaris'#010+
   '3*2Twatcom_Watcom compatible DOS extender'#010+
-  '3*2Twdosx_WDOSX D','OS extender'#010+
+  '3*2Twdosx_WDOSX DOS extender'#010+
   '3*2Twin32_Windows 32 Bit'#010+
   '3*1W<x>_Win32-like target options'#010+
   '3*2WB<x>_Set Image base to Hexadecimal <x> value'#010+
   '3*2WC_Specify console type application'#010+
-  '3*2WD_Use DEFFILE to export functions of DLL or EXE'#010+
-  '3*2WF_Specify full-screen typ','e application (OS/2 only)'#010+
+  '3','*2WD_Use DEFFILE to export functions of DLL or EXE'#010+
+  '3*2WF_Specify full-screen type application (OS/2 only)'#010+
   '3*2WG_Specify graphic type application'#010+
   '3*2WN_Do not generate relocation code (necessary for debugging)'#010+
-  '3*2WR_Generate relocation code'#010+
+  '3*2WR_Generate relocation code'#010,
   '6*1A<x>_output format'#010+
   '6*2Aas_Unix o-file using GNU AS'#010+
-  '6*2Agas_GNU Motorola assem','bler'#010+
+  '6*2Agas_GNU Motorola assembler'#010+
   '6*2Amit_MIT Syntax (old GAS)'#010+
   '6*2Amot_Standard Motorola assembler'#010+
   '6*1O_optimizations:'#010+
   '6*2Oa_turn on the optimizer'#010+
   '6*2Og_generate smaller code'#010+
-  '6*2OG_generate faster code (default)'#010+
+  '6*2OG_generate',' faster code (default)'#010+
   '6*2Ox_optimize maximum (still BUGGY!!!)'#010+
-  '6*2O0_set target ','processor to a MC68000'#010+
+  '6*2O0_set target processor to a MC68000'#010+
   '6*2O2_set target processor to a MC68020+ (default)'#010+
   '6*1R<x>_assembler reading style:'#010+
   '6*2RMOT_read motorola style assembler'#010+
-  '6*1T<x>_Target operating system:'#010+
+  '6*1T<x>_Target ','operating system:'#010+
   '6*2Tamiga_Commodore Amiga'#010+
   '6*2Tatari_Atari ST/STe/TT'#010+
-  '6*2Tlinux_','Linux-68k'#010+
+  '6*2Tlinux_Linux-68k'#010+
   '6*2Tmacos_Macintosh m68k'#010+
   '6*2Tpalmos_PalmOS'#010+
   'P*1T<x>_Target operating system:'#010+
   'P*2Tlinux_Linux on PowerPC'#010+
   'P*2Tmacos_MacOS (classic) on PowerPC'#010+
   '**1*_'#010+
-  '**1?_shows this help'#010+
+  '**1?','_shows this help'#010+
   '**1h_shows this help without waiting'#000
 );

+ 15 - 3
compiler/ncgbas.pas

@@ -133,7 +133,9 @@ interface
       procedure ResolveRef(var op:toper);
         var
           sym : tvarsym;
+{$ifdef x86}
           scale : byte;
+{$endif x86}
           getoffset : boolean;
           indexreg : tregister;
           sofs : longint;
@@ -142,7 +144,9 @@ interface
             begin
               sofs:=op.localsymofs;
               indexreg:=op.localindexreg;
+{$ifdef x86}
               scale:=op.localscale;
+{$endif x86}
               getoffset:=op.localgetoffset;
               sym:=tvarsym(pointer(op.localsym));
               case sym.localloc.loc of
@@ -170,9 +174,9 @@ interface
                         reference_reset_base(op.ref^,sym.localloc.reference.index,
                             sym.localloc.reference.offset+sofs);
                         op.ref^.index:=indexreg;
-{$ifdef i386}
+{$ifdef x86}
                         op.ref^.scalefactor:=scale;
-{$endif i386}
+{$endif x86}
                       end;
                   end;
                 LOC_REGISTER :
@@ -407,7 +411,15 @@ begin
 end.
 {
   $Log$
-  Revision 1.50  2003-11-04 15:35:13  peter
+  Revision 1.51  2003-11-07 15:58:32  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.50  2003/11/04 15:35:13  peter
     * fix for referencecounted temps
 
   Revision 1.49  2003/11/02 13:30:05  jonas

+ 10 - 2
compiler/ncgcal.pas

@@ -200,7 +200,7 @@ implementation
                cg.a_paramfpu_reg(exprasmlist,def_cgsize(left.resulttype.def),left.location.register,tempparaloc);
              LOC_REFERENCE,
              LOC_CREFERENCE :
-               cg.a_paramfpu_ref(exprasmlist,def_cgsize(left.resulttype.def),left.location.reference,tempparaloc)
+               cg.a_paramfpu_ref(exprasmlist,def_cgsize(left.resulttype.def),left.location.reference,tempparaloc);
              else
                internalerror(200204243);
            end;
@@ -1133,7 +1133,15 @@ begin
 end.
 {
   $Log$
-  Revision 1.137  2003-11-04 19:03:54  peter
+  Revision 1.138  2003-11-07 15:58:32  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.137  2003/11/04 19:03:54  peter
     * fixes for temp type patch
 
   Revision 1.136  2003/11/04 15:35:13  peter

+ 26 - 2
compiler/ncgutil.pas

@@ -719,6 +719,10 @@ implementation
                   case hsym.localloc.loc of
                     LOC_REFERENCE :
                       begin
+                        { this code is only executed before the code for the body and the entry/exit code is generated
+                          so we're allowed to include pi_do_call here; after pass1 is run, this isn't allowed anymore
+                        }
+                        include(current_procinfo.flags,pi_do_call);
                         reference_reset_base(href2,hsym.localloc.reference.index,hsym.localloc.reference.offset);
                         cg.g_copyvaluepara_openarray(list,href1,href2,tarraydef(tvarsym(p).vartype.def).elesize)
                       end
@@ -890,7 +894,19 @@ implementation
               reference_reset_base(href,tvarsym(p).localloc.reference.index,tvarsym(p).localloc.reference.offset);
               cg.g_decrrefcount(list,tvarsym(p).vartype.def,href,is_open_array(tvarsym(p).vartype.def));
             end;
-         end;
+         end
+        else if (tsym(p).typ=varsym) and
+          (is_open_array(tvarsym(p).vartype.def) or
+           is_array_of_const(tvarsym(p).vartype.def)) then
+          begin
+            { cdecl functions don't have a high pointer so it is not possible to generate
+              a local copy }
+            if not(current_procinfo.procdef.proccalloption in [pocall_cdecl,pocall_cppdecl]) then
+              begin
+                reference_reset_base(href,tvarsym(p).localloc.reference.index,tvarsym(p).localloc.reference.offset);
+                cg.g_releasevaluepara_openarray(list,href);
+              end;
+          end;
       end;
 
 
@@ -1945,7 +1961,15 @@ implementation
 end.
 {
   $Log$
-  Revision 1.164  2003-11-04 19:03:50  peter
+  Revision 1.165  2003-11-07 15:58:32  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.164  2003/11/04 19:03:50  peter
     * fixes for temp type patch
 
   Revision 1.163  2003/11/04 15:35:13  peter

+ 17 - 17
compiler/options.pas

@@ -370,9 +370,7 @@ var
   j,l  : longint;
   d    : DirStr;
   e    : ExtStr;
-{$ifdef arm}
   s    : string;
-{$endif arm}
   forceasm : tasm;
 begin
   if opt='' then
@@ -495,26 +493,13 @@ begin
                            include(initmoduleswitches,cs_fp_emulation);
                        end;
 {$endif cpufpemu}
-{$ifdef arm}
                    'f' :
                      begin
                        s:=upper(copy(more,j+1,length(more)-j));
-                       if s='SOFT' then
-                         initfputype:=fpu_soft
-                       else if s='FPA' then
-                         initfputype:=fpu_fpa
-                       else if s='FPA10' then
-                         initfputype:=fpu_fpa10
-                       else if s='FPA11' then
-                         initfputype:=fpu_fpa11
-                       else if s='VFP' then
-                         initfputype:=fpu_vfp
-                       else
+                       if not(SetFpuType(s,true)) then
                          IllegalPara(opt);
                        break;
                      end;
-{$endif arm}
-
                     'h' :
                        begin
                          val(copy(more,j+1,length(more)-j),heapsize,code);
@@ -540,6 +525,13 @@ begin
                         exclude(initlocalswitches,cs_check_overflow)
                       Else
                         include(initlocalswitches,cs_check_overflow);
+                    'p' :
+                      begin
+                        s:=upper(copy(more,j+1,length(more)-j));
+                        if not(SetProcessor(s,true)) then
+                          IllegalPara(opt);
+                        break;
+                      end;
                     'r' :
                       If UnsetBool(More, j) then
                         exclude(initlocalswitches,cs_check_range)
@@ -1991,7 +1983,15 @@ finalization
 end.
 {
   $Log$
-  Revision 1.113  2003-10-22 15:40:44  marco
+  Revision 1.114  2003-11-07 15:58:32  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.113  2003/10/22 15:40:44  marco
    * -Xc -Xr support
 
   Revision 1.112  2003/10/18 09:14:18  hajny

+ 29 - 2
compiler/pdecsub.pas

@@ -74,6 +74,7 @@ implementation
        { global }
        globtype,globals,verbose,
        systems,
+       cpuinfo,
        { aasm }
        aasmbase,
        { symtable }
@@ -1190,7 +1191,7 @@ type
    end;
 const
   {Should contain the number of procedure directives we support.}
-  num_proc_directives=34;
+  num_proc_directives=35;
   proc_direcdata:array[1..num_proc_directives] of proc_dir_rec=
    (
     (
@@ -1437,6 +1438,17 @@ const
       mutexclpocall : [pocall_internproc];
       mutexclpotype : [potype_constructor,potype_destructor];
       mutexclpo     : [po_external]
+    ),(
+      idtok:_SOFTFLOAT;
+      pd_flags : [pd_interface,pd_implemen,pd_body,pd_procvar];
+      handler  : nil;
+      pocall   : pocall_softfloat;
+      pooption : [];
+      mutexclpocall : [];
+      mutexclpotype : [potype_constructor,potype_destructor];
+      { it's available with po_external because the libgcc floating point routines on the arm
+        uses this calling convention }
+      mutexclpo     : []
     ),(
       idtok:_STATIC;
       pd_flags : [pd_interface,pd_object,pd_notobjintf];
@@ -1586,6 +1598,13 @@ const
                 proccalloptionStr[pd.proccalloption],
                 proccalloptionStr[proc_direcdata[p].pocall]);
             end;
+           { check if the target processor supports this calling convention }
+           if not(proc_direcdata[p].pocall in supported_calling_conventions) then
+             begin
+               Message1(parser_e_illegal_calling_convention,proccalloptionStr[proc_direcdata[p].pocall]);
+               { recover }
+               proc_direcdata[p].pocall:=pocall_stdcall;
+             end;
            pd.proccalloption:=proc_direcdata[p].pocall;
            include(pd.procoptions,po_hascallingconvention);
          end;
@@ -2132,7 +2151,15 @@ const
 end.
 {
   $Log$
-  Revision 1.151  2003-11-03 17:47:30  peter
+  Revision 1.152  2003-11-07 15:58:32  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.151  2003/11/03 17:47:30  peter
     * insert framepointer as voidpointer instead of returntype
 
   Revision 1.150  2003/10/30 16:23:13  peter

+ 10 - 2
compiler/pexpr.pas

@@ -301,7 +301,7 @@ implementation
          if (m_tp_procvar in aktmodeswitches) and
             (token<>_ASSIGNMENT) and
             (not got_addrn) and
-            (block_type=bt_general) then
+            (block_type=bt_body) then
           begin
             { ignore vecn,subscriptn }
             hp:=p;
@@ -2478,7 +2478,15 @@ implementation
 end.
 {
   $Log$
-  Revision 1.138  2003-11-06 15:54:32  peter
+  Revision 1.139  2003-11-07 15:58:32  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.138  2003/11/06 15:54:32  peter
     * fixed calling classmethod for other object from classmethod
 
   Revision 1.137  2003/11/04 16:42:13  peter

+ 21 - 1
compiler/powerpc/cpuinfo.pas

@@ -69,12 +69,32 @@ Const
    { for linux: }
    jmp_buf_size = 232;
 
+   { calling conventions supported by the code generator }
+   supported_calling_conventions = [
+     pocall_internproc,
+     pocall_compilerproc,
+     pocall_inline,
+     pocall_stdcall,
+     { the difference to stdcall is only the name mangling }
+     pocall_cdecl,
+     { the difference to stdcall is only the name mangling }
+     pocall_cppdecl
+   ];
+
 Implementation
 
 end.
 {
   $Log$
-  Revision 1.14  2003-09-03 11:18:37  florian
+  Revision 1.15  2003-11-07 15:58:33  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.14  2003/09/03 11:18:37  florian
     * fixed arm concatcopy
     + arm support in the common compiler sources added
     * moved some generic cg code around

+ 15 - 3
compiler/psub.pas

@@ -903,8 +903,12 @@ implementation
     procedure tcgprocinfo.parse_body;
       var
          oldprocinfo : tprocinfo;
+         oldblock_type : tblock_type;
       begin
          oldprocinfo:=current_procinfo;
+         oldblock_type:=block_type;
+         { reset break and continue labels }
+         block_type:=bt_body;
 
          current_procinfo:=self;
 
@@ -918,8 +922,6 @@ implementation
          else if (procdef.parast.symtablelevel=normal_function_level) then
            allow_only_static:=false;
 
-         { reset break and continue labels }
-         block_type:=bt_general;
     {$ifdef state_tracking}
 {    aktstate:=Tstate_storage.create;}
     {$endif state_tracking}
@@ -1002,6 +1004,8 @@ implementation
          if (current_procinfo.procdef.parast.symtablelevel=normal_function_level) then
            allow_only_static:=false;
          current_procinfo:=oldprocinfo;
+
+         block_type:=oldblock_type;
       end;
 
 
@@ -1308,7 +1312,15 @@ implementation
 end.
 {
   $Log$
-  Revision 1.169  2003-10-31 15:52:18  peter
+  Revision 1.170  2003-11-07 15:58:32  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.169  2003/10/31 15:52:18  peter
     * fix crash with fail in constructor
 
   Revision 1.168  2003/10/30 16:22:40  peter

+ 10 - 2
compiler/rgobj.pas

@@ -1781,7 +1781,7 @@ implementation
                       begin
                         so:=Taicpu_abstract(p).oper[i]^.shifterop;
                         if so^.rs<>NR_NO then
-                          setsupreg(so^.rs,table[getsupreg(so^.rs)]);
+                          setsupreg(so^.rs,reginfo[getsupreg(so^.rs)].colour);
                       end;
 {$endif arm}
                   end;
@@ -1820,7 +1820,15 @@ implementation
 end.
 {
   $Log$
-  Revision 1.93  2003-10-30 16:22:40  peter
+  Revision 1.94  2003-11-07 15:58:32  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.93  2003/10/30 16:22:40  peter
     * call firstpass before allocation and codegeneration is started
     * move leftover code from pass_2.generatecode() to psub
 

+ 13 - 1
compiler/scandir.pas

@@ -288,6 +288,10 @@ implementation
         do_message(scan_f_user_defined);
       end;
 
+    procedure dir_fputype;
+      begin
+      end;
+
     procedure dir_goto;
       begin
         do_moduleswitch(cs_support_goto);
@@ -983,7 +987,15 @@ implementation
 end.
 {
   $Log$
-  Revision 1.26  2003-09-17 22:30:19  olle
+  Revision 1.27  2003-11-07 15:58:32  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.26  2003/09/17 22:30:19  olle
     + support for a different set of compiler directives under $MODE MAC
     + added mac directives $SETC $IFC $ELSEC $ENDC
 

+ 19 - 1
compiler/sparc/cpuinfo.pas

@@ -61,12 +61,30 @@ const
 {$warning jmp_buf_size not set!}
   JMP_BUF_SIZE = 4; // 4 is used temporary to remove AllocTemp warning
 
+  { calling conventions supported by the code generator }
+  supported_calling_conventions = [
+    pocall_internproc,
+    pocall_compilerproc,
+    pocall_inline,
+    pocall_stdcall,
+    pocall_cdecl,
+    pocall_cppdecl
+  ];
+
 implementation
 
 end.
 {
   $Log$
-  Revision 1.9  2003-09-03 15:55:01  peter
+  Revision 1.10  2003-11-07 15:58:33  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.9  2003/09/03 15:55:01  peter
     * NEWRA branch merged
 
   Revision 1.8  2003/06/17 16:35:42  peter

+ 10 - 2
compiler/symconst.pas

@@ -343,7 +343,7 @@ const
    savestdregs_pocalls = [
      pocall_cdecl,pocall_cppdecl,pocall_palmossyscall,
      pocall_stdcall,pocall_safecall,pocall_compilerproc,
-     pocall_register
+     pocall_register,pocall_softfloat
    ];
 
    clearstack_pocalls = [
@@ -377,7 +377,15 @@ implementation
 end.
 {
   $Log$
-  Revision 1.69  2003-10-28 15:36:01  peter
+  Revision 1.70  2003-11-07 15:58:32  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.69  2003/10/28 15:36:01  peter
     * absolute to object field supported, fixes tb0458
 
   Revision 1.68  2003/10/08 19:19:45  peter

+ 11 - 1
compiler/tokens.pas

@@ -201,6 +201,7 @@ type
     _PROCEDURE,
     _PROTECTED,
     _PUBLISHED,
+    _SOFTFLOAT,
     _THREADVAR,
     _DEPRECATED,
     _DESTRUCTOR,
@@ -423,6 +424,7 @@ const
       (str:'PROCEDURE'     ;special:false;keyword:m_all;op:NOTOKEN),
       (str:'PROTECTED'     ;special:false;keyword:m_none;op:NOTOKEN),
       (str:'PUBLISHED'     ;special:false;keyword:m_none;op:NOTOKEN),
+      (str:'SOFTFLOAT'     ;special:false;keyword:m_none;op:NOTOKEN),
       (str:'THREADVAR'     ;special:false;keyword:m_class;op:NOTOKEN),
       (str:'DEPRECATED'    ;special:false;keyword:m_all;op:NOTOKEN),
       (str:'DESTRUCTOR'    ;special:false;keyword:m_all;op:NOTOKEN),
@@ -502,7 +504,15 @@ end;
 end.
 {
   $Log$
-  Revision 1.24  2003-09-07 22:09:35  peter
+  Revision 1.25  2003-11-07 15:58:32  florian
+    * Florian's culmutative nr. 1; contains:
+      - invalid calling conventions for a certain cpu are rejected
+      - arm softfloat calling conventions
+      - -Sp for cpu dependend code generation
+      - several arm fixes
+      - remaining code for value open array paras on heap
+
+  Revision 1.24  2003/09/07 22:09:35  peter
     * preparations for different default calling conventions
     * various RA fixes