瀏覽代碼

* final (?) fix to in-code

Jonas Maebe 22 年之前
父節點
當前提交
af784cfb1e
共有 1 個文件被更改,包括 8 次插入11 次删除
  1. 8 11
      compiler/ncgset.pas

+ 8 - 11
compiler/ncgset.pas

@@ -549,15 +549,11 @@ implementation
                 end
                 end
                else
                else
                 begin
                 begin
-                  if (left.location.loc in [LOC_REGISTER,LOC_CREGISTER]) then
-                    pleftreg:=rg.makeregsize(left.location.register,OS_INT)
-                  else
-                    pleftreg:=rg.getregisterint(exprasmlist,OS_INT);
-                  cg.a_load_loc_reg(exprasmlist,OS_INT,left.location,pleftreg);
+                  location_force_reg(exprasmlist,left.location,OS_INT,true);
+                  pleftreg := left.location.register;
 
 
                   location_freetemp(exprasmlist,left.location);
                   location_freetemp(exprasmlist,left.location);
                   hr := rg.getaddressregister(exprasmlist);
                   hr := rg.getaddressregister(exprasmlist);
-                  location_release(exprasmlist,left.location);
                   cg.a_op_const_reg_reg(exprasmlist,OP_SHR,OS_32,5,pleftreg,hr);
                   cg.a_op_const_reg_reg(exprasmlist,OP_SHR,OS_32,5,pleftreg,hr);
                   cg.a_op_const_reg(exprasmlist,OP_SHL,OS_32,2,hr);
                   cg.a_op_const_reg(exprasmlist,OP_SHL,OS_32,2,hr);
 
 
@@ -576,10 +572,8 @@ implementation
                     end;
                     end;
                   reference_release(exprasmlist,href);
                   reference_release(exprasmlist,href);
                   cg.a_load_ref_reg(exprasmlist,OS_32,OS_32,href,location.register);
                   cg.a_load_ref_reg(exprasmlist,OS_32,OS_32,href,location.register);
-                  if left.location.loc = LOC_CREGISTER then
-                    hr := rg.getregisterint(exprasmlist,OS_32)
-                  else
-                    hr := pleftreg;
+                  rg.ungetregisterint(exprasmlist,pleftreg);
+                  hr := rg.getregisterint(exprasmlist,OS_32);
                   cg.a_op_const_reg_reg(exprasmlist,OP_AND,OS_32,31,pleftreg,hr);
                   cg.a_op_const_reg_reg(exprasmlist,OP_AND,OS_32,31,pleftreg,hr);
                   cg.a_op_reg_reg(exprasmlist,OP_SHR,OS_32,hr,location.register);
                   cg.a_op_reg_reg(exprasmlist,OP_SHR,OS_32,hr,location.register);
                   rg.ungetregisterint(exprasmlist,hr);
                   rg.ungetregisterint(exprasmlist,hr);
@@ -1086,7 +1080,10 @@ begin
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.45  2003-07-20 18:03:27  jonas
+  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
     * fixed bug in tcginnode.pass_2
     * fixed bug in tcginnode.pass_2
 
 
   Revision 1.44  2003/07/06 14:28:04  jonas
   Revision 1.44  2003/07/06 14:28:04  jonas