Browse Source

* fixed broken PowerPC compiler

florian 22 years ago
parent
commit
34a91d9171
4 changed files with 53 additions and 5 deletions
  1. 33 1
      compiler/cgobj.pas
  2. 10 1
      compiler/ncgutil.pas
  3. 5 2
      compiler/powerpc/cpupara.pas
  4. 5 1
      compiler/powerpc/nppcmat.pas

+ 33 - 1
compiler/cgobj.pas

@@ -203,6 +203,7 @@ unit cgobj;
           procedure a_loadfpu_reg_ref(list: taasmoutput; size: tcgsize; reg: tregister; const ref: treference); virtual; abstract;
           procedure a_loadfpu_reg_ref(list: taasmoutput; size: tcgsize; reg: tregister; const ref: treference); virtual; abstract;
           procedure a_loadfpu_loc_reg(list: taasmoutput; const loc: tlocation; const reg: tregister);
           procedure a_loadfpu_loc_reg(list: taasmoutput; const loc: tlocation; const reg: tregister);
           procedure a_loadfpu_reg_loc(list: taasmoutput; size: tcgsize; const reg: tregister; const loc: tlocation);
           procedure a_loadfpu_reg_loc(list: taasmoutput; size: tcgsize; const reg: tregister; const loc: tlocation);
+          procedure a_paramfpu_reg(list : taasmoutput;size : tcgsize;const r : tregister;const locpara : tparalocation);virtual;
 
 
           { vector register move instructions }
           { vector register move instructions }
           procedure a_loadmm_reg_reg(list: taasmoutput; reg1, reg2: tregister); virtual; abstract;
           procedure a_loadmm_reg_reg(list: taasmoutput; reg1, reg2: tregister); virtual; abstract;
@@ -886,6 +887,34 @@ unit cgobj;
       end;
       end;
 
 
 
 
+    procedure tcg.a_paramfpu_reg(list : taasmoutput;size : tcgsize;const r : tregister;const locpara : tparalocation);
+
+      var
+         ref : treference;
+         t : Tregister;
+
+      begin
+         case locpara.loc of
+            LOC_FPUREGISTER,LOC_CFPUREGISTER:
+              a_loadfpu_reg_reg(list,r,locpara.register);
+            LOC_REFERENCE,LOC_CREFERENCE:
+              begin
+                 if locpara.sp_fixup<>0 then
+                   begin
+                      t.enum:=stack_pointer_reg;
+                      a_op_const_reg(list,OP_ADD,locpara.sp_fixup,t);
+                   end;
+                 reference_reset(ref);
+                 ref.base:=locpara.reference.index;
+                 ref.offset:=locpara.reference.offset;
+                 a_loadfpu_reg_ref(list,size,r,ref);
+              end
+            else
+              internalerror(2002071004);
+         end;
+      end;
+
+
     procedure tcg.a_op_const_ref(list : taasmoutput; Op: TOpCG; size: TCGSize; a: AWord; const ref: TReference);
     procedure tcg.a_op_const_ref(list : taasmoutput; Op: TOpCG; size: TCGSize; a: AWord; const ref: TReference);
 
 
       var
       var
@@ -1652,7 +1681,10 @@ finalization
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.70  2003-01-08 18:43:56  daniel
+  Revision 1.71  2003-01-09 20:41:10  florian
+    * fixed broken PowerPC compiler
+
+  Revision 1.70  2003/01/08 18:43:56  daniel
    * Tregister changed into a record
    * Tregister changed into a record
 
 
   Revision 1.69  2002/12/24 15:56:50  peter
   Revision 1.69  2002/12/24 15:56:50  peter

+ 10 - 1
compiler/ncgutil.pas

@@ -738,8 +738,10 @@ implementation
              LOC_FPUREGISTER,
              LOC_FPUREGISTER,
              LOC_CFPUREGISTER:
              LOC_CFPUREGISTER:
                begin
                begin
+{$ifdef i386}
                   size:=align(tfloatdef(p.resulttype.def).size,alignment);
                   size:=align(tfloatdef(p.resulttype.def).size,alignment);
                   inc(pushedparasize,size);
                   inc(pushedparasize,size);
+
                   if calloption<>pocall_inline then
                   if calloption<>pocall_inline then
                    cg.g_stackpointer_alloc(exprasmlist,size);
                    cg.g_stackpointer_alloc(exprasmlist,size);
 {$ifdef GDB}
 {$ifdef GDB}
@@ -757,6 +759,10 @@ implementation
 
 
                   cg.a_loadfpu_reg_ref(exprasmlist,
                   cg.a_loadfpu_reg_ref(exprasmlist,
                     def_cgsize(p.resulttype.def),p.location.register,href);
                     def_cgsize(p.resulttype.def),p.location.register,href);
+{$else i386}
+                  cg.a_paramfpu_reg(exprasmlist,def_cgsize(p.resulttype.def),p.location.register,locpara);
+{$endif i386}
+
                end;
                end;
              LOC_REFERENCE,
              LOC_REFERENCE,
              LOC_CREFERENCE :
              LOC_CREFERENCE :
@@ -1954,7 +1960,10 @@ function returns in a register and the caller receives it in an other one}
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.73  2003-01-08 18:43:56  daniel
+  Revision 1.74  2003-01-09 20:41:10  florian
+    * fixed broken PowerPC compiler
+
+  Revision 1.73  2003/01/08 18:43:56  daniel
    * Tregister changed into a record
    * Tregister changed into a record
 
 
   Revision 1.72  2002/12/29 23:51:43  florian
   Revision 1.72  2002/12/29 23:51:43  florian

+ 5 - 2
compiler/powerpc/cpupara.pas

@@ -227,7 +227,7 @@ unit cpupara;
                       else
                       else
                          begin
                          begin
                             {!!!!!!!}
                             {!!!!!!!}
-                             hp.paraloc.size:=def_cgsize(hp.paratype.def);
+                            hp.paraloc.size:=def_cgsize(hp.paratype.def);
                             internalerror(2002071004);
                             internalerror(2002071004);
                         end;
                         end;
                    end;
                    end;
@@ -299,7 +299,10 @@ begin
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.20  2003-01-09 11:22:14  olle
+  Revision 1.21  2003-01-09 20:41:10  florian
+    * fixed broken PowerPC compiler
+
+  Revision 1.20  2003/01/09 11:22:14  olle
     * made powerpc compiler compile after Daniels Tregister modification
     * made powerpc compiler compile after Daniels Tregister modification
 
 
   Revision 1.19  2003/01/08 18:43:58  daniel
   Revision 1.19  2003/01/08 18:43:58  daniel

+ 5 - 1
compiler/powerpc/nppcmat.pas

@@ -456,6 +456,7 @@ implementation
                   hl:=truelabel;
                   hl:=truelabel;
                   truelabel:=falselabel;
                   truelabel:=falselabel;
                   falselabel:=hl;
                   falselabel:=hl;
+                  location.loc:=LOC_JUMP;
                 end;
                 end;
               LOC_FLAGS :
               LOC_FLAGS :
                 begin
                 begin
@@ -505,7 +506,10 @@ begin
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.21  2003-01-08 18:43:58  daniel
+  Revision 1.22  2003-01-09 20:41:10  florian
+    * fixed broken PowerPC compiler
+
+  Revision 1.21  2003/01/08 18:43:58  daniel
    * Tregister changed into a record
    * Tregister changed into a record
 
 
   Revision 1.20  2002/11/25 17:43:28  peter
   Revision 1.20  2002/11/25 17:43:28  peter