Browse Source

* fixed 64bit comparisons

Jonas Maebe 23 years ago
parent
commit
7a8429a4fe
1 changed files with 15 additions and 12 deletions
  1. 15 12
      compiler/powerpc/nppcadd.pas

+ 15 - 12
compiler/powerpc/nppcadd.pas

@@ -38,8 +38,8 @@ interface
           procedure clear_left_right(cmpop: boolean);
           function  getresflags : tresflags;
           procedure emit_compare(unsigned : boolean);
-          procedure second_addboolean;
           procedure second_addfloat;
+          procedure second_addboolean;
           procedure second_addsmallset;
 {$ifdef SUPPORT_MMX}
           procedure second_addmmx;
@@ -54,11 +54,12 @@ interface
       cutils,verbose,globals,
       symconst,symdef,paramgr,
       aasmbase,aasmtai,aasmcpu,defbase,htypechk,
-      cgbase,cpuinfo,pass_2,regvars,
+      cgbase,cpuinfo,pass_1,pass_2,regvars,
       cpupara,
       ncon,nset,
       cga,ncgutil,tgobj,rgobj,rgcpu,cgobj,cg64f32;
 
+
 {*****************************************************************************
                                   Helpers
 *****************************************************************************}
@@ -756,9 +757,7 @@ interface
                 end;
               unequaln:
                 begin
-                  nodetype := equaln;
                   cg.a_jmp_flags(exprasmlist,getresflags,truelabel);
-                  nodetype := unequaln;
                 end;
            end;
         end;
@@ -832,13 +831,6 @@ interface
             internalerror(2002072705);
         end;
 
-        { set result location }
-        if not cmpop then
-          location_reset(location,LOC_REGISTER,def_cgsize(resulttype.def))
-         else
-          location_reset(location,LOC_JUMP,OS_NO);
-
-
         load_left_right(cmpop,(cs_check_overflow in aktlocalswitches) and
             (nodetype in [addn,subn]));
 
@@ -921,6 +913,14 @@ interface
             cg.g_overflowcheck(exprasmlist,self);
           end;
 
+        { set result location }
+        { (emit_compare sets it to LOC_FLAGS for compares, so set the }
+        {  real location only now) (JM)                               }
+        if not cmpop then
+          location_reset(location,LOC_REGISTER,def_cgsize(resulttype.def))
+         else
+          location_reset(location,LOC_JUMP,OS_NO);
+
         clear_left_right(cmpop);
 
       end;
@@ -1303,7 +1303,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.13  2002-08-17 22:09:47  florian
+  Revision 1.14  2002-08-31 19:26:20  jonas
+    * fixed 64bit comparisons
+
+  Revision 1.13  2002/08/17 22:09:47  florian
     * result type handling in tcgcal.pass_2 overhauled
     * better tnode.dowrite
     * some ppc stuff fixed