Browse Source

* fixed int64 regvar bug in location_force_register

Jonas Maebe 20 years ago
parent
commit
7c9d8d8872
1 changed files with 11 additions and 4 deletions
  1. 11 4
      compiler/ncgutil.pas

+ 11 - 4
compiler/ncgutil.pas

@@ -459,22 +459,26 @@ implementation
            else
             begin
               { 64bit to 64bit }
-              if (l.loc=LOC_REGISTER) or
-                 ((l.loc=LOC_CREGISTER) and maybeconst) then
+              if ((l.loc=LOC_CREGISTER) and maybeconst) then
                begin
                  hregister:=l.register64.reglo;
                  hregisterhi:=l.register64.reghi;
+                 const_location := true;
                end
               else
                begin
                  hregister:=cg.getintregister(list,OS_INT);
                  hregisterhi:=cg.getintregister(list,OS_INT);
+                 const_location := false;
                end;
               hreg64.reglo:=hregister;
               hreg64.reghi:=hregisterhi;
               { load value in new register }
               cg64.a_load64_loc_reg(list,l,hreg64);
-              location_reset(l,LOC_REGISTER,dst_size);
+              if not const_location then
+                location_reset(l,LOC_REGISTER,dst_size)
+              else
+                location_reset(l,LOC_CREGISTER,dst_size);
               l.register64.reglo:=hregister;
               l.register64.reghi:=hregisterhi;
             end;
@@ -2286,7 +2290,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.247  2004-12-05 12:28:11  peter
+  Revision 1.248  2004-12-11 01:03:01  jonas
+    * fixed int64 regvar bug in location_force_register
+
+  Revision 1.247  2004/12/05 12:28:11  peter
     * procvar handling for tp procvar mode fixed
     * proc to procvar moved from addrnode to typeconvnode
     * inlininginfo is now allocated only for inline routines that