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);