diff --git a/compiler/fpcdefs.inc b/compiler/fpcdefs.inc index b346236186..d3063eaf1e 100644 --- a/compiler/fpcdefs.inc +++ b/compiler/fpcdefs.inc @@ -52,9 +52,19 @@ {$define cpu64bit} {$undef cpuflags} {$endif alpha} + +{ FPU Emulator support } +{$ifdef m68k} + {$define cpufpemu} +{$endif m68k} + { $Log$ - Revision 1.13 2002-10-16 19:01:43 peter + Revision 1.14 2002-12-06 16:56:57 peter + * only compile cs_fp_emulation support when cpufpuemu is defined + * define cpufpuemu for m68k only + + Revision 1.13 2002/10/16 19:01:43 peter + $IMPLICITEXCEPTIONS switch to turn on/off generation of the implicit exception frames for procedures with initialized variables and for constructors. The default is on for compatibility diff --git a/compiler/fppu.pas b/compiler/fppu.pas index 31783eba3e..fd87461a7b 100644 --- a/compiler/fppu.pas +++ b/compiler/fppu.pas @@ -181,6 +181,7 @@ uses Message(unit_u_ppu_invalid_target); exit; end; +{$ifdef cpufpemu} { check if floating point emulation is on?} if ((ppufile.header.flags and uf_fpu_emulation)<>0) and (cs_fp_emulation in aktmoduleswitches) then @@ -190,6 +191,7 @@ uses Message(unit_u_ppu_invalid_fpumode); exit; end; +{$endif cpufpemu} { Load values to be access easier } flags:=ppufile.header.flags; @@ -860,8 +862,10 @@ uses flags:=flags or uf_local_browser; if do_release then flags:=flags or uf_release; +{$ifdef cpufpemu} if (cs_fp_emulation in aktmoduleswitches) then flags:=flags or uf_fpu_emulation; +{$endif cpufpemu} {$ifdef Test_Double_checksum_write} Assign(CRCFile,s+'.IMP'); Rewrite(CRCFile); @@ -1325,7 +1329,11 @@ uses end. { $Log$ - Revision 1.27 2002-11-20 12:36:24 mazen + Revision 1.28 2002-12-06 16:56:57 peter + * only compile cs_fp_emulation support when cpufpuemu is defined + * define cpufpuemu for m68k only + + Revision 1.27 2002/11/20 12:36:24 mazen * $UNITPATH directive is now working Revision 1.26 2002/11/15 01:58:46 peter diff --git a/compiler/nadd.pas b/compiler/nadd.pas index 09132de541..315a7c67a0 100644 --- a/compiler/nadd.pas +++ b/compiler/nadd.pas @@ -45,6 +45,7 @@ interface { only implements "muln" nodes, the rest always has to be done in } { the code generator for performance reasons (JM) } function first_add64bitint: tnode; virtual; +{$ifdef cpufpemu} { This routine calls internal runtime library helpers for all floating point arithmetic in the case where the emulation switches is on. Otherwise @@ -52,6 +53,7 @@ interface the code generation phase. } function first_addfloat : tnode; virtual; +{$endif cpufpemu} end; taddnodeclass = class of taddnode; @@ -1523,6 +1525,7 @@ implementation end; +{$ifdef cpufpemu} function taddnode.first_addfloat: tnode; var procname: string[31]; @@ -1576,6 +1579,7 @@ implementation right := nil; firstpass(result); end; +{$endif cpufpemu} function taddnode.pass_1 : tnode; @@ -1601,9 +1605,11 @@ implementation { int/int gives real/real! } if nodetype=slashn then begin +{$ifdef cpufpemu} result := first_addfloat; if assigned(result) then exit; +{$endif cpufpemu} location.loc:=LOC_FPUREGISTER; { maybe we need an integer register to save } { a reference } @@ -1781,9 +1787,11 @@ implementation { is one a real float ? } else if (rd.deftype=floatdef) or (ld.deftype=floatdef) then begin +{$ifdef cpufpemu} result := first_addfloat; if assigned(result) then exit; +{$endif cpufpemu} location.loc:=LOC_FPUREGISTER; calcregisters(self,0,1,0); { an add node always first loads both the left and the } @@ -1914,7 +1922,11 @@ begin end. { $Log$ - Revision 1.76 2002-11-30 21:32:24 carl + Revision 1.77 2002-12-06 16:56:57 peter + * only compile cs_fp_emulation support when cpufpuemu is defined + * define cpufpuemu for m68k only + + Revision 1.76 2002/11/30 21:32:24 carl + Add loading of softfpu in emulation mode + Correct routine call for softfpu * Extended type must also be defined even with softfpu diff --git a/compiler/ncal.pas b/compiler/ncal.pas index eca982ca5d..60a9d0ea5f 100644 --- a/compiler/ncal.pas +++ b/compiler/ncal.pas @@ -2526,15 +2526,17 @@ type floatdef : begin location.loc:=LOC_FPUREGISTER; -{$ifdef m68k} - if (cs_fp_emulation in aktmoduleswitches) or - (tfloatdef(resulttype.def).typ=s32real) then +{$ifdef cpufpemu} + if (cs_fp_emulation in aktmoduleswitches) then registers32:=1 else +{$endif cpufpemu} +{$ifdef m68k} + if (tfloatdef(resulttype.def).typ=s32real) then + registers32:=1 + else +{$endif m68k} registersfpu:=1; -{$else not m68k} - registersfpu:=1; -{$endif not m68k} end; else begin @@ -2838,7 +2840,11 @@ begin end. { $Log$ - Revision 1.113 2002-11-27 20:04:38 peter + Revision 1.114 2002-12-06 16:56:58 peter + * only compile cs_fp_emulation support when cpufpuemu is defined + * define cpufpuemu for m68k only + + Revision 1.113 2002/11/27 20:04:38 peter * cdecl array of const fixes Revision 1.112 2002/11/27 15:33:46 peter diff --git a/compiler/options.pas b/compiler/options.pas index c2677fe114..04a1000acd 100644 --- a/compiler/options.pas +++ b/compiler/options.pas @@ -474,13 +474,15 @@ begin IllegalPara(opt); break; end; +{$ifdef cpufpemu} 'e' : begin If UnsetBool(More, j) then exclude(initmoduleswitches,cs_fp_emulation) Else include(initmoduleswitches,cs_fp_emulation); - end; + end; +{$endif cpufpemu} 'h' : begin val(copy(more,j+1,length(more)-j),heapsize,code); @@ -1887,7 +1889,11 @@ finalization end. { $Log$ - Revision 1.90 2002-11-30 23:14:55 carl + Revision 1.91 2002-12-06 16:56:58 peter + * only compile cs_fp_emulation support when cpufpuemu is defined + * define cpufpuemu for m68k only + + Revision 1.90 2002/11/30 23:14:55 carl - removed cs_fp_emulation checking for m68k, its now controled by a global switch + added powerpc/sparc/vis message options support diff --git a/compiler/paramgr.pas b/compiler/paramgr.pas index f41d7c7b2b..c55867624d 100644 --- a/compiler/paramgr.pas +++ b/compiler/paramgr.pas @@ -301,9 +301,11 @@ unit paramgr; floatdef : begin result.loc := LOC_FPUREGISTER; +{$ifdef cpufpemu} if cs_fp_emulation in aktmoduleswitches then result.register := accumulator else +{$endif cpufpemu} result.register := FPU_RESULT_REG; end; else @@ -412,7 +414,11 @@ end. { $Log$ - Revision 1.26 2002-11-27 20:04:09 peter + Revision 1.27 2002-12-06 16:56:58 peter + * only compile cs_fp_emulation support when cpufpuemu is defined + * define cpufpuemu for m68k only + + Revision 1.26 2002/11/27 20:04:09 peter * tvarsym.get_push_size replaced by paramanager.push_size Revision 1.25 2002/11/27 02:33:19 peter diff --git a/compiler/pmodules.pas b/compiler/pmodules.pas index 8621344bd8..356e8b52c4 100644 --- a/compiler/pmodules.pas +++ b/compiler/pmodules.pas @@ -441,6 +441,7 @@ implementation make_ref:=false; readconstdefs; make_ref:=true; +{$ifdef cpufpemu} { Floating point emulation unit? } if (cs_fp_emulation in aktmoduleswitches) then begin @@ -453,6 +454,7 @@ implementation inc(unitsym.refs); refsymtable.insert(unitsym); end; +{$endif cpufpemu} { Thread support unit? } if (cs_threading in aktmoduleswitches) then begin @@ -1453,7 +1455,11 @@ implementation end. { $Log$ - Revision 1.85 2002-11-30 21:32:24 carl + Revision 1.86 2002-12-06 16:56:58 peter + * only compile cs_fp_emulation support when cpufpuemu is defined + * define cpufpuemu for m68k only + + Revision 1.85 2002/11/30 21:32:24 carl + Add loading of softfpu in emulation mode + Correct routine call for softfpu * Extended type must also be defined even with softfpu diff --git a/compiler/psystem.pas b/compiler/psystem.pas index 627c54eeee..0248eab133 100644 --- a/compiler/psystem.pas +++ b/compiler/psystem.pas @@ -125,6 +125,7 @@ implementation vmtarraytype : ttype; vmtsymtable : tsymtable; begin +{$ifdef cpufpemu} { Normal types } if (cs_fp_emulation in aktmoduleswitches) then begin @@ -136,6 +137,7 @@ implementation addtype('Extended',pbestrealtype^); end else +{$endif cpufpemu} begin addtype('Single',s32floattype); addtype('Double',s64floattype); @@ -477,7 +479,11 @@ implementation end. { $Log$ - Revision 1.43 2002-11-30 21:32:26 carl + Revision 1.44 2002-12-06 16:56:59 peter + * only compile cs_fp_emulation support when cpufpuemu is defined + * define cpufpuemu for m68k only + + Revision 1.43 2002/11/30 21:32:26 carl + Add loading of softfpu in emulation mode + Correct routine call for softfpu * Extended type must also be defined even with softfpu