Kaynağa Gözat

+ Int64/QWord stuff for array of const added

florian 25 yıl önce
ebeveyn
işleme
795a06b4f2
3 değiştirilmiş dosya ile 48 ekleme ve 6 silme
  1. 18 3
      compiler/cg386ld.pas
  2. 24 1
      compiler/cgai386.pas
  3. 6 2
      compiler/tcld.pas

+ 18 - 3
compiler/cg386ld.pas

@@ -831,6 +831,7 @@ implementation
         vtInterface  = 14;
         vtWideString = 15;
         vtInt64      = 16;
+        vtQWord      = 17;
 
     procedure secondarrayconstruct(var p : ptree);
       var
@@ -882,8 +883,19 @@ implementation
                    enumdef,
                    orddef :
                      begin
-                       if (lt^.deftype=enumdef) or
-                          is_integer(lt) then
+                       if is_64bitint(lt) then
+                         begin
+                            case porddef(lt)^.typ of
+                               s64bit:
+                                 vtype:=vtInt64;
+                               u64bit:
+                                 vtype:=vtQWord;
+                            end;
+                            freetemp:=false;
+                            vaddr:=true;
+                         end
+                       else if (lt^.deftype=enumdef) or
+                         is_integer(lt) then
                          vtype:=vtInteger
                        else
                          if is_boolean(lt) then
@@ -988,7 +1000,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.106  2000-04-03 12:23:02  pierre
+  Revision 1.107  2000-05-14 18:50:35  florian
+    + Int64/QWord stuff for array of const added
+
+  Revision 1.106  2000/04/03 12:23:02  pierre
    * fix for bug 909
 
   Revision 1.105  2000/03/19 11:55:08  peter

+ 24 - 1
compiler/cgai386.pas

@@ -791,6 +791,10 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
 
 
     procedure emit_to_mem(var p:ptree);
+
+      var
+         r : treference;
+
       begin
         case p^.location.loc of
                LOC_FPU : begin
@@ -800,6 +804,22 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
                            {  This can't be never a l-value! (FK)
                               p^.location.loc:=LOC_REFERENCE; }
                          end;
+               LOC_REGISTER:
+                 begin
+                    if is_64bitint(p^.resulttype) then
+                      begin
+                         gettempofsizereference(8,r);
+                         emit_reg_ref(A_MOV,S_L,p^.location.registerlow,
+                           newreference(r));
+                         inc(r.offset,4);
+                         emit_reg_ref(A_MOV,S_L,p^.location.registerhigh,
+                           newreference(r));
+                         dec(r.offset,4);
+                         p^.location.reference:=r;
+                      end
+                    else
+                      internalerror(1405001);
+                 end;
                LOC_MEM,
          LOC_REFERENCE : ;
          LOC_CFPUREGISTER : begin
@@ -3946,7 +3966,10 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
 end.
 {
   $Log$
-  Revision 1.101  2000-05-09 14:17:33  pierre
+  Revision 1.102  2000-05-14 18:49:04  florian
+    + Int64/QWord stuff for array of const added
+
+  Revision 1.101  2000/05/09 14:17:33  pierre
    * handle interrupt function correctly
 
   Revision 1.100  2000/05/04 09:29:31  pierre

+ 6 - 2
compiler/tcld.pas

@@ -393,7 +393,8 @@ implementation
                      end;
                    orddef :
                      begin
-                       if is_integer(hp^.left^.resulttype) then
+                       if is_integer(hp^.left^.resulttype) and
+                         not(is_64bitint(hp^.left^.resulttype)) then
                         begin
                           hp^.left:=gentypeconvnode(hp^.left,s32bitdef);
                           firstpass(hp^.left);
@@ -496,7 +497,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.64  2000-04-25 14:43:36  jonas
+  Revision 1.65  2000-05-14 18:48:24  florian
+    + Int64/QWord stuff for array of const added
+
+  Revision 1.64  2000/04/25 14:43:36  jonas
     - disabled "string_var := string_var + ... " and "string_var + char_var"
       optimizations (were only active with -dnewoptimizations) because of
       several internal issues