Browse Source

* shr and div fixed

peter 22 years ago
parent
commit
3f97c26b4b
1 changed files with 21 additions and 22 deletions
  1. 21 22
      compiler/sparc/ncpumat.pas

+ 21 - 22
compiler/sparc/ncpumat.pas

@@ -88,8 +88,7 @@ implementation
          location_copy(location,left.location);
 
          { put numerator in register }
-         location_force_reg(exprasmlist,left.location,
-           def_cgsize(left.resulttype.def),true);
+         location_force_reg(exprasmlist,left.location,def_cgsize(left.resulttype.def),true);
          location_copy(location,left.location);
          numerator := location.register;
          resultreg := location.register;
@@ -141,27 +140,24 @@ implementation
              { the overflow flag (JM)                                       }
              op := divops[is_signed(right.resulttype.def),
                           cs_check_overflow in aktlocalswitches];
-             exprasmlist.concat(taicpu.op_reg_reg_reg(op,resultreg,numerator,
-               divider));
-
-           if (nodetype = modn) then
-             begin
-               exprasmlist.concat(taicpu.op_reg_reg_reg(A_SMUL,resultreg,
-                 divider,resultreg));
+             exprasmlist.concat(taicpu.op_reg_reg_reg(op,numerator,divider,resultreg));
+
+             if (nodetype = modn) then
+               begin
+                 exprasmlist.concat(taicpu.op_reg_reg_reg(A_SMUL,resultreg,divider,resultreg));
+                 rg.UnGetRegisterInt(exprasmlist,divider);
+                 exprasmlist.concat(taicpu.op_reg_reg_reg(A_SUB,location.register,numerator,resultreg));
+  {$ifdef newra}
+                 rg.ungetregisterint(exprasmlist,resultreg);
+  {$else}
+                 cg.free_scratch_reg(exprasmlist,resultreg);
+  {$endif}
+                 resultreg := location.register;
+               end
+             else
                rg.UnGetRegisterInt(exprasmlist,divider);
-               exprasmlist.concat(taicpu.op_reg_reg_reg(A_SUB,location.register,
-                 numerator,resultreg));
-{$ifdef newra}
-               rg.ungetregisterint(exprasmlist,resultreg);
-{$else}
-               cg.free_scratch_reg(exprasmlist,resultreg);
-{$endif}
-               resultreg := location.register;
-             end
-           else
-             rg.UnGetRegisterInt(exprasmlist,divider);
            end;
-       { free used registers }
+        { free used registers }
         if numerator.number <> resultreg.number then
           rg.ungetregisterint(exprasmlist,numerator);
         { set result location }
@@ -357,7 +353,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.11  2003-06-12 16:43:07  peter
+  Revision 1.12  2003-07-06 22:09:32  peter
+    * shr and div fixed
+
+  Revision 1.11  2003/06/12 16:43:07  peter
     * newra compiles for sparc
 
   Revision 1.10  2003/06/04 20:59:37  mazen