Browse Source

* use arraydef.elesize instead of elementtype.def.size

peter 25 years ago
parent
commit
836eafa712
2 changed files with 17 additions and 6 deletions
  1. 10 2
      compiler/cg386mem.pas
  2. 7 4
      compiler/cgai386.pas

+ 10 - 2
compiler/cg386mem.pas

@@ -377,7 +377,12 @@ implementation
             if p^.memindex then
             if p^.memindex then
              get_mul_size:=1
              get_mul_size:=1
             else
             else
-             get_mul_size:=p^.resulttype^.size;
+             begin
+               if (p^.left^.resulttype^.deftype=arraydef) then
+                get_mul_size:=parraydef(p^.left^.resulttype)^.elesize
+               else
+                get_mul_size:=p^.resulttype^.size;
+             end
           end;
           end;
 
 
           procedure calc_emit_mul;
           procedure calc_emit_mul;
@@ -942,7 +947,10 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.73  2000-03-19 11:55:08  peter
+  Revision 1.74  2000-04-01 14:18:44  peter
+    * use arraydef.elesize instead of elementtype.def.size
+
+  Revision 1.73  2000/03/19 11:55:08  peter
     * fixed temp ansi handling within array constructor
     * fixed temp ansi handling within array constructor
 
 
   Revision 1.72  2000/02/18 20:53:14  pierre
   Revision 1.72  2000/02/18 20:53:14  pierre

+ 7 - 4
compiler/cgai386.pas

@@ -2879,7 +2879,7 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
 
 
               exprasmlist^.concat(new(paicpu,
               exprasmlist^.concat(new(paicpu,
                 op_const_reg(A_IMUL,S_L,
                 op_const_reg(A_IMUL,S_L,
-                parraydef(pvarsym(p)^.vartype.def)^.elementtype.def^.size,R_EDI)));
+                parraydef(pvarsym(p)^.vartype.def)^.elesize,R_EDI)));
 {$ifndef NOTARGETWIN32}
 {$ifndef NOTARGETWIN32}
               { windows guards only a few pages for stack growing, }
               { windows guards only a few pages for stack growing, }
               { so we have to access every page first              }
               { so we have to access every page first              }
@@ -2921,7 +2921,7 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
 
 
                    exprasmlist^.concat(new(paicpu,
                    exprasmlist^.concat(new(paicpu,
                      op_const_reg(A_IMUL,S_L,
                      op_const_reg(A_IMUL,S_L,
-                     parraydef(pvarsym(p)^.vartype.def)^.elementtype.def^.size,R_EDI)));
+                     parraydef(pvarsym(p)^.vartype.def)^.elesize,R_EDI)));
                 end
                 end
               else
               else
 {$endif NOTARGETWIN32}
 {$endif NOTARGETWIN32}
@@ -2960,7 +2960,7 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
                 op_reg(A_INC,S_L,R_ECX)));
                 op_reg(A_INC,S_L,R_ECX)));
 
 
               { calculate size }
               { calculate size }
-              len:=parraydef(pvarsym(p)^.vartype.def)^.elementtype.def^.size;
+              len:=parraydef(pvarsym(p)^.vartype.def)^.elesize;
               opsize:=S_B;
               opsize:=S_B;
               if (len and 3)=0 then
               if (len and 3)=0 then
                begin
                begin
@@ -3855,7 +3855,10 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.91  2000-03-31 22:56:46  pierre
+  Revision 1.92  2000-04-01 14:18:45  peter
+    * use arraydef.elesize instead of elementtype.def.size
+
+  Revision 1.91  2000/03/31 22:56:46  pierre
     * fix the handling of value parameters in cdecl function
     * fix the handling of value parameters in cdecl function
 
 
   Revision 1.90  2000/03/28 22:31:46  pierre
   Revision 1.90  2000/03/28 22:31:46  pierre