Browse Source

+ floatdef support for array of const

peter 27 years ago
parent
commit
040a2cf89f
2 changed files with 24 additions and 5 deletions
  1. 19 3
      compiler/cg386ld.pas
  2. 5 2
      compiler/tcld.pas

+ 19 - 3
compiler/cg386ld.pas

@@ -608,9 +608,22 @@ implementation
       end;
 
 
-    procedure emit_lea_loc_ref(const t:tlocation;const ref:treference);
+    procedure emit_lea_tree_ref(const p:ptree;const ref:treference);
+      var
+        href : treference;
+        t    : tlocation;
       begin
+        t:=p^.location;
         case t.loc of
+               LOC_FPU : begin
+                           reset_reference(href);
+                           gettempofsizereference(10,href);
+                           floatstore(pfloatdef(p^.resulttype)^.typ,href);
+                           exprasmlist^.concat(new(pai386,op_ref_reg(A_LEA,S_L,
+                             newreference(href),R_EDI)));
+                           exprasmlist^.concat(new(pai386,op_reg_ref(A_MOV,S_L,
+                             R_EDI,newreference(ref))));
+                         end;
                LOC_MEM,
          LOC_REFERENCE : begin
                            if t.reference.isintvalue then
@@ -697,7 +710,7 @@ implementation
            inc(href.offset,4);
            { write changing field update href to the next element }
            if vaddr then
-            emit_lea_loc_ref(hp^.left^.location,href)
+            emit_lea_tree_ref(hp^.left,href)
            else
             emit_mov_loc_ref(hp^.left^.location,href);
            inc(href.offset,4);
@@ -710,7 +723,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.20  1998-09-24 14:26:03  peter
+  Revision 1.21  1998-09-28 11:07:39  peter
+    + floatdef support for array of const
+
+  Revision 1.20  1998/09/24 14:26:03  peter
     * updated for new tvarrec
 
   Revision 1.19  1998/09/23 17:49:59  peter

+ 5 - 2
compiler/tcld.pas

@@ -349,7 +349,7 @@ implementation
               firstpass(hp^.left);
               case hp^.left^.resulttype^.deftype of
                floatdef : begin
-                            gentypeconvnode(hp^.left,s80floatdef);
+                            hp^.left:=gentypeconvnode(hp^.left,s80floatdef);
                             firstpass(hp^.left);
                           end;
               end;
@@ -399,7 +399,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.3  1998-09-27 10:16:27  florian
+  Revision 1.4  1998-09-28 11:07:40  peter
+    + floatdef support for array of const
+
+  Revision 1.3  1998/09/27 10:16:27  florian
     * type casts pchar<->ansistring fixed
     * ansistring[..] calls does now an unique call