From c0eafe38aa29bdffe2e31b0bbd1f72b07d77a8fb Mon Sep 17 00:00:00 2001
From: sergei <gorelkin@nanoreflex.ru>
Date: Mon, 7 Dec 2015 19:12:20 +0000
Subject: [PATCH] * Make trgobj.uses_registers method return True when
 registers of appropriate type are specified in list of used registers (after
 assembler blocks), but not used otherwise. This is a missing piece of r30011,
 enabling code generator to actually save/restore such registers. Resolves
 #28421.

git-svn-id: trunk@32610 -
---
 compiler/rgobj.pas | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/compiler/rgobj.pas b/compiler/rgobj.pas
index 8f3673d454..ef7368d048 100644
--- a/compiler/rgobj.pas
+++ b/compiler/rgobj.pas
@@ -227,6 +227,7 @@ unit rgobj;
         constrained_moves : Tlinkedlist;
         extended_backwards,
         backwards_was_first : tbitset;
+        has_usedmarks: boolean;
 
         { Disposes of the reginfo array.}
         procedure dispose_reginfo;
@@ -522,7 +523,7 @@ unit rgobj;
 
     function trgobj.uses_registers:boolean;
       begin
-        result:=(maxreg>first_imaginary);
+        result:=(maxreg>first_imaginary) or has_usedmarks;
       end;
 
 
@@ -1733,7 +1734,10 @@ unit rgobj;
                           end;
                         ra_markused :
                           if (supreg<first_imaginary) then
-                            include(used_in_proc,supreg);
+                            begin
+                              include(used_in_proc,supreg);
+                              has_usedmarks:=true;
+                            end;
                       end;
                       { constraints needs always to be updated }
                       add_constraints(reg);