summaryrefslogtreecommitdiff
path: root/checklink
diff options
context:
space:
mode:
authorGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2013-03-18 12:59:28 +0000
committerGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2013-03-18 12:59:28 +0000
commit91a46bd44fb13b716df6440be5ab083c24f7621e (patch)
tree5efbc5bbedb788fd31268528c2586e334a983106 /checklink
parentdebae4b0c69060a637489c6d0afe93125c9d9268 (diff)
For Pfreeframe, generate an "addi" over GPR1 when possible, to work around a limitation in the a3 analyzers.
git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@2154 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
Diffstat (limited to 'checklink')
-rw-r--r--checklink/Check.ml8
1 files changed, 7 insertions, 1 deletions
diff --git a/checklink/Check.ml b/checklink/Check.ml
index bda2a03..5821953 100644
--- a/checklink/Check.ml
+++ b/checklink/Check.ml
@@ -1742,11 +1742,17 @@ let rec compare_code ccode ecode pc: checker = fun fw ->
end
| Pfreeframe(sz, ofs) ->
begin match ecode with
+ | ADDI(rD, rA, simm) :: es ->
+ OK(fw)
+ >>= match_iregs GPR1 rD
+ >>= match_iregs GPR1 rA
+ >>= match_z_int32 sz (exts simm)
+ >>= recur_simpl
| LWZ(rD, rA, d) :: es ->
OK(fw)
>>= match_iregs GPR1 rD
>>= match_iregs GPR1 rA
- >>= match_z_int32 ofs (Int32.neg (exts d))
+ >>= match_z_int32 ofs (exts d)
>>= recur_simpl
| _ -> error
end