Преглед изворни кода

* Some more R_NO changes
* Preventive code to loadref added

daniel пре 22 година
родитељ
комит
cdb8a15f4a
4 измењених фајлова са 31 додато и 9 уклоњено
  1. 7 1
      compiler/aasmtai.pas
  2. 7 2
      compiler/ncgset.pas
  3. 10 4
      compiler/ncgutil.pas
  4. 7 2
      compiler/symsym.pas

+ 7 - 1
compiler/aasmtai.pas

@@ -1535,6 +1535,8 @@ implementation
 
     procedure taicpu_abstract.loadref(opidx:longint;const r:treference);
       begin
+        if (r.base.enum=R_NO) or (r.index.enum=R_NO) then
+          internalerror(200308192);
         if opidx>=ops then
          ops:=opidx+1;
         with oper[opidx] do
@@ -1899,7 +1901,11 @@ implementation
 end.
 {
   $Log$
-  Revision 1.33  2003-08-17 20:47:47  daniel
+  Revision 1.34  2003-08-20 20:29:06  daniel
+    * Some more R_NO changes
+    * Preventive code to loadref added
+
+  Revision 1.33  2003/08/17 20:47:47  daniel
     * Notranslation changed into -sr functionality
 
   Revision 1.32  2003/08/17 16:59:20  jonas

+ 7 - 2
compiler/ncgset.pas

@@ -332,7 +332,8 @@ implementation
             { how much have we already substracted from the x in the }
             { "x in [y..z]" expression                               }
             adjustment := 0;
-            hr.enum := R_NO;
+            hr.enum:=R_INTREGISTER;
+            hr.number:=NR_NO;
 
             for i:=1 to numparts do
              if setparts[i].range then
@@ -1080,7 +1081,11 @@ begin
 end.
 {
   $Log$
-  Revision 1.46  2003-07-23 11:02:53  jonas
+  Revision 1.47  2003-08-20 20:29:06  daniel
+    * Some more R_NO changes
+    * Preventive code to loadref added
+
+  Revision 1.46  2003/07/23 11:02:53  jonas
     * final (?) fix to in-code
 
   Revision 1.45  2003/07/20 18:03:27  jonas

+ 10 - 4
compiler/ncgutil.pas

@@ -426,7 +426,8 @@ implementation
              { if the previous was 64bit release the high register }
              begin
                rg.ungetregisterint(list,l.registerhigh);
-               l.registerhigh.enum:=R_NO;
+               l.registerhigh.enum:=R_INTREGISTER;
+               l.registerhigh.number:=NR_NO;
              end;
             if l.loc=LOC_REGISTER then
               rg.ungetregisterint(list,l.register);
@@ -443,7 +444,8 @@ implementation
               if l.size in [OS_64,OS_S64] then
                begin
                  rg.ungetregisterint(list,l.registerhigh);
-                 l.registerhigh.enum:=R_NO;
+                 l.registerhigh.enum:=R_INTREGISTER;
+                 l.registerhigh.number:=NR_NO;
                end;
               hregister:=l.register;
             end
@@ -1054,7 +1056,7 @@ implementation
            (tvarsym(p).varspez=vs_value) and
            (paramanager.push_addr_param(tvarsym(p).vartype.def,current_procinfo.procdef.proccalloption)) then
          begin
-           loadref := tvarsym(p).reg.enum = R_NO;
+           loadref := (tvarsym(p).reg.enum=R_NO) or ((Tvarsym(p).reg.enum=R_INTREGISTER) and (Tvarsym(p).reg.number=NR_NO));
            if (loadref) then
              reference_reset_base(href1,current_procinfo.framepointer,tvarsym(p).adjusted_address)
            else
@@ -2077,7 +2079,11 @@ implementation
 end.
 {
   $Log$
-  Revision 1.136  2003-08-20 17:48:49  peter
+  Revision 1.137  2003-08-20 20:29:06  daniel
+    * Some more R_NO changes
+    * Preventive code to loadref added
+
+  Revision 1.136  2003/08/20 17:48:49  peter
     * fixed stackalloc to not allocate localst.datasize twice
     * order of stackalloc code fixed for implicit init/final
 

+ 7 - 2
compiler/symsym.pas

@@ -1666,7 +1666,8 @@ implementation
       begin
          inherited loadsym(ppufile);
          typ:=varsym;
-         reg.enum:=R_NO;
+         reg.enum:=R_INTREGISTER;
+         reg.number:=NR_NO;
          refs := 0;
          varstate:=vs_used;
          varspez:=tvarspez(ppufile.getbyte);
@@ -2668,7 +2669,11 @@ implementation
 end.
 {
   $Log$
-  Revision 1.112  2003-07-05 22:41:59  peter
+  Revision 1.113  2003-08-20 20:29:06  daniel
+    * Some more R_NO changes
+    * Preventive code to loadref added
+
+  Revision 1.112  2003/07/05 22:41:59  peter
     * check if owner.defowner is valid when checking private/protected
 
   Revision 1.111  2003/07/04 22:41:41  pierre