diff options
author | xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e> | 2013-03-18 12:59:28 +0000 |
---|---|---|
committer | xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e> | 2013-03-18 12:59:28 +0000 |
commit | 91a46bd44fb13b716df6440be5ab083c24f7621e (patch) | |
tree | 5efbc5bbedb788fd31268528c2586e334a983106 /checklink/Check.ml | |
parent | debae4b0c69060a637489c6d0afe93125c9d9268 (diff) | |
download | compcert-91a46bd44fb13b716df6440be5ab083c24f7621e.tar.gz compcert-91a46bd44fb13b716df6440be5ab083c24f7621e.zip |
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/Check.ml')
-rw-r--r-- | checklink/Check.ml | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/checklink/Check.ml b/checklink/Check.ml index bda2a03d..5821953e 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 |