Przeglądaj źródła

Support top_shifterop and top_regset for arm in RegInOp

RegInOp did not check for a register beeing part of a shifterop
(op.shifterop^.rs) which could result in trashed registers (But that did
not seem to happen yet anyway).

I've also implemented support for top_regset, but it is currently not
generated outside of proc_entry/proc_exit anyway.

git-svn-id: trunk@21808 -
masta 13 lat temu
rodzic
commit
9825fbf554
1 zmienionych plików z 5 dodań i 1 usunięć
  1. 5 1
      compiler/aoptbase.pas

+ 5 - 1
compiler/aoptbase.pas

@@ -129,7 +129,11 @@ unit aoptbase;
     Begin
     Begin
       Case op.typ Of
       Case op.typ Of
         Top_Reg: RegInOp := Reg = op.reg;
         Top_Reg: RegInOp := Reg = op.reg;
-        Top_Ref: RegInOp := RegInRef(Reg, op.ref^)
+        Top_Ref: RegInOp := RegInRef(Reg, op.ref^);
+        {$ifdef arm}
+        Top_Shifterop: RegInOp := op.shifterop^.rs = Reg;
+        Top_RegSet: RegInOp := getsupreg(Reg) in op.regset^;
+        {$endif arm}
         Else RegInOp := False
         Else RegInOp := False
       End
       End
     End;
     End;