Browse Source

* fixed wrong assembler with in-node

peter 26 years ago
parent
commit
368452de05
2 changed files with 18 additions and 31 deletions
  1. 9 27
      compiler/cg386set.pas
  2. 9 4
      compiler/cgai386.pas

+ 9 - 27
compiler/cg386set.pas

@@ -426,29 +426,9 @@ implementation
                      LOC_REGISTER,
                      LOC_CREGISTER:
                        begin
-                          hr:=regtoreg32(p^.left^.location.register);
-{$ifdef CORRECT_SET_IN_FPC}
-                          if m_tp in aktmodeswitches then
-                            begin
-                               if is_signed(p^.left^.resulttype) then
-                                 AM:=A_MOVSX
-                               else
-                                 AM:=A_MOVZX;
-                               if p^.left^.location.register in [R_AX,R_DI] then
-                                 emit_reg_reg(AM,S_WL,
-                                   p^.left^.location.register,hr)
-                               else if p^.left^.location.register in [R_AL,R_DH] then
-                               emit_reg_reg(AM,S_BL,
-                                 p^.left^.location.register,hr);
-                            end
-                          else
-{$endif CORRECT_SET_IN_FPC}
-                            begin
-                               emit_const_reg(A_AND,S_L,
-                                 255,hr);
-                            end;
-                          emit_const_reg(A_CMP,S_L,
-                            31,hr);
+                          hr:=p^.left^.location.register;
+                          emit_to_reg32(hr);
+                          emit_const_reg(A_CMP,S_L,31,hr);
                           emitjmp(C_NA,l);
                         { reset carry flag }
                           emit_none(A_CLC,S_NO);
@@ -457,8 +437,7 @@ implementation
                         { We have to load the value into a register because
                           btl does not accept values only refs or regs (PFV) }
                           hr2:=getregister32;
-                          emit_const_reg(A_MOV,S_L,
-                            p^.right^.location.reference.offset,hr2);
+                          emit_const_reg(A_MOV,S_L,p^.right^.location.reference.offset,hr2);
                           emit_reg_reg(A_BT,S_L,hr,hr2);
                           ungetregister32(hr2);
                        end;
@@ -495,8 +474,8 @@ implementation
                        emit_reg_reg(A_BT,S_L,hr,hr2);
                        ungetregister32(hr2);
                     end;
-                    emitlab(l2);
                   end;
+                  emitlab(l2);
                 end { of p^.right^.location.reference.is_immediate }
                { do search in a normal set which could have >32 elementsm
                  but also used if the left side contains higher values > 32 }
@@ -919,7 +898,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.43  1999-11-06 14:34:18  peter
+  Revision 1.44  1999-12-01 22:45:54  peter
+    * fixed wrong assembler with in-node
+
+  Revision 1.43  1999/11/06 14:34:18  peter
     * truncated log to 20 revs
 
   Revision 1.42  1999/09/27 23:44:48  peter

+ 9 - 4
compiler/cgai386.pas

@@ -2869,6 +2869,11 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
               exprasmlist:=oldlist;
            end;
 
+{$ifdef GDB}
+      if (not inlined) and (cs_debuginfo in aktmoduleswitches) then
+        exprasmlist^.insert(new(pai_force_line,init));
+{$endif GDB}
+
       { a constructor needs a help procedure }
       if (aktprocsym^.definition^.proctypeoption=potype_constructor) then
         begin
@@ -3072,9 +3077,6 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
          hs:=proc_names.get;
 
 {$ifdef GDB}
-         if (cs_debuginfo in aktmoduleswitches) then
-           exprasmlist^.insert(new(pai_force_line,init));
-
          if (cs_debuginfo in aktmoduleswitches) and target_os.use_function_relative_addresses then
            stab_function_name := new(pai_stab_function_name,init(strpnew(hs)));
 {$EndIf GDB}
@@ -3447,7 +3449,10 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
 end.
 {
   $Log$
-  Revision 1.62  1999-11-30 10:40:43  peter
+  Revision 1.63  1999-12-01 22:45:54  peter
+    * fixed wrong assembler with in-node
+
+  Revision 1.62  1999/11/30 10:40:43  peter
     + ttype, tsymlist
 
   Revision 1.61  1999/11/20 01:22:18  pierre