Browse Source

* more powerpc fixes
+ dummy tcgvecnode

florian 23 years ago
parent
commit
463b355ba3
3 changed files with 82 additions and 22 deletions
  1. 7 16
      compiler/i386/n386mem.pas
  2. 48 3
      compiler/ncgmem.pas
  3. 27 3
      compiler/powerpc/cgcpu.pas

+ 7 - 16
compiler/i386/n386mem.pas

@@ -38,7 +38,7 @@ interface
           procedure pass_2;override;
        end;
 
-       ti386vecnode = class(tvecnode)
+       ti386vecnode = class(tcgvecnode)
           procedure pass_2;override;
        end;
 
@@ -101,20 +101,7 @@ implementation
 
     procedure ti386vecnode.pass_2;
 
-          function get_mul_size:longint;
-          begin
-            if nf_memindex in flags then
-             get_mul_size:=1
-            else
-             begin
-               if (left.resulttype.def.deftype=arraydef) then
-                get_mul_size:=tarraydef(left.resulttype.def).elesize
-               else
-                get_mul_size:=resulttype.def.size;
-             end
-          end;
-
-          procedure calc_emit_mul;
+       procedure calc_emit_mul;
           var
              l1,l2 : longint;
           begin
@@ -520,7 +507,11 @@ begin
 end.
 {
   $Log$
-  Revision 1.38  2002-07-20 11:58:04  florian
+  Revision 1.39  2002-07-28 21:34:31  florian
+    * more powerpc fixes
+    + dummy tcgvecnode
+
+  Revision 1.38  2002/07/20 11:58:04  florian
     * types.pas renamed to defbase.pas because D6 contains a types
       unit so this would conflicts if D6 programms are compiled
     + Willamette/SSE2 instructions to assembler added

+ 48 - 3
compiler/ncgmem.pas

@@ -30,7 +30,7 @@ unit ncgmem;
 interface
 
     uses
-      node,nmem;
+      node,nmem,cpuinfo;
 
     type
        tcgloadvmtnode = class(tloadvmtnode)
@@ -69,6 +69,13 @@ interface
           procedure pass_2;override;
        end;
 
+       tcgvecnode = class(tvecnode)
+         function get_mul_size : aword;
+         procedure second_wideansistring;virtual;
+         procedure second_dynamicarray;virtual;
+         procedure pass_2;override;
+       end;
+
 implementation
 
     uses
@@ -78,7 +85,7 @@ implementation
       aasmbase,aasmtai,aasmcpu,
       cgbase,pass_2,
       nld,ncon,nadd,
-      cpuinfo,cpubase,cpupara,
+      cpubase,cpupara,
       cgobj,cgcpu,
       tgobj,rgobj
 {$ifdef GDB}
@@ -453,6 +460,39 @@ implementation
             end;
        end;
 
+
+{*****************************************************************************
+                            TCGVECNODE
+*****************************************************************************}
+
+     function tcgvecnode.get_mul_size : aword;
+       begin
+         if nf_memindex in flags then
+          get_mul_size:=1
+         else
+          begin
+            if (left.resulttype.def.deftype=arraydef) then
+             get_mul_size:=tarraydef(left.resulttype.def).elesize
+            else
+             get_mul_size:=resulttype.def.size;
+          end
+       end;
+
+     procedure tcgvecnode.second_wideansistring;
+       begin
+       end;
+
+     procedure tcgvecnode.second_dynamicarray;
+       begin
+       end;
+
+     procedure tcgvecnode.pass_2;
+       begin
+          {!!!!}
+          writeln('FIX ME: tcgvecnode.pass_2');
+       end;
+
+
 begin
    cloadvmtnode:=tcgloadvmtnode;
    chnewnode:=tcghnewnode;
@@ -463,10 +503,15 @@ begin
    csubscriptnode:=tcgsubscriptnode;
    cselfnode:=tcgselfnode;
    cwithnode:=tcgwithnode;
+   cvecnode:=tcgvecnode;
 end.
 {
   $Log$
-  Revision 1.17  2002-07-11 14:41:28  florian
+  Revision 1.18  2002-07-28 21:34:31  florian
+    * more powerpc fixes
+    + dummy tcgvecnode
+
+  Revision 1.17  2002/07/11 14:41:28  florian
     * start of the new generic parameter handling
 
   Revision 1.16  2002/07/07 09:52:32  florian

+ 27 - 3
compiler/powerpc/cgcpu.pas

@@ -191,6 +191,15 @@ const
                a_load_reg_ref(list,size,tmpreg,ref);
                free_scratch_reg(list,tmpreg);
             end;
+          LOC_FPUREGISTER:
+            case size of
+               OS_32:
+                 a_loadfpu_ref_reg(list,OS_F32,r,locpara.register);
+               OS_64:
+                 a_loadfpu_ref_reg(list,OS_F64,r,locpara.register);
+               else
+                 internalerror(2002072801);
+            end;
           else
             internalerror(2002081103);
         end;
@@ -363,8 +372,19 @@ const
          op: tasmop;
          ref2: treference;
        begin
-         if not(size in [OS_F32,OS_F64]) then
-           internalerror(200201121);
+          { several functions call this procedure with OS_32 or OS_64 }
+          { so this makes life easier (FK)                            }
+          case size of
+             OS_32,OS_F32:
+               size:=OS_F32;
+             OS_64,OS_F64:
+               size:=OS_F64;
+             else
+               begin
+                  writeln(ord(size));
+                  internalerror(200201121);
+               end;
+          end;
          ref2 := ref;
          fixref(list,ref2);
          op := fpuloadinstr[size,ref2.index <> R_NO,false];
@@ -1393,7 +1413,11 @@ begin
 end.
 {
   $Log$
-  Revision 1.27  2002-07-28 16:01:59  jonas
+  Revision 1.28  2002-07-28 21:34:31  florian
+    * more powerpc fixes
+    + dummy tcgvecnode
+
+  Revision 1.27  2002/07/28 16:01:59  jonas
     + tcg64fppc.a_op64_const_reg_reg() and tcg64fppc.a_op64_reg_reg_reg()
     * several fixes, most notably in a_load_reg_reg(): it didn't do any
       conversion from smaller to larger sizes or vice versa