From 056068abd228fefab4951a61700aa6d54fb88287 Mon Sep 17 00:00:00 2001 From: xleroy Date: Tue, 29 Jan 2013 09:10:29 +0000 Subject: Ported to Coq 8.4pl1. Merge of branches/coq-8.4. git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@2101 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e --- .depend | 300 +++++++++++++++++++++--------------------- Changelog | 6 + arm/Asmgenproof.v | 6 +- arm/Asmgenproof1.v | 14 +- arm/ConstpropOpproof.v | 16 +-- arm/Op.v | 12 +- arm/PrintAsm.ml | 2 +- arm/SelectOpproof.v | 30 ++--- backend/CMlexer.mll | 1 + backend/CMparser.mly | 31 +++-- backend/CMtypecheck.ml | 6 +- backend/CSEproof.v | 58 ++++---- backend/Coloringaux.ml | 6 +- backend/Constpropproof.v | 20 +-- backend/Inliningproof.v | 10 +- backend/Inliningspec.v | 6 +- backend/Linearizeaux.ml | 21 +-- backend/PrintCminor.ml | 9 +- backend/PrintLTLin.ml | 8 +- backend/PrintMach.ml | 8 +- backend/PrintRTL.ml | 12 +- backend/RREproof.v | 8 +- backend/RREtyping.v | 4 +- backend/Reloadtyping.v | 2 +- backend/Renumberproof.v | 4 +- backend/Selectionproof.v | 6 +- backend/Stackingproof.v | 4 +- cfrontend/C2C.ml | 35 +++-- cfrontend/Cexec.v | 181 ++++++++++++------------- cfrontend/Cminorgenproof.v | 51 +++---- cfrontend/Cshmgenproof.v | 10 +- cfrontend/Cstrategy.v | 30 ++--- cfrontend/Initializersproof.v | 68 ++++++---- cfrontend/PrintClight.ml | 3 +- cfrontend/PrintCsyntax.ml | 2 +- cfrontend/SimplExpr.v | 134 ++++++++++--------- cfrontend/SimplExprproof.v | 112 ++++++++-------- cfrontend/SimplExprspec.v | 212 ++++++++++++++--------------- cfrontend/SimplLocalsproof.v | 52 ++++---- checklink/Asm_printers.ml | 17 +-- checklink/Check.ml | 11 +- checklink/Frameworks.ml | 4 +- checklink/Library.ml | 26 ++-- common/AST.v | 12 +- common/Globalenvs.v | 72 +++++----- common/Memory.v | 36 ++--- common/PrintAST.ml | 2 +- common/Values.v | 10 +- driver/Compiler.v | 12 +- driver/Driver.ml | 7 +- driver/Interp.ml | 6 +- extraction/extraction.v | 11 +- ia32/Asmgenproof.v | 22 ++-- ia32/Asmgenproof1.v | 20 +-- ia32/ConstpropOpproof.v | 18 +-- ia32/Op.v | 16 +-- ia32/PrintAsm.ml | 2 +- ia32/SelectOpproof.v | 36 ++--- lib/Camlcoq.ml | 251 ++++++++++++++++++++++++++--------- lib/Coqlib.v | 8 +- lib/Floats.v | 12 +- lib/Integers.v | 10 +- lib/Iteration.v | 2 +- lib/Postorder.v | 10 +- powerpc/Asmgenproof1.v | 2 + powerpc/ConstpropOpproof.v | 20 +-- powerpc/Op.v | 16 +-- powerpc/PrintAsm.ml | 2 +- powerpc/SelectOpproof.v | 24 ++-- 69 files changed, 1173 insertions(+), 1024 deletions(-) diff --git a/.depend b/.depend index 9a4a2cc..bfaf24f 100644 --- a/.depend +++ b/.depend @@ -1,150 +1,150 @@ -lib/Axioms.vo lib/Axioms.glob: lib/Axioms.v -lib/Coqlib.vo lib/Coqlib.glob: lib/Coqlib.v -lib/Intv.vo lib/Intv.glob: lib/Intv.v lib/Coqlib.vo -lib/Maps.vo lib/Maps.glob: lib/Maps.v lib/Coqlib.vo -lib/Heaps.vo lib/Heaps.glob: lib/Heaps.v lib/Coqlib.vo lib/Ordered.vo -lib/Lattice.vo lib/Lattice.glob: lib/Lattice.v lib/Coqlib.vo lib/Maps.vo -lib/Ordered.vo lib/Ordered.glob: lib/Ordered.v lib/Coqlib.vo lib/Maps.vo lib/Integers.vo -lib/Iteration.vo lib/Iteration.glob: lib/Iteration.v lib/Axioms.vo lib/Coqlib.vo lib/Wfsimpl.vo -lib/Integers.vo lib/Integers.glob: lib/Integers.v lib/Axioms.vo lib/Coqlib.vo -lib/Floats.vo lib/Floats.glob: lib/Floats.v lib/Axioms.vo lib/Coqlib.vo lib/Integers.vo flocq/Appli/Fappli_IEEE.vo flocq/Appli/Fappli_IEEE_bits.vo flocq/Core/Fcore.vo flocq/Calc/Fcalc_round.vo flocq/Calc/Fcalc_bracket.vo flocq/Prop/Fprop_Sterbenz.vo -lib/Parmov.vo lib/Parmov.glob: lib/Parmov.v lib/Axioms.vo lib/Coqlib.vo -lib/UnionFind.vo lib/UnionFind.glob: lib/UnionFind.v lib/Coqlib.vo -lib/Wfsimpl.vo lib/Wfsimpl.glob: lib/Wfsimpl.v lib/Axioms.vo -lib/Postorder.vo lib/Postorder.glob: lib/Postorder.v lib/Coqlib.vo lib/Maps.vo lib/Iteration.vo -common/Errors.vo common/Errors.glob: common/Errors.v lib/Coqlib.vo -common/AST.vo common/AST.glob: common/AST.v lib/Coqlib.vo common/Errors.vo lib/Integers.vo lib/Floats.vo -common/Events.vo common/Events.glob: common/Events.v lib/Coqlib.vo lib/Intv.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Globalenvs.vo common/Errors.vo -common/Globalenvs.vo common/Globalenvs.glob: common/Globalenvs.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo -common/Memdata.vo common/Memdata.glob: common/Memdata.v lib/Coqlib.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo -common/Memtype.vo common/Memtype.glob: common/Memtype.v lib/Coqlib.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memdata.vo -common/Memory.vo common/Memory.glob: common/Memory.v lib/Axioms.vo lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memdata.vo common/Memtype.vo lib/Intv.vo -common/Values.vo common/Values.glob: common/Values.v lib/Coqlib.vo common/AST.vo lib/Integers.vo lib/Floats.vo -common/Smallstep.vo common/Smallstep.glob: common/Smallstep.v lib/Coqlib.vo common/Events.vo common/Globalenvs.vo lib/Integers.vo -common/Behaviors.vo common/Behaviors.glob: common/Behaviors.v lib/Coqlib.vo common/Events.vo common/Globalenvs.vo lib/Integers.vo common/Smallstep.vo -common/Switch.vo common/Switch.glob: common/Switch.v lib/Coqlib.vo lib/Integers.vo lib/Ordered.vo -common/Determinism.vo common/Determinism.glob: common/Determinism.v lib/Coqlib.vo common/AST.vo lib/Integers.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo common/Behaviors.vo -backend/Cminor.vo backend/Cminor.glob: backend/Cminor.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Events.vo common/Values.vo common/Memory.vo common/Globalenvs.vo common/Smallstep.vo common/Switch.vo -$(ARCH)/Op.vo $(ARCH)/Op.glob: $(ARCH)/Op.v lib/Coqlib.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Globalenvs.vo common/Events.vo -backend/CminorSel.vo backend/CminorSel.glob: backend/CminorSel.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Events.vo common/Values.vo common/Memory.vo backend/Cminor.vo $(ARCH)/Op.vo common/Globalenvs.vo common/Switch.vo common/Smallstep.vo -$(ARCH)/SelectOp.vo $(ARCH)/SelectOp.glob: $(ARCH)/SelectOp.v lib/Coqlib.vo common/AST.vo lib/Integers.vo lib/Floats.vo $(ARCH)/Op.vo backend/CminorSel.vo -backend/Selection.vo backend/Selection.glob: backend/Selection.v lib/Coqlib.vo common/AST.vo lib/Integers.vo common/Globalenvs.vo backend/Cminor.vo $(ARCH)/Op.vo backend/CminorSel.vo $(ARCH)/SelectOp.vo -$(ARCH)/SelectOpproof.vo $(ARCH)/SelectOpproof.glob: $(ARCH)/SelectOpproof.v lib/Coqlib.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Globalenvs.vo backend/Cminor.vo $(ARCH)/Op.vo backend/CminorSel.vo $(ARCH)/SelectOp.vo -backend/Selectionproof.vo backend/Selectionproof.glob: backend/Selectionproof.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo backend/Cminor.vo $(ARCH)/Op.vo backend/CminorSel.vo $(ARCH)/SelectOp.vo backend/Selection.vo $(ARCH)/SelectOpproof.vo -backend/Registers.vo backend/Registers.glob: backend/Registers.v lib/Coqlib.vo common/AST.vo lib/Maps.vo lib/Ordered.vo -backend/RTL.vo backend/RTL.glob: backend/RTL.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Values.vo common/Events.vo common/Memory.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Registers.vo -backend/RTLgen.vo backend/RTLgen.glob: backend/RTLgen.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Switch.vo $(ARCH)/Op.vo backend/Registers.vo backend/CminorSel.vo backend/RTL.vo -backend/RTLgenspec.vo backend/RTLgenspec.glob: backend/RTLgenspec.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Switch.vo $(ARCH)/Op.vo backend/Registers.vo backend/CminorSel.vo backend/RTL.vo backend/RTLgen.vo -backend/RTLgenproof.vo backend/RTLgenproof.glob: backend/RTLgenproof.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Values.vo common/Memory.vo common/Events.vo common/Smallstep.vo common/Globalenvs.vo common/Switch.vo backend/Registers.vo backend/Cminor.vo $(ARCH)/Op.vo backend/CminorSel.vo backend/RTL.vo backend/RTLgen.vo backend/RTLgenspec.vo common/Errors.vo -backend/Tailcall.vo backend/Tailcall.glob: backend/Tailcall.v lib/Coqlib.vo lib/Maps.vo common/AST.vo backend/Registers.vo $(ARCH)/Op.vo backend/RTL.vo backend/Conventions.vo -backend/Tailcallproof.vo backend/Tailcallproof.glob: backend/Tailcallproof.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Values.vo common/Memory.vo $(ARCH)/Op.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo backend/Registers.vo backend/RTL.vo backend/Conventions.vo backend/Tailcall.vo -backend/Inlining.vo backend/Inlining.glob: backend/Inlining.v lib/Coqlib.vo lib/Wfsimpl.vo common/Errors.vo lib/Maps.vo common/AST.vo lib/Integers.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo -backend/Inliningspec.vo backend/Inliningspec.glob: backend/Inliningspec.v lib/Coqlib.vo lib/Wfsimpl.vo common/Errors.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Globalenvs.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo backend/Inlining.vo -backend/Inliningproof.vo backend/Inliningproof.glob: backend/Inliningproof.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Values.vo common/Memory.vo common/Globalenvs.vo common/Events.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Registers.vo backend/Inlining.vo backend/Inliningspec.vo backend/RTL.vo -backend/Renumber.vo backend/Renumber.glob: backend/Renumber.v lib/Coqlib.vo lib/Maps.vo lib/Postorder.vo backend/RTL.vo -backend/Renumberproof.vo backend/Renumberproof.glob: backend/Renumberproof.v lib/Coqlib.vo lib/Maps.vo lib/Postorder.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo backend/Renumber.vo -backend/RTLtyping.vo backend/RTLtyping.glob: backend/RTLtyping.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo common/AST.vo $(ARCH)/Op.vo backend/Registers.vo common/Globalenvs.vo common/Values.vo lib/Integers.vo common/Events.vo backend/RTL.vo backend/Conventions.vo -backend/Kildall.vo backend/Kildall.glob: backend/Kildall.v lib/Coqlib.vo lib/Iteration.vo lib/Maps.vo lib/Lattice.vo lib/Heaps.vo -$(ARCH)/ConstpropOp.vo $(ARCH)/ConstpropOp.glob: $(ARCH)/ConstpropOp.v lib/Coqlib.vo common/AST.vo lib/Integers.vo lib/Floats.vo $(ARCH)/Op.vo backend/Registers.vo -backend/Constprop.vo backend/Constprop.glob: backend/Constprop.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo lib/Floats.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo lib/Lattice.vo backend/Kildall.vo $(ARCH)/ConstpropOp.vo -$(ARCH)/ConstpropOpproof.vo $(ARCH)/ConstpropOpproof.glob: $(ARCH)/ConstpropOpproof.v lib/Coqlib.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Globalenvs.vo common/Events.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo $(ARCH)/ConstpropOp.vo backend/Constprop.vo -backend/Constpropproof.vo backend/Constpropproof.glob: backend/Constpropproof.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Values.vo common/Events.vo common/Memory.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo lib/Lattice.vo backend/Kildall.vo $(ARCH)/ConstpropOp.vo backend/Constprop.vo $(ARCH)/ConstpropOpproof.vo -$(ARCH)/CombineOp.vo $(ARCH)/CombineOp.glob: $(ARCH)/CombineOp.v lib/Coqlib.vo common/AST.vo lib/Integers.vo $(ARCH)/Op.vo $(ARCH)/SelectOp.vo -backend/CSE.vo backend/CSE.glob: backend/CSE.v lib/Coqlib.vo lib/Maps.vo common/Errors.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo backend/RTLtyping.vo backend/Kildall.vo $(ARCH)/CombineOp.vo -$(ARCH)/CombineOpproof.vo $(ARCH)/CombineOpproof.glob: $(ARCH)/CombineOpproof.v lib/Coqlib.vo lib/Integers.vo common/Values.vo common/Memory.vo $(ARCH)/Op.vo backend/RTL.vo $(ARCH)/CombineOp.vo backend/CSE.vo -backend/CSEproof.vo backend/CSEproof.glob: backend/CSEproof.v lib/Coqlib.vo lib/Maps.vo common/AST.vo common/Errors.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo backend/RTLtyping.vo backend/Kildall.vo $(ARCH)/CombineOp.vo $(ARCH)/CombineOpproof.vo backend/CSE.vo -$(ARCH)/Machregs.vo $(ARCH)/Machregs.glob: $(ARCH)/Machregs.v lib/Coqlib.vo lib/Maps.vo common/AST.vo -backend/Locations.vo backend/Locations.glob: backend/Locations.v lib/Coqlib.vo common/AST.vo common/Values.vo $(ARCH)/Machregs.vo -$(ARCH)/$(VARIANT)/Conventions1.vo $(ARCH)/$(VARIANT)/Conventions1.glob: $(ARCH)/$(VARIANT)/Conventions1.v lib/Coqlib.vo common/AST.vo backend/Locations.vo -backend/Conventions.vo backend/Conventions.glob: backend/Conventions.v lib/Coqlib.vo common/AST.vo backend/Locations.vo $(ARCH)/$(VARIANT)/Conventions1.vo -backend/LTL.vo backend/LTL.glob: backend/LTL.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Values.vo common/Events.vo common/Memory.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Locations.vo backend/Conventions.vo -backend/LTLtyping.vo backend/LTLtyping.glob: backend/LTLtyping.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTL.vo backend/Conventions.vo -backend/InterfGraph.vo backend/InterfGraph.glob: backend/InterfGraph.v lib/Coqlib.vo lib/Ordered.vo backend/Registers.vo backend/Locations.vo -backend/Coloring.vo backend/Coloring.glob: backend/Coloring.v lib/Coqlib.vo lib/Maps.vo common/AST.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo backend/RTLtyping.vo backend/Locations.vo backend/Conventions.vo backend/InterfGraph.vo -backend/Coloringproof.vo backend/Coloringproof.glob: backend/Coloringproof.v lib/Coqlib.vo lib/Maps.vo common/AST.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo backend/RTLtyping.vo backend/Locations.vo backend/Conventions.vo backend/InterfGraph.vo backend/Coloring.vo -backend/Allocation.vo backend/Allocation.glob: backend/Allocation.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo lib/Lattice.vo common/AST.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo backend/RTLtyping.vo backend/Kildall.vo backend/Locations.vo backend/Coloring.vo backend/LTL.vo -backend/Allocproof.vo backend/Allocproof.glob: backend/Allocproof.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Values.vo common/Memory.vo common/Events.vo common/Smallstep.vo common/Globalenvs.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo backend/RTLtyping.vo backend/Locations.vo backend/Conventions.vo backend/Coloring.vo backend/Coloringproof.vo backend/Allocation.vo backend/LTL.vo -backend/Alloctyping.vo backend/Alloctyping.glob: backend/Alloctyping.v lib/Coqlib.vo lib/Maps.vo common/Errors.vo common/AST.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo backend/Locations.vo backend/LTL.vo backend/Coloring.vo backend/Coloringproof.vo backend/Allocation.vo backend/Allocproof.vo backend/RTLtyping.vo backend/LTLtyping.vo backend/Conventions.vo -backend/Tunneling.vo backend/Tunneling.glob: backend/Tunneling.v lib/Coqlib.vo lib/Maps.vo lib/UnionFind.vo common/AST.vo backend/LTL.vo -backend/Tunnelingproof.vo backend/Tunnelingproof.glob: backend/Tunnelingproof.v lib/Coqlib.vo lib/Maps.vo lib/UnionFind.vo common/AST.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTL.vo backend/Tunneling.vo -backend/Tunnelingtyping.vo backend/Tunnelingtyping.glob: backend/Tunnelingtyping.v lib/Coqlib.vo lib/Maps.vo common/AST.vo backend/LTL.vo backend/LTLtyping.vo backend/Tunneling.vo backend/Tunnelingproof.vo -backend/LTLin.vo backend/LTLin.glob: backend/LTLin.v lib/Coqlib.vo common/AST.vo lib/Integers.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTL.vo -backend/LTLintyping.vo backend/LTLintyping.glob: backend/LTLintyping.v lib/Coqlib.vo common/AST.vo lib/Integers.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTLin.vo backend/LTLtyping.vo backend/Conventions.vo -backend/Linearize.vo backend/Linearize.glob: backend/Linearize.v lib/Coqlib.vo lib/Maps.vo lib/Ordered.vo common/AST.vo common/Errors.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTL.vo backend/LTLin.vo backend/Kildall.vo lib/Lattice.vo -backend/Linearizeproof.vo backend/Linearizeproof.glob: backend/Linearizeproof.v lib/Coqlib.vo lib/Maps.vo lib/Ordered.vo common/AST.vo lib/Integers.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Errors.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTL.vo backend/LTLtyping.vo backend/LTLin.vo backend/Linearize.vo lib/Lattice.vo -backend/Linearizetyping.vo backend/Linearizetyping.glob: backend/Linearizetyping.v lib/Coqlib.vo lib/Maps.vo common/Errors.vo common/AST.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTL.vo backend/LTLtyping.vo backend/LTLin.vo backend/Linearize.vo backend/LTLintyping.vo backend/Conventions.vo -backend/CleanupLabels.vo backend/CleanupLabels.glob: backend/CleanupLabels.v lib/Coqlib.vo lib/Ordered.vo backend/LTLin.vo -backend/CleanupLabelsproof.vo backend/CleanupLabelsproof.glob: backend/CleanupLabelsproof.v lib/Coqlib.vo lib/Ordered.vo common/AST.vo lib/Integers.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTLin.vo backend/CleanupLabels.vo -backend/CleanupLabelstyping.vo backend/CleanupLabelstyping.glob: backend/CleanupLabelstyping.v lib/Coqlib.vo lib/Maps.vo common/AST.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTLin.vo backend/CleanupLabels.vo backend/LTLintyping.vo -backend/Linear.vo backend/Linear.glob: backend/Linear.v lib/Coqlib.vo common/AST.vo lib/Integers.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTL.vo backend/Conventions.vo -backend/Lineartyping.vo backend/Lineartyping.glob: backend/Lineartyping.v lib/Coqlib.vo common/AST.vo lib/Integers.vo common/Values.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTL.vo backend/Linear.vo backend/Conventions.vo -backend/Parallelmove.vo backend/Parallelmove.glob: backend/Parallelmove.v lib/Coqlib.vo lib/Parmov.vo common/Values.vo common/AST.vo backend/Locations.vo backend/Conventions.vo -backend/Reload.vo backend/Reload.glob: backend/Reload.v lib/Coqlib.vo common/AST.vo lib/Integers.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTLin.vo backend/Conventions.vo backend/Parallelmove.vo backend/Linear.vo -backend/Reloadproof.vo backend/Reloadproof.glob: backend/Reloadproof.v lib/Coqlib.vo common/AST.vo lib/Integers.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Locations.vo backend/Conventions.vo backend/RTLtyping.vo backend/LTLin.vo backend/LTLintyping.vo backend/Linear.vo backend/Parallelmove.vo backend/Reload.vo -backend/Reloadtyping.vo backend/Reloadtyping.glob: backend/Reloadtyping.v lib/Coqlib.vo common/AST.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTLin.vo backend/LTLintyping.vo backend/Linear.vo backend/Lineartyping.vo backend/Conventions.vo backend/Parallelmove.vo backend/Reload.vo backend/Reloadproof.vo -backend/RRE.vo backend/RRE.glob: backend/RRE.v lib/Coqlib.vo common/AST.vo $(ARCH)/Op.vo backend/Locations.vo backend/Conventions.vo backend/Linear.vo -backend/RREproof.vo backend/RREproof.glob: backend/RREproof.v lib/Axioms.vo lib/Coqlib.vo common/AST.vo common/Values.vo common/Globalenvs.vo common/Events.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Locations.vo backend/Conventions.vo backend/Linear.vo backend/RRE.vo -backend/RREtyping.vo backend/RREtyping.glob: backend/RREtyping.v lib/Coqlib.vo common/AST.vo backend/Locations.vo backend/Linear.vo backend/Lineartyping.vo backend/Conventions.vo backend/RRE.vo backend/RREproof.vo -backend/Mach.vo backend/Mach.glob: backend/Mach.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Values.vo common/Globalenvs.vo $(ARCH)/Op.vo backend/Locations.vo backend/Conventions.vo -backend/Machtyping.vo backend/Machtyping.glob: backend/Machtyping.v lib/Coqlib.vo common/AST.vo lib/Integers.vo $(ARCH)/Op.vo backend/Locations.vo backend/Conventions.vo backend/Mach.vo -backend/Bounds.vo backend/Bounds.glob: backend/Bounds.v lib/Coqlib.vo common/AST.vo $(ARCH)/Op.vo backend/Locations.vo backend/Linear.vo backend/Lineartyping.vo backend/Conventions.vo -$(ARCH)/$(VARIANT)/Stacklayout.vo $(ARCH)/$(VARIANT)/Stacklayout.glob: $(ARCH)/$(VARIANT)/Stacklayout.v lib/Coqlib.vo backend/Bounds.vo -backend/Stacking.vo backend/Stacking.glob: backend/Stacking.v lib/Coqlib.vo common/Errors.vo common/AST.vo lib/Integers.vo $(ARCH)/Op.vo backend/Locations.vo backend/Linear.vo backend/Bounds.vo backend/Mach.vo backend/Conventions.vo $(ARCH)/$(VARIANT)/Stacklayout.vo -backend/Stackingproof.vo backend/Stackingproof.glob: backend/Stackingproof.v lib/Coqlib.vo common/Errors.vo common/AST.vo lib/Integers.vo common/Values.vo $(ARCH)/Op.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo backend/Locations.vo backend/LTL.vo backend/Linear.vo backend/Lineartyping.vo backend/Mach.vo backend/Machsem.vo backend/Bounds.vo backend/Conventions.vo $(ARCH)/$(VARIANT)/Stacklayout.vo backend/Stacking.vo -backend/Stackingtyping.vo backend/Stackingtyping.glob: backend/Stackingtyping.v lib/Coqlib.vo common/Errors.vo lib/Integers.vo common/AST.vo $(ARCH)/Op.vo backend/Locations.vo backend/Conventions.vo backend/Linear.vo backend/Lineartyping.vo backend/Mach.vo backend/Machtyping.vo backend/Bounds.vo $(ARCH)/$(VARIANT)/Stacklayout.vo backend/Stacking.vo backend/Stackingproof.vo -backend/Machsem.vo backend/Machsem.glob: backend/Machsem.v lib/Coqlib.vo common/AST.vo lib/Integers.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Locations.vo backend/Conventions.vo backend/Mach.vo $(ARCH)/$(VARIANT)/Stacklayout.vo $(ARCH)/Asmgenretaddr.vo -$(ARCH)/Asm.vo $(ARCH)/Asm.glob: $(ARCH)/Asm.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo backend/Locations.vo $(ARCH)/$(VARIANT)/Stacklayout.vo backend/Conventions.vo -$(ARCH)/Asmgen.vo $(ARCH)/Asmgen.glob: $(ARCH)/Asmgen.v lib/Coqlib.vo common/Errors.vo common/AST.vo lib/Integers.vo lib/Floats.vo $(ARCH)/Op.vo backend/Locations.vo backend/Mach.vo $(ARCH)/Asm.vo -$(ARCH)/Asmgenretaddr.vo $(ARCH)/Asmgenretaddr.glob: $(ARCH)/Asmgenretaddr.v lib/Coqlib.vo common/AST.vo common/Errors.vo lib/Integers.vo lib/Floats.vo $(ARCH)/Op.vo backend/Locations.vo backend/Mach.vo $(ARCH)/Asm.vo $(ARCH)/Asmgen.vo -$(ARCH)/Asmgenproof1.vo $(ARCH)/Asmgenproof1.glob: $(ARCH)/Asmgenproof1.v lib/Coqlib.vo common/AST.vo common/Errors.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Globalenvs.vo $(ARCH)/Op.vo backend/Locations.vo backend/Mach.vo backend/Machsem.vo backend/Machtyping.vo $(ARCH)/Asm.vo $(ARCH)/Asmgen.vo backend/Conventions.vo -$(ARCH)/Asmgenproof.vo $(ARCH)/Asmgenproof.glob: $(ARCH)/Asmgenproof.v lib/Coqlib.vo common/Errors.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Locations.vo backend/Mach.vo backend/Machsem.vo backend/Machtyping.vo backend/Conventions.vo $(ARCH)/Asm.vo $(ARCH)/Asmgen.vo $(ARCH)/Asmgenretaddr.vo $(ARCH)/Asmgenproof1.vo -cfrontend/Ctypes.vo cfrontend/Ctypes.glob: cfrontend/Ctypes.v lib/Coqlib.vo common/AST.vo common/Errors.vo -cfrontend/Cop.vo cfrontend/Cop.glob: cfrontend/Cop.v lib/Coqlib.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo cfrontend/Ctypes.vo -cfrontend/Csyntax.vo cfrontend/Csyntax.glob: cfrontend/Csyntax.v lib/Coqlib.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/AST.vo cfrontend/Ctypes.vo cfrontend/Cop.vo -cfrontend/Csem.vo cfrontend/Csem.glob: cfrontend/Csem.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/AST.vo common/Memory.vo common/Events.vo common/Globalenvs.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Csyntax.vo common/Smallstep.vo -cfrontend/Cstrategy.vo cfrontend/Cstrategy.glob: cfrontend/Cstrategy.v lib/Axioms.vo lib/Coqlib.vo common/Errors.vo lib/Maps.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/AST.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Csyntax.vo cfrontend/Csem.vo -cfrontend/Cexec.vo cfrontend/Cexec.glob: cfrontend/Cexec.v lib/Axioms.vo lib/Coqlib.vo common/Errors.vo lib/Maps.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/AST.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Determinism.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Csyntax.vo cfrontend/Csem.vo cfrontend/Cstrategy.vo -cfrontend/Initializers.vo cfrontend/Initializers.glob: cfrontend/Initializers.v lib/Coqlib.vo common/Errors.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/AST.vo common/Memory.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Csyntax.vo -cfrontend/Initializersproof.vo cfrontend/Initializersproof.glob: cfrontend/Initializersproof.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/AST.vo common/Memory.vo common/Globalenvs.vo common/Events.vo common/Smallstep.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Csyntax.vo cfrontend/Csem.vo cfrontend/Initializers.vo -cfrontend/SimplExpr.vo cfrontend/SimplExpr.glob: cfrontend/SimplExpr.v lib/Coqlib.vo common/Errors.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/AST.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Csyntax.vo cfrontend/Clight.vo -cfrontend/SimplExprspec.vo cfrontend/SimplExprspec.glob: cfrontend/SimplExprspec.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo lib/Integers.vo lib/Floats.vo common/Memory.vo common/AST.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Csyntax.vo cfrontend/Clight.vo cfrontend/SimplExpr.vo -cfrontend/SimplExprproof.vo cfrontend/SimplExprproof.glob: cfrontend/SimplExprproof.v lib/Coqlib.vo lib/Maps.vo common/AST.vo common/Errors.vo lib/Integers.vo common/Values.vo common/Memory.vo common/Events.vo common/Smallstep.vo common/Globalenvs.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Csyntax.vo cfrontend/Csem.vo cfrontend/Cstrategy.vo cfrontend/Clight.vo cfrontend/SimplExpr.vo cfrontend/SimplExprspec.vo -cfrontend/Clight.vo cfrontend/Clight.glob: cfrontend/Clight.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/AST.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo cfrontend/Ctypes.vo cfrontend/Cop.vo -cfrontend/ClightBigstep.vo cfrontend/ClightBigstep.glob: cfrontend/ClightBigstep.v lib/Coqlib.vo lib/Maps.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/AST.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Clight.vo -cfrontend/SimplLocals.vo cfrontend/SimplLocals.glob: cfrontend/SimplLocals.v lib/Coqlib.vo lib/Ordered.vo common/Errors.vo common/AST.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Clight.vo -cfrontend/SimplLocalsproof.vo cfrontend/SimplLocalsproof.glob: cfrontend/SimplLocalsproof.v lib/Coqlib.vo common/Errors.vo lib/Ordered.vo common/AST.vo lib/Maps.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Globalenvs.vo common/Events.vo common/Smallstep.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Clight.vo cfrontend/SimplLocals.vo -cfrontend/Cshmgen.vo cfrontend/Cshmgen.glob: cfrontend/Cshmgen.v lib/Coqlib.vo common/Errors.vo lib/Integers.vo lib/Floats.vo common/AST.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Clight.vo backend/Cminor.vo cfrontend/Csharpminor.vo -cfrontend/Cshmgenproof.vo cfrontend/Cshmgenproof.glob: cfrontend/Cshmgenproof.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo lib/Integers.vo lib/Floats.vo common/AST.vo common/Values.vo common/Events.vo common/Memory.vo common/Globalenvs.vo common/Smallstep.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Clight.vo backend/Cminor.vo cfrontend/Csharpminor.vo cfrontend/Cshmgen.vo -cfrontend/Csharpminor.vo cfrontend/Csharpminor.glob: cfrontend/Csharpminor.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo backend/Cminor.vo common/Smallstep.vo -cfrontend/Cminorgen.vo cfrontend/Cminorgen.glob: cfrontend/Cminorgen.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo lib/Ordered.vo common/AST.vo lib/Integers.vo lib/Floats.vo cfrontend/Csharpminor.vo backend/Cminor.vo -cfrontend/Cminorgenproof.vo cfrontend/Cminorgenproof.glob: cfrontend/Cminorgenproof.v lib/Coqlib.vo lib/Intv.vo common/Errors.vo lib/Maps.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo common/Switch.vo cfrontend/Csharpminor.vo backend/Cminor.vo cfrontend/Cminorgen.vo -driver/Compiler.vo driver/Compiler.glob: driver/Compiler.v lib/Coqlib.vo common/Errors.vo common/AST.vo common/Smallstep.vo cfrontend/Csyntax.vo cfrontend/Csem.vo cfrontend/Cstrategy.vo cfrontend/Cexec.vo cfrontend/Clight.vo cfrontend/Csharpminor.vo backend/Cminor.vo backend/CminorSel.vo backend/RTL.vo backend/LTL.vo backend/LTLin.vo backend/Linear.vo backend/Mach.vo backend/Machsem.vo $(ARCH)/Asm.vo cfrontend/Initializers.vo cfrontend/SimplExpr.vo cfrontend/SimplLocals.vo cfrontend/Cshmgen.vo cfrontend/Cminorgen.vo backend/Selection.vo backend/RTLgen.vo backend/Tailcall.vo backend/Inlining.vo backend/Renumber.vo backend/Constprop.vo backend/CSE.vo backend/Allocation.vo backend/Tunneling.vo backend/Linearize.vo backend/CleanupLabels.vo backend/Reload.vo backend/RRE.vo backend/Stacking.vo $(ARCH)/Asmgen.vo backend/RTLtyping.vo backend/LTLtyping.vo backend/LTLintyping.vo backend/Lineartyping.vo backend/Machtyping.vo cfrontend/SimplExprproof.vo cfrontend/SimplLocalsproof.vo cfrontend/Cshmgenproof.vo cfrontend/Cminorgenproof.vo backend/Selectionproof.vo backend/RTLgenproof.vo backend/Tailcallproof.vo backend/Inliningproof.vo backend/Renumberproof.vo backend/Constpropproof.vo backend/CSEproof.vo backend/Allocproof.vo backend/Alloctyping.vo backend/Tunnelingproof.vo backend/Tunnelingtyping.vo backend/Linearizeproof.vo backend/Linearizetyping.vo backend/CleanupLabelsproof.vo backend/CleanupLabelstyping.vo backend/Reloadproof.vo backend/Reloadtyping.vo backend/RREproof.vo backend/RREtyping.vo backend/Stackingproof.vo backend/Stackingtyping.vo $(ARCH)/Asmgenproof.vo -driver/Complements.vo driver/Complements.glob: driver/Complements.v lib/Coqlib.vo common/AST.vo lib/Integers.vo common/Values.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo common/Behaviors.vo cfrontend/Csyntax.vo cfrontend/Csem.vo cfrontend/Cstrategy.vo cfrontend/Clight.vo backend/Cminor.vo backend/RTL.vo $(ARCH)/Asm.vo driver/Compiler.vo common/Errors.vo -flocq/Core/Fcore_float_prop.vo flocq/Core/Fcore_float_prop.glob: flocq/Core/Fcore_float_prop.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo -flocq/Core/Fcore_Zaux.vo flocq/Core/Fcore_Zaux.glob: flocq/Core/Fcore_Zaux.v -flocq/Core/Fcore_rnd_ne.vo flocq/Core/Fcore_rnd_ne.glob: flocq/Core/Fcore_rnd_ne.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_rnd.vo flocq/Core/Fcore_generic_fmt.vo flocq/Core/Fcore_float_prop.vo flocq/Core/Fcore_ulp.vo -flocq/Core/Fcore_FTZ.vo flocq/Core/Fcore_FTZ.glob: flocq/Core/Fcore_FTZ.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_rnd.vo flocq/Core/Fcore_generic_fmt.vo flocq/Core/Fcore_float_prop.vo flocq/Core/Fcore_FLX.vo -flocq/Core/Fcore_FLT.vo flocq/Core/Fcore_FLT.glob: flocq/Core/Fcore_FLT.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_rnd.vo flocq/Core/Fcore_generic_fmt.vo flocq/Core/Fcore_float_prop.vo flocq/Core/Fcore_FLX.vo flocq/Core/Fcore_FIX.vo flocq/Core/Fcore_rnd_ne.vo -flocq/Core/Fcore_defs.vo flocq/Core/Fcore_defs.glob: flocq/Core/Fcore_defs.v flocq/Core/Fcore_Raux.vo -flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_Raux.glob: flocq/Core/Fcore_Raux.v flocq/Core/Fcore_Zaux.vo -flocq/Core/Fcore_ulp.vo flocq/Core/Fcore_ulp.glob: flocq/Core/Fcore_ulp.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_rnd.vo flocq/Core/Fcore_generic_fmt.vo flocq/Core/Fcore_float_prop.vo -flocq/Core/Fcore_rnd.vo flocq/Core/Fcore_rnd.glob: flocq/Core/Fcore_rnd.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo -flocq/Core/Fcore_FLX.vo flocq/Core/Fcore_FLX.glob: flocq/Core/Fcore_FLX.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_rnd.vo flocq/Core/Fcore_generic_fmt.vo flocq/Core/Fcore_float_prop.vo flocq/Core/Fcore_FIX.vo flocq/Core/Fcore_rnd_ne.vo -flocq/Core/Fcore_FIX.vo flocq/Core/Fcore_FIX.glob: flocq/Core/Fcore_FIX.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_rnd.vo flocq/Core/Fcore_generic_fmt.vo flocq/Core/Fcore_rnd_ne.vo -flocq/Core/Fcore_digits.vo flocq/Core/Fcore_digits.glob: flocq/Core/Fcore_digits.v flocq/Core/Fcore_Zaux.vo -flocq/Core/Fcore_generic_fmt.vo flocq/Core/Fcore_generic_fmt.glob: flocq/Core/Fcore_generic_fmt.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_rnd.vo flocq/Core/Fcore_float_prop.vo -flocq/Core/Fcore.vo flocq/Core/Fcore.glob: flocq/Core/Fcore.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_float_prop.vo flocq/Core/Fcore_rnd.vo flocq/Core/Fcore_generic_fmt.vo flocq/Core/Fcore_rnd_ne.vo flocq/Core/Fcore_FIX.vo flocq/Core/Fcore_FLX.vo flocq/Core/Fcore_FLT.vo flocq/Core/Fcore_ulp.vo -flocq/Prop/Fprop_Sterbenz.vo flocq/Prop/Fprop_Sterbenz.glob: flocq/Prop/Fprop_Sterbenz.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_generic_fmt.vo flocq/Calc/Fcalc_ops.vo -flocq/Prop/Fprop_mult_error.vo flocq/Prop/Fprop_mult_error.glob: flocq/Prop/Fprop_mult_error.v flocq/Core/Fcore.vo flocq/Calc/Fcalc_ops.vo -flocq/Prop/Fprop_relative.vo flocq/Prop/Fprop_relative.glob: flocq/Prop/Fprop_relative.v flocq/Core/Fcore.vo -flocq/Prop/Fprop_div_sqrt_error.vo flocq/Prop/Fprop_div_sqrt_error.glob: flocq/Prop/Fprop_div_sqrt_error.v flocq/Core/Fcore.vo flocq/Calc/Fcalc_ops.vo flocq/Prop/Fprop_relative.vo -flocq/Prop/Fprop_plus_error.vo flocq/Prop/Fprop_plus_error.glob: flocq/Prop/Fprop_plus_error.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_float_prop.vo flocq/Core/Fcore_generic_fmt.vo flocq/Calc/Fcalc_ops.vo -flocq/Calc/Fcalc_ops.vo flocq/Calc/Fcalc_ops.glob: flocq/Calc/Fcalc_ops.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_float_prop.vo -flocq/Calc/Fcalc_bracket.vo flocq/Calc/Fcalc_bracket.glob: flocq/Calc/Fcalc_bracket.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_float_prop.vo -flocq/Calc/Fcalc_sqrt.vo flocq/Calc/Fcalc_sqrt.glob: flocq/Calc/Fcalc_sqrt.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_digits.vo flocq/Core/Fcore_float_prop.vo flocq/Calc/Fcalc_bracket.vo flocq/Calc/Fcalc_digits.vo -flocq/Calc/Fcalc_div.vo flocq/Calc/Fcalc_div.glob: flocq/Calc/Fcalc_div.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_float_prop.vo flocq/Core/Fcore_digits.vo flocq/Calc/Fcalc_bracket.vo flocq/Calc/Fcalc_digits.vo -flocq/Calc/Fcalc_round.vo flocq/Calc/Fcalc_round.glob: flocq/Calc/Fcalc_round.v flocq/Core/Fcore.vo flocq/Core/Fcore_digits.vo flocq/Calc/Fcalc_bracket.vo flocq/Calc/Fcalc_digits.vo -flocq/Calc/Fcalc_digits.vo flocq/Calc/Fcalc_digits.glob: flocq/Calc/Fcalc_digits.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_float_prop.vo flocq/Core/Fcore_digits.vo -flocq/Appli/Fappli_IEEE_bits.vo flocq/Appli/Fappli_IEEE_bits.glob: flocq/Appli/Fappli_IEEE_bits.v flocq/Core/Fcore.vo flocq/Core/Fcore_digits.vo flocq/Calc/Fcalc_digits.vo flocq/Appli/Fappli_IEEE.vo -flocq/Appli/Fappli_IEEE.vo flocq/Appli/Fappli_IEEE.glob: flocq/Appli/Fappli_IEEE.v flocq/Core/Fcore.vo flocq/Core/Fcore_digits.vo flocq/Calc/Fcalc_digits.vo flocq/Calc/Fcalc_round.vo flocq/Calc/Fcalc_bracket.vo flocq/Calc/Fcalc_ops.vo flocq/Calc/Fcalc_div.vo flocq/Calc/Fcalc_sqrt.vo flocq/Prop/Fprop_relative.vo -exportclight/Clightdefs.vo exportclight/Clightdefs.glob: exportclight/Clightdefs.v lib/Integers.vo lib/Floats.vo common/AST.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Clight.vo +lib/Axioms.vo lib/Axioms.glob lib/Axioms.v.beautified: lib/Axioms.v +lib/Coqlib.vo lib/Coqlib.glob lib/Coqlib.v.beautified: lib/Coqlib.v +lib/Intv.vo lib/Intv.glob lib/Intv.v.beautified: lib/Intv.v lib/Coqlib.vo +lib/Maps.vo lib/Maps.glob lib/Maps.v.beautified: lib/Maps.v lib/Coqlib.vo +lib/Heaps.vo lib/Heaps.glob lib/Heaps.v.beautified: lib/Heaps.v lib/Coqlib.vo lib/Ordered.vo +lib/Lattice.vo lib/Lattice.glob lib/Lattice.v.beautified: lib/Lattice.v lib/Coqlib.vo lib/Maps.vo +lib/Ordered.vo lib/Ordered.glob lib/Ordered.v.beautified: lib/Ordered.v lib/Coqlib.vo lib/Maps.vo lib/Integers.vo +lib/Iteration.vo lib/Iteration.glob lib/Iteration.v.beautified: lib/Iteration.v lib/Axioms.vo lib/Coqlib.vo lib/Wfsimpl.vo +lib/Integers.vo lib/Integers.glob lib/Integers.v.beautified: lib/Integers.v lib/Axioms.vo lib/Coqlib.vo +lib/Floats.vo lib/Floats.glob lib/Floats.v.beautified: lib/Floats.v lib/Axioms.vo lib/Coqlib.vo lib/Integers.vo flocq/Appli/Fappli_IEEE.vo flocq/Appli/Fappli_IEEE_bits.vo flocq/Core/Fcore.vo flocq/Calc/Fcalc_round.vo flocq/Calc/Fcalc_bracket.vo flocq/Prop/Fprop_Sterbenz.vo +lib/Parmov.vo lib/Parmov.glob lib/Parmov.v.beautified: lib/Parmov.v lib/Axioms.vo lib/Coqlib.vo +lib/UnionFind.vo lib/UnionFind.glob lib/UnionFind.v.beautified: lib/UnionFind.v lib/Coqlib.vo +lib/Wfsimpl.vo lib/Wfsimpl.glob lib/Wfsimpl.v.beautified: lib/Wfsimpl.v lib/Axioms.vo +lib/Postorder.vo lib/Postorder.glob lib/Postorder.v.beautified: lib/Postorder.v lib/Coqlib.vo lib/Maps.vo lib/Iteration.vo +common/Errors.vo common/Errors.glob common/Errors.v.beautified: common/Errors.v lib/Coqlib.vo +common/AST.vo common/AST.glob common/AST.v.beautified: common/AST.v lib/Coqlib.vo common/Errors.vo lib/Integers.vo lib/Floats.vo +common/Events.vo common/Events.glob common/Events.v.beautified: common/Events.v lib/Coqlib.vo lib/Intv.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Globalenvs.vo common/Errors.vo +common/Globalenvs.vo common/Globalenvs.glob common/Globalenvs.v.beautified: common/Globalenvs.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo +common/Memdata.vo common/Memdata.glob common/Memdata.v.beautified: common/Memdata.v lib/Coqlib.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo +common/Memtype.vo common/Memtype.glob common/Memtype.v.beautified: common/Memtype.v lib/Coqlib.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memdata.vo +common/Memory.vo common/Memory.glob common/Memory.v.beautified: common/Memory.v lib/Axioms.vo lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memdata.vo common/Memtype.vo lib/Intv.vo +common/Values.vo common/Values.glob common/Values.v.beautified: common/Values.v lib/Coqlib.vo common/AST.vo lib/Integers.vo lib/Floats.vo +common/Smallstep.vo common/Smallstep.glob common/Smallstep.v.beautified: common/Smallstep.v lib/Coqlib.vo common/Events.vo common/Globalenvs.vo lib/Integers.vo +common/Behaviors.vo common/Behaviors.glob common/Behaviors.v.beautified: common/Behaviors.v lib/Coqlib.vo common/Events.vo common/Globalenvs.vo lib/Integers.vo common/Smallstep.vo +common/Switch.vo common/Switch.glob common/Switch.v.beautified: common/Switch.v lib/Coqlib.vo lib/Integers.vo lib/Ordered.vo +common/Determinism.vo common/Determinism.glob common/Determinism.v.beautified: common/Determinism.v lib/Coqlib.vo common/AST.vo lib/Integers.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo common/Behaviors.vo +backend/Cminor.vo backend/Cminor.glob backend/Cminor.v.beautified: backend/Cminor.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Events.vo common/Values.vo common/Memory.vo common/Globalenvs.vo common/Smallstep.vo common/Switch.vo +$(ARCH)/Op.vo $(ARCH)/Op.glob $(ARCH)/Op.v.beautified: $(ARCH)/Op.v lib/Coqlib.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Globalenvs.vo common/Events.vo +backend/CminorSel.vo backend/CminorSel.glob backend/CminorSel.v.beautified: backend/CminorSel.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Events.vo common/Values.vo common/Memory.vo backend/Cminor.vo $(ARCH)/Op.vo common/Globalenvs.vo common/Switch.vo common/Smallstep.vo +$(ARCH)/SelectOp.vo $(ARCH)/SelectOp.glob $(ARCH)/SelectOp.v.beautified: $(ARCH)/SelectOp.v lib/Coqlib.vo common/AST.vo lib/Integers.vo lib/Floats.vo $(ARCH)/Op.vo backend/CminorSel.vo +backend/Selection.vo backend/Selection.glob backend/Selection.v.beautified: backend/Selection.v lib/Coqlib.vo common/AST.vo lib/Integers.vo common/Globalenvs.vo backend/Cminor.vo $(ARCH)/Op.vo backend/CminorSel.vo $(ARCH)/SelectOp.vo +$(ARCH)/SelectOpproof.vo $(ARCH)/SelectOpproof.glob $(ARCH)/SelectOpproof.v.beautified: $(ARCH)/SelectOpproof.v lib/Coqlib.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Globalenvs.vo backend/Cminor.vo $(ARCH)/Op.vo backend/CminorSel.vo $(ARCH)/SelectOp.vo +backend/Selectionproof.vo backend/Selectionproof.glob backend/Selectionproof.v.beautified: backend/Selectionproof.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo backend/Cminor.vo $(ARCH)/Op.vo backend/CminorSel.vo $(ARCH)/SelectOp.vo backend/Selection.vo $(ARCH)/SelectOpproof.vo +backend/Registers.vo backend/Registers.glob backend/Registers.v.beautified: backend/Registers.v lib/Coqlib.vo common/AST.vo lib/Maps.vo lib/Ordered.vo +backend/RTL.vo backend/RTL.glob backend/RTL.v.beautified: backend/RTL.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Values.vo common/Events.vo common/Memory.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Registers.vo +backend/RTLgen.vo backend/RTLgen.glob backend/RTLgen.v.beautified: backend/RTLgen.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Switch.vo $(ARCH)/Op.vo backend/Registers.vo backend/CminorSel.vo backend/RTL.vo +backend/RTLgenspec.vo backend/RTLgenspec.glob backend/RTLgenspec.v.beautified: backend/RTLgenspec.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Switch.vo $(ARCH)/Op.vo backend/Registers.vo backend/CminorSel.vo backend/RTL.vo backend/RTLgen.vo +backend/RTLgenproof.vo backend/RTLgenproof.glob backend/RTLgenproof.v.beautified: backend/RTLgenproof.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Values.vo common/Memory.vo common/Events.vo common/Smallstep.vo common/Globalenvs.vo common/Switch.vo backend/Registers.vo backend/Cminor.vo $(ARCH)/Op.vo backend/CminorSel.vo backend/RTL.vo backend/RTLgen.vo backend/RTLgenspec.vo common/Errors.vo +backend/Tailcall.vo backend/Tailcall.glob backend/Tailcall.v.beautified: backend/Tailcall.v lib/Coqlib.vo lib/Maps.vo common/AST.vo backend/Registers.vo $(ARCH)/Op.vo backend/RTL.vo backend/Conventions.vo +backend/Tailcallproof.vo backend/Tailcallproof.glob backend/Tailcallproof.v.beautified: backend/Tailcallproof.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Values.vo common/Memory.vo $(ARCH)/Op.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo backend/Registers.vo backend/RTL.vo backend/Conventions.vo backend/Tailcall.vo +backend/Inlining.vo backend/Inlining.glob backend/Inlining.v.beautified: backend/Inlining.v lib/Coqlib.vo lib/Wfsimpl.vo common/Errors.vo lib/Maps.vo common/AST.vo lib/Integers.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo +backend/Inliningspec.vo backend/Inliningspec.glob backend/Inliningspec.v.beautified: backend/Inliningspec.v lib/Coqlib.vo lib/Wfsimpl.vo common/Errors.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Globalenvs.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo backend/Inlining.vo +backend/Inliningproof.vo backend/Inliningproof.glob backend/Inliningproof.v.beautified: backend/Inliningproof.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Values.vo common/Memory.vo common/Globalenvs.vo common/Events.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Registers.vo backend/Inlining.vo backend/Inliningspec.vo backend/RTL.vo +backend/Renumber.vo backend/Renumber.glob backend/Renumber.v.beautified: backend/Renumber.v lib/Coqlib.vo lib/Maps.vo lib/Postorder.vo backend/RTL.vo +backend/Renumberproof.vo backend/Renumberproof.glob backend/Renumberproof.v.beautified: backend/Renumberproof.v lib/Coqlib.vo lib/Maps.vo lib/Postorder.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo backend/Renumber.vo +backend/RTLtyping.vo backend/RTLtyping.glob backend/RTLtyping.v.beautified: backend/RTLtyping.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo common/AST.vo $(ARCH)/Op.vo backend/Registers.vo common/Globalenvs.vo common/Values.vo lib/Integers.vo common/Events.vo backend/RTL.vo backend/Conventions.vo +backend/Kildall.vo backend/Kildall.glob backend/Kildall.v.beautified: backend/Kildall.v lib/Coqlib.vo lib/Iteration.vo lib/Maps.vo lib/Lattice.vo lib/Heaps.vo +$(ARCH)/ConstpropOp.vo $(ARCH)/ConstpropOp.glob $(ARCH)/ConstpropOp.v.beautified: $(ARCH)/ConstpropOp.v lib/Coqlib.vo common/AST.vo lib/Integers.vo lib/Floats.vo $(ARCH)/Op.vo backend/Registers.vo +backend/Constprop.vo backend/Constprop.glob backend/Constprop.v.beautified: backend/Constprop.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo lib/Floats.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo lib/Lattice.vo backend/Kildall.vo $(ARCH)/ConstpropOp.vo +$(ARCH)/ConstpropOpproof.vo $(ARCH)/ConstpropOpproof.glob $(ARCH)/ConstpropOpproof.v.beautified: $(ARCH)/ConstpropOpproof.v lib/Coqlib.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Globalenvs.vo common/Events.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo $(ARCH)/ConstpropOp.vo backend/Constprop.vo +backend/Constpropproof.vo backend/Constpropproof.glob backend/Constpropproof.v.beautified: backend/Constpropproof.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Values.vo common/Events.vo common/Memory.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo lib/Lattice.vo backend/Kildall.vo $(ARCH)/ConstpropOp.vo backend/Constprop.vo $(ARCH)/ConstpropOpproof.vo +$(ARCH)/CombineOp.vo $(ARCH)/CombineOp.glob $(ARCH)/CombineOp.v.beautified: $(ARCH)/CombineOp.v lib/Coqlib.vo common/AST.vo lib/Integers.vo $(ARCH)/Op.vo $(ARCH)/SelectOp.vo +backend/CSE.vo backend/CSE.glob backend/CSE.v.beautified: backend/CSE.v lib/Coqlib.vo lib/Maps.vo common/Errors.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo backend/RTLtyping.vo backend/Kildall.vo $(ARCH)/CombineOp.vo +$(ARCH)/CombineOpproof.vo $(ARCH)/CombineOpproof.glob $(ARCH)/CombineOpproof.v.beautified: $(ARCH)/CombineOpproof.v lib/Coqlib.vo lib/Integers.vo common/Values.vo common/Memory.vo $(ARCH)/Op.vo backend/RTL.vo $(ARCH)/CombineOp.vo backend/CSE.vo +backend/CSEproof.vo backend/CSEproof.glob backend/CSEproof.v.beautified: backend/CSEproof.v lib/Coqlib.vo lib/Maps.vo common/AST.vo common/Errors.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo backend/RTLtyping.vo backend/Kildall.vo $(ARCH)/CombineOp.vo $(ARCH)/CombineOpproof.vo backend/CSE.vo +$(ARCH)/Machregs.vo $(ARCH)/Machregs.glob $(ARCH)/Machregs.v.beautified: $(ARCH)/Machregs.v lib/Coqlib.vo lib/Maps.vo common/AST.vo +backend/Locations.vo backend/Locations.glob backend/Locations.v.beautified: backend/Locations.v lib/Coqlib.vo common/AST.vo common/Values.vo $(ARCH)/Machregs.vo +$(ARCH)/$(VARIANT)/Conventions1.vo $(ARCH)/$(VARIANT)/Conventions1.glob $(ARCH)/$(VARIANT)/Conventions1.v.beautified: $(ARCH)/$(VARIANT)/Conventions1.v lib/Coqlib.vo common/AST.vo backend/Locations.vo +backend/Conventions.vo backend/Conventions.glob backend/Conventions.v.beautified: backend/Conventions.v lib/Coqlib.vo common/AST.vo backend/Locations.vo $(ARCH)/$(VARIANT)/Conventions1.vo +backend/LTL.vo backend/LTL.glob backend/LTL.v.beautified: backend/LTL.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Values.vo common/Events.vo common/Memory.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Locations.vo backend/Conventions.vo +backend/LTLtyping.vo backend/LTLtyping.glob backend/LTLtyping.v.beautified: backend/LTLtyping.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTL.vo backend/Conventions.vo +backend/InterfGraph.vo backend/InterfGraph.glob backend/InterfGraph.v.beautified: backend/InterfGraph.v lib/Coqlib.vo lib/Ordered.vo backend/Registers.vo backend/Locations.vo +backend/Coloring.vo backend/Coloring.glob backend/Coloring.v.beautified: backend/Coloring.v lib/Coqlib.vo lib/Maps.vo common/AST.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo backend/RTLtyping.vo backend/Locations.vo backend/Conventions.vo backend/InterfGraph.vo +backend/Coloringproof.vo backend/Coloringproof.glob backend/Coloringproof.v.beautified: backend/Coloringproof.v lib/Coqlib.vo lib/Maps.vo common/AST.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo backend/RTLtyping.vo backend/Locations.vo backend/Conventions.vo backend/InterfGraph.vo backend/Coloring.vo +backend/Allocation.vo backend/Allocation.glob backend/Allocation.v.beautified: backend/Allocation.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo lib/Lattice.vo common/AST.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo backend/RTLtyping.vo backend/Kildall.vo backend/Locations.vo backend/Coloring.vo backend/LTL.vo +backend/Allocproof.vo backend/Allocproof.glob backend/Allocproof.v.beautified: backend/Allocproof.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Values.vo common/Memory.vo common/Events.vo common/Smallstep.vo common/Globalenvs.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo backend/RTLtyping.vo backend/Locations.vo backend/Conventions.vo backend/Coloring.vo backend/Coloringproof.vo backend/Allocation.vo backend/LTL.vo +backend/Alloctyping.vo backend/Alloctyping.glob backend/Alloctyping.v.beautified: backend/Alloctyping.v lib/Coqlib.vo lib/Maps.vo common/Errors.vo common/AST.vo $(ARCH)/Op.vo backend/Registers.vo backend/RTL.vo backend/Locations.vo backend/LTL.vo backend/Coloring.vo backend/Coloringproof.vo backend/Allocation.vo backend/Allocproof.vo backend/RTLtyping.vo backend/LTLtyping.vo backend/Conventions.vo +backend/Tunneling.vo backend/Tunneling.glob backend/Tunneling.v.beautified: backend/Tunneling.v lib/Coqlib.vo lib/Maps.vo lib/UnionFind.vo common/AST.vo backend/LTL.vo +backend/Tunnelingproof.vo backend/Tunnelingproof.glob backend/Tunnelingproof.v.beautified: backend/Tunnelingproof.v lib/Coqlib.vo lib/Maps.vo lib/UnionFind.vo common/AST.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTL.vo backend/Tunneling.vo +backend/Tunnelingtyping.vo backend/Tunnelingtyping.glob backend/Tunnelingtyping.v.beautified: backend/Tunnelingtyping.v lib/Coqlib.vo lib/Maps.vo common/AST.vo backend/LTL.vo backend/LTLtyping.vo backend/Tunneling.vo backend/Tunnelingproof.vo +backend/LTLin.vo backend/LTLin.glob backend/LTLin.v.beautified: backend/LTLin.v lib/Coqlib.vo common/AST.vo lib/Integers.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTL.vo +backend/LTLintyping.vo backend/LTLintyping.glob backend/LTLintyping.v.beautified: backend/LTLintyping.v lib/Coqlib.vo common/AST.vo lib/Integers.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTLin.vo backend/LTLtyping.vo backend/Conventions.vo +backend/Linearize.vo backend/Linearize.glob backend/Linearize.v.beautified: backend/Linearize.v lib/Coqlib.vo lib/Maps.vo lib/Ordered.vo common/AST.vo common/Errors.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTL.vo backend/LTLin.vo backend/Kildall.vo lib/Lattice.vo +backend/Linearizeproof.vo backend/Linearizeproof.glob backend/Linearizeproof.v.beautified: backend/Linearizeproof.v lib/Coqlib.vo lib/Maps.vo lib/Ordered.vo common/AST.vo lib/Integers.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Errors.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTL.vo backend/LTLtyping.vo backend/LTLin.vo backend/Linearize.vo lib/Lattice.vo +backend/Linearizetyping.vo backend/Linearizetyping.glob backend/Linearizetyping.v.beautified: backend/Linearizetyping.v lib/Coqlib.vo lib/Maps.vo common/Errors.vo common/AST.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTL.vo backend/LTLtyping.vo backend/LTLin.vo backend/Linearize.vo backend/LTLintyping.vo backend/Conventions.vo +backend/CleanupLabels.vo backend/CleanupLabels.glob backend/CleanupLabels.v.beautified: backend/CleanupLabels.v lib/Coqlib.vo lib/Ordered.vo backend/LTLin.vo +backend/CleanupLabelsproof.vo backend/CleanupLabelsproof.glob backend/CleanupLabelsproof.v.beautified: backend/CleanupLabelsproof.v lib/Coqlib.vo lib/Ordered.vo common/AST.vo lib/Integers.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTLin.vo backend/CleanupLabels.vo +backend/CleanupLabelstyping.vo backend/CleanupLabelstyping.glob backend/CleanupLabelstyping.v.beautified: backend/CleanupLabelstyping.v lib/Coqlib.vo lib/Maps.vo common/AST.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTLin.vo backend/CleanupLabels.vo backend/LTLintyping.vo +backend/Linear.vo backend/Linear.glob backend/Linear.v.beautified: backend/Linear.v lib/Coqlib.vo common/AST.vo lib/Integers.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTL.vo backend/Conventions.vo +backend/Lineartyping.vo backend/Lineartyping.glob backend/Lineartyping.v.beautified: backend/Lineartyping.v lib/Coqlib.vo common/AST.vo lib/Integers.vo common/Values.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTL.vo backend/Linear.vo backend/Conventions.vo +backend/Parallelmove.vo backend/Parallelmove.glob backend/Parallelmove.v.beautified: backend/Parallelmove.v lib/Coqlib.vo lib/Parmov.vo common/Values.vo common/AST.vo backend/Locations.vo backend/Conventions.vo +backend/Reload.vo backend/Reload.glob backend/Reload.v.beautified: backend/Reload.v lib/Coqlib.vo common/AST.vo lib/Integers.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTLin.vo backend/Conventions.vo backend/Parallelmove.vo backend/Linear.vo +backend/Reloadproof.vo backend/Reloadproof.glob backend/Reloadproof.v.beautified: backend/Reloadproof.v lib/Coqlib.vo common/AST.vo lib/Integers.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Locations.vo backend/Conventions.vo backend/RTLtyping.vo backend/LTLin.vo backend/LTLintyping.vo backend/Linear.vo backend/Parallelmove.vo backend/Reload.vo +backend/Reloadtyping.vo backend/Reloadtyping.glob backend/Reloadtyping.v.beautified: backend/Reloadtyping.v lib/Coqlib.vo common/AST.vo $(ARCH)/Op.vo backend/Locations.vo backend/LTLin.vo backend/LTLintyping.vo backend/Linear.vo backend/Lineartyping.vo backend/Conventions.vo backend/Parallelmove.vo backend/Reload.vo backend/Reloadproof.vo +backend/RRE.vo backend/RRE.glob backend/RRE.v.beautified: backend/RRE.v lib/Coqlib.vo common/AST.vo $(ARCH)/Op.vo backend/Locations.vo backend/Conventions.vo backend/Linear.vo +backend/RREproof.vo backend/RREproof.glob backend/RREproof.v.beautified: backend/RREproof.v lib/Axioms.vo lib/Coqlib.vo common/AST.vo common/Values.vo common/Globalenvs.vo common/Events.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Locations.vo backend/Conventions.vo backend/Linear.vo backend/RRE.vo +backend/RREtyping.vo backend/RREtyping.glob backend/RREtyping.v.beautified: backend/RREtyping.v lib/Coqlib.vo common/AST.vo backend/Locations.vo backend/Linear.vo backend/Lineartyping.vo backend/Conventions.vo backend/RRE.vo backend/RREproof.vo +backend/Mach.vo backend/Mach.glob backend/Mach.v.beautified: backend/Mach.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo common/Values.vo common/Globalenvs.vo $(ARCH)/Op.vo backend/Locations.vo backend/Conventions.vo +backend/Machtyping.vo backend/Machtyping.glob backend/Machtyping.v.beautified: backend/Machtyping.v lib/Coqlib.vo common/AST.vo lib/Integers.vo $(ARCH)/Op.vo backend/Locations.vo backend/Conventions.vo backend/Mach.vo +backend/Bounds.vo backend/Bounds.glob backend/Bounds.v.beautified: backend/Bounds.v lib/Coqlib.vo common/AST.vo $(ARCH)/Op.vo backend/Locations.vo backend/Linear.vo backend/Lineartyping.vo backend/Conventions.vo +$(ARCH)/$(VARIANT)/Stacklayout.vo $(ARCH)/$(VARIANT)/Stacklayout.glob $(ARCH)/$(VARIANT)/Stacklayout.v.beautified: $(ARCH)/$(VARIANT)/Stacklayout.v lib/Coqlib.vo backend/Bounds.vo +backend/Stacking.vo backend/Stacking.glob backend/Stacking.v.beautified: backend/Stacking.v lib/Coqlib.vo common/Errors.vo common/AST.vo lib/Integers.vo $(ARCH)/Op.vo backend/Locations.vo backend/Linear.vo backend/Bounds.vo backend/Mach.vo backend/Conventions.vo $(ARCH)/$(VARIANT)/Stacklayout.vo +backend/Stackingproof.vo backend/Stackingproof.glob backend/Stackingproof.v.beautified: backend/Stackingproof.v lib/Coqlib.vo common/Errors.vo common/AST.vo lib/Integers.vo common/Values.vo $(ARCH)/Op.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo backend/Locations.vo backend/LTL.vo backend/Linear.vo backend/Lineartyping.vo backend/Mach.vo backend/Machsem.vo backend/Bounds.vo backend/Conventions.vo $(ARCH)/$(VARIANT)/Stacklayout.vo backend/Stacking.vo +backend/Stackingtyping.vo backend/Stackingtyping.glob backend/Stackingtyping.v.beautified: backend/Stackingtyping.v lib/Coqlib.vo common/Errors.vo lib/Integers.vo common/AST.vo $(ARCH)/Op.vo backend/Locations.vo backend/Conventions.vo backend/Linear.vo backend/Lineartyping.vo backend/Mach.vo backend/Machtyping.vo backend/Bounds.vo $(ARCH)/$(VARIANT)/Stacklayout.vo backend/Stacking.vo backend/Stackingproof.vo +backend/Machsem.vo backend/Machsem.glob backend/Machsem.v.beautified: backend/Machsem.v lib/Coqlib.vo common/AST.vo lib/Integers.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Locations.vo backend/Conventions.vo backend/Mach.vo $(ARCH)/$(VARIANT)/Stacklayout.vo $(ARCH)/Asmgenretaddr.vo +$(ARCH)/Asm.vo $(ARCH)/Asm.glob $(ARCH)/Asm.v.beautified: $(ARCH)/Asm.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo backend/Locations.vo $(ARCH)/$(VARIANT)/Stacklayout.vo backend/Conventions.vo +$(ARCH)/Asmgen.vo $(ARCH)/Asmgen.glob $(ARCH)/Asmgen.v.beautified: $(ARCH)/Asmgen.v lib/Coqlib.vo common/Errors.vo common/AST.vo lib/Integers.vo lib/Floats.vo $(ARCH)/Op.vo backend/Locations.vo backend/Mach.vo $(ARCH)/Asm.vo +$(ARCH)/Asmgenretaddr.vo $(ARCH)/Asmgenretaddr.glob $(ARCH)/Asmgenretaddr.v.beautified: $(ARCH)/Asmgenretaddr.v lib/Coqlib.vo common/AST.vo common/Errors.vo lib/Integers.vo lib/Floats.vo $(ARCH)/Op.vo backend/Locations.vo backend/Mach.vo $(ARCH)/Asm.vo $(ARCH)/Asmgen.vo +$(ARCH)/Asmgenproof1.vo $(ARCH)/Asmgenproof1.glob $(ARCH)/Asmgenproof1.v.beautified: $(ARCH)/Asmgenproof1.v lib/Coqlib.vo common/AST.vo common/Errors.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Globalenvs.vo $(ARCH)/Op.vo backend/Locations.vo backend/Mach.vo backend/Machsem.vo backend/Machtyping.vo $(ARCH)/Asm.vo $(ARCH)/Asmgen.vo backend/Conventions.vo +$(ARCH)/Asmgenproof.vo $(ARCH)/Asmgenproof.glob $(ARCH)/Asmgenproof.v.beautified: $(ARCH)/Asmgenproof.v lib/Coqlib.vo common/Errors.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo $(ARCH)/Op.vo backend/Locations.vo backend/Mach.vo backend/Machsem.vo backend/Machtyping.vo backend/Conventions.vo $(ARCH)/Asm.vo $(ARCH)/Asmgen.vo $(ARCH)/Asmgenretaddr.vo $(ARCH)/Asmgenproof1.vo +cfrontend/Ctypes.vo cfrontend/Ctypes.glob cfrontend/Ctypes.v.beautified: cfrontend/Ctypes.v lib/Coqlib.vo common/AST.vo common/Errors.vo +cfrontend/Cop.vo cfrontend/Cop.glob cfrontend/Cop.v.beautified: cfrontend/Cop.v lib/Coqlib.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo cfrontend/Ctypes.vo +cfrontend/Csyntax.vo cfrontend/Csyntax.glob cfrontend/Csyntax.v.beautified: cfrontend/Csyntax.v lib/Coqlib.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/AST.vo cfrontend/Ctypes.vo cfrontend/Cop.vo +cfrontend/Csem.vo cfrontend/Csem.glob cfrontend/Csem.v.beautified: cfrontend/Csem.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/AST.vo common/Memory.vo common/Events.vo common/Globalenvs.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Csyntax.vo common/Smallstep.vo +cfrontend/Cstrategy.vo cfrontend/Cstrategy.glob cfrontend/Cstrategy.v.beautified: cfrontend/Cstrategy.v lib/Axioms.vo lib/Coqlib.vo common/Errors.vo lib/Maps.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/AST.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Csyntax.vo cfrontend/Csem.vo +cfrontend/Cexec.vo cfrontend/Cexec.glob cfrontend/Cexec.v.beautified: cfrontend/Cexec.v lib/Axioms.vo lib/Coqlib.vo common/Errors.vo lib/Maps.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/AST.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Determinism.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Csyntax.vo cfrontend/Csem.vo cfrontend/Cstrategy.vo +cfrontend/Initializers.vo cfrontend/Initializers.glob cfrontend/Initializers.v.beautified: cfrontend/Initializers.v lib/Coqlib.vo common/Errors.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/AST.vo common/Memory.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Csyntax.vo +cfrontend/Initializersproof.vo cfrontend/Initializersproof.glob cfrontend/Initializersproof.v.beautified: cfrontend/Initializersproof.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/AST.vo common/Memory.vo common/Globalenvs.vo common/Events.vo common/Smallstep.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Csyntax.vo cfrontend/Csem.vo cfrontend/Initializers.vo +cfrontend/SimplExpr.vo cfrontend/SimplExpr.glob cfrontend/SimplExpr.v.beautified: cfrontend/SimplExpr.v lib/Coqlib.vo common/Errors.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/AST.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Csyntax.vo cfrontend/Clight.vo +cfrontend/SimplExprspec.vo cfrontend/SimplExprspec.glob cfrontend/SimplExprspec.v.beautified: cfrontend/SimplExprspec.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo lib/Integers.vo lib/Floats.vo common/Memory.vo common/AST.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Csyntax.vo cfrontend/Clight.vo cfrontend/SimplExpr.vo +cfrontend/SimplExprproof.vo cfrontend/SimplExprproof.glob cfrontend/SimplExprproof.v.beautified: cfrontend/SimplExprproof.v lib/Coqlib.vo lib/Maps.vo common/AST.vo common/Errors.vo lib/Integers.vo common/Values.vo common/Memory.vo common/Events.vo common/Smallstep.vo common/Globalenvs.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Csyntax.vo cfrontend/Csem.vo cfrontend/Cstrategy.vo cfrontend/Clight.vo cfrontend/SimplExpr.vo cfrontend/SimplExprspec.vo +cfrontend/Clight.vo cfrontend/Clight.glob cfrontend/Clight.v.beautified: cfrontend/Clight.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/AST.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo cfrontend/Ctypes.vo cfrontend/Cop.vo +cfrontend/ClightBigstep.vo cfrontend/ClightBigstep.glob cfrontend/ClightBigstep.v.beautified: cfrontend/ClightBigstep.v lib/Coqlib.vo lib/Maps.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/AST.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Clight.vo +cfrontend/SimplLocals.vo cfrontend/SimplLocals.glob cfrontend/SimplLocals.v.beautified: cfrontend/SimplLocals.v lib/Coqlib.vo lib/Ordered.vo common/Errors.vo common/AST.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Clight.vo +cfrontend/SimplLocalsproof.vo cfrontend/SimplLocalsproof.glob cfrontend/SimplLocalsproof.v.beautified: cfrontend/SimplLocalsproof.v lib/Coqlib.vo common/Errors.vo lib/Ordered.vo common/AST.vo lib/Maps.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Globalenvs.vo common/Events.vo common/Smallstep.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Clight.vo cfrontend/SimplLocals.vo +cfrontend/Cshmgen.vo cfrontend/Cshmgen.glob cfrontend/Cshmgen.v.beautified: cfrontend/Cshmgen.v lib/Coqlib.vo common/Errors.vo lib/Integers.vo lib/Floats.vo common/AST.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Clight.vo backend/Cminor.vo cfrontend/Csharpminor.vo +cfrontend/Cshmgenproof.vo cfrontend/Cshmgenproof.glob cfrontend/Cshmgenproof.v.beautified: cfrontend/Cshmgenproof.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo lib/Integers.vo lib/Floats.vo common/AST.vo common/Values.vo common/Events.vo common/Memory.vo common/Globalenvs.vo common/Smallstep.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Clight.vo backend/Cminor.vo cfrontend/Csharpminor.vo cfrontend/Cshmgen.vo +cfrontend/Csharpminor.vo cfrontend/Csharpminor.glob cfrontend/Csharpminor.v.beautified: cfrontend/Csharpminor.v lib/Coqlib.vo lib/Maps.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo backend/Cminor.vo common/Smallstep.vo +cfrontend/Cminorgen.vo cfrontend/Cminorgen.glob cfrontend/Cminorgen.v.beautified: cfrontend/Cminorgen.v lib/Coqlib.vo common/Errors.vo lib/Maps.vo lib/Ordered.vo common/AST.vo lib/Integers.vo lib/Floats.vo cfrontend/Csharpminor.vo backend/Cminor.vo +cfrontend/Cminorgenproof.vo cfrontend/Cminorgenproof.glob cfrontend/Cminorgenproof.v.beautified: cfrontend/Cminorgenproof.v lib/Coqlib.vo lib/Intv.vo common/Errors.vo lib/Maps.vo common/AST.vo lib/Integers.vo lib/Floats.vo common/Values.vo common/Memory.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo common/Switch.vo cfrontend/Csharpminor.vo backend/Cminor.vo cfrontend/Cminorgen.vo +driver/Compiler.vo driver/Compiler.glob driver/Compiler.v.beautified: driver/Compiler.v lib/Coqlib.vo common/Errors.vo common/AST.vo common/Smallstep.vo cfrontend/Csyntax.vo cfrontend/Csem.vo cfrontend/Cstrategy.vo cfrontend/Cexec.vo cfrontend/Clight.vo cfrontend/Csharpminor.vo backend/Cminor.vo backend/CminorSel.vo backend/RTL.vo backend/LTL.vo backend/LTLin.vo backend/Linear.vo backend/Mach.vo backend/Machsem.vo $(ARCH)/Asm.vo cfrontend/Initializers.vo cfrontend/SimplExpr.vo cfrontend/SimplLocals.vo cfrontend/Cshmgen.vo cfrontend/Cminorgen.vo backend/Selection.vo backend/RTLgen.vo backend/Tailcall.vo backend/Inlining.vo backend/Renumber.vo backend/Constprop.vo backend/CSE.vo backend/Allocation.vo backend/Tunneling.vo backend/Linearize.vo backend/CleanupLabels.vo backend/Reload.vo backend/RRE.vo backend/Stacking.vo $(ARCH)/Asmgen.vo backend/RTLtyping.vo backend/LTLtyping.vo backend/LTLintyping.vo backend/Lineartyping.vo backend/Machtyping.vo cfrontend/SimplExprproof.vo cfrontend/SimplLocalsproof.vo cfrontend/Cshmgenproof.vo cfrontend/Cminorgenproof.vo backend/Selectionproof.vo backend/RTLgenproof.vo backend/Tailcallproof.vo backend/Inliningproof.vo backend/Renumberproof.vo backend/Constpropproof.vo backend/CSEproof.vo backend/Allocproof.vo backend/Alloctyping.vo backend/Tunnelingproof.vo backend/Tunnelingtyping.vo backend/Linearizeproof.vo backend/Linearizetyping.vo backend/CleanupLabelsproof.vo backend/CleanupLabelstyping.vo backend/Reloadproof.vo backend/Reloadtyping.vo backend/RREproof.vo backend/RREtyping.vo backend/Stackingproof.vo backend/Stackingtyping.vo $(ARCH)/Asmgenproof.vo +driver/Complements.vo driver/Complements.glob driver/Complements.v.beautified: driver/Complements.v lib/Coqlib.vo common/AST.vo lib/Integers.vo common/Values.vo common/Events.vo common/Globalenvs.vo common/Smallstep.vo common/Behaviors.vo cfrontend/Csyntax.vo cfrontend/Csem.vo cfrontend/Cstrategy.vo cfrontend/Clight.vo backend/Cminor.vo backend/RTL.vo $(ARCH)/Asm.vo driver/Compiler.vo common/Errors.vo +flocq/Core/Fcore_float_prop.vo flocq/Core/Fcore_float_prop.glob flocq/Core/Fcore_float_prop.v.beautified: flocq/Core/Fcore_float_prop.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo +flocq/Core/Fcore_Zaux.vo flocq/Core/Fcore_Zaux.glob flocq/Core/Fcore_Zaux.v.beautified: flocq/Core/Fcore_Zaux.v +flocq/Core/Fcore_rnd_ne.vo flocq/Core/Fcore_rnd_ne.glob flocq/Core/Fcore_rnd_ne.v.beautified: flocq/Core/Fcore_rnd_ne.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_rnd.vo flocq/Core/Fcore_generic_fmt.vo flocq/Core/Fcore_float_prop.vo flocq/Core/Fcore_ulp.vo +flocq/Core/Fcore_FTZ.vo flocq/Core/Fcore_FTZ.glob flocq/Core/Fcore_FTZ.v.beautified: flocq/Core/Fcore_FTZ.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_rnd.vo flocq/Core/Fcore_generic_fmt.vo flocq/Core/Fcore_float_prop.vo flocq/Core/Fcore_FLX.vo +flocq/Core/Fcore_FLT.vo flocq/Core/Fcore_FLT.glob flocq/Core/Fcore_FLT.v.beautified: flocq/Core/Fcore_FLT.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_rnd.vo flocq/Core/Fcore_generic_fmt.vo flocq/Core/Fcore_float_prop.vo flocq/Core/Fcore_FLX.vo flocq/Core/Fcore_FIX.vo flocq/Core/Fcore_rnd_ne.vo +flocq/Core/Fcore_defs.vo flocq/Core/Fcore_defs.glob flocq/Core/Fcore_defs.v.beautified: flocq/Core/Fcore_defs.v flocq/Core/Fcore_Raux.vo +flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_Raux.glob flocq/Core/Fcore_Raux.v.beautified: flocq/Core/Fcore_Raux.v flocq/Core/Fcore_Zaux.vo +flocq/Core/Fcore_ulp.vo flocq/Core/Fcore_ulp.glob flocq/Core/Fcore_ulp.v.beautified: flocq/Core/Fcore_ulp.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_rnd.vo flocq/Core/Fcore_generic_fmt.vo flocq/Core/Fcore_float_prop.vo +flocq/Core/Fcore_rnd.vo flocq/Core/Fcore_rnd.glob flocq/Core/Fcore_rnd.v.beautified: flocq/Core/Fcore_rnd.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo +flocq/Core/Fcore_FLX.vo flocq/Core/Fcore_FLX.glob flocq/Core/Fcore_FLX.v.beautified: flocq/Core/Fcore_FLX.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_rnd.vo flocq/Core/Fcore_generic_fmt.vo flocq/Core/Fcore_float_prop.vo flocq/Core/Fcore_FIX.vo flocq/Core/Fcore_rnd_ne.vo +flocq/Core/Fcore_FIX.vo flocq/Core/Fcore_FIX.glob flocq/Core/Fcore_FIX.v.beautified: flocq/Core/Fcore_FIX.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_rnd.vo flocq/Core/Fcore_generic_fmt.vo flocq/Core/Fcore_rnd_ne.vo +flocq/Core/Fcore_digits.vo flocq/Core/Fcore_digits.glob flocq/Core/Fcore_digits.v.beautified: flocq/Core/Fcore_digits.v flocq/Core/Fcore_Zaux.vo +flocq/Core/Fcore_generic_fmt.vo flocq/Core/Fcore_generic_fmt.glob flocq/Core/Fcore_generic_fmt.v.beautified: flocq/Core/Fcore_generic_fmt.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_rnd.vo flocq/Core/Fcore_float_prop.vo +flocq/Core/Fcore.vo flocq/Core/Fcore.glob flocq/Core/Fcore.v.beautified: flocq/Core/Fcore.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_float_prop.vo flocq/Core/Fcore_rnd.vo flocq/Core/Fcore_generic_fmt.vo flocq/Core/Fcore_rnd_ne.vo flocq/Core/Fcore_FIX.vo flocq/Core/Fcore_FLX.vo flocq/Core/Fcore_FLT.vo flocq/Core/Fcore_ulp.vo +flocq/Prop/Fprop_Sterbenz.vo flocq/Prop/Fprop_Sterbenz.glob flocq/Prop/Fprop_Sterbenz.v.beautified: flocq/Prop/Fprop_Sterbenz.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_generic_fmt.vo flocq/Calc/Fcalc_ops.vo +flocq/Prop/Fprop_mult_error.vo flocq/Prop/Fprop_mult_error.glob flocq/Prop/Fprop_mult_error.v.beautified: flocq/Prop/Fprop_mult_error.v flocq/Core/Fcore.vo flocq/Calc/Fcalc_ops.vo +flocq/Prop/Fprop_relative.vo flocq/Prop/Fprop_relative.glob flocq/Prop/Fprop_relative.v.beautified: flocq/Prop/Fprop_relative.v flocq/Core/Fcore.vo +flocq/Prop/Fprop_div_sqrt_error.vo flocq/Prop/Fprop_div_sqrt_error.glob flocq/Prop/Fprop_div_sqrt_error.v.beautified: flocq/Prop/Fprop_div_sqrt_error.v flocq/Core/Fcore.vo flocq/Calc/Fcalc_ops.vo flocq/Prop/Fprop_relative.vo +flocq/Prop/Fprop_plus_error.vo flocq/Prop/Fprop_plus_error.glob flocq/Prop/Fprop_plus_error.v.beautified: flocq/Prop/Fprop_plus_error.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_float_prop.vo flocq/Core/Fcore_generic_fmt.vo flocq/Calc/Fcalc_ops.vo +flocq/Calc/Fcalc_ops.vo flocq/Calc/Fcalc_ops.glob flocq/Calc/Fcalc_ops.v.beautified: flocq/Calc/Fcalc_ops.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_float_prop.vo +flocq/Calc/Fcalc_bracket.vo flocq/Calc/Fcalc_bracket.glob flocq/Calc/Fcalc_bracket.v.beautified: flocq/Calc/Fcalc_bracket.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_float_prop.vo +flocq/Calc/Fcalc_sqrt.vo flocq/Calc/Fcalc_sqrt.glob flocq/Calc/Fcalc_sqrt.v.beautified: flocq/Calc/Fcalc_sqrt.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_digits.vo flocq/Core/Fcore_float_prop.vo flocq/Calc/Fcalc_bracket.vo flocq/Calc/Fcalc_digits.vo +flocq/Calc/Fcalc_div.vo flocq/Calc/Fcalc_div.glob flocq/Calc/Fcalc_div.v.beautified: flocq/Calc/Fcalc_div.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_float_prop.vo flocq/Core/Fcore_digits.vo flocq/Calc/Fcalc_bracket.vo flocq/Calc/Fcalc_digits.vo +flocq/Calc/Fcalc_round.vo flocq/Calc/Fcalc_round.glob flocq/Calc/Fcalc_round.v.beautified: flocq/Calc/Fcalc_round.v flocq/Core/Fcore.vo flocq/Core/Fcore_digits.vo flocq/Calc/Fcalc_bracket.vo flocq/Calc/Fcalc_digits.vo +flocq/Calc/Fcalc_digits.vo flocq/Calc/Fcalc_digits.glob flocq/Calc/Fcalc_digits.v.beautified: flocq/Calc/Fcalc_digits.v flocq/Core/Fcore_Raux.vo flocq/Core/Fcore_defs.vo flocq/Core/Fcore_float_prop.vo flocq/Core/Fcore_digits.vo +flocq/Appli/Fappli_IEEE_bits.vo flocq/Appli/Fappli_IEEE_bits.glob flocq/Appli/Fappli_IEEE_bits.v.beautified: flocq/Appli/Fappli_IEEE_bits.v flocq/Core/Fcore.vo flocq/Core/Fcore_digits.vo flocq/Calc/Fcalc_digits.vo flocq/Appli/Fappli_IEEE.vo +flocq/Appli/Fappli_IEEE.vo flocq/Appli/Fappli_IEEE.glob flocq/Appli/Fappli_IEEE.v.beautified: flocq/Appli/Fappli_IEEE.v flocq/Core/Fcore.vo flocq/Core/Fcore_digits.vo flocq/Calc/Fcalc_digits.vo flocq/Calc/Fcalc_round.vo flocq/Calc/Fcalc_bracket.vo flocq/Calc/Fcalc_ops.vo flocq/Calc/Fcalc_div.vo flocq/Calc/Fcalc_sqrt.vo flocq/Prop/Fprop_relative.vo +exportclight/Clightdefs.vo exportclight/Clightdefs.glob exportclight/Clightdefs.v.beautified: exportclight/Clightdefs.v lib/Integers.vo lib/Floats.vo common/AST.vo cfrontend/Ctypes.vo cfrontend/Cop.vo cfrontend/Clight.vo diff --git a/Changelog b/Changelog index 89551a2..8a278a3 100644 --- a/Changelog +++ b/Changelog @@ -1,3 +1,9 @@ +Release 1.12.1, 2013-01-29 +========================== + +Ported to Coq 8.4pl1. Otherwise functionally identical to release 1.12. + + Release 1.12, 2013-01-11 ======================== diff --git a/arm/Asmgenproof.v b/arm/Asmgenproof.v index 8ee9c2e..b0598e9 100644 --- a/arm/Asmgenproof.v +++ b/arm/Asmgenproof.v @@ -1087,7 +1087,8 @@ Proof. exploit eval_condition_lessdef. eapply preg_vals; eauto. eauto. eauto. intros A. exploit transl_cond_correct. eauto. eauto. - instantiate (1 := rs). instantiate (1 := m'). unfold PregEq.t. rewrite A. + instantiate (1 := rs). instantiate (1 := m'). + rewrite A || (unfold PregEq.t; rewrite A). intros [rs2 [EX [RES OTH]]]. inv AT. simpl in H5. generalize (functions_transl _ _ H4); intro FN. @@ -1123,7 +1124,8 @@ Proof. exploit eval_condition_lessdef. eapply preg_vals; eauto. eauto. eauto. intros A. exploit transl_cond_correct. eauto. - instantiate (1 := rs). instantiate (1 := m'). unfold PregEq.t. rewrite A. + instantiate (1 := rs). instantiate (1 := m'). + rewrite A || (unfold PregEq.t; rewrite A). intros [rs2 [EX [RES OTH]]]. left; eapply exec_straight_steps; eauto with coqlib. exists m'; split; auto. diff --git a/arm/Asmgenproof1.v b/arm/Asmgenproof1.v index e7d2509..19edcd9 100644 --- a/arm/Asmgenproof1.v +++ b/arm/Asmgenproof1.v @@ -539,7 +539,7 @@ Proof. auto. rewrite IHl. rewrite DISTR. decEq. decEq. auto. intros. unfold decompose_int. - destruct (decompose_int_rec 12 n Int.zero) as []_eqn. + destruct (decompose_int_rec 12 n Int.zero) eqn:?. simpl. exploit decompose_int_rec_nil; eauto. congruence. simpl. rewrite B. decEq. generalize (DECOMP 12%nat n Int.zero Int.zero). @@ -617,7 +617,7 @@ Lemma iterate_op_correct: Proof. intros until k; intros SEM2 SEM1. unfold iterate_op. - destruct (decompose_int n) as [ | i tl] _eqn. + destruct (decompose_int n) as [ | i tl] eqn:?. unfold decompose_int in Heql. destruct (decompose_int_rec 12%nat n Int.zero); congruence. revert k. pattern tl. apply List.rev_ind. (* base case *) @@ -1256,7 +1256,7 @@ Proof. eapply exec_straight_trans. eauto. apply exec_straight_two with rs2 m; auto. simpl. unfold rs3, v. - destruct (rs2 (crbit_for_cond c)) as []_eqn; auto. + destruct (rs2 (crbit_for_cond c)) eqn:?; auto. destruct (Int.eq i Int.zero); auto. decEq. decEq. apply extensionality; intros. unfold Pregmap.set. destruct (PregEq.eq x (ireg_of res)); auto. subst. @@ -1380,6 +1380,7 @@ Lemma transl_load_int_correct: Proof. intros. unfold transl_load_store_int. exploit eval_addressing_lessdef. eapply preg_vals; eauto. eauto. + unfold PregEq.t. intros [a' [A B]]. exploit Mem.loadv_extends; eauto. intros [v' [C D]]. apply transl_load_store_correct with ms; auto. @@ -1421,6 +1422,7 @@ Lemma transl_load_float_correct: Proof. intros. unfold transl_load_store_int. exploit eval_addressing_lessdef. eapply preg_vals; eauto. eauto. + unfold PregEq.t. intros [a' [A B]]. exploit Mem.loadv_extends; eauto. intros [v' [C D]]. apply transl_load_store_correct with ms; auto. @@ -1455,7 +1457,8 @@ Lemma transl_store_int_correct: /\ agree (undef_temps ms) sp rs'. Proof. intros. unfold transl_load_store_int. - exploit eval_addressing_lessdef. eapply preg_vals; eauto. eauto. + exploit eval_addressing_lessdef. eapply preg_vals; eauto. eauto. + unfold PregEq.t. intros [a' [A B]]. exploit preg_val; eauto. instantiate (1 := rd). intros C. exploit Mem.storev_extends; eauto. unfold preg_of; rewrite H2. intros [m2' [D E]]. @@ -1498,7 +1501,8 @@ Lemma transl_store_float_correct: /\ agree (undef_temps ms) sp rs'. Proof. intros. unfold transl_load_store_float. - exploit eval_addressing_lessdef. eapply preg_vals; eauto. eauto. + exploit eval_addressing_lessdef. eapply preg_vals; eauto. eauto. + unfold PregEq.t. intros [a' [A B]]. exploit preg_val; eauto. instantiate (1 := rd). intros C. exploit Mem.storev_extends; eauto. unfold preg_of; rewrite H2. intros [m2' [D E]]. diff --git a/arm/ConstpropOpproof.v b/arm/ConstpropOpproof.v index 4c38d5e..e7e6a41 100644 --- a/arm/ConstpropOpproof.v +++ b/arm/ConstpropOpproof.v @@ -149,7 +149,7 @@ Proof. destruct (propagate_float_constants tt); simpl; auto. destruct (propagate_float_constants tt); simpl; auto. unfold eval_static_condition_val, Val.of_optbool. - destruct (eval_static_condition c vl0) as []_eqn. + destruct (eval_static_condition c vl0) eqn:?. rewrite (eval_static_condition_correct _ _ _ m _ H Heqo). destruct b; simpl; auto. simpl; auto. @@ -247,7 +247,7 @@ Proof. intros; unfold make_shlimm. predSpec Int.eq Int.eq_spec n Int.zero; intros. subst. exists (rs#r1); split; auto. destruct (rs#r1); simpl; auto. rewrite Int.shl_zero. auto. - destruct (Int.ltu n Int.iwordsize) as []_eqn; intros. + destruct (Int.ltu n Int.iwordsize) eqn:?; intros. econstructor; split. simpl; eauto. rewrite mk_shift_amount_eq; auto. econstructor; split; eauto. simpl. congruence. Qed. @@ -261,7 +261,7 @@ Proof. intros; unfold make_shrimm. predSpec Int.eq Int.eq_spec n Int.zero; intros. subst. exists (rs#r1); split; auto. destruct (rs#r1); simpl; auto. rewrite Int.shr_zero. auto. - destruct (Int.ltu n Int.iwordsize) as []_eqn; intros. + destruct (Int.ltu n Int.iwordsize) eqn:?; intros. econstructor; split. simpl; eauto. rewrite mk_shift_amount_eq; auto. econstructor; split; eauto. simpl. congruence. Qed. @@ -275,7 +275,7 @@ Proof. intros; unfold make_shruimm. predSpec Int.eq Int.eq_spec n Int.zero; intros. subst. exists (rs#r1); split; auto. destruct (rs#r1); simpl; auto. rewrite Int.shru_zero. auto. - destruct (Int.ltu n Int.iwordsize) as []_eqn; intros. + destruct (Int.ltu n Int.iwordsize) eqn:?; intros. econstructor; split. simpl; eauto. rewrite mk_shift_amount_eq; auto. econstructor; split; eauto. simpl. congruence. Qed. @@ -291,7 +291,7 @@ Proof. exists (Vint Int.zero); split; auto. destruct (rs#r1); simpl; auto. rewrite Int.mul_zero; auto. predSpec Int.eq Int.eq_spec n Int.one; intros. subst. exists (rs#r1); split; auto. destruct (rs#r1); simpl; auto. rewrite Int.mul_one; auto. - destruct (Int.is_power2 n) as []_eqn; intros. + destruct (Int.is_power2 n) eqn:?; intros. exploit Int.is_power2_range; eauto. intros R. econstructor; split. simpl; eauto. rewrite mk_shift_amount_eq; auto. rewrite (Val.mul_pow2 rs#r1 _ _ Heqo). auto. @@ -306,8 +306,8 @@ Lemma make_divimm_correct: exists w, eval_operation ge sp op rs##args m = Some w /\ Val.lessdef v w. Proof. intros; unfold make_divimm. - destruct (Int.is_power2 n) as []_eqn. - destruct (Int.ltu i (Int.repr 31)) as []_eqn. + destruct (Int.is_power2 n) eqn:?. + destruct (Int.ltu i (Int.repr 31)) eqn:?. exists v; split; auto. simpl. eapply Val.divs_pow2; eauto. congruence. exists v; auto. exists v; auto. @@ -321,7 +321,7 @@ Lemma make_divuimm_correct: exists w, eval_operation ge sp op rs##args m = Some w /\ Val.lessdef v w. Proof. intros; unfold make_divuimm. - destruct (Int.is_power2 n) as []_eqn. + destruct (Int.is_power2 n) eqn:?. replace v with (Val.shru rs#r1 (Vint i)). econstructor; split. simpl. rewrite mk_shift_amount_eq. eauto. eapply Int.is_power2_range; eauto. auto. diff --git a/arm/Op.v b/arm/Op.v index cfe8b83..f26bccc 100644 --- a/arm/Op.v +++ b/arm/Op.v @@ -775,8 +775,8 @@ Opaque Int.add. Val.cmpu_bool (Mem.valid_pointer m1) c v1 v2 = Some b -> Val.cmpu_bool (Mem.valid_pointer m2) c v1' v2' = Some b). intros. inv H; simpl in H1; try discriminate; inv H0; simpl in H1; try discriminate; simpl; auto. - destruct (Mem.valid_pointer m1 b1 (Int.unsigned ofs1)) as []_eqn; try discriminate. - destruct (Mem.valid_pointer m1 b0 (Int.unsigned ofs0)) as []_eqn; try discriminate. + destruct (Mem.valid_pointer m1 b1 (Int.unsigned ofs1)) eqn:?; try discriminate. + destruct (Mem.valid_pointer m1 b0 (Int.unsigned ofs0)) eqn:?; try discriminate. rewrite (valid_pointer_inj _ H2 Heqb4). rewrite (valid_pointer_inj _ H Heqb0). simpl. destruct (zeq b1 b0); simpl in H1. @@ -796,8 +796,8 @@ Opaque Int.add. eapply CMPU; eauto. eapply CMP. eauto. eapply eval_shift_inj. eauto. auto. eapply CMPU. eauto. eapply eval_shift_inj. eauto. auto. - eapply CMP; eauto. - eapply CMPU; eauto. + eapply CMP; try eassumption; eauto. + eapply CMPU; try eassumption; eauto. inv H3; inv H2; simpl in H0; inv H0; auto. inv H3; inv H2; simpl in H0; inv H0; auto. inv H3; simpl in H0; inv H0; auto. @@ -871,7 +871,7 @@ Proof. inv H4; simpl in *; inv H1. TrivialExists. inv H4; simpl in *; inv H1. TrivialExists. - subst v1. destruct (eval_condition c vl1 m1) as []_eqn. + subst v1. destruct (eval_condition c vl1 m1) eqn:?. exploit eval_condition_inj; eauto. intros EQ; rewrite EQ. destruct b; simpl; constructor. simpl; constructor. @@ -1005,7 +1005,7 @@ Hypothesis sp_inj: f sp1 = Some(sp2, delta). Remark symbol_address_inject: forall id ofs, val_inject f (symbol_address genv id ofs) (symbol_address genv id ofs). Proof. - intros. unfold symbol_address. destruct (Genv.find_symbol genv id) as []_eqn; auto. + intros. unfold symbol_address. destruct (Genv.find_symbol genv id) eqn:?; auto. exploit (proj1 globals); eauto. intros. econstructor; eauto. rewrite Int.add_zero; auto. Qed. diff --git a/arm/PrintAsm.ml b/arm/PrintAsm.ml index 6415248..9d09fc1 100644 --- a/arm/PrintAsm.ml +++ b/arm/PrintAsm.ml @@ -719,7 +719,7 @@ let print_init oc = function fprintf oc " .quad %Ld %s %.18g\n" (camlint64_of_coqint (Floats.Float.bits_of_double n)) comment (camlfloat_of_coqfloat n) | Init_space n -> - let n = camlint_of_z n in + let n = Z.to_int32 n in if n > 0l then fprintf oc " .space %ld\n" n | Init_addrof(symb, ofs) -> fprintf oc " .word %a\n" print_symb_ofs (symb, ofs) diff --git a/arm/SelectOpproof.v b/arm/SelectOpproof.v index e25fb0c..ecc758f 100644 --- a/arm/SelectOpproof.v +++ b/arm/SelectOpproof.v @@ -204,10 +204,10 @@ Opaque mk_shift_amount. red; intros until x. unfold shlimm. predSpec Int.eq Int.eq_spec n Int.zero. intros; subst. exists x; split; auto. destruct x; simpl; auto. rewrite Int.shl_zero; auto. - destruct (Int.ltu n Int.iwordsize) as []_eqn; simpl. + destruct (Int.ltu n Int.iwordsize) eqn:?; simpl. destruct (shlimm_match a); intros. InvEval. simpl; rewrite Heqb. TrivialExists. - destruct (Int.ltu (Int.add n n1) Int.iwordsize) as []_eqn. + destruct (Int.ltu (Int.add n n1) Int.iwordsize) eqn:?. InvEval. subst x. exists (Val.shl v1 (Vint (Int.add n n1))); split. EvalOp. simpl. rewrite mk_shift_amount_eq; auto. destruct v1; simpl; auto. rewrite s_range. simpl. rewrite Heqb. rewrite Heqb0. @@ -224,10 +224,10 @@ Proof. red; intros until x. unfold shrimm. predSpec Int.eq Int.eq_spec n Int.zero. intros; subst. exists x; split; auto. destruct x; simpl; auto. rewrite Int.shr_zero; auto. - destruct (Int.ltu n Int.iwordsize) as []_eqn; simpl. + destruct (Int.ltu n Int.iwordsize) eqn:?; simpl. destruct (shrimm_match a); intros. InvEval. simpl; rewrite Heqb. TrivialExists. - destruct (Int.ltu (Int.add n n1) Int.iwordsize) as []_eqn. + destruct (Int.ltu (Int.add n n1) Int.iwordsize) eqn:?. InvEval. subst x. exists (Val.shr v1 (Vint (Int.add n n1))); split. EvalOp. simpl. rewrite mk_shift_amount_eq; auto. destruct v1; simpl; auto. rewrite s_range. simpl. rewrite Heqb. rewrite Heqb0. @@ -244,13 +244,13 @@ Proof. red; intros until x. unfold shruimm. predSpec Int.eq Int.eq_spec n Int.zero. intros; subst. exists x; split; auto. destruct x; simpl; auto. rewrite Int.shru_zero; auto. - destruct (Int.ltu n Int.iwordsize) as []_eqn; simpl. + destruct (Int.ltu n Int.iwordsize) eqn:?; simpl. destruct (shruimm_match a); intros. InvEval. simpl; rewrite Heqb. TrivialExists. - destruct (Int.ltu (Int.add n n1) Int.iwordsize) as []_eqn. + destruct (Int.ltu (Int.add n n1) Int.iwordsize) eqn:?. InvEval. subst x. exists (Val.shru v1 (Vint (Int.add n n1))); split. EvalOp. simpl. rewrite mk_shift_amount_eq; auto. - destruct v1; simpl; auto. destruct (Int.ltu n1 Int.iwordsize) as []_eqn; simpl; auto. + destruct v1; simpl; auto. destruct (Int.ltu n1 Int.iwordsize) eqn:?; simpl; auto. rewrite Heqb; rewrite Heqb0. rewrite Int.add_commut. rewrite Int.shru_shru; auto. rewrite Int.add_commut; auto. TrivialExists. simpl. rewrite mk_shift_amount_eq; auto. TrivialExists. simpl. rewrite mk_shift_amount_eq; auto. @@ -379,27 +379,27 @@ Proof. rewrite Val.or_commut. apply eval_orimm; auto. apply eval_orimm; auto. (* shl - shru *) - destruct (Int.eq (Int.add n1 n2) Int.iwordsize && same_expr_pure t1 t2) as []_eqn. + destruct (Int.eq (Int.add n1 n2) Int.iwordsize && same_expr_pure t1 t2) eqn:?. destruct (andb_prop _ _ Heqb0). generalize (Int.eq_spec (Int.add n1 n2) Int.iwordsize); rewrite H1; intros. exploit eval_same_expr; eauto. intros [EQ1 EQ2]. subst. exists (Val.ror v0 (Vint n2)); split. EvalOp. destruct v0; simpl; auto. - destruct (Int.ltu n1 Int.iwordsize) as []_eqn; auto. - destruct (Int.ltu n2 Int.iwordsize) as []_eqn; auto. + destruct (Int.ltu n1 Int.iwordsize) eqn:?; auto. + destruct (Int.ltu n2 Int.iwordsize) eqn:?; auto. simpl. rewrite <- Int.or_ror; auto. subst. TrivialExists. econstructor. EvalOp. simpl; eauto. econstructor; eauto. constructor. simpl. auto. (* shru - shr *) - destruct (Int.eq (Int.add n2 n1) Int.iwordsize && same_expr_pure t1 t2) as []_eqn. + destruct (Int.eq (Int.add n2 n1) Int.iwordsize && same_expr_pure t1 t2) eqn:?. destruct (andb_prop _ _ Heqb0). generalize (Int.eq_spec (Int.add n2 n1) Int.iwordsize); rewrite H1; intros. exploit eval_same_expr; eauto. intros [EQ1 EQ2]. subst. exists (Val.ror v0 (Vint n1)); split. EvalOp. destruct v0; simpl; auto. - destruct (Int.ltu n1 Int.iwordsize) as []_eqn; auto. - destruct (Int.ltu n2 Int.iwordsize) as []_eqn; auto. + destruct (Int.ltu n1 Int.iwordsize) eqn:?; auto. + destruct (Int.ltu n2 Int.iwordsize) eqn:?; auto. simpl. rewrite Int.or_commut. rewrite <- Int.or_ror; auto. subst. TrivialExists. econstructor. EvalOp. simpl; eauto. econstructor; eauto. constructor. @@ -490,7 +490,7 @@ Theorem eval_divuimm: exists v, eval_expr ge sp e m le (divuimm a n) v /\ Val.lessdef z v. Proof. intros; unfold divuimm. - destruct (Int.is_power2 n) as []_eqn. + destruct (Int.is_power2 n) eqn:?. replace z with (Val.shru x (Vint i)). apply eval_shruimm; auto. eapply Val.divu_pow2; eauto. TrivialExists. @@ -516,7 +516,7 @@ Theorem eval_moduimm: exists v, eval_expr ge sp e m le (moduimm a n) v /\ Val.lessdef z v. Proof. intros; unfold moduimm. - destruct (Int.is_power2 n) as []_eqn. + destruct (Int.is_power2 n) eqn:?. replace z with (Val.and x (Vint (Int.sub n Int.one))). TrivialExists. eapply Val.modu_pow2; eauto. exploit Val.modu_divu; eauto. intros [v [A B]]. diff --git a/backend/CMlexer.mll b/backend/CMlexer.mll index eac48e0..4083c95 100644 --- a/backend/CMlexer.mll +++ b/backend/CMlexer.mll @@ -14,6 +14,7 @@ (* *********************************************************************) { +open BinNums open Camlcoq open CMparser exception Error of string diff --git a/backend/CMparser.mly b/backend/CMparser.mly index ff77c03..eb3b9ab 100644 --- a/backend/CMparser.mly +++ b/backend/CMparser.mly @@ -19,8 +19,7 @@ %{ open Datatypes open Camlcoq -open BinPos -open BinInt +open BinNums open Integers open AST open Cminor @@ -45,16 +44,16 @@ let mkef sg toks = EF_vstore c | [EFT_tok "volatile"; EFT_tok "load"; EFT_chunk c; EFT_tok "global"; EFT_string s; EFT_int n] -> - EF_vload_global(c, intern_string s, z_of_camlint n) + EF_vload_global(c, intern_string s, coqint_of_camlint n) | [EFT_tok "volatile"; EFT_tok "store"; EFT_chunk c; EFT_tok "global"; EFT_string s; EFT_int n] -> - EF_vstore_global(c, intern_string s, z_of_camlint n) + EF_vstore_global(c, intern_string s, coqint_of_camlint n) | [EFT_tok "malloc"] -> EF_malloc | [EFT_tok "free"] -> EF_free | [EFT_tok "memcpy"; EFT_tok "size"; EFT_int sz; EFT_tok "align"; EFT_int al] -> - EF_memcpy(z_of_camlint sz, z_of_camlint al) + EF_memcpy(Z.of_sint32 sz, Z.of_sint32 al) | [EFT_tok "annot"; EFT_string txt] -> EF_annot(intern_string txt, sg.sig_args) | [EFT_tok "annot_val"; EFT_string txt] -> @@ -183,7 +182,7 @@ let mkwhile expr body = let intconst n = Rconst(Ointconst(coqint_of_camlint n)) -let exitnum n = nat_of_camlint n +let exitnum n = Nat.of_int32 n let mkswitch expr (cases, dfl) = convert_accu := []; @@ -211,25 +210,25 @@ let mkswitch expr (cases, dfl) = ***) let mkmatch_aux expr cases = - let ncases = Int32.of_int (List.length cases) in + let ncases = List.length cases in let rec mktable n = function | [] -> assert false | [key, action] -> [] | (key, action) :: rem -> - (coqint_of_camlint key, nat_of_camlint n) - :: mktable (Int32.succ n) rem in + (coqint_of_camlint key, Nat.of_int n) + :: mktable (n + 1) rem in let sw = - Sswitch(expr, mktable 0l cases, nat_of_camlint (Int32.pred ncases)) in + Sswitch(expr, mktable 0 cases, Nat.of_int (ncases - 1)) in let rec mkblocks body n = function | [] -> assert false | [key, action] -> Sblock(Sseq(body, action)) | (key, action) :: rem -> mkblocks - (Sblock(Sseq(body, Sseq(action, Sexit (nat_of_camlint n))))) - (Int32.pred n) + (Sblock(Sseq(body, Sseq(action, Sexit (Nat.of_int n))))) + (n - 1) rem in - mkblocks (Sblock sw) (Int32.pred ncases) cases + mkblocks (Sblock sw) (ncases - 1) cases let mkmatch expr cases = convert_accu := []; @@ -377,7 +376,7 @@ global_declaration: { $1 } | VAR STRINGLIT LBRACKET INTLIT RBRACKET /* old style */ { (intern_string $2, - Gvar{gvar_info = (); gvar_init = [Init_space(z_of_camlint $4)]; + Gvar{gvar_info = (); gvar_init = [Init_space(Z.of_sint32 $4)]; gvar_readonly = false; gvar_volatile = false}) } | VAR STRINGLIT is_readonly is_volatile LBRACE init_data_list RBRACE { (intern_string $2, @@ -413,7 +412,7 @@ init_data: | FLOAT64 FLOATLIT { Init_float64 (coqfloat_of_camlfloat $2) } | FLOAT FLOATLIT { Init_float64 (coqfloat_of_camlfloat $2) } | FLOATLIT { Init_float64 (coqfloat_of_camlfloat $1) } - | LBRACKET INTLIT RBRACKET { Init_space (z_of_camlint $2) } + | LBRACKET INTLIT RBRACKET { Init_space (Z.of_sint32 $2) } | INTLIT LPAREN STRINGLIT RPAREN { Init_addrof (intern_string $3, coqint_of_camlint $1) } ; @@ -462,7 +461,7 @@ parameter_list: stack_declaration: /* empty */ { Z0 } - | STACK INTLIT SEMICOLON { z_of_camlint $2 } + | STACK INTLIT SEMICOLON { Z.of_sint32 $2 } ; var_declarations: diff --git a/backend/CMtypecheck.ml b/backend/CMtypecheck.ml index 408e9ec..39e8c51 100644 --- a/backend/CMtypecheck.ml +++ b/backend/CMtypecheck.ml @@ -64,7 +64,7 @@ let type_var env id = raise (Error (sprintf "Unbound variable %s\n" (extern_atom id))) let type_letvar env n = - let n = camlint_of_nat n in + let n = Nat.to_int n in try List.nth env n with Not_found -> @@ -303,8 +303,8 @@ let rec type_stmt env blk ret s = | Sblock s1 -> type_stmt env (blk + 1) ret s1 | Sexit n -> - if camlint_of_nat n >= blk then - raise (Error (sprintf "Bad exit(%d)\n" (camlint_of_nat n))) + if Nat.to_int n >= blk then + raise (Error (sprintf "Bad exit(%d)\n" (Nat.to_int n))) | Sswitch(e, cases, deflt) -> unify (type_expr env [] e) tint | Sreturn None -> diff --git a/backend/CSEproof.v b/backend/CSEproof.v index 5569123..44d23c8 100644 --- a/backend/CSEproof.v +++ b/backend/CSEproof.v @@ -94,7 +94,7 @@ Lemma wf_valnum_reg: wf_numbering n' /\ Plt v n'.(num_next) /\ Ple n.(num_next) n'.(num_next). Proof. intros until v. unfold valnum_reg. intros WF VREG. inversion WF. - destruct ((num_reg n)!r) as [v'|]_eqn. + destruct ((num_reg n)!r) as [v'|] eqn:?. (* found *) inv VREG. split. auto. split. eauto. apply Ple_refl. (* not found *) @@ -174,7 +174,7 @@ Lemma wf_forget_reg: In r (PMap.get v (forget_reg n rd)) -> r <> rd /\ PTree.get r n.(num_reg) = Some v. Proof. unfold forget_reg; intros. inversion H. - destruct ((num_reg n)!rd) as [vd|]_eqn. + destruct ((num_reg n)!rd) as [vd|] eqn:?. rewrite PMap.gsspec in H0. destruct (peq v vd). subst vd. rewrite in_remove in H0. destruct H0. split. auto. eauto. split; eauto. exploit VAL; eauto. congruence. @@ -201,7 +201,7 @@ Lemma wf_add_rhs: wf_numbering (add_rhs n rd rh). Proof. intros. inversion H. unfold add_rhs. - destruct (find_valnum_rhs rh n.(num_eqs)) as [vres|]_eqn. + destruct (find_valnum_rhs rh n.(num_eqs)) as [vres|] eqn:?. (* found *) exploit find_valnum_rhs_correct; eauto. intros IN. split; simpl; intros. @@ -226,16 +226,16 @@ Lemma wf_add_op: wf_numbering n -> wf_numbering (add_op n rd op rs). Proof. - intros. unfold add_op. destruct (is_move_operation op rs) as [r|]_eqn. + intros. unfold add_op. destruct (is_move_operation op rs) as [r|] eqn:?. (* move *) - destruct (valnum_reg n r) as [n' v]_eqn. + destruct (valnum_reg n r) as [n' v] eqn:?. exploit wf_valnum_reg; eauto. intros [A [B C]]. inversion A. constructor; simpl; intros. eauto. rewrite PTree.gsspec in H0. destruct (peq r0 rd). inv H0. auto. eauto. eapply wf_update_reg; eauto. (* not a move *) - destruct (valnum_regs n rs) as [n' vs]_eqn. + destruct (valnum_regs n rs) as [n' vs] eqn:?. exploit wf_valnum_regs; eauto. intros [A [B C]]. eapply wf_add_rhs; eauto. Qed. @@ -270,7 +270,7 @@ Remark kill_eqs_in: Proof. induction eqs; simpl; intros. tauto. - destruct (pred (snd a)) as []_eqn. + destruct (pred (snd a)) eqn:?. exploit IHeqs; eauto. tauto. simpl in H; destruct H. subst a. auto. exploit IHeqs; eauto. tauto. Qed. @@ -289,7 +289,7 @@ Lemma wf_add_store: wf_numbering n -> wf_numbering (add_store n chunk addr rargs rsrc). Proof. intros. unfold add_store. - destruct (valnum_regs n rargs) as [n1 vargs]_eqn. + destruct (valnum_regs n rargs) as [n1 vargs] eqn:?. exploit wf_valnum_regs; eauto. intros [A [B C]]. assert (wf_numbering (kill_equations (filter_after_store chunk addr vargs) n1)). apply wf_kill_equations. auto. @@ -664,7 +664,7 @@ Lemma add_store_satisfiable: numbering_satisfiable ge sp rs m' (add_store n chunk addr args src). Proof. intros. unfold add_store. destruct H0 as [valu A]. - destruct (valnum_regs n args) as [n1 vargs]_eqn. + destruct (valnum_regs n args) as [n1 vargs] eqn:?. exploit valnum_regs_holds; eauto. intros [valu' [B [C D]]]. exploit wf_valnum_regs; eauto. intros [U [V W]]. set (n2 := kill_equations (filter_after_store chunk addr vargs) n1). @@ -704,7 +704,7 @@ Lemma reg_valnum_correct: forall n v r, wf_numbering n -> reg_valnum n v = Some r -> n.(num_reg)!r = Some v. Proof. unfold reg_valnum; intros. inv H. - destruct ((num_val n)#v) as [| r1 rl]_eqn; inv H0. + destruct ((num_val n)#v) as [| r1 rl] eqn:?; inv H0. eapply VAL. rewrite Heql. auto with coqlib. Qed. @@ -755,8 +755,8 @@ Lemma regs_valnums_correct: Proof. induction vl; simpl; intros. inv H. auto. - destruct (reg_valnum n a) as [r1|]_eqn; try discriminate. - destruct (regs_valnums n vl) as [rx|]_eqn; try discriminate. + destruct (reg_valnum n a) as [r1|] eqn:?; try discriminate. + destruct (regs_valnums n vl) as [rx|] eqn:?; try discriminate. inv H. simpl; decEq; auto. eapply (proj2 n_holds); eauto. eapply reg_valnum_correct; eauto. Qed. @@ -770,13 +770,13 @@ Proof. induction niter; simpl; intros. discriminate. destruct (f (fun v : valnum => find_valnum_num v (num_eqs n)) op args) - as [[op1 args1] | ]_eqn. + as [[op1 args1] | ] eqn:?. assert (sem op1 (map valu args1) = Some res). rewrite <- H0. eapply f_sound; eauto. simpl; intros. apply (proj1 n_holds). eapply find_valnum_num_correct; eauto. - destruct (reduce_rec A f n niter op1 args1) as [[op2 rl2] | ]_eqn. + destruct (reduce_rec A f n niter op1 args1) as [[op2 rl2] | ] eqn:?. inv H. eapply IHniter; eauto. - destruct (regs_valnums n args1) as [rl|]_eqn. + destruct (regs_valnums n args1) as [rl|] eqn:?. inv H. erewrite regs_valnums_correct; eauto. discriminate. discriminate. @@ -790,7 +790,7 @@ Lemma reduce_sound: sem op' rs##rl' = Some res. Proof. unfold reduce; intros. - destruct (reduce_rec A f n 4%nat op vl) as [[op1 rl1] | ]_eqn; inv H. + destruct (reduce_rec A f n 4%nat op vl) as [[op1 rl1] | ] eqn:?; inv H. eapply reduce_rec_sound; eauto. congruence. auto. Qed. @@ -973,21 +973,21 @@ Proof. (* Iop *) exists (State s' (transf_function' f approx) sp pc' (rs#res <- v) m); split. - destruct (is_trivial_op op) as []_eqn. + destruct (is_trivial_op op) eqn:?. eapply exec_Iop'; eauto. rewrite <- H0. apply eval_operation_preserved. exact symbols_preserved. - destruct (valnum_regs approx!!pc args) as [n1 vl]_eqn. + destruct (valnum_regs approx!!pc args) as [n1 vl] eqn:?. assert (wf_numbering approx!!pc). eapply wf_analyze; eauto. destruct SAT as [valu1 NH1]. exploit valnum_regs_holds; eauto. intros [valu2 [NH2 [EQ AG]]]. assert (wf_numbering n1). eapply wf_valnum_regs; eauto. - destruct (find_rhs n1 (Op op vl)) as [r|]_eqn. + destruct (find_rhs n1 (Op op vl)) as [r|] eqn:?. (* replaced by move *) assert (EV: rhs_evals_to ge sp valu2 (Op op vl) m rs#r). eapply find_rhs_correct; eauto. assert (RES: rs#r = v). red in EV. congruence. eapply exec_Iop'; eauto. simpl. congruence. (* possibly simplified *) - destruct (reduce operation combine_op n1 op args vl) as [op' args']_eqn. + destruct (reduce operation combine_op n1 op args vl) as [op' args'] eqn:?. assert (RES: eval_operation ge sp op' rs##args' m = Some v). eapply reduce_sound with (sem := fun op vl => eval_operation ge sp op vl m); eauto. intros; eapply combine_op_sound; eauto. @@ -1007,18 +1007,18 @@ Proof. (* Iload *) exists (State s' (transf_function' f approx) sp pc' (rs#dst <- v) m); split. - destruct (valnum_regs approx!!pc args) as [n1 vl]_eqn. + destruct (valnum_regs approx!!pc args) as [n1 vl] eqn:?. assert (wf_numbering approx!!pc). eapply wf_analyze; eauto. destruct SAT as [valu1 NH1]. exploit valnum_regs_holds; eauto. intros [valu2 [NH2 [EQ AG]]]. assert (wf_numbering n1). eapply wf_valnum_regs; eauto. - destruct (find_rhs n1 (Load chunk addr vl)) as [r|]_eqn. + destruct (find_rhs n1 (Load chunk addr vl)) as [r|] eqn:?. (* replaced by move *) assert (EV: rhs_evals_to ge sp valu2 (Load chunk addr vl) m rs#r). eapply find_rhs_correct; eauto. assert (RES: rs#r = v). red in EV. destruct EV as [a' [EQ1 EQ2]]. congruence. eapply exec_Iop'; eauto. simpl. congruence. (* possibly simplified *) - destruct (reduce addressing combine_addr n1 addr args vl) as [addr' args']_eqn. + destruct (reduce addressing combine_addr n1 addr args vl) as [addr' args'] eqn:?. assert (ADDR: eval_addressing ge sp addr' rs##args' = Some a). eapply reduce_sound with (sem := fun addr vl => eval_addressing ge sp addr vl); eauto. intros; eapply combine_addr_sound; eauto. @@ -1035,12 +1035,12 @@ Proof. (* Istore *) exists (State s' (transf_function' f approx) sp pc' rs m'); split. - destruct (valnum_regs approx!!pc args) as [n1 vl]_eqn. + destruct (valnum_regs approx!!pc args) as [n1 vl] eqn:?. assert (wf_numbering approx!!pc). eapply wf_analyze; eauto. destruct SAT as [valu1 NH1]. exploit valnum_regs_holds; eauto. intros [valu2 [NH2 [EQ AG]]]. assert (wf_numbering n1). eapply wf_valnum_regs; eauto. - destruct (reduce addressing combine_addr n1 addr args vl) as [addr' args']_eqn. + destruct (reduce addressing combine_addr n1 addr args vl) as [addr' args'] eqn:?. assert (ADDR: eval_addressing ge sp addr' rs##args' = Some a). eapply reduce_sound with (sem := fun addr vl => eval_addressing ge sp addr vl); eauto. intros; eapply combine_addr_sound; eauto. @@ -1093,12 +1093,12 @@ Proof. eapply kill_loads_satisfiable; eauto. (* Icond *) - destruct (valnum_regs approx!!pc args) as [n1 vl]_eqn. + destruct (valnum_regs approx!!pc args) as [n1 vl] eqn:?. assert (wf_numbering approx!!pc). eapply wf_analyze; eauto. elim SAT; intros valu1 NH1. exploit valnum_regs_holds; eauto. intros [valu2 [NH2 [EQ AG]]]. assert (wf_numbering n1). eapply wf_valnum_regs; eauto. - destruct (reduce condition combine_cond n1 cond args vl) as [cond' args']_eqn. + destruct (reduce condition combine_cond n1 cond args vl) as [cond' args'] eqn:?. assert (RES: eval_condition cond' rs##args' m = Some b). eapply reduce_sound with (sem := fun cond vl => eval_condition cond vl m); eauto. intros; eapply combine_cond_sound; eauto. @@ -1124,8 +1124,8 @@ Proof. (* internal function *) monadInv H7. unfold transf_function in EQ. - destruct (type_function f) as [tyenv|]_eqn; try discriminate. - destruct (analyze f) as [approx|]_eqn; inv EQ. + destruct (type_function f) as [tyenv|] eqn:?; try discriminate. + destruct (analyze f) as [approx|] eqn:?; inv EQ. assert (WTF: wt_function f tyenv). apply type_function_correct; auto. econstructor; split. eapply exec_function_internal; eauto. diff --git a/backend/Coloringaux.ml b/backend/Coloringaux.ml index 2fce25e..ddd3094 100644 --- a/backend/Coloringaux.ml +++ b/backend/Coloringaux.ml @@ -12,8 +12,6 @@ open Camlcoq open Datatypes -open BinPos -open BinInt open AST open Maps open Registers @@ -766,8 +764,8 @@ let rec reuse_slot conflicts n mvlist = let find_slot conflicts typ = let rec find curr = let l = S(Local(curr, typ)) in - if Locset.mem l conflicts then find (coq_Zsucc curr) else l - in find Z0 + if Locset.mem l conflicts then find (Z.succ curr) else l + in find Z.zero let assign_color n = let conflicts = ref Locset.empty in diff --git a/backend/Constpropproof.v b/backend/Constpropproof.v index 1b90666..cd757cd 100644 --- a/backend/Constpropproof.v +++ b/backend/Constpropproof.v @@ -199,9 +199,9 @@ Lemma eval_static_load_sound: val_match_approx ge sp (eval_static_load gapp chunk addr) v. Proof. intros. unfold eval_static_load. destruct addr; simpl; auto. - destruct (gapp!i) as [il|]_eqn; auto. + destruct (gapp!i) as [il|] eqn:?; auto. red in H1. subst vaddr. unfold symbol_address in H. - destruct (Genv.find_symbol ge i) as [b'|]_eqn; simpl in H; try discriminate. + destruct (Genv.find_symbol ge i) as [b'|] eqn:?; simpl in H; try discriminate. exploit H0; eauto. intros [A [B C]]. eapply eval_load_init_sound; eauto. red; auto. @@ -290,7 +290,7 @@ Proof. \/ id0 <> id /\ ga!id0 = Some il). destruct gd. rewrite PTree.grspec in H0. destruct (PTree.elt_eq id0 id); [discriminate|auto]. - destruct (gvar_readonly v && negb (gvar_volatile v)) as []_eqn. + destruct (gvar_readonly v && negb (gvar_volatile v)) eqn:?. rewrite PTree.gsspec in H0. destruct (peq id0 id). inv H0. left. split; auto. destruct v; simpl in *. @@ -455,10 +455,10 @@ Lemma match_successor_rec: Proof. induction n; simpl; intros. apply match_pc_base. - destruct (fn_code f)!pc as [i|]_eqn; try apply match_pc_base. + destruct (fn_code f)!pc as [i|] eqn:?; try apply match_pc_base. destruct i; try apply match_pc_base. eapply match_pc_nop; eauto. - destruct (eval_static_condition c (approx_regs app l)) as [b|]_eqn. + destruct (eval_static_condition c (approx_regs app l)) as [b|] eqn:?. eapply match_pc_cond; eauto. apply match_pc_base. Qed. @@ -607,7 +607,7 @@ Proof. assert (MATCH'': regs_match_approx sp (analyze gapp f) # pc' rs # res <- v). eapply analyze_correct_1 with (pc := pc); eauto. simpl; auto. unfold transfer; rewrite H. auto. - destruct (const_for_result a) as [cop|]_eqn; intros. + destruct (const_for_result a) as [cop|] eqn:?; intros. (* constant is propagated *) left; econstructor; econstructor; split. eapply exec_Iop; eauto. @@ -640,7 +640,7 @@ Proof. eapply approx_regs_val_list; eauto. assert (VM2: val_match_approx ge sp ap2 v). eapply eval_static_load_sound; eauto. - destruct (const_for_result ap2) as [cop|]_eqn; intros. + destruct (const_for_result ap2) as [cop|] eqn:?; intros. (* constant-propagated *) left; econstructor; econstructor; split. eapply exec_Iop; eauto. eapply const_for_result_correct; eauto. @@ -708,7 +708,7 @@ Proof. (* Ibuiltin *) rename pc'0 into pc. Opaque builtin_strength_reduction. - destruct (builtin_strength_reduction ef args (approx_regs (analyze gapp f)#pc args)) as [ef' args']_eqn. + destruct (builtin_strength_reduction ef args (approx_regs (analyze gapp f)#pc args)) as [ef' args'] eqn:?. generalize (builtin_strength_reduction_correct ge sp (analyze gapp f)!!pc rs MATCH2 ef args (approx_regs (analyze gapp f) # pc args) _ _ _ _ (refl_equal _) H0). rewrite Heqp. intros P. @@ -732,7 +732,7 @@ Opaque builtin_strength_reduction. destruct (cond_strength_reduction cond args (approx_regs (analyze gapp f) # pc args)) as [cond' args']. intros EV1 TCODE. left; exists O; exists (State s' (transf_function gapp f) sp (if b then ifso else ifnot) rs' m'); split. - destruct (eval_static_condition cond (approx_regs (analyze gapp f) # pc args)) as []_eqn. + destruct (eval_static_condition cond (approx_regs (analyze gapp f) # pc args)) eqn:?. assert (eval_condition cond rs ## args m = Some b0). eapply eval_static_condition_correct; eauto. eapply approx_regs_val_list; eauto. assert (b = b0) by congruence. subst b0. @@ -758,7 +758,7 @@ Opaque builtin_strength_reduction. rename pc'0 into pc. assert (A: (fn_code (transf_function gapp f))!pc = Some(Ijumptable arg tbl) \/ (fn_code (transf_function gapp f))!pc = Some(Inop pc')). - TransfInstr. destruct (approx_reg (analyze gapp f) # pc arg) as []_eqn; auto. + TransfInstr. destruct (approx_reg (analyze gapp f) # pc arg) eqn:?; auto. generalize (MATCH2 arg). unfold approx_reg in Heqt. rewrite Heqt. rewrite H0. simpl. intro EQ; inv EQ. rewrite H1. auto. assert (B: rs'#arg = Vint n). diff --git a/backend/Inliningproof.v b/backend/Inliningproof.v index 8de8487..9536141 100644 --- a/backend/Inliningproof.v +++ b/backend/Inliningproof.v @@ -306,7 +306,7 @@ Lemma range_private_free_left: range_private F m1 m' sp base hi. Proof. intros; red; intros. - destruct (zlt ofs (base + Zmax sz 0)). + destruct (zlt ofs (base + Zmax sz 0)) as [z|z]. red; split. replace ofs with ((ofs - base) + base) by omega. eapply Mem.perm_inject; eauto. @@ -342,7 +342,7 @@ Proof. red; intros. exploit RP; eauto. intros [A B]. destruct UNCH as [U1 U2]. split. auto. - intros. red in SEP. destruct (F b) as [[sp1 delta1] |]_eqn. + intros. red in SEP. destruct (F b) as [[sp1 delta1] |] eqn:?. exploit INCR; eauto. intros EQ; rewrite H0 in EQ; inv EQ. red; intros; eelim B; eauto. eapply PERM; eauto. red. destruct (zlt b (Mem.nextblock m1)); auto. @@ -710,7 +710,7 @@ Proof. induction 1; intros. apply match_stacks_nil with bound1; auto. inv MG. constructor; intros; eauto. - destruct (F1 b1) as [[b2' delta']|]_eqn. + destruct (F1 b1) as [[b2' delta']|] eqn:?. exploit INCR; eauto. intros EQ; rewrite H0 in EQ; inv EQ. eapply IMAGE; eauto. exploit SEP; eauto. intros [A B]. elim B. red. omega. eapply match_stacks_cons; eauto. @@ -919,7 +919,7 @@ Proof. eapply agree_val_regs; eauto. (* inlined *) assert (fd = Internal f0). - simpl in H0. destruct (Genv.find_symbol ge id) as [b|]_eqn; try discriminate. + simpl in H0. destruct (Genv.find_symbol ge id) as [b|] eqn:?; try discriminate. exploit (funenv_program_compat prog); eauto. intros. unfold ge in H0. congruence. subst fd. @@ -973,7 +973,7 @@ Proof. eapply Mem.free_left_inject; eauto. (* inlined *) assert (fd = Internal f0). - simpl in H0. destruct (Genv.find_symbol ge id) as [b|]_eqn; try discriminate. + simpl in H0. destruct (Genv.find_symbol ge id) as [b|] eqn:?; try discriminate. exploit (funenv_program_compat prog); eauto. intros. unfold ge in H0. congruence. subst fd. diff --git a/backend/Inliningspec.v b/backend/Inliningspec.v index 014986d..06826c2 100644 --- a/backend/Inliningspec.v +++ b/backend/Inliningspec.v @@ -498,7 +498,7 @@ Proof. (* tailcall *) destruct (can_inline fe s1) as [|id f P Q]. (* not inlined *) - destruct (retinfo ctx) as [[rpc rreg] | ]_eqn. + destruct (retinfo ctx) as [[rpc rreg] | ] eqn:?. (* turned into a call *) eapply tr_tailcall_call; eauto. (* preserved *) @@ -526,7 +526,7 @@ Proof. red; simpl. subst s2; simpl in *; xomega. red; auto. (* return *) - destruct (retinfo ctx) as [[rpc rreg] | ]_eqn. + destruct (retinfo ctx) as [[rpc rreg] | ] eqn:?. (* inlined *) eapply tr_return_inlined; eauto. (* unchanged *) @@ -671,7 +671,7 @@ Lemma transf_function_spec: forall f f', transf_function fenv f = OK f' -> tr_function f f'. Proof. intros. unfold transf_function in H. - destruct (expand_function fenv f initstate) as [ctx s i]_eqn. + destruct (expand_function fenv f initstate) as [ctx s i] eqn:?. destruct (zle (st_stksize s) Int.max_unsigned); inv H. monadInv Heqr. set (ctx := initcontext x x0 (max_def_function f) (fn_stacksize f)) in *. Opaque initstate. diff --git a/backend/Linearizeaux.ml b/backend/Linearizeaux.ml index ce7788f..ac47ae8 100644 --- a/backend/Linearizeaux.ml +++ b/backend/Linearizeaux.ml @@ -10,7 +10,6 @@ (* *) (* *********************************************************************) -open BinPos open Coqlib open Datatypes open LTL @@ -33,18 +32,6 @@ let enumerate_aux f reach = (* More clever enumeration that flattens basic blocks *) -let rec int_of_pos = function - | Coq_xI p -> (int_of_pos p lsl 1) + 1 - | Coq_xO p -> int_of_pos p lsl 1 - | Coq_xH -> 1 - -let rec pos_of_int n = - if n = 0 then assert false else - if n = 1 then Coq_xH else - if n land 1 = 0 - then Coq_xO (pos_of_int (n lsr 1)) - else Coq_xI (pos_of_int (n lsr 1)) - module IntSet = Set.Make(struct type t = int let compare = compare end) (* Determine join points: reachable nodes that have > 1 predecessor *) @@ -54,7 +41,7 @@ let join_points f = let reached = ref IntSet.empty in let reached_twice = ref IntSet.empty in let rec traverse pc = - let npc = int_of_pos pc in + let npc = P.to_int pc in if IntSet.mem npc !reached then begin if not (IntSet.mem npc !reached_twice) then reached_twice := IntSet.add npc !reached_twice @@ -74,14 +61,14 @@ let basic_blocks f joins = or a join point or the successor of a conditional test *) let rec start_block pc = - let npc = int_of_pos pc in + let npc = P.to_int pc in if not (IntSet.mem npc !visited) then begin visited := IntSet.add npc !visited; in_block [] max_int pc end (* in_block: add pc to block and check successors *) and in_block blk minpc pc = - let npc = int_of_pos pc in + let npc = P.to_int pc in let blk = pc :: blk in let minpc = min npc minpc in match PTree.get pc f.fn_code with @@ -103,7 +90,7 @@ let basic_blocks f joins = (* next_in_block: check if join point and either extend block or start block *) and next_in_block blk minpc pc = - let npc = int_of_pos pc in + let npc = P.to_int pc in if IntSet.mem npc joins then (end_block blk minpc; start_block pc) else in_block blk minpc pc diff --git a/backend/PrintCminor.ml b/backend/PrintCminor.ml index 59178bd..ef6ba1d 100644 --- a/backend/PrintCminor.ml +++ b/backend/PrintCminor.ml @@ -18,7 +18,6 @@ open Format open Camlcoq open Datatypes -open BinPos open Integers open AST open PrintAST @@ -212,15 +211,15 @@ let rec print_stmt p s = fprintf p "@[{{ %a@;<0 -3>}}@]" print_stmt s | Sexit n -> - fprintf p "exit %d;" (camlint_of_nat n) + fprintf p "exit %d;" (Nat.to_int n) | Sswitch(e, cases, dfl) -> fprintf p "@[switch (%a) {" print_expr e; List.iter (fun (n, x) -> fprintf p "@ case %ld: exit %d;\n" - (camlint_of_coqint n) (camlint_of_nat x)) + (camlint_of_coqint n) (Nat.to_int x)) cases; - fprintf p "@ default: exit %d;\n" (camlint_of_nat dfl); + fprintf p "@ default: exit %d;\n" (Nat.to_int dfl); fprintf p "@;<0 -2>}@]" | Sreturn None -> fprintf p "return;" @@ -247,7 +246,7 @@ let print_function p id f = print_varlist (f.fn_params, true) print_sig f.fn_sig; fprintf p "@[{@ "; - let stksz = camlint_of_z f.fn_stackspace in + let stksz = Z.to_int32 f.fn_stackspace in if stksz <> 0l then fprintf p "stack %ld;@ " stksz; if f.fn_vars <> [] then diff --git a/backend/PrintLTLin.ml b/backend/PrintLTLin.ml index 4dc311c..4e8efd1 100644 --- a/backend/PrintLTLin.ml +++ b/backend/PrintLTLin.ml @@ -71,18 +71,18 @@ let print_instruction pp i = fprintf pp "%a = builtin %s(%a)@ " reg res (name_of_external ef) regs args | Llabel lbl -> - fprintf pp "%ld:@ " (camlint_of_positive lbl) + fprintf pp "%ld:@ " (P.to_int32 lbl) | Lgoto lbl -> - fprintf pp "goto %ld@ " (camlint_of_positive lbl) + fprintf pp "goto %ld@ " (P.to_int32 lbl) | Lcond(cond, args, lbl) -> fprintf pp "if (%a) goto %ld@ " (PrintOp.print_condition reg) (cond, args) - (camlint_of_positive lbl) + (P.to_int32 lbl) | Ljumptable(arg, tbl) -> let tbl = Array.of_list tbl in fprintf pp "@[jumptable (%a)" reg arg; for i = 0 to Array.length tbl - 1 do - fprintf pp "@ case %d: goto %ld" i (camlint_of_positive tbl.(i)) + fprintf pp "@ case %d: goto %ld" i (P.to_int32 tbl.(i)) done; fprintf pp "@]@ " | Lreturn None -> diff --git a/backend/PrintMach.ml b/backend/PrintMach.ml index dfbc66e..7e6c343 100644 --- a/backend/PrintMach.ml +++ b/backend/PrintMach.ml @@ -80,18 +80,18 @@ let print_instruction pp i = | Mannot(ef, args) -> fprintf pp "%s(%a)@ " (name_of_external ef) annot_params args | Mlabel lbl -> - fprintf pp "%ld:@ " (camlint_of_positive lbl) + fprintf pp "%ld:@ " (P.to_int32 lbl) | Mgoto lbl -> - fprintf pp "goto %ld@ " (camlint_of_positive lbl) + fprintf pp "goto %ld@ " (P.to_int32 lbl) | Mcond(cond, args, lbl) -> fprintf pp "if (%a) goto %ld@ " (PrintOp.print_condition reg) (cond, args) - (camlint_of_positive lbl) + (P.to_int32 lbl) | Mjumptable(arg, tbl) -> let tbl = Array.of_list tbl in fprintf pp "@[jumptable (%a)" reg arg; for i = 0 to Array.length tbl - 1 do - fprintf pp "@ case %d: goto %ld" i (camlint_of_positive tbl.(i)) + fprintf pp "@ case %d: goto %ld" i (P.to_int32 tbl.(i)) done; fprintf pp "@]@ " | Mreturn -> diff --git a/backend/PrintRTL.ml b/backend/PrintRTL.ml index 4cd3871..0bafcde 100644 --- a/backend/PrintRTL.ml +++ b/backend/PrintRTL.ml @@ -25,7 +25,7 @@ open PrintOp (* Printing of RTL code *) let reg pp r = - fprintf pp "x%ld" (camlint_of_positive r) + fprintf pp "x%ld" (P.to_int32 r) let rec regs pp = function | [] -> () @@ -37,14 +37,14 @@ let ros pp = function | Coq_inr s -> fprintf pp "\"%s\"" (extern_atom s) let print_succ pp s dfl = - let s = camlint_of_positive s in + let s = P.to_int32 s in if s <> dfl then fprintf pp " goto %ld@ " s let print_instruction pp (pc, i) = fprintf pp "%5ld: " pc; match i with | Inop s -> - let s = camlint_of_positive s in + let s = P.to_int32 s in if s = Int32.pred pc then fprintf pp "nop@ " else fprintf pp "goto %ld@ " s @@ -77,12 +77,12 @@ let print_instruction pp (pc, i) = | Icond(cond, args, s1, s2) -> fprintf pp "if (%a) goto %ld else goto %ld@ " (PrintOp.print_condition reg) (cond, args) - (camlint_of_positive s1) (camlint_of_positive s2) + (P.to_int32 s1) (P.to_int32 s2) | Ijumptable(arg, tbl) -> let tbl = Array.of_list tbl in fprintf pp "@[jumptable (%a)" reg arg; for i = 0 to Array.length tbl - 1 do - fprintf pp "@ case %d: goto %ld" i (camlint_of_positive tbl.(i)) + fprintf pp "@ case %d: goto %ld" i (P.to_int32 tbl.(i)) done; fprintf pp "@]@ " | Ireturn None -> @@ -96,7 +96,7 @@ let print_function pp id f = List.sort (fun (pc1, _) (pc2, _) -> Pervasives.compare pc2 pc1) (List.map - (fun (pc, i) -> (camlint_of_positive pc, i)) + (fun (pc, i) -> (P.to_int32 pc, i)) (PTree.elements f.fn_code)) in print_succ pp f.fn_entrypoint (match instrs with (pc1, _) :: _ -> pc1 | [] -> -1l); diff --git a/backend/RREproof.v b/backend/RREproof.v index 8926fe4..40632f7 100644 --- a/backend/RREproof.v +++ b/backend/RREproof.v @@ -248,7 +248,7 @@ Proof. induction ll; intros; simpl. apply H. simpl. auto. apply IHll. intros. unfold Locmap.set. - destruct (Loc.eq a l). auto. destruct (Loc.overlap a l) as []_eqn. auto. + destruct (Loc.eq a l). auto. destruct (Loc.overlap a l) eqn:?. auto. apply H. simpl. split; auto. apply Loc.diff_sym. apply Loc.non_overlap_diff; auto. Qed. @@ -396,7 +396,7 @@ Opaque destroyed_at_move_regs. simpl in SAFE. assert (SAFE': sm = false \/ ~In r destroyed_at_move_regs /\ safe_move_insertion b = true). destruct (in_dec mreg_eq r destroyed_at_move_regs); simpl in SAFE; intuition congruence. - destruct (is_incoming sl) as []_eqn. + destruct (is_incoming sl) eqn:?. (* incoming, stays as getstack *) assert (UGS: forall rs, undef_getstack sl rs = Locmap.set (R IT1) Vundef rs). destruct sl; simpl in Heqb0; discriminate || auto. @@ -419,11 +419,11 @@ Opaque destroyed_at_move_regs. rewrite <- EQ1; rewrite EQ; rewrite EQ2. rewrite locmap_set_reg_same. apply match_states_regular with sm; auto; tauto. (* found an equation *) - destruct (find_reg_containing sl eqs) as [r'|]_eqn. + destruct (find_reg_containing sl eqs) as [r'|] eqn:?. exploit EQH. eapply find_reg_containing_sound; eauto. simpl; intro EQ. (* turned into a move *) - destruct (safe_move_insertion b) as []_eqn. + destruct (safe_move_insertion b) eqn:?. left; econstructor; split. constructor. simpl; eauto. rewrite UGS. rewrite <- EQ. apply match_states_regular with true; auto. diff --git a/backend/RREtyping.v b/backend/RREtyping.v index 2501c7f..539fb20 100644 --- a/backend/RREtyping.v +++ b/backend/RREtyping.v @@ -91,9 +91,9 @@ Proof. assert (WC: wt_code f c) by (red; auto with coqlib). clear H. inv WI; auto 10 with linearty. - destruct (is_incoming s) as []_eqn. auto with linearty. + destruct (is_incoming s) eqn:?. auto with linearty. destruct (contains_equation s r eqs). auto with linearty. - destruct (find_reg_containing s eqs) as [r'|]_eqn; auto with linearty. + destruct (find_reg_containing s eqs) as [r'|] eqn:?; auto with linearty. assert (mreg_type r' = mreg_type r). exploit H0. eapply find_reg_containing_sound; eauto. simpl. congruence. destruct (safe_move_insertion c); auto 10 with linearty. diff --git a/backend/Reloadtyping.v b/backend/Reloadtyping.v index 99c89ab..9f5563c 100644 --- a/backend/Reloadtyping.v +++ b/backend/Reloadtyping.v @@ -289,7 +289,7 @@ Proof. destruct ros. destruct H2 as [A [B C]]. auto 10 with reloadty. auto 10 with reloadty. - destruct (ef_reloads ef) as [] _eqn. + destruct (ef_reloads ef) as [] eqn:?. assert (arity_ok (sig_args (ef_sig ef)) = true) by intuition congruence. assert (map mreg_type (regs_for args) = map Loc.type args). apply wt_regs_for. apply arity_ok_enough. congruence. diff --git a/backend/Renumberproof.v b/backend/Renumberproof.v index d086010..4488e49 100644 --- a/backend/Renumberproof.v +++ b/backend/Renumberproof.v @@ -91,7 +91,7 @@ Proof. (* induction *) rewrite PTree.gsspec in H2. unfold renum_node. destruct (peq x k). inv H2. rewrite H3. apply PTree.gss. - destruct f!k as [y'|]_eqn. + destruct f!k as [y'|] eqn:?. rewrite PTree.gso. eauto. red; intros; subst y'. elim n. eapply f_inj; eauto. eauto. Qed. @@ -111,7 +111,7 @@ Proof. intros. destruct (postorder_correct (successors f) f.(fn_entrypoint)) as [A B]. fold (pnum f) in *. - unfold renum_pc. destruct (pnum f)! pc as [pc'|]_eqn. + unfold renum_pc. destruct (pnum f)! pc as [pc'|] eqn:?. simpl. eapply renum_cfg_nodes; eauto. elim (B pc); auto. unfold successors. rewrite PTree.gmap1. rewrite H. simpl. congruence. Qed. diff --git a/backend/Selectionproof.v b/backend/Selectionproof.v index 09dc0ff..0269438 100644 --- a/backend/Selectionproof.v +++ b/backend/Selectionproof.v @@ -166,10 +166,10 @@ Lemma classify_call_correct: end. Proof. unfold classify_call; intros. - destruct (expr_is_addrof_ident a) as [id|]_eqn. + destruct (expr_is_addrof_ident a) as [id|] eqn:?. exploit expr_is_addrof_ident_correct; eauto. intros EQ; subst a. inv H. inv H2. - destruct (Genv.find_symbol ge id) as [b|]_eqn. + destruct (Genv.find_symbol ge id) as [b|] eqn:?. rewrite Genv.find_funct_find_funct_ptr in H0. rewrite H0. destruct fd. exists b; auto. @@ -567,7 +567,7 @@ Proof. apply call_cont_commut; eauto. rewrite H. destruct (find_label lbl (sel_stmt ge (Cminor.fn_body f)) (call_cont k'0)) - as [[s'' k'']|]_eqn; intros; try contradiction. + as [[s'' k'']|] eqn:?; intros; try contradiction. destruct H0. left; econstructor; split. econstructor; eauto. diff --git a/backend/Stackingproof.v b/backend/Stackingproof.v index 6c4e43f..b731487 100644 --- a/backend/Stackingproof.v +++ b/backend/Stackingproof.v @@ -2171,7 +2171,7 @@ Proof. exists b; exists tf; split; auto. simpl. generalize (AG m0). rewrite EQ. intro INJ. inv INJ. inv MG. rewrite DOMAIN in H2. inv H2. simpl. auto. eapply FUNCTIONS; eauto. - destruct (Genv.find_symbol ge i) as [b|]_eqn; try discriminate. + destruct (Genv.find_symbol ge i) as [b|] eqn:?; try discriminate. exploit function_ptr_translated; eauto. intros [tf [A B]]. exists b; exists tf; split; auto. simpl. rewrite symbols_preserved. auto. @@ -2398,7 +2398,7 @@ Proof. econstructor; split. apply plus_one. eapply exec_Mgetparam; eauto. rewrite (unfold_transf_function _ _ TRANSL). unfold fn_link_ofs. - eapply index_contains_load_stack with (idx := FI_link). eauto. eapply agree_link; eauto. + eapply index_contains_load_stack with (idx := FI_link). eapply TRANSL. eapply agree_link; eauto. simpl parent_sp. change (offset_of_index (make_env (function_bounds f)) (FI_arg z t)) with (offset_of_index (make_env (function_bounds f0)) (FI_arg z t)). diff --git a/cfrontend/C2C.ml b/cfrontend/C2C.ml index d425693..3830ca7 100644 --- a/cfrontend/C2C.ml +++ b/cfrontend/C2C.ml @@ -125,16 +125,12 @@ let name_for_string_literal env s = id let typeStringLiteral s = - Tarray(Tint(I8, Unsigned, noattr), - z_of_camlint(Int32.of_int(String.length s + 1)), - noattr) + Tarray(Tint(I8, Unsigned, noattr), Z.of_uint (String.length s + 1), noattr) let global_for_string s id = let init = ref [] in let add_char c = - init := - AST.Init_int8(coqint_of_camlint(Int32.of_int(Char.code c))) - :: !init in + init := AST.Init_int8(Z.of_uint(Char.code c)) :: !init in add_char '\000'; for i = String.length s - 1 downto 0 do add_char s.[i] done; (id, Gvar {gvar_info = typeStringLiteral s; gvar_init = !init; @@ -344,8 +340,8 @@ let supported_return_type env ty = (** Floating point constants *) let z_of_str hex str fst = - let res = ref BinInt.Z0 in - let base = if hex then 16l else 10l in + let res = ref Z.Z0 in + let base = if hex then 16 else 10 in for i = fst to String.length str - 1 do let d = int_of_char str.[i] in let d = @@ -356,27 +352,25 @@ let z_of_str hex str fst = else d - int_of_char '0' in - let d = Int32.of_int d in - assert (d >= 0l && d < base); - res := BinInt.coq_Zplus - (BinInt.coq_Zmult (z_of_camlint base) !res) (z_of_camlint d) + assert (d >= 0 && d < base); + res := Z.add (Z.mul (Z.of_uint base) !res) (Z.of_uint d) done; !res let convertFloat f kind = let mant = z_of_str f.C.hex (f.C.intPart ^ f.C.fracPart) 0 in match mant with - | BinInt.Z0 -> Float.zero - | BinInt.Zpos mant -> + | Z.Z0 -> Float.zero + | Z.Zpos mant -> let sgExp = match f.C.exp.[0] with '+' | '-' -> true | _ -> false in let exp = z_of_str false f.C.exp (if sgExp then 1 else 0) in - let exp = if f.C.exp.[0] = '-' then BinInt.coq_Zopp exp else exp in + let exp = if f.C.exp.[0] = '-' then Z.neg exp else exp in let shift_exp = - Int32.of_int ((if f.C.hex then 4 else 1) * String.length f.C.fracPart) in - let exp = BinInt.coq_Zminus exp (z_of_camlint shift_exp) in + (if f.C.hex then 4 else 1) * String.length f.C.fracPart in + let exp = Z.sub exp (Z.of_uint shift_exp) in - let base = positive_of_camlint (if f.C.hex then 16l else 10l) in + let base = P.of_int (if f.C.hex then 16 else 10) in begin match kind with | FFloat -> @@ -384,7 +378,8 @@ let convertFloat f kind = | FDouble | FLongDouble -> Float.build_from_parsed64 base mant exp end - | BinInt.Zneg _ -> assert false + + | Z.Zneg _ -> assert false (** Expressions *) @@ -752,7 +747,7 @@ let string_of_errmsg msg = let string_of_err = function | Errors.MSG s -> camlstring_of_coqstring s | Errors.CTX i -> extern_atom i - | Errors.POS i -> sprintf "%ld" (camlint_of_positive i) + | Errors.POS i -> Z.to_string (Z.Zpos i) in String.concat "" (List.map string_of_err msg) let rec convertInit env init = diff --git a/cfrontend/Cexec.v b/cfrontend/Cexec.v index c370c60..ded6b72 100644 --- a/cfrontend/Cexec.v +++ b/cfrontend/Cexec.v @@ -132,7 +132,7 @@ Proof. intros. destruct v; destruct t; simpl in H; inv H. constructor. constructor. - destruct (Genv.invert_symbol ge b) as [id|]_eqn; inv H1. + destruct (Genv.invert_symbol ge b) as [id|] eqn:?; inv H1. constructor. apply Genv.invert_find_symbol; auto. Qed. @@ -148,8 +148,8 @@ Lemma list_eventval_of_val_sound: Proof with try discriminate. induction vl; destruct tl; simpl; intros; inv H. constructor. - destruct (eventval_of_val a t) as [ev1|]_eqn... - destruct (list_eventval_of_val vl tl) as [evl'|]_eqn... + destruct (eventval_of_val a t) as [ev1|] eqn:?... + destruct (list_eventval_of_val vl tl) as [evl'|] eqn:?... inv H1. constructor. apply eventval_of_val_sound; auto. eauto. Qed. @@ -166,7 +166,7 @@ Proof. intros. destruct ev; destruct t; simpl in H; inv H. constructor. constructor. - destruct (Genv.find_symbol ge i) as [b|]_eqn; inv H1. + destruct (Genv.find_symbol ge i) as [b|] eqn:?; inv H1. constructor. auto. Qed. @@ -207,8 +207,8 @@ Ltac mydestr := match goal with | [ |- None = Some _ -> _ ] => intro X; discriminate | [ |- Some _ = Some _ -> _ ] => intro X; inv X - | [ |- match ?x with Some _ => _ | None => _ end = Some _ -> _ ] => destruct x as []_eqn; mydestr - | [ |- match ?x with true => _ | false => _ end = Some _ -> _ ] => destruct x as []_eqn; mydestr + | [ |- match ?x with Some _ => _ | None => _ end = Some _ -> _ ] => destruct x eqn:?; mydestr + | [ |- match ?x with true => _ | false => _ end = Some _ -> _ ] => destruct x eqn:?; mydestr | [ |- match ?x with left _ => _ | right _ => _ end = Some _ -> _ ] => destruct x; mydestr | _ => idtac end. @@ -331,7 +331,7 @@ Lemma do_deref_loc_sound: deref_loc ge ty m b ofs t v /\ possible_trace w t w'. Proof. unfold do_deref_loc; intros until v. - destruct (access_mode ty) as []_eqn; mydestr. + destruct (access_mode ty) eqn:?; mydestr. intros. exploit do_volatile_load_sound; eauto. intuition. eapply deref_loc_volatile; eauto. split. eapply deref_loc_value; eauto. constructor. split. eapply deref_loc_reference; eauto. constructor. @@ -356,7 +356,7 @@ Lemma do_assign_loc_sound: assign_loc ge ty m b ofs v t m' /\ possible_trace w t w'. Proof. unfold do_assign_loc; intros until m'. - destruct (access_mode ty) as []_eqn; mydestr. + destruct (access_mode ty) eqn:?; mydestr. intros. exploit do_volatile_store_sound; eauto. intuition. eapply assign_loc_volatile; eauto. split. eapply assign_loc_value; eauto. constructor. destruct v; mydestr. destruct a as [P [Q R]]. @@ -558,7 +558,7 @@ Proof with try congruence. intros. exploit VSTORE; eauto. intros [A B]. split; auto. exists b; auto. (* EF_malloc *) unfold do_ef_malloc. destruct vargs... destruct v... destruct vargs... - destruct (Mem.alloc m (-4) (Int.unsigned i)) as [m1 b]_eqn. mydestr. + destruct (Mem.alloc m (-4) (Int.unsigned i)) as [m1 b] eqn:?. mydestr. split. econstructor; eauto. constructor. (* EF_free *) unfold do_ef_free. destruct vargs... destruct v... destruct vargs... @@ -1170,7 +1170,7 @@ Definition list_reducts_ok (al: exprlist) (m: mem) (ll: reducts exprlist) : Prop Ltac monadInv := match goal with | [ H: match ?x with Some _ => _ | None => None end = Some ?y |- _ ] => - destruct x as []_eqn; [monadInv|discriminate] + destruct x eqn:?; [monadInv|discriminate] | [ H: match ?x with left _ => _ | right _ => None end = Some ?y |- _ ] => destruct x; [monadInv|discriminate] | _ => idtac @@ -1338,8 +1338,8 @@ Lemma is_val_list_all_values: forall al vtl, is_val_list al = Some vtl -> exprlist_all_values al. Proof. induction al; simpl; intros. auto. - destruct (is_val r1) as [[v ty]|]_eqn; try discriminate. - destruct (is_val_list al) as [vtl'|]_eqn; try discriminate. + destruct (is_val r1) as [[v ty]|] eqn:?; try discriminate. + destruct (is_val_list al) as [vtl'|] eqn:?; try discriminate. rewrite (is_val_inv _ _ _ Heqo). eauto. Qed. @@ -1360,91 +1360,91 @@ Proof with (try (apply not_invert_ok; simpl; intro; myinv; intuition congruence; (* Eval *) split; intros. tauto. simpl; congruence. (* Evar *) - destruct (e!x) as [[b ty']|]_eqn. + destruct (e!x) as [[b ty']|] eqn:?. destruct (type_eq ty ty')... subst. apply topred_ok; auto. apply red_var_local; auto. - destruct (Genv.find_symbol ge x) as [b|]_eqn... - destruct (type_of_global ge b) as [ty'|]_eqn... + destruct (Genv.find_symbol ge x) as [b|] eqn:?... + destruct (type_of_global ge b) as [ty'|] eqn:?... destruct (type_eq ty ty')... subst. apply topred_ok; auto. apply red_var_global; auto. (* Efield *) - destruct (is_val a) as [[v ty'] | ]_eqn. + destruct (is_val a) as [[v ty'] | ] eqn:?. rewrite (is_val_inv _ _ _ Heqo). destruct v... destruct ty'... (* top struct *) - destruct (field_offset f f0) as [delta|]_eqn... + destruct (field_offset f f0) as [delta|] eqn:?... apply topred_ok; auto. apply red_field_struct; auto. (* top union *) apply topred_ok; auto. apply red_field_union; auto. (* in depth *) eapply incontext_ok; eauto. (* Evalof *) - destruct (is_loc a) as [[[b ofs] ty'] | ]_eqn. rewrite (is_loc_inv _ _ _ _ Heqo). + destruct (is_loc a) as [[[b ofs] ty'] | ] eqn:?. rewrite (is_loc_inv _ _ _ _ Heqo). (* top *) destruct (type_eq ty ty')... subst ty'. - destruct (do_deref_loc w ty m b ofs) as [[[w' t] v] | ]_eqn. + destruct (do_deref_loc w ty m b ofs) as [[[w' t] v] | ] eqn:?. exploit do_deref_loc_sound; eauto. intros [A B]. apply topred_ok; auto. red. split. apply red_rvalof; auto. exists w'; auto. apply not_invert_ok; simpl; intros; myinv. exploit do_deref_loc_complete; eauto. congruence. (* depth *) eapply incontext_ok; eauto. (* Ederef *) - destruct (is_val a) as [[v ty'] | ]_eqn. rewrite (is_val_inv _ _ _ Heqo). + destruct (is_val a) as [[v ty'] | ] eqn:?. rewrite (is_val_inv _ _ _ Heqo). (* top *) destruct v... apply topred_ok; auto. apply red_deref; auto. (* depth *) eapply incontext_ok; eauto. (* Eaddrof *) - destruct (is_loc a) as [[[b ofs] ty'] | ]_eqn. rewrite (is_loc_inv _ _ _ _ Heqo). + destruct (is_loc a) as [[[b ofs] ty'] | ] eqn:?. rewrite (is_loc_inv _ _ _ _ Heqo). (* top *) apply topred_ok; auto. split. apply red_addrof; auto. exists w; constructor. (* depth *) eapply incontext_ok; eauto. (* unop *) - destruct (is_val a) as [[v ty'] | ]_eqn. rewrite (is_val_inv _ _ _ Heqo). + destruct (is_val a) as [[v ty'] | ] eqn:?. rewrite (is_val_inv _ _ _ Heqo). (* top *) - destruct (sem_unary_operation op v ty') as [v'|]_eqn... + destruct (sem_unary_operation op v ty') as [v'|] eqn:?... apply topred_ok; auto. split. apply red_unop; auto. exists w; constructor. (* depth *) eapply incontext_ok; eauto. (* binop *) - destruct (is_val a1) as [[v1 ty1] | ]_eqn. - destruct (is_val a2) as [[v2 ty2] | ]_eqn. + destruct (is_val a1) as [[v1 ty1] | ] eqn:?. + destruct (is_val a2) as [[v2 ty2] | ] eqn:?. rewrite (is_val_inv _ _ _ Heqo). rewrite (is_val_inv _ _ _ Heqo0). (* top *) - destruct (sem_binary_operation op v1 ty1 v2 ty2 m) as [v|]_eqn... + destruct (sem_binary_operation op v1 ty1 v2 ty2 m) as [v|] eqn:?... apply topred_ok; auto. split. apply red_binop; auto. exists w; constructor. (* depth *) eapply incontext2_ok; eauto. eapply incontext2_ok; eauto. (* cast *) - destruct (is_val a) as [[v ty'] | ]_eqn. rewrite (is_val_inv _ _ _ Heqo). + destruct (is_val a) as [[v ty'] | ] eqn:?. rewrite (is_val_inv _ _ _ Heqo). (* top *) - destruct (sem_cast v ty' ty) as [v'|]_eqn... + destruct (sem_cast v ty' ty) as [v'|] eqn:?... apply topred_ok; auto. split. apply red_cast; auto. exists w; constructor. (* depth *) eapply incontext_ok; eauto. (* seqand *) - destruct (is_val a1) as [[v ty'] | ]_eqn. rewrite (is_val_inv _ _ _ Heqo). + destruct (is_val a1) as [[v ty'] | ] eqn:?. rewrite (is_val_inv _ _ _ Heqo). (* top *) - destruct (bool_val v ty') as [v'|]_eqn... destruct v'. + destruct (bool_val v ty') as [v'|] eqn:?... destruct v'. apply topred_ok; auto. split. eapply red_seqand_true; eauto. exists w; constructor. apply topred_ok; auto. split. eapply red_seqand_false; eauto. exists w; constructor. (* depth *) eapply incontext_ok; eauto. (* seqor *) - destruct (is_val a1) as [[v ty'] | ]_eqn. rewrite (is_val_inv _ _ _ Heqo). + destruct (is_val a1) as [[v ty'] | ] eqn:?. rewrite (is_val_inv _ _ _ Heqo). (* top *) - destruct (bool_val v ty') as [v'|]_eqn... destruct v'. + destruct (bool_val v ty') as [v'|] eqn:?... destruct v'. apply topred_ok; auto. split. eapply red_seqor_true; eauto. exists w; constructor. apply topred_ok; auto. split. eapply red_seqor_false; eauto. exists w; constructor. (* depth *) eapply incontext_ok; eauto. (* condition *) - destruct (is_val a1) as [[v ty'] | ]_eqn. rewrite (is_val_inv _ _ _ Heqo). + destruct (is_val a1) as [[v ty'] | ] eqn:?. rewrite (is_val_inv _ _ _ Heqo). (* top *) - destruct (bool_val v ty') as [v'|]_eqn... + destruct (bool_val v ty') as [v'|] eqn:?... apply topred_ok; auto. split. eapply red_condition; eauto. exists w; constructor. (* depth *) eapply incontext_ok; eauto. @@ -1453,13 +1453,13 @@ Proof with (try (apply not_invert_ok; simpl; intro; myinv; intuition congruence; (* alignof *) apply topred_ok; auto. split. apply red_alignof. exists w; constructor. (* assign *) - destruct (is_loc a1) as [[[b ofs] ty1] | ]_eqn. - destruct (is_val a2) as [[v2 ty2] | ]_eqn. + destruct (is_loc a1) as [[[b ofs] ty1] | ] eqn:?. + destruct (is_val a2) as [[v2 ty2] | ] eqn:?. rewrite (is_loc_inv _ _ _ _ Heqo). rewrite (is_val_inv _ _ _ Heqo0). (* top *) destruct (type_eq ty1 ty)... subst ty1. - destruct (sem_cast v2 ty2 ty) as [v|]_eqn... - destruct (do_assign_loc w ty m b ofs v) as [[[w' t] m']|]_eqn. + destruct (sem_cast v2 ty2 ty) as [v|] eqn:?... + destruct (do_assign_loc w ty m b ofs v) as [[[w' t] m']|] eqn:?. exploit do_assign_loc_sound; eauto. intros [P Q]. apply topred_ok; auto. split. apply red_assign; auto. exists w'; auto. apply not_invert_ok; simpl; intros; myinv. exploit do_assign_loc_complete; eauto. congruence. @@ -1467,12 +1467,12 @@ Proof with (try (apply not_invert_ok; simpl; intro; myinv; intuition congruence; eapply incontext2_ok; eauto. eapply incontext2_ok; eauto. (* assignop *) - destruct (is_loc a1) as [[[b ofs] ty1] | ]_eqn. - destruct (is_val a2) as [[v2 ty2] | ]_eqn. + destruct (is_loc a1) as [[[b ofs] ty1] | ] eqn:?. + destruct (is_val a2) as [[v2 ty2] | ] eqn:?. rewrite (is_loc_inv _ _ _ _ Heqo). rewrite (is_val_inv _ _ _ Heqo0). (* top *) destruct (type_eq ty1 ty)... subst ty1. - destruct (do_deref_loc w ty m b ofs) as [[[w' t] v] | ]_eqn. + destruct (do_deref_loc w ty m b ofs) as [[[w' t] v] | ] eqn:?. exploit do_deref_loc_sound; eauto. intros [A B]. apply topred_ok; auto. red. split. apply red_assignop; auto. exists w'; auto. apply not_invert_ok; simpl; intros; myinv. exploit do_deref_loc_complete; eauto. congruence. @@ -1480,30 +1480,30 @@ Proof with (try (apply not_invert_ok; simpl; intro; myinv; intuition congruence; eapply incontext2_ok; eauto. eapply incontext2_ok; eauto. (* postincr *) - destruct (is_loc a) as [[[b ofs] ty'] | ]_eqn. rewrite (is_loc_inv _ _ _ _ Heqo). + destruct (is_loc a) as [[[b ofs] ty'] | ] eqn:?. rewrite (is_loc_inv _ _ _ _ Heqo). (* top *) destruct (type_eq ty' ty)... subst ty'. - destruct (do_deref_loc w ty m b ofs) as [[[w' t] v] | ]_eqn. + destruct (do_deref_loc w ty m b ofs) as [[[w' t] v] | ] eqn:?. exploit do_deref_loc_sound; eauto. intros [A B]. apply topred_ok; auto. red. split. apply red_postincr; auto. exists w'; auto. apply not_invert_ok; simpl; intros; myinv. exploit do_deref_loc_complete; eauto. congruence. (* depth *) eapply incontext_ok; eauto. (* comma *) - destruct (is_val a1) as [[v ty'] | ]_eqn. rewrite (is_val_inv _ _ _ Heqo). + destruct (is_val a1) as [[v ty'] | ] eqn:?. rewrite (is_val_inv _ _ _ Heqo). (* top *) destruct (type_eq (typeof a2) ty)... subst ty. apply topred_ok; auto. split. apply red_comma; auto. exists w; constructor. (* depth *) eapply incontext_ok; eauto. (* call *) - destruct (is_val a) as [[vf tyf] | ]_eqn. - destruct (is_val_list rargs) as [vtl | ]_eqn. + destruct (is_val a) as [[vf tyf] | ] eqn:?. + destruct (is_val_list rargs) as [vtl | ] eqn:?. rewrite (is_val_inv _ _ _ Heqo). exploit is_val_list_all_values; eauto. intros ALLVAL. (* top *) - destruct (classify_fun tyf) as [tyargs tyres|]_eqn... - destruct (Genv.find_funct ge vf) as [fd|]_eqn... - destruct (sem_cast_arguments vtl tyargs) as [vargs|]_eqn... + destruct (classify_fun tyf) as [tyargs tyres|] eqn:?... + destruct (Genv.find_funct ge vf) as [fd|] eqn:?... + destruct (sem_cast_arguments vtl tyargs) as [vargs|] eqn:?... destruct (type_eq (type_of_fundef fd) (Tfunction tyargs tyres))... apply topred_ok; auto. red. split; auto. eapply red_Ecall; eauto. eapply sem_cast_arguments_sound; eauto. @@ -1516,11 +1516,11 @@ Proof with (try (apply not_invert_ok; simpl; intro; myinv; intuition congruence; eapply incontext2_list_ok; eauto. eapply incontext2_list_ok; eauto. (* builtin *) - destruct (is_val_list rargs) as [vtl | ]_eqn. + destruct (is_val_list rargs) as [vtl | ] eqn:?. exploit is_val_list_all_values; eauto. intros ALLVAL. (* top *) - destruct (sem_cast_arguments vtl tyargs) as [vargs|]_eqn... - destruct (do_external ef w vargs m) as [[[[? ?] v] m'] | ]_eqn... + destruct (sem_cast_arguments vtl tyargs) as [vargs|] eqn:?... + destruct (do_external ef w vargs m) as [[[[? ?] v] m'] | ] eqn:?... exploit do_ef_external_sound; eauto. intros [EC PT]. apply topred_ok; auto. red. split; auto. eapply red_builtin; eauto. eapply sem_cast_arguments_sound; eauto. @@ -1537,9 +1537,9 @@ Proof with (try (apply not_invert_ok; simpl; intro; myinv; intuition congruence; (* loc *) split; intros. tauto. simpl; congruence. (* paren *) - destruct (is_val a) as [[v ty'] | ]_eqn. rewrite (is_val_inv _ _ _ Heqo). + destruct (is_val a) as [[v ty'] | ] eqn:?. rewrite (is_val_inv _ _ _ Heqo). (* top *) - destruct (sem_cast v ty' ty) as [v'|]_eqn... + destruct (sem_cast v ty' ty) as [v'|] eqn:?... apply topred_ok; auto. split. apply red_paren; auto. exists w; constructor. (* depth *) eapply incontext_ok; eauto. @@ -1556,8 +1556,8 @@ Lemma step_exprlist_val_list: Proof. induction al; simpl; intros. auto. - destruct (is_val r1) as [[v1 ty1]|]_eqn; try congruence. - destruct (is_val_list al) as []_eqn; try congruence. + destruct (is_val r1) as [[v1 ty1]|] eqn:?; try congruence. + destruct (is_val_list al) eqn:?; try congruence. rewrite (is_val_inv _ _ _ Heqo). rewrite IHal. auto. congruence. Qed. @@ -1717,75 +1717,78 @@ with step_exprlist_context: Proof. induction 1; simpl; intros. (* top *) - red. destruct (step_expr k a m); auto. intros. - replace (fun x => C1 x) with C1; auto. apply extensionality; auto. + red. destruct (step_expr k a m); auto. + try (* no eta in 8.3 *) + (intros; + replace (fun x => C1 x) with C1 by (apply extensionality; auto); + auto). (* deref *) eapply reducts_incl_trans with (C' := fun x => Ederef x ty); eauto. - destruct (is_val (C a)) as [[v ty']|]_eqn; eauto. + destruct (is_val (C a)) as [[v ty']|] eqn:?; eauto. (* field *) eapply reducts_incl_trans with (C' := fun x => Efield x f ty); eauto. - destruct (is_val (C a)) as [[v ty']|]_eqn; eauto. + destruct (is_val (C a)) as [[v ty']|] eqn:?; eauto. (* valof *) eapply reducts_incl_trans with (C' := fun x => Evalof x ty); eauto. - destruct (is_loc (C a)) as [[[b ofs] ty']|]_eqn; eauto. + destruct (is_loc (C a)) as [[[b ofs] ty']|] eqn:?; eauto. (* addrof *) eapply reducts_incl_trans with (C' := fun x => Eaddrof x ty); eauto. - destruct (is_loc (C a)) as [[[b ofs] ty']|]_eqn; eauto. + destruct (is_loc (C a)) as [[[b ofs] ty']|] eqn:?; eauto. (* unop *) eapply reducts_incl_trans with (C' := fun x => Eunop op x ty); eauto. - destruct (is_val (C a)) as [[v ty']|]_eqn; eauto. + destruct (is_val (C a)) as [[v ty']|] eqn:?; eauto. (* binop left *) eapply reducts_incl_trans with (C' := fun x => Ebinop op x e2 ty); eauto. - destruct (is_val (C a)) as [[v ty']|]_eqn; eauto. + destruct (is_val (C a)) as [[v ty']|] eqn:?; eauto. (* binop right *) eapply reducts_incl_trans with (C' := fun x => Ebinop op e1 x ty); eauto. - destruct (is_val e1) as [[v1 ty1]|]_eqn; eauto. - destruct (is_val (C a)) as [[v2 ty2]|]_eqn; eauto. + destruct (is_val e1) as [[v1 ty1]|] eqn:?; eauto. + destruct (is_val (C a)) as [[v2 ty2]|] eqn:?; eauto. (* cast *) eapply reducts_incl_trans with (C' := fun x => Ecast x ty); eauto. - destruct (is_val (C a)) as [[v ty']|]_eqn; eauto. + destruct (is_val (C a)) as [[v ty']|] eqn:?; eauto. (* seqand *) eapply reducts_incl_trans with (C' := fun x => Eseqand x r2 ty); eauto. - destruct (is_val (C a)) as [[v ty']|]_eqn; eauto. + destruct (is_val (C a)) as [[v ty']|] eqn:?; eauto. (* seqor *) eapply reducts_incl_trans with (C' := fun x => Eseqor x r2 ty); eauto. - destruct (is_val (C a)) as [[v ty']|]_eqn; eauto. + destruct (is_val (C a)) as [[v ty']|] eqn:?; eauto. (* condition *) eapply reducts_incl_trans with (C' := fun x => Econdition x r2 r3 ty); eauto. - destruct (is_val (C a)) as [[v ty']|]_eqn; eauto. + destruct (is_val (C a)) as [[v ty']|] eqn:?; eauto. (* assign left *) eapply reducts_incl_trans with (C' := fun x => Eassign x e2 ty); eauto. - destruct (is_loc (C a)) as [[[b ofs] ty']|]_eqn; eauto. + destruct (is_loc (C a)) as [[[b ofs] ty']|] eqn:?; eauto. (* assign right *) eapply reducts_incl_trans with (C' := fun x => Eassign e1 x ty); eauto. - destruct (is_loc e1) as [[[b ofs] ty1]|]_eqn; eauto. - destruct (is_val (C a)) as [[v2 ty2]|]_eqn; eauto. + destruct (is_loc e1) as [[[b ofs] ty1]|] eqn:?; eauto. + destruct (is_val (C a)) as [[v2 ty2]|] eqn:?; eauto. (* assignop left *) eapply reducts_incl_trans with (C' := fun x => Eassignop op x e2 tyres ty); eauto. - destruct (is_loc (C a)) as [[[b ofs] ty']|]_eqn; eauto. + destruct (is_loc (C a)) as [[[b ofs] ty']|] eqn:?; eauto. (* assignop right *) eapply reducts_incl_trans with (C' := fun x => Eassignop op e1 x tyres ty); eauto. - destruct (is_loc e1) as [[[b ofs] ty1]|]_eqn; eauto. - destruct (is_val (C a)) as [[v2 ty2]|]_eqn; eauto. + destruct (is_loc e1) as [[[b ofs] ty1]|] eqn:?; eauto. + destruct (is_val (C a)) as [[v2 ty2]|] eqn:?; eauto. (* postincr *) eapply reducts_incl_trans with (C' := fun x => Epostincr id x ty); eauto. - destruct (is_loc (C a)) as [[[b ofs] ty']|]_eqn; eauto. + destruct (is_loc (C a)) as [[[b ofs] ty']|] eqn:?; eauto. (* call left *) eapply reducts_incl_trans with (C' := fun x => Ecall x el ty); eauto. - destruct (is_val (C a)) as [[v ty']|]_eqn; eauto. + destruct (is_val (C a)) as [[v ty']|] eqn:?; eauto. (* call right *) eapply reducts_incl_trans with (C' := fun x => Ecall e1 x ty). apply step_exprlist_context. auto. - destruct (is_val e1) as [[v1 ty1]|]_eqn; eauto. - destruct (is_val_list (C a)) as [vl|]_eqn; eauto. + destruct (is_val e1) as [[v1 ty1]|] eqn:?; eauto. + destruct (is_val_list (C a)) as [vl|] eqn:?; eauto. (* builtin *) eapply reducts_incl_trans with (C' := fun x => Ebuiltin ef tyargs x ty). apply step_exprlist_context. auto. - destruct (is_val_list (C a)) as [vl|]_eqn; eauto. + destruct (is_val_list (C a)) as [vl|] eqn:?; eauto. (* comma *) eapply reducts_incl_trans with (C' := fun x => Ecomma x e2 ty); eauto. - destruct (is_val (C a)) as [[v ty']|]_eqn; eauto. + destruct (is_val (C a)) as [[v ty']|] eqn:?; eauto. (* paren *) eapply reducts_incl_trans with (C' := fun x => Eparen x ty); eauto. - destruct (is_val (C a)) as [[v ty']|]_eqn; eauto. + destruct (is_val (C a)) as [[v ty']|] eqn:?; eauto. induction 1; simpl; intros. (* cons left *) @@ -1804,7 +1807,7 @@ Lemma not_stuckred_imm_safe: (forall C, ~In (C, Stuckred) (step_expr k a m)) -> imm_safe_t k a m. Proof. intros. generalize (step_expr_sound a k m). intros [A B]. - destruct (step_expr k a m) as [|[C rd] res]_eqn. + destruct (step_expr k a m) as [|[C rd] res] eqn:?. specialize (B (refl_equal _)). destruct k. destruct a; simpl in B; try congruence. constructor. destruct a; simpl in B; try congruence. constructor. @@ -1889,7 +1892,7 @@ Lemma do_alloc_variables_sound: Proof. induction l; intros; simpl. constructor. - destruct a as [id ty]. destruct (Mem.alloc m 0 (sizeof ty)) as [m1 b1]_eqn; simpl. + destruct a as [id ty]. destruct (Mem.alloc m 0 (sizeof ty)) as [m1 b1] eqn:?; simpl. econstructor; eauto. Qed. @@ -2053,8 +2056,8 @@ Ltac myinv := [intro EQ; unfold ret in EQ; inv EQ; myinv | myinv] | [ |- In _ (_ :: nil) -> _ ] => intro X; elim X; clear X; [intro EQ; inv EQ; myinv | myinv] - | [ |- In _ (match ?x with Some _ => _ | None => _ end) -> _ ] => destruct x as []_eqn; myinv - | [ |- In _ (match ?x with false => _ | true => _ end) -> _ ] => destruct x as []_eqn; myinv + | [ |- In _ (match ?x with Some _ => _ | None => _ end) -> _ ] => destruct x eqn:?; myinv + | [ |- In _ (match ?x with false => _ | true => _ end) -> _ ] => destruct x eqn:?; myinv | [ |- In _ (match ?x with left _ => _ | right _ => _ end) -> _ ] => destruct x; myinv | _ => idtac end. @@ -2078,7 +2081,7 @@ Proof with try (left; right; econstructor; eauto; fail). (* goto *) destruct p as [s' k']. myinv... (* ExprState *) - destruct (is_val r) as [[v ty]|]_eqn. + destruct (is_val r) as [[v ty]|] eqn:?. (* expression is a value *) rewrite (is_val_inv _ _ _ Heqo). destruct k; myinv... @@ -2102,7 +2105,7 @@ Proof with try (left; right; econstructor; eauto; fail). (* callstate *) destruct fd; myinv. (* internal *) - destruct (do_alloc_variables empty_env m (fn_params f ++ fn_vars f)) as [e m1]_eqn. + destruct (do_alloc_variables empty_env m (fn_params f ++ fn_vars f)) as [e m1] eqn:?. myinv. left; right; apply step_internal_function with m1. auto. change e with (fst (e,m1)). change m1 with (snd (e,m1)) at 2. rewrite <- Heqp. apply do_alloc_variables_sound. eapply sem_bind_parameters_sound; eauto. diff --git a/cfrontend/Cminorgenproof.v b/cfrontend/Cminorgenproof.v index 62690d6..cff5b06 100644 --- a/cfrontend/Cminorgenproof.v +++ b/cfrontend/Cminorgenproof.v @@ -398,11 +398,11 @@ Proof. else false end end). - destruct (List.existsb pred (PTree.elements e)) as []_eqn. + destruct (List.existsb pred (PTree.elements e)) eqn:?. (* yes *) rewrite List.existsb_exists in Heqb. destruct Heqb as [[id [b sz]] [A B]]. - simpl in B. destruct (f b) as [[sp' delta] |]_eqn; try discriminate. + simpl in B. destruct (f b) as [[sp' delta] |] eqn:?; try discriminate. destruct (eq_block sp sp'); try discriminate. destruct (andb_prop _ _ B). left. apply is_reachable_intro with id b sz delta. @@ -646,13 +646,13 @@ Proof. constructor. auto. auto. eapply match_temps_invariant; eauto. eapply match_env_invariant; eauto. - red in SEPARATED. intros. destruct (f1 b) as [[b' delta']|]_eqn. + red in SEPARATED. intros. destruct (f1 b) as [[b' delta']|] eqn:?. exploit INCR; eauto. congruence. exploit SEPARATED; eauto. intros [A B]. elim B. red. omega. intros. assert (lo <= hi) by (eapply me_low_high; eauto). - destruct (f1 b) as [[b' delta']|]_eqn. + destruct (f1 b) as [[b' delta']|] eqn:?. apply INCR; auto. - destruct (f2 b) as [[b' delta']|]_eqn; auto. + destruct (f2 b) as [[b' delta']|] eqn:?; auto. exploit SEPARATED; eauto. intros [A B]. elim A. red. omega. eapply match_bounds_invariant; eauto. intros. eapply MAXPERMS; eauto. red. exploit me_bounded; eauto. omega. @@ -884,7 +884,7 @@ Proof. intros. destruct (In_dec peq id (map fst vars)). apply cenv_remove_gss; auto. rewrite cenv_remove_gso; auto. - destruct (cenv!id) as [ofs|]_eqn; auto. elim n; eauto. + destruct (cenv!id) as [ofs|] eqn:?; auto. elim n; eauto. eapply Mem.alloc_right_inject; eauto. Qed. @@ -917,7 +917,7 @@ Proof. simpl; intros. inv H. omega. Opaque assign_variable. destruct a as [id s]. simpl. intros. - destruct (assign_variable (cenv, sz) (id, s)) as [cenv1 sz1]_eqn. + destruct (assign_variable (cenv, sz) (id, s)) as [cenv1 sz1] eqn:?. apply Zle_trans with sz1. eapply assign_variable_incr; eauto. eauto. Transparent assign_variable. Qed. @@ -1014,7 +1014,7 @@ Proof. destruct a as [id sz]. simpl in H0. inv H0. rewrite in_app in H6. rewrite list_norepet_app in H7. destruct H7 as [P [Q R]]. - destruct (assign_variable (cenv1, sz1) (id, sz)) as [cenv' sz']_eqn. + destruct (assign_variable (cenv1, sz1) (id, sz)) as [cenv' sz'] eqn:?. exploit assign_variable_sound. eauto. instantiate (1 := vars). tauto. @@ -1377,12 +1377,12 @@ Proof. intros. apply (val_match_approx_increasing Int1 a v); auto. intros; unfold Approx.bitwise_and. - destruct (Approx.bge Int1 a1) as []_eqn. simpl. apply Y; eauto. compute; auto. - destruct (Approx.bge Int1 a2) as []_eqn. simpl. apply X; eauto. compute; auto. - destruct (Approx.bge Int8u a1) as []_eqn. simpl. apply Y; eauto. compute; auto. - destruct (Approx.bge Int8u a2) as []_eqn. simpl. apply X; eauto. compute; auto. - destruct (Approx.bge Int16u a1) as []_eqn. simpl. apply Y; eauto. compute; auto. - destruct (Approx.bge Int16u a2) as []_eqn. simpl. apply X; eauto. compute; auto. + destruct (Approx.bge Int1 a1) eqn:?. simpl. apply Y; eauto. compute; auto. + destruct (Approx.bge Int1 a2) eqn:?. simpl. apply X; eauto. compute; auto. + destruct (Approx.bge Int8u a1) eqn:?. simpl. apply Y; eauto. compute; auto. + destruct (Approx.bge Int8u a2) eqn:?. simpl. apply X; eauto. compute; auto. + destruct (Approx.bge Int16u a1) eqn:?. simpl. apply Y; eauto. compute; auto. + destruct (Approx.bge Int16u a2) eqn:?. simpl. apply X; eauto. compute; auto. simpl; auto. Qed. @@ -1404,19 +1404,19 @@ Proof. unfold Approx.bitwise_or. - destruct (Approx.bge Int1 a1 && Approx.bge Int1 a2) as []_eqn. + destruct (Approx.bge Int1 a1 && Approx.bge Int1 a2) eqn:?. destruct (andb_prop _ _ Heqb). simpl. apply X. compute; auto. apply (val_match_approx_increasing Int1 a1 v1); auto. apply (val_match_approx_increasing Int1 a2 v2); auto. - destruct (Approx.bge Int8u a1 && Approx.bge Int8u a2) as []_eqn. + destruct (Approx.bge Int8u a1 && Approx.bge Int8u a2) eqn:?. destruct (andb_prop _ _ Heqb0). simpl. apply X. compute; auto. apply (val_match_approx_increasing Int8u a1 v1); auto. apply (val_match_approx_increasing Int8u a2 v2); auto. - destruct (Approx.bge Int16u a1 && Approx.bge Int16u a2) as []_eqn. + destruct (Approx.bge Int16u a1 && Approx.bge Int16u a2) eqn:?. destruct (andb_prop _ _ Heqb1). simpl. apply X. compute; auto. apply (val_match_approx_increasing Int16u a1 v1); auto. @@ -1574,8 +1574,8 @@ Proof. apply val_inject_val_of_optbool. Opaque Int.add. unfold Val.cmpu. simpl. - destruct (Mem.valid_pointer m b1 (Int.unsigned ofs1)) as []_eqn; simpl; auto. - destruct (Mem.valid_pointer m b0 (Int.unsigned ofs0)) as []_eqn; simpl; auto. + destruct (Mem.valid_pointer m b1 (Int.unsigned ofs1)) eqn:?; simpl; auto. + destruct (Mem.valid_pointer m b0 (Int.unsigned ofs0)) eqn:?; simpl; auto. exploit Mem.valid_pointer_inject_val. eauto. eexact Heqb. econstructor; eauto. intros V1. rewrite V1. exploit Mem.valid_pointer_inject_val. eauto. eexact Heqb0. econstructor; eauto. @@ -1859,13 +1859,20 @@ Proof. (forall b ofs, Mem.store chunk m1 b ofs v1 = Mem.store chunk m1 b ofs v1') -> Mem.storev chunk m1 a1 v1' = Some n1). intros. rewrite <- H0. destruct a1; simpl; auto. - inv H2; (eapply Mem.storev_mapped_inject; [eauto|idtac|eauto|eauto]); - auto; apply H3; intros. + inv H2; eapply Mem.storev_mapped_inject; + try eapply H; try eapply H1; try apply H3; intros. rewrite <- Mem.store_int8_sign_ext. rewrite H4. apply Mem.store_int8_sign_ext. + auto. rewrite <- Mem.store_int8_zero_ext. rewrite H4. apply Mem.store_int8_zero_ext. + auto. rewrite <- Mem.store_int16_sign_ext. rewrite H4. apply Mem.store_int16_sign_ext. + auto. rewrite <- Mem.store_int16_zero_ext. rewrite H4. apply Mem.store_int16_zero_ext. + auto. rewrite <- Mem.store_float32_truncate. rewrite H4. apply Mem.store_float32_truncate. + auto. + eauto. + auto. Qed. Lemma make_store_correct: @@ -2053,7 +2060,7 @@ Proof. (* Eunop *) exploit IHeval_expr; eauto. intros [tv1 [EVAL1 [INJ1 APP1]]]. unfold Csharpminor.eval_unop in H0. - destruct (Approx.unop_is_redundant op x0) as []_eqn; inv EQ0. + destruct (Approx.unop_is_redundant op x0) eqn:?; inv EQ0. (* -- eliminated *) exploit approx_unop_is_redundant_sound; eauto. intros. replace v with v1 by congruence. diff --git a/cfrontend/Cshmgenproof.v b/cfrontend/Cshmgenproof.v index 42eae5d..74a6da5 100644 --- a/cfrontend/Cshmgenproof.v +++ b/cfrontend/Cshmgenproof.v @@ -732,10 +732,10 @@ Lemma block_is_volatile_preserved: forall b, block_is_volatile tge b = block_is_volatile ge b. Proof. intros. unfold block_is_volatile. - destruct (Genv.find_var_info ge b) as []_eqn. + destruct (Genv.find_var_info ge b) eqn:?. exploit var_info_translated; eauto. intros [tv [A B]]. rewrite A. unfold transf_globvar in B. monadInv B. auto. - destruct (Genv.find_var_info tge b) as []_eqn. + destruct (Genv.find_var_info tge b) eqn:?. exploit var_info_rev_translated; eauto. intros [tv [A B]]. congruence. auto. Qed. @@ -761,7 +761,7 @@ Lemma match_env_globals: e!id = None -> te!id = None. Proof. - intros. destruct (te!id) as [[b sz] | ]_eqn; auto. + intros. destruct (te!id) as [[b sz] | ] eqn:?; auto. exploit me_local_inv; eauto. intros [ty EQ]. congruence. Qed. @@ -1284,7 +1284,7 @@ Proof. destruct H0. inv MK. econstructor; split. eapply plus_left. - destruct H0; subst ts'; constructor. + destruct H0; subst ts'. 2:constructor. constructor. apply star_one. constructor. traceEq. econstructor; eauto. constructor. econstructor; eauto. @@ -1355,7 +1355,7 @@ Proof. destruct H; subst x; monadInv TR; inv MTR; auto. destruct H0. inv MK. econstructor; split. - apply plus_one. destruct H0; subst ts'; constructor. + apply plus_one. destruct H0; subst ts'. 2:constructor. constructor. eapply match_states_skip; eauto. diff --git a/cfrontend/Cstrategy.v b/cfrontend/Cstrategy.v index b28409d..7988dfa 100644 --- a/cfrontend/Cstrategy.v +++ b/cfrontend/Cstrategy.v @@ -816,7 +816,7 @@ Ltac StepR REC C' a := (* field *) StepR IHa (fun x => C(Efield x f0 ty)) a. exploit safe_inv. eexact SAFE0. eauto. simpl. - intros [b [ofs [EQ TY]]]. subst v. destruct (typeof a) as []_eqn; try contradiction. + intros [b [ofs [EQ TY]]]. subst v. destruct (typeof a) eqn:?; try contradiction. destruct TY as [delta OFS]. exists b; exists (Int.add ofs (Int.repr delta)); econstructor; eauto. exists b; exists ofs; econstructor; eauto. (* valof *) @@ -1075,7 +1075,7 @@ Ltac Base := Kind. Rec H RV C (fun x => Efield x f0 ty). (* rvalof *) Kind. Rec H LV C (fun x => Evalof x ty). - destruct (type_is_volatile (typeof l)) as []_eqn. + destruct (type_is_volatile (typeof l)) eqn:?. Base. rewrite H2; auto. (* deref *) Kind. Rec H RV C (fun x => Ederef x ty). @@ -1198,7 +1198,7 @@ Proof. eapply eval_simple_rvalue_steps with (C := fun x => C(Eassignop op (Eloc b ofs (typeof l)) x tyres (typeof l))); eauto. eapply plus_left. left; apply step_rred; auto. econstructor; eauto. - destruct (sem_binary_operation op v1 (typeof l) v2 (typeof r) m) as [v3|]_eqn. + destruct (sem_binary_operation op v1 (typeof l) v2 (typeof r) m) as [v3|] eqn:?. eapply star_left. left; apply step_rred with (C := fun x => C(Eassign (Eloc b ofs (typeof l)) x (typeof l))); eauto. econstructor; eauto. apply star_one. @@ -1326,8 +1326,8 @@ Proof. exploit (simple_can_eval_rval f k e m b2 (fun x => C(Eassignop op (Eloc b ofs (typeof b1)) x tyres ty))); eauto. intros [v [E2 S2]]. exploit safe_inv. eexact S2. eauto. simpl. intros [t1 [v1 [A B]]]. - destruct (sem_binary_operation op v1 (typeof b1) v (typeof b2) m) as [v3|]_eqn. - destruct (sem_cast v3 tyres (typeof b1)) as [v4|]_eqn. + destruct (sem_binary_operation op v1 (typeof b1) v (typeof b2) m) as [v3|] eqn:?. + destruct (sem_cast v3 tyres (typeof b1)) as [v4|] eqn:?. destruct (classic (exists t2, exists m', assign_loc ge (typeof b1) m b ofs v4 t2 m')). destruct H2 as [t2 [m' D]]. econstructor; econstructor; eapply step_assignop; eauto. @@ -1341,8 +1341,8 @@ Proof. exploit (simple_can_eval_lval f k e m b (fun x => C(Epostincr id x ty))); eauto. intros [b1 [ofs [E1 S1]]]. exploit safe_inv. eexact S1. eauto. simpl. intros [t [v1 [A B]]]. - destruct (sem_incrdecr id v1 ty) as [v2|]_eqn. - destruct (sem_cast v2 (typeconv ty) ty) as [v3|]_eqn. + destruct (sem_incrdecr id v1 ty) as [v2|] eqn:?. + destruct (sem_cast v2 (typeconv ty) ty) as [v3|] eqn:?. destruct (classic (exists t2, exists m', assign_loc ge ty m b1 ofs v3 t2 m')). destruct H0 as [t2 [m' D]]. econstructor; econstructor; eapply step_postincr; eauto. @@ -1493,8 +1493,8 @@ Proof. subst t2. exploit assign_loc_receptive; eauto. intros EQ; rewrite EQ in H. econstructor; econstructor; eauto. inv H10. exploit deref_loc_receptive; eauto. intros [EQ [v1' A]]. subst t0. - destruct (sem_binary_operation op v1' (typeof l) v2 (typeof r) m) as [v3'|]_eqn. - destruct (sem_cast v3' tyres (typeof l)) as [v4'|]_eqn. + destruct (sem_binary_operation op v1' (typeof l) v2 (typeof r) m) as [v3'|] eqn:?. + destruct (sem_cast v3' tyres (typeof l)) as [v4'|] eqn:?. destruct (classic (exists t2', exists m'', assign_loc (Genv.globalenv p) (typeof l) m b ofs v4' t2' m'')). destruct H1 as [t2' [m'' P]]. econstructor; econstructor. left; eapply step_assignop with (v1 := v1'); eauto. simpl; reflexivity. @@ -1506,8 +1506,8 @@ Proof. rewrite Heqo; auto. (* assignop stuck *) exploit deref_loc_receptive; eauto. intros [EQ [v1' A]]. subst t1. - destruct (sem_binary_operation op v1' (typeof l) v2 (typeof r) m) as [v3'|]_eqn. - destruct (sem_cast v3' tyres (typeof l)) as [v4'|]_eqn. + destruct (sem_binary_operation op v1' (typeof l) v2 (typeof r) m) as [v3'|] eqn:?. + destruct (sem_cast v3' tyres (typeof l)) as [v4'|] eqn:?. destruct (classic (exists t2', exists m'', assign_loc (Genv.globalenv p) (typeof l) m b ofs v4' t2' m'')). destruct H1 as [t2' [m'' P]]. econstructor; econstructor. left; eapply step_assignop with (v1 := v1'); eauto. simpl; reflexivity. @@ -1522,8 +1522,8 @@ Proof. subst t2. exploit assign_loc_receptive; eauto. intros EQ; rewrite EQ in H. econstructor; econstructor; eauto. inv H9. exploit deref_loc_receptive; eauto. intros [EQ [v1' A]]. subst t0. - destruct (sem_incrdecr id v1' (typeof l)) as [v2'|]_eqn. - destruct (sem_cast v2' (typeconv (typeof l)) (typeof l)) as [v3'|]_eqn. + destruct (sem_incrdecr id v1' (typeof l)) as [v2'|] eqn:?. + destruct (sem_cast v2' (typeconv (typeof l)) (typeof l)) as [v3'|] eqn:?. destruct (classic (exists t2', exists m'', assign_loc (Genv.globalenv p) (typeof l) m b ofs v3' t2' m'')). destruct H1 as [t2' [m'' P]]. econstructor; econstructor. left; eapply step_postincr with (v1 := v1'); eauto. simpl; reflexivity. @@ -1535,8 +1535,8 @@ Proof. rewrite Heqo; auto. (* postincr stuck *) exploit deref_loc_receptive; eauto. intros [EQ [v1' A]]. subst t1. - destruct (sem_incrdecr id v1' (typeof l)) as [v2'|]_eqn. - destruct (sem_cast v2' (typeconv (typeof l)) (typeof l)) as [v3'|]_eqn. + destruct (sem_incrdecr id v1' (typeof l)) as [v2'|] eqn:?. + destruct (sem_cast v2' (typeconv (typeof l)) (typeof l)) as [v3'|] eqn:?. destruct (classic (exists t2', exists m'', assign_loc (Genv.globalenv p) (typeof l) m b ofs v3' t2' m'')). destruct H1 as [t2' [m'' P]]. econstructor; econstructor. left; eapply step_postincr with (v1 := v1'); eauto. simpl; reflexivity. diff --git a/cfrontend/Initializersproof.v b/cfrontend/Initializersproof.v index 9bc1dd7..ca9c5b0 100644 --- a/cfrontend/Initializersproof.v +++ b/cfrontend/Initializersproof.v @@ -12,7 +12,6 @@ (** Compile-time evaluation of initializers for global C variables. *) -Require Import Coq.Program.Equality. Require Import Coqlib. Require Import Errors. Require Import Maps. @@ -268,42 +267,58 @@ Proof. induction 2; simpl; try tauto. Qed. +Lemma compat_eval_steps_aux f r e m r' m' s2 : + simple r -> + star step ge s2 nil (ExprState f r' Kstop e m') -> + estep ge (ExprState f r Kstop e m) nil s2 -> + exists r1, + s2 = ExprState f r1 Kstop e m /\ + compat_eval RV e r r1 m /\ simple r1. +Proof. + intros. + inv H1. + (* lred *) + assert (S: simple a) by (eapply simple_context_1; eauto). + exploit lred_compat; eauto. intros [A B]. subst m'0. + econstructor; split. eauto. split. + eapply compat_eval_context; eauto. + eapply simple_context_2; eauto. eapply lred_simple; eauto. + (* rred *) + assert (S: simple a) by (eapply simple_context_1; eauto). + exploit rred_compat; eauto. intros [A B]. subst m'0. + econstructor; split. eauto. split. + eapply compat_eval_context; eauto. + eapply simple_context_2; eauto. eapply rred_simple; eauto. + (* callred *) + assert (S: simple a) by (eapply simple_context_1; eauto). + inv H8; simpl in S; contradiction. + (* stuckred *) + inv H0. destruct H1; inv H0. +Qed. + Lemma compat_eval_steps: forall f r e m r' m', star step ge (ExprState f r Kstop e m) E0 (ExprState f r' Kstop e m') -> simple r -> m' = m /\ compat_eval RV e r r' m. Proof. - intros. dependent induction H. + intros. + remember (ExprState f r Kstop e m) as S1. + remember E0 as t. + remember (ExprState f r' Kstop e m') as S2. + revert S1 t S2 H r m r' m' HeqS1 Heqt HeqS2 H0. + induction 1; intros; subst. (* base case *) - split. auto. red; auto. + inv HeqS2. split. auto. red; auto. (* inductive case *) destruct (app_eq_nil t1 t2); auto. subst. inv H. (* expression step *) - assert (X: exists r1, s2 = ExprState f r1 Kstop e m /\ compat_eval RV e r r1 m /\ simple r1). - inv H3. - (* lred *) - assert (S: simple a) by (eapply simple_context_1; eauto). - exploit lred_compat; eauto. intros [A B]. subst m'0. - econstructor; split. eauto. split. - eapply compat_eval_context; eauto. - eapply simple_context_2; eauto. eapply lred_simple; eauto. - (* rred *) - assert (S: simple a) by (eapply simple_context_1; eauto). - exploit rred_compat; eauto. intros [A B]. subst m'0. - econstructor; split. eauto. split. - eapply compat_eval_context; eauto. - eapply simple_context_2; eauto. eapply rred_simple; eauto. - (* callred *) - assert (S: simple a) by (eapply simple_context_1; eauto). - inv H9; simpl in S; contradiction. - (* stuckred *) - inv H2. destruct H; inv H. - destruct X as [r1 [A [B C]]]. subst s2. - exploit IHstar; eauto. intros [D E]. + exploit compat_eval_steps_aux; eauto. + intros [r1 [A [B C]]]. subst s2. + exploit IHstar; eauto. intros [D E]. split. auto. destruct B; destruct E. split. congruence. auto. (* statement steps *) - inv H3. + inv H1. Qed. Theorem eval_simple_steps: @@ -438,7 +453,7 @@ Lemma sem_cast_match: forall v1' v2', match_val v1' v1 -> do_cast v1' ty1 ty2 = OK v2' -> match_val v2' v2. Proof. - intros. unfold do_cast in H1. destruct (sem_cast v1' ty1 ty2) as [v2''|] _eqn; inv H1. + intros. unfold do_cast in H1. destruct (sem_cast v1' ty1 ty2) as [v2''|] eqn:?; inv H1. unfold sem_cast in H; functional inversion Heqo; subst. rewrite H2 in H. inv H0. inv H. constructor. rewrite H2 in H. inv H0. inv H. constructor; auto. @@ -888,3 +903,4 @@ Qed. End SOUNDNESS. + diff --git a/cfrontend/PrintClight.ml b/cfrontend/PrintClight.ml index 0e8b494..b05876a 100644 --- a/cfrontend/PrintClight.ml +++ b/cfrontend/PrintClight.ml @@ -40,8 +40,7 @@ let register_struct_union id fld = (* Naming temporaries *) -let temp_name (id: ident) = - Printf.sprintf "$%ld" (camlint_of_positive id) +let temp_name (id: ident) = Z.to_string (Z.Zpos id) (* Declarator (identifier + type) -- reuse from PrintCsyntax *) diff --git a/cfrontend/PrintCsyntax.ml b/cfrontend/PrintCsyntax.ml index 7858545..67efd1b 100644 --- a/cfrontend/PrintCsyntax.ml +++ b/cfrontend/PrintCsyntax.ml @@ -396,7 +396,7 @@ let string_of_init id = let chop_last_nul id = match List.rev id with - | Init_int8 BinInt.Z0 :: tl -> List.rev tl + | Init_int8 Z.Z0 :: tl -> List.rev tl | _ -> id let print_init p = function diff --git a/cfrontend/SimplExpr.v b/cfrontend/SimplExpr.v index ab35445..2dbd97e 100644 --- a/cfrontend/SimplExpr.v +++ b/cfrontend/SimplExpr.v @@ -24,8 +24,6 @@ Require Import Cop. Require Import Csyntax. Require Import Clight. -Module C := Csyntax. - Open Local Scope string_scope. (** State and error monad for generating fresh identifiers. *) @@ -208,46 +206,46 @@ Definition finish (dst: destination) (sl: list statement) (a: expr) := | For_set tyl tmp => (sl ++ do_set tmp tyl a, a) end. -Fixpoint transl_expr (dst: destination) (a: C.expr) : mon (list statement * expr) := +Fixpoint transl_expr (dst: destination) (a: Csyntax.expr) : mon (list statement * expr) := match a with - | C.Eloc b ofs ty => - error (msg "SimplExpr.transl_expr: C.Eloc") - | C.Evar x ty => + | Csyntax.Eloc b ofs ty => + error (msg "SimplExpr.transl_expr: Eloc") + | Csyntax.Evar x ty => ret (finish dst nil (Evar x ty)) - | C.Ederef r ty => + | Csyntax.Ederef r ty => do (sl, a) <- transl_expr For_val r; ret (finish dst sl (Ederef a ty)) - | C.Efield r f ty => + | Csyntax.Efield r f ty => do (sl, a) <- transl_expr For_val r; ret (finish dst sl (Efield a f ty)) - | C.Eval (Vint n) ty => + | Csyntax.Eval (Vint n) ty => ret (finish dst nil (Econst_int n ty)) - | C.Eval (Vfloat n) ty => + | Csyntax.Eval (Vfloat n) ty => ret (finish dst nil (Econst_float n ty)) - | C.Eval _ ty => - error (msg "SimplExpr.transl_expr: val") - | C.Esizeof ty' ty => + | Csyntax.Eval _ ty => + error (msg "SimplExpr.transl_expr: Eval") + | Csyntax.Esizeof ty' ty => ret (finish dst nil (Esizeof ty' ty)) - | C.Ealignof ty' ty => + | Csyntax.Ealignof ty' ty => ret (finish dst nil (Ealignof ty' ty)) - | C.Evalof l ty => + | Csyntax.Evalof l ty => do (sl1, a1) <- transl_expr For_val l; - do (sl2, a2) <- transl_valof (C.typeof l) a1; + do (sl2, a2) <- transl_valof (Csyntax.typeof l) a1; ret (finish dst (sl1 ++ sl2) a2) - | C.Eaddrof l ty => + | Csyntax.Eaddrof l ty => do (sl, a) <- transl_expr For_val l; ret (finish dst sl (Eaddrof a ty)) - | C.Eunop op r1 ty => + | Csyntax.Eunop op r1 ty => do (sl1, a1) <- transl_expr For_val r1; ret (finish dst sl1 (Eunop op a1 ty)) - | C.Ebinop op r1 r2 ty => + | Csyntax.Ebinop op r1 r2 ty => do (sl1, a1) <- transl_expr For_val r1; do (sl2, a2) <- transl_expr For_val r2; ret (finish dst (sl1 ++ sl2) (Ebinop op a1 a2 ty)) - | C.Ecast r1 ty => + | Csyntax.Ecast r1 ty => do (sl1, a1) <- transl_expr For_val r1; ret (finish dst sl1 (Ecast a1 ty)) - | C.Eseqand r1 r2 ty => + | Csyntax.Eseqand r1 r2 ty => do (sl1, a1) <- transl_expr For_val r1; match dst with | For_val => @@ -265,7 +263,7 @@ Fixpoint transl_expr (dst: destination) (a: C.expr) : mon (list statement * expr makeif a1 (makeseq sl2) (makeseq (do_set t tyl (Econst_int Int.zero ty))) :: nil, dummy_expr) end - | C.Eseqor r1 r2 ty => + | Csyntax.Eseqor r1 r2 ty => do (sl1, a1) <- transl_expr For_val r1; match dst with | For_val => @@ -283,7 +281,7 @@ Fixpoint transl_expr (dst: destination) (a: C.expr) : mon (list statement * expr makeif a1 (makeseq (do_set t tyl (Econst_int Int.one ty))) (makeseq sl2) :: nil, dummy_expr) end - | C.Econdition r1 r2 r3 ty => + | Csyntax.Econdition r1 r2 r3 ty => do (sl1, a1) <- transl_expr For_val r1; match dst with | For_val => @@ -303,11 +301,11 @@ Fixpoint transl_expr (dst: destination) (a: C.expr) : mon (list statement * expr ret (sl1 ++ makeif a1 (makeseq sl2) (makeseq sl3) :: nil, dummy_expr) end - | C.Eassign l1 r2 ty => + | Csyntax.Eassign l1 r2 ty => do (sl1, a1) <- transl_expr For_val l1; do (sl2, a2) <- transl_expr For_val r2; - let ty1 := C.typeof l1 in - let ty2 := C.typeof r2 in + let ty1 := Csyntax.typeof l1 in + let ty2 := Csyntax.typeof r2 in match dst with | For_val | For_set _ _ => do t <- gensym ty2; @@ -318,8 +316,8 @@ Fixpoint transl_expr (dst: destination) (a: C.expr) : mon (list statement * expr ret (sl1 ++ sl2 ++ make_assign a1 a2 :: nil, dummy_expr) end - | C.Eassignop op l1 r2 tyres ty => - let ty1 := C.typeof l1 in + | Csyntax.Eassignop op l1 r2 tyres ty => + let ty1 := Csyntax.typeof l1 in do (sl1, a1) <- transl_expr For_val l1; do (sl2, a2) <- transl_expr For_val r2; do (sl3, a3) <- transl_valof ty1 a1; @@ -335,8 +333,8 @@ Fixpoint transl_expr (dst: destination) (a: C.expr) : mon (list statement * expr ret (sl1 ++ sl2 ++ sl3 ++ make_assign a1 (Ebinop op a3 a2 tyres) :: nil, dummy_expr) end - | C.Epostincr id l1 ty => - let ty1 := C.typeof l1 in + | Csyntax.Epostincr id l1 ty => + let ty1 := Csyntax.typeof l1 in do (sl1, a1) <- transl_expr For_val l1; match dst with | For_val | For_set _ _ => @@ -350,11 +348,11 @@ Fixpoint transl_expr (dst: destination) (a: C.expr) : mon (list statement * expr ret (sl1 ++ sl2 ++ make_assign a1 (transl_incrdecr id a2 ty1) :: nil, dummy_expr) end - | C.Ecomma r1 r2 ty => + | Csyntax.Ecomma r1 r2 ty => do (sl1, a1) <- transl_expr For_effects r1; do (sl2, a2) <- transl_expr dst r2; ret (sl1 ++ sl2, a2) - | C.Ecall r1 rl2 ty => + | Csyntax.Ecall r1 rl2 ty => do (sl1, a1) <- transl_expr For_val r1; do (sl2, al2) <- transl_exprlist rl2; match dst with @@ -365,7 +363,7 @@ Fixpoint transl_expr (dst: destination) (a: C.expr) : mon (list statement * expr | For_effects => ret (sl1 ++ sl2 ++ Scall None a1 al2 :: nil, dummy_expr) end - | C.Ebuiltin ef tyargs rl ty => + | Csyntax.Ebuiltin ef tyargs rl ty => do (sl, al) <- transl_exprlist rl; match dst with | For_val | For_set _ _ => @@ -375,33 +373,33 @@ Fixpoint transl_expr (dst: destination) (a: C.expr) : mon (list statement * expr | For_effects => ret (sl ++ Sbuiltin None ef tyargs al :: nil, dummy_expr) end - | C.Eparen r1 ty => + | Csyntax.Eparen r1 ty => error (msg "SimplExpr.transl_expr: paren") end with transl_exprlist (rl: exprlist) : mon (list statement * list expr) := match rl with - | C.Enil => + | Csyntax.Enil => ret (nil, nil) - | C.Econs r1 rl2 => + | Csyntax.Econs r1 rl2 => do (sl1, a1) <- transl_expr For_val r1; do (sl2, al2) <- transl_exprlist rl2; ret (sl1 ++ sl2, a1 :: al2) end. -Definition transl_expression (r: C.expr) : mon (statement * expr) := +Definition transl_expression (r: Csyntax.expr) : mon (statement * expr) := do (sl, a) <- transl_expr For_val r; ret (makeseq sl, a). -Definition transl_expr_stmt (r: C.expr) : mon statement := +Definition transl_expr_stmt (r: Csyntax.expr) : mon statement := do (sl, a) <- transl_expr For_effects r; ret (makeseq sl). (* -Definition transl_if (r: C.expr) (s1 s2: statement) : mon statement := +Definition transl_if (r: Csyntax.expr) (s1 s2: statement) : mon statement := do (sl, a) <- transl_expr For_val r; ret (makeseq (sl ++ makeif a s1 s2 :: nil)). *) -Definition transl_if (r: C.expr) (s1 s2: statement) : mon statement := +Definition transl_if (r: Csyntax.expr) (s1 s2: statement) : mon statement := do (sl, a) <- transl_expr For_val r; ret (makeseq (sl ++ makeif a s1 s2 :: nil)). @@ -410,33 +408,33 @@ Definition transl_if (r: C.expr) (s1 s2: statement) : mon statement := Definition expr_true := Econst_int Int.one type_int32s. Definition is_Sskip: - forall s, {s = C.Sskip} + {s <> C.Sskip}. + forall s, {s = Csyntax.Sskip} + {s <> Csyntax.Sskip}. Proof. destruct s; ((left; reflexivity) || (right; congruence)). Defined. -Fixpoint transl_stmt (s: C.statement) : mon statement := +Fixpoint transl_stmt (s: Csyntax.statement) : mon statement := match s with - | C.Sskip => ret Sskip - | C.Sdo e => transl_expr_stmt e - | C.Ssequence s1 s2 => + | Csyntax.Sskip => ret Sskip + | Csyntax.Sdo e => transl_expr_stmt e + | Csyntax.Ssequence s1 s2 => do ts1 <- transl_stmt s1; do ts2 <- transl_stmt s2; ret (Ssequence ts1 ts2) - | C.Sifthenelse e s1 s2 => + | Csyntax.Sifthenelse e s1 s2 => do ts1 <- transl_stmt s1; do ts2 <- transl_stmt s2; do (s', a) <- transl_expression e; ret (Ssequence s' (Sifthenelse a ts1 ts2)) - | C.Swhile e s1 => + | Csyntax.Swhile e s1 => do s' <- transl_if e Sskip Sbreak; do ts1 <- transl_stmt s1; ret (Sloop (Ssequence s' ts1) Sskip) - | C.Sdowhile e s1 => + | Csyntax.Sdowhile e s1 => do s' <- transl_if e Sskip Sbreak; do ts1 <- transl_stmt s1; ret (Sloop ts1 s') - | C.Sfor s1 e2 s3 s4 => + | Csyntax.Sfor s1 e2 s3 s4 => do ts1 <- transl_stmt s1; do s' <- transl_if e2 Sskip Sbreak; do ts3 <- transl_stmt s3; @@ -445,32 +443,32 @@ Fixpoint transl_stmt (s: C.statement) : mon statement := ret (Sloop (Ssequence s' ts4) ts3) else ret (Ssequence ts1 (Sloop (Ssequence s' ts4) ts3)) - | C.Sbreak => + | Csyntax.Sbreak => ret Sbreak - | C.Scontinue => + | Csyntax.Scontinue => ret Scontinue - | C.Sreturn None => + | Csyntax.Sreturn None => ret (Sreturn None) - | C.Sreturn (Some e) => + | Csyntax.Sreturn (Some e) => do (s', a) <- transl_expression e; ret (Ssequence s' (Sreturn (Some a))) - | C.Sswitch e ls => + | Csyntax.Sswitch e ls => do (s', a) <- transl_expression e; do tls <- transl_lblstmt ls; ret (Ssequence s' (Sswitch a tls)) - | C.Slabel lbl s1 => + | Csyntax.Slabel lbl s1 => do ts1 <- transl_stmt s1; ret (Slabel lbl ts1) - | C.Sgoto lbl => + | Csyntax.Sgoto lbl => ret (Sgoto lbl) end -with transl_lblstmt (ls: C.labeled_statements) : mon labeled_statements := +with transl_lblstmt (ls: Csyntax.labeled_statements) : mon labeled_statements := match ls with - | C.LSdefault s => + | Csyntax.LSdefault s => do ts <- transl_stmt s; ret (LSdefault ts) - | C.LScase n s ls1 => + | Csyntax.LScase n s ls1 => do ts <- transl_stmt s; do tls1 <- transl_lblstmt ls1; ret (LScase n ts tls1) @@ -478,30 +476,30 @@ with transl_lblstmt (ls: C.labeled_statements) : mon labeled_statements := (** Translation of a function *) -Definition transl_function (f: C.function) : res function := - match transl_stmt f.(C.fn_body) (initial_generator tt) with +Definition transl_function (f: Csyntax.function) : res function := + match transl_stmt f.(Csyntax.fn_body) (initial_generator tt) with | Err msg => Error msg | Res tbody g i => OK (mkfunction - f.(C.fn_return) - f.(C.fn_params) - f.(C.fn_vars) + f.(Csyntax.fn_return) + f.(Csyntax.fn_params) + f.(Csyntax.fn_vars) g.(gen_trail) tbody) end. Local Open Scope error_monad_scope. -Definition transl_fundef (fd: C.fundef) : res fundef := +Definition transl_fundef (fd: Csyntax.fundef) : res fundef := match fd with - | C.Internal f => + | Csyntax.Internal f => do tf <- transl_function f; OK (Internal tf) - | C.External ef targs tres => + | Csyntax.External ef targs tres => OK (External ef targs tres) end. -Definition transl_program (p: C.program) : res program := +Definition transl_program (p: Csyntax.program) : res program := transform_partial_program transl_fundef p. diff --git a/cfrontend/SimplExprproof.v b/cfrontend/SimplExprproof.v index 59fc9bc..150ed76 100644 --- a/cfrontend/SimplExprproof.v +++ b/cfrontend/SimplExprproof.v @@ -33,7 +33,7 @@ Require Import SimplExprspec. Section PRESERVATION. -Variable prog: C.program. +Variable prog: Csyntax.program. Variable tprog: Clight.program. Hypothesis TRANSL: transl_program prog = OK tprog. @@ -76,20 +76,20 @@ Qed. Lemma type_of_fundef_preserved: forall f tf, transl_fundef f = OK tf -> - type_of_fundef tf = C.type_of_fundef f. + type_of_fundef tf = Csyntax.type_of_fundef f. Proof. intros. destruct f; monadInv H. exploit transl_function_spec; eauto. intros [A [B [C D]]]. - simpl. unfold type_of_function, C.type_of_function. congruence. + simpl. unfold type_of_function, Csyntax.type_of_function. congruence. auto. Qed. Lemma function_return_preserved: forall f tf, transl_function f = OK tf -> - fn_return tf = C.fn_return f. + fn_return tf = Csyntax.fn_return f. Proof. intros. unfold transl_function in H. - destruct (transl_stmt (C.fn_body f) (initial_generator tt)); inv H. + destruct (transl_stmt (Csyntax.fn_body f) (initial_generator tt)); inv H. auto. Qed. @@ -190,11 +190,11 @@ Lemma tr_simple: forall le dst sl a tmps, tr_expr le dst r sl a tmps -> match dst with - | For_val => sl = nil /\ C.typeof r = typeof a /\ eval_expr tge e le m a v + | For_val => sl = nil /\ Csyntax.typeof r = typeof a /\ eval_expr tge e le m a v | For_effects => sl = nil | For_set tyl t => exists b, sl = do_set t tyl b - /\ C.typeof r = typeof b + /\ Csyntax.typeof r = typeof b /\ eval_expr tge e le m b v end) /\ @@ -202,7 +202,7 @@ Lemma tr_simple: eval_simple_lvalue ge e m l b ofs -> forall le sl a tmps, tr_expr le For_val l sl a tmps -> - sl = nil /\ C.typeof l = typeof a /\ eval_lvalue tge e le m a b ofs). + sl = nil /\ Csyntax.typeof l = typeof a /\ eval_lvalue tge e le m a b ofs). Proof. Opaque makeif. intros e m. @@ -275,11 +275,11 @@ Lemma tr_simple_rvalue: forall le dst sl a tmps, tr_expr le dst r sl a tmps -> match dst with - | For_val => sl = nil /\ C.typeof r = typeof a /\ eval_expr tge e le m a v + | For_val => sl = nil /\ Csyntax.typeof r = typeof a /\ eval_expr tge e le m a v | For_effects => sl = nil | For_set tyl t => exists b, sl = do_set t tyl b - /\ C.typeof r = typeof b + /\ Csyntax.typeof r = typeof b /\ eval_expr tge e le m b v end. Proof. @@ -291,7 +291,7 @@ Lemma tr_simple_lvalue: eval_simple_lvalue ge e m l b ofs -> forall le sl a tmps, tr_expr le For_val l sl a tmps -> - sl = nil /\ C.typeof l = typeof a /\ eval_lvalue tge e le m a b ofs. + sl = nil /\ Csyntax.typeof l = typeof a /\ eval_lvalue tge e le m a b ofs. Proof. intros e m. exact (proj2 (tr_simple e m)). Qed. @@ -315,8 +315,8 @@ Qed. Lemma typeof_context: forall k1 k2 C, leftcontext k1 k2 C -> - forall e1 e2, C.typeof e1 = C.typeof e2 -> - C.typeof (C e1) = C.typeof (C e2). + forall e1 e2, Csyntax.typeof e1 = Csyntax.typeof e2 -> + Csyntax.typeof (C e1) = Csyntax.typeof (C e2). Proof. induction 1; intros; auto. Qed. @@ -337,7 +337,7 @@ Lemma tr_expr_leftcontext_rec: /\ (forall le' e' sl3, tr_expr le' dst' e' sl3 a' tmp' -> (forall id, ~In id tmp' -> le'!id = le!id) -> - C.typeof e' = C.typeof e -> + Csyntax.typeof e' = Csyntax.typeof e -> tr_expr le' dst (C e') (sl3 ++ sl2) a tmps) ) /\ ( forall from C, leftcontextlist from C -> @@ -350,7 +350,7 @@ Lemma tr_expr_leftcontext_rec: /\ (forall le' e' sl3, tr_expr le' dst' e' sl3 a' tmp' -> (forall id, ~In id tmp' -> le'!id = le!id) -> - C.typeof e' = C.typeof e -> + Csyntax.typeof e' = Csyntax.typeof e -> tr_exprlist le' (C e') (sl3 ++ sl2) a tmps) ). Proof. @@ -695,7 +695,7 @@ Theorem tr_expr_leftcontext: /\ (forall le' r' sl3, tr_expr le' dst' r' sl3 a' tmp' -> (forall id, ~In id tmp' -> le'!id = le!id) -> - C.typeof r' = C.typeof r -> + Csyntax.typeof r' = Csyntax.typeof r -> tr_expr le' dst (C r') (sl3 ++ sl2) a tmps). Proof. intros. eapply (proj1 tr_expr_leftcontext_rec); eauto. @@ -714,7 +714,7 @@ Theorem tr_top_leftcontext: /\ (forall le' m' r' sl3, tr_expr le' dst' r' sl3 a' tmp' -> (forall id, ~In id tmp' -> le'!id = le!id) -> - C.typeof r' = C.typeof r -> + Csyntax.typeof r' = Csyntax.typeof r -> tr_top tge e le' m' dst (C r') (sl3 ++ sl2) a tmps). Proof. induction 1; intros. @@ -895,7 +895,7 @@ Inductive match_cont : Csem.cont -> cont -> Prop := | match_Kcall: forall f e C ty k optid tf le sl tk a dest tmps, transl_function f = Errors.OK tf -> leftcontext RV RV C -> - (forall v m, tr_top tge e (set_opttemp optid v le) m dest (C (C.Eval v ty)) sl a tmps) -> + (forall v m, tr_top tge e (set_opttemp optid v le) m dest (C (Csyntax.Eval v ty)) sl a tmps) -> match_cont_exp dest a k tk -> match_cont (Csem.Kcall f e C ty k) (Kcall optid tf e le (Kseqlist sl tk)) @@ -1220,10 +1220,10 @@ Proof. (* for not skip *) rename s' into sr. rewrite (tr_find_label_if _ _ H3); auto. - exploit (IHs1 (Csem.Kseq (C.Sfor C.Sskip e s2 s3) k)); eauto. + exploit (IHs1 (Csem.Kseq (Csyntax.Sfor Csyntax.Sskip e s2 s3) k)); eauto. econstructor; eauto. econstructor; eauto. destruct (Csem.find_label lbl s1 - (Csem.Kseq (C.Sfor C.Sskip e s2 s3) k)) as [[s' k'] | ]. + (Csem.Kseq (Csyntax.Sfor Csyntax.Sskip e s2 s3) k)) as [[s' k'] | ]. intros [ts' [tk' [A [B C]]]]. rewrite A. exists ts'; exists tk'; intuition. intro EQ; rewrite EQ. exploit (IHs3 (Csem.Kfor3 e s2 s3 k)); eauto. econstructor; eauto. @@ -1265,49 +1265,49 @@ End FIND_LABEL. Sdo a, k ---> a, Kdo k ---> rval v, Kdo k ---> Sskip, k >> but the translation, which is [Sskip], makes no transitions. -- The reduction [C.Ecomma (C.Eval v) r2 --> r2]. -- The reduction [C.Eparen (C.Eval v) --> C.Eval v] in a [For_effects] context. +- The reduction [Ecomma (Eval v) r2 --> r2]. +- The reduction [Eparen (Eval v) --> Eval v] in a [For_effects] context. The following measure decreases for these stuttering steps. *) -Fixpoint esize (a: C.expr) : nat := +Fixpoint esize (a: Csyntax.expr) : nat := match a with - | C.Eloc _ _ _ => 1%nat - | C.Evar _ _ => 1%nat - | C.Ederef r1 _ => S(esize r1) - | C.Efield l1 _ _ => S(esize l1) - | C.Eval _ _ => O - | C.Evalof l1 _ => S(esize l1) - | C.Eaddrof l1 _ => S(esize l1) - | C.Eunop _ r1 _ => S(esize r1) - | C.Ebinop _ r1 r2 _ => S(esize r1 + esize r2)%nat - | C.Ecast r1 _ => S(esize r1) - | C.Eseqand r1 _ _ => S(esize r1) - | C.Eseqor r1 _ _ => S(esize r1) - | C.Econdition r1 _ _ _ => S(esize r1) - | C.Esizeof _ _ => 1%nat - | C.Ealignof _ _ => 1%nat - | C.Eassign l1 r2 _ => S(esize l1 + esize r2)%nat - | C.Eassignop _ l1 r2 _ _ => S(esize l1 + esize r2)%nat - | C.Epostincr _ l1 _ => S(esize l1) - | C.Ecomma r1 r2 _ => S(esize r1 + esize r2)%nat - | C.Ecall r1 rl2 _ => S(esize r1 + esizelist rl2)%nat - | C.Ebuiltin ef _ rl _ => S(esizelist rl)%nat - | C.Eparen r1 _ => S(esize r1) + | Csyntax.Eloc _ _ _ => 1%nat + | Csyntax.Evar _ _ => 1%nat + | Csyntax.Ederef r1 _ => S(esize r1) + | Csyntax.Efield l1 _ _ => S(esize l1) + | Csyntax.Eval _ _ => O + | Csyntax.Evalof l1 _ => S(esize l1) + | Csyntax.Eaddrof l1 _ => S(esize l1) + | Csyntax.Eunop _ r1 _ => S(esize r1) + | Csyntax.Ebinop _ r1 r2 _ => S(esize r1 + esize r2)%nat + | Csyntax.Ecast r1 _ => S(esize r1) + | Csyntax.Eseqand r1 _ _ => S(esize r1) + | Csyntax.Eseqor r1 _ _ => S(esize r1) + | Csyntax.Econdition r1 _ _ _ => S(esize r1) + | Csyntax.Esizeof _ _ => 1%nat + | Csyntax.Ealignof _ _ => 1%nat + | Csyntax.Eassign l1 r2 _ => S(esize l1 + esize r2)%nat + | Csyntax.Eassignop _ l1 r2 _ _ => S(esize l1 + esize r2)%nat + | Csyntax.Epostincr _ l1 _ => S(esize l1) + | Csyntax.Ecomma r1 r2 _ => S(esize r1 + esize r2)%nat + | Csyntax.Ecall r1 rl2 _ => S(esize r1 + esizelist rl2)%nat + | Csyntax.Ebuiltin ef _ rl _ => S(esizelist rl)%nat + | Csyntax.Eparen r1 _ => S(esize r1) end -with esizelist (el: C.exprlist) : nat := +with esizelist (el: Csyntax.exprlist) : nat := match el with - | C.Enil => O - | C.Econs r1 rl2 => (esize r1 + esizelist rl2)%nat + | Csyntax.Enil => O + | Csyntax.Econs r1 rl2 => (esize r1 + esizelist rl2)%nat end. Definition measure (st: Csem.state) : nat := match st with | Csem.ExprState _ r _ _ _ => (esize r + 1)%nat - | Csem.State _ C.Sskip _ _ _ => 0%nat - | Csem.State _ (C.Sdo r) _ _ _ => (esize r + 2)%nat - | Csem.State _ (C.Sifthenelse r _ _) _ _ _ => (esize r + 2)%nat + | Csem.State _ Csyntax.Sskip _ _ _ => 0%nat + | Csem.State _ (Csyntax.Sdo r) _ _ _ => (esize r + 2)%nat + | Csem.State _ (Csyntax.Sifthenelse r _ _) _ _ _ => (esize r + 2)%nat | _ => 0%nat end. @@ -1338,7 +1338,7 @@ Lemma tr_val_gen: (forall tge e le' m, (forall id, In id tmp -> le'!id = le!id) -> eval_expr tge e le' m a v) -> - tr_expr le dst (C.Eval v ty) (final dst a) a tmp. + tr_expr le dst (Csyntax.Eval v ty) (final dst a) a tmp. Proof. intros. destruct dst; simpl; econstructor; auto. Qed. @@ -1378,7 +1378,7 @@ Proof. econstructor; split. left. eapply plus_two. constructor. eapply step_make_set; eauto. traceEq. econstructor; eauto. - change (final dst' (Etempvar t0 (C.typeof l)) ++ sl2) with (nil ++ (final dst' (Etempvar t0 (C.typeof l)) ++ sl2)). + change (final dst' (Etempvar t0 (Csyntax.typeof l)) ++ sl2) with (nil ++ (final dst' (Etempvar t0 (Csyntax.typeof l)) ++ sl2)). apply S. apply tr_val_gen. auto. intros. constructor. rewrite H5; auto. apply PTree.gss. intros. apply PTree.gso. red; intros; subst; elim H5; auto. @@ -1784,7 +1784,7 @@ Proof. left. eapply plus_left. constructor. apply star_one. econstructor. econstructor; eauto. rewrite <- TY1; eauto. traceEq. econstructor; eauto. - change sl2 with (final For_val (Etempvar t (C.typeof r)) ++ sl2). apply S. + change sl2 with (final For_val (Etempvar t (Csyntax.typeof r)) ++ sl2). apply S. constructor. auto. intros. constructor. rewrite H2; auto. apply PTree.gss. intros. apply PTree.gso. intuition congruence. auto. @@ -1877,7 +1877,7 @@ Qed. Lemma tr_top_val_for_val_inv: forall e le m v ty sl a tmps, - tr_top tge e le m For_val (C.Eval v ty) sl a tmps -> + tr_top tge e le m For_val (Csyntax.Eval v ty) sl a tmps -> sl = nil /\ typeof a = ty /\ eval_expr tge e le m a v. Proof. intros. inv H. auto. inv H0. auto. @@ -2087,7 +2087,7 @@ Proof. inv H9. exploit tr_top_val_for_val_inv; eauto. intros [A [B C]]. subst. econstructor; split. left. eapply plus_two. constructor. econstructor. eauto. - replace (fn_return tf) with (C.fn_return f). eauto. + replace (fn_return tf) with (Csyntax.fn_return f). eauto. exploit transl_function_spec; eauto. intuition congruence. eauto. traceEq. constructor. apply match_cont_call; auto. diff --git a/cfrontend/SimplExprspec.v b/cfrontend/SimplExprspec.v index 571a937..5cb0f18 100644 --- a/cfrontend/SimplExprspec.v +++ b/cfrontend/SimplExprspec.v @@ -35,9 +35,9 @@ Local Open Scope gensym_monad_scope. (** This specification covers: - all cases of [transl_lvalue] and [transl_rvalue]; -- two additional cases for [C.Eparen], so that reductions of [C.Econdition] +- two additional cases for [Csyntax.Eparen], so that reductions of [Csyntax.Econdition] expressions are properly tracked; -- three additional cases allowing [C.Eval v] C expressions to match +- three additional cases allowing [Csyntax.Eval v] C expressions to match any Clight expression [a] that evaluates to [v] in any environment matching the given temporary environment [le]. *) @@ -57,69 +57,69 @@ Inductive tr_rvalof: type -> expr -> list statement -> expr -> list ident -> Pro type_is_volatile ty = true -> In t tmp -> tr_rvalof ty a (make_set t a :: nil) (Etempvar t ty) tmp. -Inductive tr_expr: temp_env -> destination -> C.expr -> list statement -> expr -> list ident -> Prop := +Inductive tr_expr: temp_env -> destination -> Csyntax.expr -> list statement -> expr -> list ident -> Prop := | tr_var: forall le dst id ty tmp, - tr_expr le dst (C.Evar id ty) + tr_expr le dst (Csyntax.Evar id ty) (final dst (Evar id ty)) (Evar id ty) tmp | tr_deref: forall le dst e1 ty sl1 a1 tmp, tr_expr le For_val e1 sl1 a1 tmp -> - tr_expr le dst (C.Ederef e1 ty) + tr_expr le dst (Csyntax.Ederef e1 ty) (sl1 ++ final dst (Ederef a1 ty)) (Ederef a1 ty) tmp | tr_field: forall le dst e1 f ty sl1 a1 tmp, tr_expr le For_val e1 sl1 a1 tmp -> - tr_expr le dst (C.Efield e1 f ty) + tr_expr le dst (Csyntax.Efield e1 f ty) (sl1 ++ final dst (Efield a1 f ty)) (Efield a1 f ty) tmp | tr_val_effect: forall le v ty any tmp, - tr_expr le For_effects (C.Eval v ty) nil any tmp + tr_expr le For_effects (Csyntax.Eval v ty) nil any tmp | tr_val_value: forall le v ty a tmp, typeof a = ty -> (forall tge e le' m, (forall id, In id tmp -> le'!id = le!id) -> eval_expr tge e le' m a v) -> - tr_expr le For_val (C.Eval v ty) + tr_expr le For_val (Csyntax.Eval v ty) nil a tmp | tr_val_set: forall le tyl t v ty a any tmp, typeof a = ty -> (forall tge e le' m, (forall id, In id tmp -> le'!id = le!id) -> eval_expr tge e le' m a v) -> - tr_expr le (For_set tyl t) (C.Eval v ty) + tr_expr le (For_set tyl t) (Csyntax.Eval v ty) (do_set t tyl a) any tmp | tr_sizeof: forall le dst ty' ty tmp, - tr_expr le dst (C.Esizeof ty' ty) + tr_expr le dst (Csyntax.Esizeof ty' ty) (final dst (Esizeof ty' ty)) (Esizeof ty' ty) tmp | tr_alignof: forall le dst ty' ty tmp, - tr_expr le dst (C.Ealignof ty' ty) + tr_expr le dst (Csyntax.Ealignof ty' ty) (final dst (Ealignof ty' ty)) (Ealignof ty' ty) tmp | tr_valof: forall le dst e1 ty tmp sl1 a1 tmp1 sl2 a2 tmp2, tr_expr le For_val e1 sl1 a1 tmp1 -> - tr_rvalof (C.typeof e1) a1 sl2 a2 tmp2 -> + tr_rvalof (Csyntax.typeof e1) a1 sl2 a2 tmp2 -> list_disjoint tmp1 tmp2 -> incl tmp1 tmp -> incl tmp2 tmp -> - tr_expr le dst (C.Evalof e1 ty) + tr_expr le dst (Csyntax.Evalof e1 ty) (sl1 ++ sl2 ++ final dst a2) a2 tmp | tr_addrof: forall le dst e1 ty tmp sl1 a1, tr_expr le For_val e1 sl1 a1 tmp -> - tr_expr le dst (C.Eaddrof e1 ty) + tr_expr le dst (Csyntax.Eaddrof e1 ty) (sl1 ++ final dst (Eaddrof a1 ty)) (Eaddrof a1 ty) tmp | tr_unop: forall le dst op e1 ty tmp sl1 a1, tr_expr le For_val e1 sl1 a1 tmp -> - tr_expr le dst (C.Eunop op e1 ty) + tr_expr le dst (Csyntax.Eunop op e1 ty) (sl1 ++ final dst (Eunop op a1 ty)) (Eunop op a1 ty) tmp | tr_binop: forall le dst op e1 e2 ty sl1 a1 tmp1 sl2 a2 tmp2 tmp, tr_expr le For_val e1 sl1 a1 tmp1 -> tr_expr le For_val e2 sl2 a2 tmp2 -> list_disjoint tmp1 tmp2 -> incl tmp1 tmp -> incl tmp2 tmp -> - tr_expr le dst (C.Ebinop op e1 e2 ty) + tr_expr le dst (Csyntax.Ebinop op e1 e2 ty) (sl1 ++ sl2 ++ final dst (Ebinop op a1 a2 ty)) (Ebinop op a1 a2 ty) tmp | tr_cast: forall le dst e1 ty sl1 a1 tmp, tr_expr le For_val e1 sl1 a1 tmp -> - tr_expr le dst (C.Ecast e1 ty) + tr_expr le dst (Csyntax.Ecast e1 ty) (sl1 ++ final dst (Ecast a1 ty)) (Ecast a1 ty) tmp | tr_seqand_val: forall le e1 e2 ty sl1 a1 tmp1 t sl2 a2 tmp2 tmp, @@ -127,7 +127,7 @@ Inductive tr_expr: temp_env -> destination -> C.expr -> list statement -> expr - tr_expr le (For_set (type_bool :: ty :: nil) t) e2 sl2 a2 tmp2 -> list_disjoint tmp1 tmp2 -> incl tmp1 tmp -> incl tmp2 tmp -> In t tmp -> - tr_expr le For_val (C.Eseqand e1 e2 ty) + tr_expr le For_val (Csyntax.Eseqand e1 e2 ty) (sl1 ++ makeif a1 (makeseq sl2) (Sset t (Econst_int Int.zero ty)) :: nil) (Etempvar t ty) tmp @@ -136,7 +136,7 @@ Inductive tr_expr: temp_env -> destination -> C.expr -> list statement -> expr - tr_expr le For_effects e2 sl2 a2 tmp2 -> list_disjoint tmp1 tmp2 -> incl tmp1 tmp -> incl tmp2 tmp -> - tr_expr le For_effects (C.Eseqand e1 e2 ty) + tr_expr le For_effects (Csyntax.Eseqand e1 e2 ty) (sl1 ++ makeif a1 (makeseq sl2) Sskip :: nil) any tmp | tr_seqand_set: forall le tyl t e1 e2 ty sl1 a1 tmp1 sl2 a2 tmp2 any tmp, @@ -144,7 +144,7 @@ Inductive tr_expr: temp_env -> destination -> C.expr -> list statement -> expr - tr_expr le (For_set (type_bool :: ty :: tyl) t) e2 sl2 a2 tmp2 -> list_disjoint tmp1 tmp2 -> incl tmp1 tmp -> incl tmp2 tmp -> In t tmp -> - tr_expr le (For_set tyl t) (C.Eseqand e1 e2 ty) + tr_expr le (For_set tyl t) (Csyntax.Eseqand e1 e2 ty) (sl1 ++ makeif a1 (makeseq sl2) (makeseq (do_set t tyl (Econst_int Int.zero ty))) :: nil) any tmp @@ -153,7 +153,7 @@ Inductive tr_expr: temp_env -> destination -> C.expr -> list statement -> expr - tr_expr le (For_set (type_bool :: ty :: nil) t) e2 sl2 a2 tmp2 -> list_disjoint tmp1 tmp2 -> incl tmp1 tmp -> incl tmp2 tmp -> In t tmp -> - tr_expr le For_val (C.Eseqor e1 e2 ty) + tr_expr le For_val (Csyntax.Eseqor e1 e2 ty) (sl1 ++ makeif a1 (Sset t (Econst_int Int.one ty)) (makeseq sl2) :: nil) (Etempvar t ty) tmp @@ -162,7 +162,7 @@ Inductive tr_expr: temp_env -> destination -> C.expr -> list statement -> expr - tr_expr le For_effects e2 sl2 a2 tmp2 -> list_disjoint tmp1 tmp2 -> incl tmp1 tmp -> incl tmp2 tmp -> - tr_expr le For_effects (C.Eseqor e1 e2 ty) + tr_expr le For_effects (Csyntax.Eseqor e1 e2 ty) (sl1 ++ makeif a1 Sskip (makeseq sl2) :: nil) any tmp | tr_seqor_set: forall le tyl t e1 e2 ty sl1 a1 tmp1 sl2 a2 tmp2 any tmp, @@ -170,7 +170,7 @@ Inductive tr_expr: temp_env -> destination -> C.expr -> list statement -> expr - tr_expr le (For_set (type_bool :: ty :: tyl) t) e2 sl2 a2 tmp2 -> list_disjoint tmp1 tmp2 -> incl tmp1 tmp -> incl tmp2 tmp -> In t tmp -> - tr_expr le (For_set tyl t) (C.Eseqor e1 e2 ty) + tr_expr le (For_set tyl t) (Csyntax.Eseqor e1 e2 ty) (sl1 ++ makeif a1 (makeseq (do_set t tyl (Econst_int Int.one ty))) (makeseq sl2) :: nil) any tmp @@ -181,7 +181,7 @@ Inductive tr_expr: temp_env -> destination -> C.expr -> list statement -> expr - list_disjoint tmp1 tmp2 -> list_disjoint tmp1 tmp3 -> incl tmp1 tmp -> incl tmp2 tmp -> incl tmp3 tmp -> In t tmp -> - tr_expr le For_val (C.Econdition e1 e2 e3 ty) + tr_expr le For_val (Csyntax.Econdition e1 e2 e3 ty) (sl1 ++ makeif a1 (makeseq sl2) (makeseq sl3) :: nil) (Etempvar t ty) tmp | tr_condition_effects: forall le e1 e2 e3 ty sl1 a1 tmp1 sl2 a2 tmp2 sl3 a3 tmp3 any tmp, @@ -191,7 +191,7 @@ Inductive tr_expr: temp_env -> destination -> C.expr -> list statement -> expr - list_disjoint tmp1 tmp2 -> list_disjoint tmp1 tmp3 -> incl tmp1 tmp -> incl tmp2 tmp -> incl tmp3 tmp -> - tr_expr le For_effects (C.Econdition e1 e2 e3 ty) + tr_expr le For_effects (Csyntax.Econdition e1 e2 e3 ty) (sl1 ++ makeif a1 (makeseq sl2) (makeseq sl3) :: nil) any tmp | tr_condition_set: forall le tyl t e1 e2 e3 ty sl1 a1 tmp1 sl2 a2 tmp2 sl3 a3 tmp3 any tmp, @@ -201,7 +201,7 @@ Inductive tr_expr: temp_env -> destination -> C.expr -> list statement -> expr - list_disjoint tmp1 tmp2 -> list_disjoint tmp1 tmp3 -> incl tmp1 tmp -> incl tmp2 tmp -> incl tmp3 tmp -> In t tmp -> - tr_expr le (For_set tyl t) (C.Econdition e1 e2 e3 ty) + tr_expr le (For_set tyl t) (Csyntax.Econdition e1 e2 e3 ty) (sl1 ++ makeif a1 (makeseq sl2) (makeseq sl3) :: nil) any tmp | tr_assign_effects: forall le e1 e2 ty sl1 a1 tmp1 sl2 a2 tmp2 any tmp, @@ -209,7 +209,7 @@ Inductive tr_expr: temp_env -> destination -> C.expr -> list statement -> expr - tr_expr le For_val e2 sl2 a2 tmp2 -> list_disjoint tmp1 tmp2 -> incl tmp1 tmp -> incl tmp2 tmp -> - tr_expr le For_effects (C.Eassign e1 e2 ty) + tr_expr le For_effects (Csyntax.Eassign e1 e2 ty) (sl1 ++ sl2 ++ make_assign a1 a2 :: nil) any tmp | tr_assign_val: forall le dst e1 e2 ty sl1 a1 tmp1 sl2 a2 tmp2 t tmp ty1 ty2, @@ -218,9 +218,9 @@ Inductive tr_expr: temp_env -> destination -> C.expr -> list statement -> expr - incl tmp1 tmp -> incl tmp2 tmp -> list_disjoint tmp1 tmp2 -> In t tmp -> ~In t tmp1 -> ~In t tmp2 -> - ty1 = C.typeof e1 -> - ty2 = C.typeof e2 -> - tr_expr le dst (C.Eassign e1 e2 ty) + ty1 = Csyntax.typeof e1 -> + ty2 = Csyntax.typeof e2 -> + tr_expr le dst (Csyntax.Eassign e1 e2 ty) (sl1 ++ sl2 ++ Sset t a2 :: make_assign a1 (Etempvar t ty2) :: @@ -229,11 +229,11 @@ Inductive tr_expr: temp_env -> destination -> C.expr -> list statement -> expr - | tr_assignop_effects: forall le op e1 e2 tyres ty ty1 sl1 a1 tmp1 sl2 a2 tmp2 sl3 a3 tmp3 any tmp, tr_expr le For_val e1 sl1 a1 tmp1 -> tr_expr le For_val e2 sl2 a2 tmp2 -> - ty1 = C.typeof e1 -> + ty1 = Csyntax.typeof e1 -> tr_rvalof ty1 a1 sl3 a3 tmp3 -> list_disjoint tmp1 tmp2 -> list_disjoint tmp1 tmp3 -> list_disjoint tmp2 tmp3 -> incl tmp1 tmp -> incl tmp2 tmp -> incl tmp3 tmp -> - tr_expr le For_effects (C.Eassignop op e1 e2 tyres ty) + tr_expr le For_effects (Csyntax.Eassignop op e1 e2 tyres ty) (sl1 ++ sl2 ++ sl3 ++ make_assign a1 (Ebinop op a3 a2 tyres) :: nil) any tmp | tr_assignop_val: forall le dst op e1 e2 tyres ty sl1 a1 tmp1 sl2 a2 tmp2 sl3 a3 tmp3 t tmp ty1, @@ -243,8 +243,8 @@ Inductive tr_expr: temp_env -> destination -> C.expr -> list statement -> expr - list_disjoint tmp1 tmp2 -> list_disjoint tmp1 tmp3 -> list_disjoint tmp2 tmp3 -> incl tmp1 tmp -> incl tmp2 tmp -> incl tmp3 tmp -> In t tmp -> ~In t tmp1 -> ~In t tmp2 -> ~In t tmp3 -> - ty1 = C.typeof e1 -> - tr_expr le dst (C.Eassignop op e1 e2 tyres ty) + ty1 = Csyntax.typeof e1 -> + tr_expr le dst (Csyntax.Eassignop op e1 e2 tyres ty) (sl1 ++ sl2 ++ sl3 ++ Sset t (Ebinop op a3 a2 tyres) :: make_assign a1 (Etempvar t tyres) :: @@ -253,17 +253,17 @@ Inductive tr_expr: temp_env -> destination -> C.expr -> list statement -> expr - | tr_postincr_effects: forall le id e1 ty ty1 sl1 a1 tmp1 sl2 a2 tmp2 any tmp, tr_expr le For_val e1 sl1 a1 tmp1 -> tr_rvalof ty1 a1 sl2 a2 tmp2 -> - ty1 = C.typeof e1 -> + ty1 = Csyntax.typeof e1 -> incl tmp1 tmp -> incl tmp2 tmp -> list_disjoint tmp1 tmp2 -> - tr_expr le For_effects (C.Epostincr id e1 ty) + tr_expr le For_effects (Csyntax.Epostincr id e1 ty) (sl1 ++ sl2 ++ make_assign a1 (transl_incrdecr id a2 ty1) :: nil) any tmp | tr_postincr_val: forall le dst id e1 ty sl1 a1 tmp1 t ty1 tmp, tr_expr le For_val e1 sl1 a1 tmp1 -> incl tmp1 tmp -> In t tmp -> ~In t tmp1 -> - ty1 = C.typeof e1 -> - tr_expr le dst (C.Epostincr id e1 ty) + ty1 = Csyntax.typeof e1 -> + tr_expr le dst (Csyntax.Epostincr id e1 ty) (sl1 ++ make_set t a1 :: make_assign a1 (transl_incrdecr id (Etempvar t ty1) ty1) :: final dst (Etempvar t ty1)) @@ -273,13 +273,13 @@ Inductive tr_expr: temp_env -> destination -> C.expr -> list statement -> expr - tr_expr le dst e2 sl2 a2 tmp2 -> list_disjoint tmp1 tmp2 -> incl tmp1 tmp -> incl tmp2 tmp -> - tr_expr le dst (C.Ecomma e1 e2 ty) (sl1 ++ sl2) a2 tmp + tr_expr le dst (Csyntax.Ecomma e1 e2 ty) (sl1 ++ sl2) a2 tmp | tr_call_effects: forall le e1 el2 ty sl1 a1 tmp1 sl2 al2 tmp2 any tmp, tr_expr le For_val e1 sl1 a1 tmp1 -> tr_exprlist le el2 sl2 al2 tmp2 -> list_disjoint tmp1 tmp2 -> incl tmp1 tmp -> incl tmp2 tmp -> - tr_expr le For_effects (C.Ecall e1 el2 ty) + tr_expr le For_effects (Csyntax.Ecall e1 el2 ty) (sl1 ++ sl2 ++ Scall None a1 al2 :: nil) any tmp | tr_call_val: forall le dst e1 el2 ty sl1 a1 tmp1 sl2 al2 tmp2 t tmp, @@ -288,45 +288,45 @@ Inductive tr_expr: temp_env -> destination -> C.expr -> list statement -> expr - tr_exprlist le el2 sl2 al2 tmp2 -> list_disjoint tmp1 tmp2 -> In t tmp -> incl tmp1 tmp -> incl tmp2 tmp -> - tr_expr le dst (C.Ecall e1 el2 ty) + tr_expr le dst (Csyntax.Ecall e1 el2 ty) (sl1 ++ sl2 ++ Scall (Some t) a1 al2 :: final dst (Etempvar t ty)) (Etempvar t ty) tmp | tr_builtin_effects: forall le ef tyargs el ty sl al tmp1 any tmp, tr_exprlist le el sl al tmp1 -> incl tmp1 tmp -> - tr_expr le For_effects (C.Ebuiltin ef tyargs el ty) + tr_expr le For_effects (Csyntax.Ebuiltin ef tyargs el ty) (sl ++ Sbuiltin None ef tyargs al :: nil) any tmp | tr_builtin_val: forall le dst ef tyargs el ty sl al tmp1 t tmp, dst <> For_effects -> tr_exprlist le el sl al tmp1 -> In t tmp -> incl tmp1 tmp -> - tr_expr le dst (C.Ebuiltin ef tyargs el ty) + tr_expr le dst (Csyntax.Ebuiltin ef tyargs el ty) (sl ++ Sbuiltin (Some t) ef tyargs al :: final dst (Etempvar t ty)) (Etempvar t ty) tmp | tr_paren_val: forall le e1 ty sl1 a1 t tmp, tr_expr le (For_set (ty :: nil) t) e1 sl1 a1 tmp -> In t tmp -> - tr_expr le For_val (C.Eparen e1 ty) + tr_expr le For_val (Csyntax.Eparen e1 ty) sl1 (Etempvar t ty) tmp | tr_paren_effects: forall le e1 ty sl1 a1 tmp any, tr_expr le For_effects e1 sl1 a1 tmp -> - tr_expr le For_effects (C.Eparen e1 ty) sl1 any tmp + tr_expr le For_effects (Csyntax.Eparen e1 ty) sl1 any tmp | tr_paren_set: forall le tyl t e1 ty sl1 a1 tmp any, tr_expr le (For_set (ty::tyl) t) e1 sl1 a1 tmp -> In t tmp -> - tr_expr le (For_set tyl t) (C.Eparen e1 ty) sl1 any tmp + tr_expr le (For_set tyl t) (Csyntax.Eparen e1 ty) sl1 any tmp -with tr_exprlist: temp_env -> C.exprlist -> list statement -> list expr -> list ident -> Prop := +with tr_exprlist: temp_env -> Csyntax.exprlist -> list statement -> list expr -> list ident -> Prop := | tr_nil: forall le tmp, - tr_exprlist le C.Enil nil nil tmp + tr_exprlist le Csyntax.Enil nil nil tmp | tr_cons: forall le e1 el2 sl1 a1 tmp1 sl2 al2 tmp2 tmp, tr_expr le For_val e1 sl1 a1 tmp1 -> tr_exprlist le el2 sl2 al2 tmp2 -> list_disjoint tmp1 tmp2 -> incl tmp1 tmp -> incl tmp2 tmp -> - tr_exprlist le (C.Econs e1 el2) (sl1 ++ sl2) (a1 :: al2) tmp. + tr_exprlist le (Csyntax.Econs e1 el2) (sl1 ++ sl2) (a1 :: al2) tmp. Scheme tr_expr_ind2 := Minimality for tr_expr Sort Prop with tr_exprlist_ind2 := Minimality for tr_exprlist Sort Prop. @@ -372,11 +372,11 @@ Qed. (** The "top-level" translation is equivalent to [tr_expr] above for source terms. It brings additional flexibility in the matching - between C values and Cminor expressions: in the case of + between Csyntax values and Cminor expressions: in the case of [tr_expr], the Cminor expression must not depend on memory, while in the case of [tr_top] it can depend on the current memory state. This special case is extended to values occurring under - one or several [C.Eparen]. *) + one or several [Csyntax.Eparen]. *) Section TR_TOP. @@ -385,14 +385,14 @@ Variable e: env. Variable le: temp_env. Variable m: mem. -Inductive tr_top: destination -> C.expr -> list statement -> expr -> list ident -> Prop := +Inductive tr_top: destination -> Csyntax.expr -> list statement -> expr -> list ident -> Prop := | tr_top_val_val: forall v ty a tmp, typeof a = ty -> eval_expr ge e le m a v -> - tr_top For_val (C.Eval v ty) nil a tmp + tr_top For_val (Csyntax.Eval v ty) nil a tmp (* | tr_top_val_set: forall t tyl v ty a any tmp, typeof a = ty -> eval_expr ge e le m a v -> - tr_top (For_set tyl t) (C.Eval v ty) (Sset t (fold_left Ecast tyl a) :: nil) any tmp + tr_top (For_set tyl t) (Csyntax.Eval v ty) (Sset t (fold_left Ecast tyl a) :: nil) any tmp *) | tr_top_base: forall dst r sl a tmp, tr_expr le dst r sl a tmp -> @@ -400,92 +400,92 @@ Inductive tr_top: destination -> C.expr -> list statement -> expr -> list ident (* | tr_top_paren_test: forall tyl t r ty sl a tmp, tr_top (For_set (ty :: tyl) t) r sl a tmp -> - tr_top (For_set tyl t) (C.Eparen r ty) sl a tmp. + tr_top (For_set tyl t) (Csyntax.Eparen r ty) sl a tmp. *) End TR_TOP. (** ** Translation of statements *) -Inductive tr_expression: C.expr -> statement -> expr -> Prop := +Inductive tr_expression: Csyntax.expr -> statement -> expr -> Prop := | tr_expression_intro: forall r sl a tmps, (forall ge e le m, tr_top ge e le m For_val r sl a tmps) -> tr_expression r (makeseq sl) a. -Inductive tr_expr_stmt: C.expr -> statement -> Prop := +Inductive tr_expr_stmt: Csyntax.expr -> statement -> Prop := | tr_expr_stmt_intro: forall r sl a tmps, (forall ge e le m, tr_top ge e le m For_effects r sl a tmps) -> tr_expr_stmt r (makeseq sl). -Inductive tr_if: C.expr -> statement -> statement -> statement -> Prop := +Inductive tr_if: Csyntax.expr -> statement -> statement -> statement -> Prop := | tr_if_intro: forall r s1 s2 sl a tmps, (forall ge e le m, tr_top ge e le m For_val r sl a tmps) -> tr_if r s1 s2 (makeseq (sl ++ makeif a s1 s2 :: nil)). -Inductive tr_stmt: C.statement -> statement -> Prop := +Inductive tr_stmt: Csyntax.statement -> statement -> Prop := | tr_skip: - tr_stmt C.Sskip Sskip + tr_stmt Csyntax.Sskip Sskip | tr_do: forall r s, tr_expr_stmt r s -> - tr_stmt (C.Sdo r) s + tr_stmt (Csyntax.Sdo r) s | tr_seq: forall s1 s2 ts1 ts2, tr_stmt s1 ts1 -> tr_stmt s2 ts2 -> - tr_stmt (C.Ssequence s1 s2) (Ssequence ts1 ts2) + tr_stmt (Csyntax.Ssequence s1 s2) (Ssequence ts1 ts2) | tr_ifthenelse: forall r s1 s2 s' a ts1 ts2, tr_expression r s' a -> tr_stmt s1 ts1 -> tr_stmt s2 ts2 -> - tr_stmt (C.Sifthenelse r s1 s2) (Ssequence s' (Sifthenelse a ts1 ts2)) + tr_stmt (Csyntax.Sifthenelse r s1 s2) (Ssequence s' (Sifthenelse a ts1 ts2)) | tr_while: forall r s1 s' ts1, tr_if r Sskip Sbreak s' -> tr_stmt s1 ts1 -> - tr_stmt (C.Swhile r s1) + tr_stmt (Csyntax.Swhile r s1) (Sloop (Ssequence s' ts1) Sskip) | tr_dowhile: forall r s1 s' ts1, tr_if r Sskip Sbreak s' -> tr_stmt s1 ts1 -> - tr_stmt (C.Sdowhile r s1) + tr_stmt (Csyntax.Sdowhile r s1) (Sloop ts1 s') | tr_for_1: forall r s3 s4 s' ts3 ts4, tr_if r Sskip Sbreak s' -> tr_stmt s3 ts3 -> tr_stmt s4 ts4 -> - tr_stmt (C.Sfor C.Sskip r s3 s4) + tr_stmt (Csyntax.Sfor Csyntax.Sskip r s3 s4) (Sloop (Ssequence s' ts4) ts3) | tr_for_2: forall s1 r s3 s4 s' ts1 ts3 ts4, tr_if r Sskip Sbreak s' -> - s1 <> C.Sskip -> + s1 <> Csyntax.Sskip -> tr_stmt s1 ts1 -> tr_stmt s3 ts3 -> tr_stmt s4 ts4 -> - tr_stmt (C.Sfor s1 r s3 s4) + tr_stmt (Csyntax.Sfor s1 r s3 s4) (Ssequence ts1 (Sloop (Ssequence s' ts4) ts3)) | tr_break: - tr_stmt C.Sbreak Sbreak + tr_stmt Csyntax.Sbreak Sbreak | tr_continue: - tr_stmt C.Scontinue Scontinue + tr_stmt Csyntax.Scontinue Scontinue | tr_return_none: - tr_stmt (C.Sreturn None) (Sreturn None) + tr_stmt (Csyntax.Sreturn None) (Sreturn None) | tr_return_some: forall r s' a, tr_expression r s' a -> - tr_stmt (C.Sreturn (Some r)) (Ssequence s' (Sreturn (Some a))) + tr_stmt (Csyntax.Sreturn (Some r)) (Ssequence s' (Sreturn (Some a))) | tr_switch: forall r ls s' a tls, tr_expression r s' a -> tr_lblstmts ls tls -> - tr_stmt (C.Sswitch r ls) (Ssequence s' (Sswitch a tls)) + tr_stmt (Csyntax.Sswitch r ls) (Ssequence s' (Sswitch a tls)) | tr_label: forall lbl s ts, tr_stmt s ts -> - tr_stmt (C.Slabel lbl s) (Slabel lbl ts) + tr_stmt (Csyntax.Slabel lbl s) (Slabel lbl ts) | tr_goto: forall lbl, - tr_stmt (C.Sgoto lbl) (Sgoto lbl) + tr_stmt (Csyntax.Sgoto lbl) (Sgoto lbl) -with tr_lblstmts: C.labeled_statements -> labeled_statements -> Prop := +with tr_lblstmts: Csyntax.labeled_statements -> labeled_statements -> Prop := | tr_default: forall s ts, tr_stmt s ts -> - tr_lblstmts (C.LSdefault s) (LSdefault ts) + tr_lblstmts (Csyntax.LSdefault s) (LSdefault ts) | tr_case: forall n s ls ts tls, tr_stmt s ts -> tr_lblstmts ls tls -> - tr_lblstmts (C.LScase n s ls) (LScase n ts tls). + tr_lblstmts (Csyntax.LScase n s ls) (LScase n ts tls). (** * Correctness proof with respect to the specification. *) @@ -504,7 +504,7 @@ Proof. Qed. Remark bind2_inversion: - forall (A B C: Type) (f: mon (A*B)) (g: A -> B -> mon C) (y: C) (z1 z3: generator) I, + forall (A B Csyntax: Type) (f: mon (A*B)) (g: A -> B -> mon Csyntax) (y: Csyntax) (z1 z3: generator) I, bind2 f g z1 = Res y z3 I -> exists x1, exists x2, exists z2, exists I1, exists I2, f z1 = Res (x1,x2) z2 I1 /\ g x1 x2 z2 = Res y z3 I2. @@ -632,7 +632,7 @@ Lemma contained_disjoint: contained l1 g1 g2 -> contained l2 g2 g3 -> list_disjoint l1 l2. Proof. intros; red; intros. red; intro; subst y. - exploit H; eauto. intros [A B]. exploit H0; eauto. intros [C D]. + exploit H; eauto. intros [A B]. exploit H0; eauto. intros [Csyntax D]. elim (Plt_strict x). apply Plt_Ple_trans with (gen_next g2); auto. Qed. @@ -640,7 +640,7 @@ Lemma contained_notin: forall g1 l g2 id g3, contained l g1 g2 -> within id g2 g3 -> ~In id l. Proof. - intros; red; intros. exploit H; eauto. intros [C D]. destruct H0 as [A B]. + intros; red; intros. exploit H; eauto. intros [Csyntax D]. destruct H0 as [A B]. elim (Plt_strict id). apply Plt_Ple_trans with (gen_next g2); auto. Qed. @@ -737,13 +737,13 @@ Lemma transl_valof_meets_spec: exists tmps, tr_rvalof ty a sl b tmps /\ contained tmps g g'. Proof. unfold transl_valof; intros. - destruct (type_is_volatile ty) as []_eqn; monadInv H. + destruct (type_is_volatile ty) eqn:?; monadInv H. exists (x :: nil); split; eauto with gensym. econstructor; eauto with coqlib. exists (@nil ident); split; eauto with gensym. constructor; auto. Qed. -Scheme expr_ind2 := Induction for C.expr Sort Prop - with exprlist_ind2 := Induction for C.exprlist Sort Prop. +Scheme expr_ind2 := Induction for Csyntax.expr Sort Prop + with exprlist_ind2 := Induction for Csyntax.exprlist Sort Prop. Combined Scheme expr_exprlist_ind from expr_ind2, exprlist_ind2. Lemma transl_meets_spec: @@ -775,7 +775,7 @@ Opaque makeif. econstructor; split; eauto. intros; apply tr_expr_add_dest. constructor; auto. (* valof *) monadInv H0. exploit H; eauto. intros [tmp1 [A B]]. - exploit transl_valof_meets_spec; eauto. intros [tmp2 [C D]]. UseFinish. + exploit transl_valof_meets_spec; eauto. intros [tmp2 [Csyntax D]]. UseFinish. exists (tmp1 ++ tmp2); split. intros; apply tr_expr_add_dest. econstructor; eauto with gensym. eauto with gensym. @@ -790,7 +790,7 @@ Opaque makeif. econstructor; split; eauto. intros; apply tr_expr_add_dest. constructor; auto. (* binop *) monadInv H1. exploit H; eauto. intros [tmp1 [A B]]. - exploit H0; eauto. intros [tmp2 [C D]]. UseFinish. + exploit H0; eauto. intros [tmp2 [Csyntax D]]. UseFinish. exists (tmp1 ++ tmp2); split. intros; apply tr_expr_add_dest. econstructor; eauto with gensym. eauto with gensym. @@ -801,7 +801,7 @@ Opaque makeif. monadInv H1. exploit H; eauto. intros [tmp1 [A B]]. destruct dst; monadInv EQ0. (* for value *) - exploit H0; eauto with gensym. intros [tmp2 [C D]]. + exploit H0; eauto with gensym. intros [tmp2 [Csyntax D]]. simpl add_dest in *. exists (x0 :: tmp1 ++ tmp2); split. intros; eapply tr_seqand_val; eauto with gensym. @@ -809,13 +809,13 @@ Opaque makeif. apply contained_cons. eauto with gensym. apply contained_app; eauto with gensym. (* for effects *) - exploit H0; eauto with gensym. intros [tmp2 [C D]]. + exploit H0; eauto with gensym. intros [tmp2 [Csyntax D]]. simpl add_dest in *. exists (tmp1 ++ tmp2); split. intros; eapply tr_seqand_effects; eauto with gensym. apply contained_app; eauto with gensym. (* for set *) - exploit H0; eauto with gensym. intros [tmp2 [C D]]. + exploit H0; eauto with gensym. intros [tmp2 [Csyntax D]]. simpl add_dest in *. exists (tmp1 ++ tmp2); split. intros; eapply tr_seqand_set; eauto with gensym. @@ -825,7 +825,7 @@ Opaque makeif. monadInv H1. exploit H; eauto. intros [tmp1 [A B]]. destruct dst; monadInv EQ0. (* for value *) - exploit H0; eauto with gensym. intros [tmp2 [C D]]. + exploit H0; eauto with gensym. intros [tmp2 [Csyntax D]]. simpl add_dest in *. exists (x0 :: tmp1 ++ tmp2); split. intros; eapply tr_seqor_val; eauto with gensym. @@ -833,13 +833,13 @@ Opaque makeif. apply contained_cons. eauto with gensym. apply contained_app; eauto with gensym. (* for effects *) - exploit H0; eauto with gensym. intros [tmp2 [C D]]. + exploit H0; eauto with gensym. intros [tmp2 [Csyntax D]]. simpl add_dest in *. exists (tmp1 ++ tmp2); split. intros; eapply tr_seqor_effects; eauto with gensym. apply contained_app; eauto with gensym. (* for set *) - exploit H0; eauto with gensym. intros [tmp2 [C D]]. + exploit H0; eauto with gensym. intros [tmp2 [Csyntax D]]. simpl add_dest in *. exists (tmp1 ++ tmp2); split. intros; eapply tr_seqor_set; eauto with gensym. @@ -849,7 +849,7 @@ Opaque makeif. monadInv H2. exploit H; eauto. intros [tmp1 [A B]]. destruct dst; monadInv EQ0. (* for value *) - exploit H0; eauto with gensym. intros [tmp2 [C D]]. + exploit H0; eauto with gensym. intros [tmp2 [Csyntax D]]. exploit H1; eauto with gensym. intros [tmp3 [E F]]. simpl add_dest in *. exists (x0 :: tmp1 ++ tmp2 ++ tmp3); split. @@ -860,14 +860,14 @@ Opaque makeif. apply contained_app. eauto with gensym. apply contained_app; eauto with gensym. (* for effects *) - exploit H0; eauto. intros [tmp2 [C D]]. + exploit H0; eauto. intros [tmp2 [Csyntax D]]. exploit H1; eauto. intros [tmp3 [E F]]. simpl add_dest in *. exists (tmp1 ++ tmp2 ++ tmp3); split. intros; eapply tr_condition_effects; eauto with gensym. apply contained_app; eauto with gensym. (* for test *) - exploit H0; eauto with gensym. intros [tmp2 [C D]]. + exploit H0; eauto with gensym. intros [tmp2 [Csyntax D]]. exploit H1; eauto with gensym. intros [tmp3 [E F]]. simpl add_dest in *. exists (tmp1 ++ tmp2 ++ tmp3); split. @@ -883,7 +883,7 @@ Opaque makeif. exists (@nil ident); split; auto with gensym. constructor. (* assign *) monadInv H1. exploit H; eauto. intros [tmp1 [A B]]. - exploit H0; eauto. intros [tmp2 [C D]]. + exploit H0; eauto. intros [tmp2 [Csyntax D]]. destruct dst; monadInv EQ2; simpl add_dest in *. (* for value *) exists (x1 :: tmp1 ++ tmp2); split. @@ -902,7 +902,7 @@ Opaque makeif. apply contained_app; eauto with gensym. (* assignop *) monadInv H1. exploit H; eauto. intros [tmp1 [A B]]. - exploit H0; eauto. intros [tmp2 [C D]]. + exploit H0; eauto. intros [tmp2 [Csyntax D]]. exploit transl_valof_meets_spec; eauto. intros [tmp3 [E F]]. destruct dst; monadInv EQ3; simpl add_dest in *. (* for value *) @@ -928,7 +928,7 @@ Opaque makeif. econstructor; eauto with gensym. apply contained_cons; eauto with gensym. (* for effects *) - exploit transl_valof_meets_spec; eauto. intros [tmp2 [C D]]. + exploit transl_valof_meets_spec; eauto. intros [tmp2 [Csyntax D]]. exists (tmp1 ++ tmp2); split. econstructor; eauto with gensym. eauto with gensym. @@ -939,7 +939,7 @@ Opaque makeif. apply contained_cons; eauto with gensym. (* comma *) monadInv H1. exploit H; eauto. intros [tmp1 [A B]]. - exploit H0; eauto with gensym. intros [tmp2 [C D]]. + exploit H0; eauto with gensym. intros [tmp2 [Csyntax D]]. exists (tmp1 ++ tmp2); split. econstructor; eauto with gensym. destruct dst; simpl; eauto with gensym. @@ -949,7 +949,7 @@ Opaque makeif. apply contained_app; eauto with gensym. (* call *) monadInv H1. exploit H; eauto. intros [tmp1 [A B]]. - exploit H0; eauto. intros [tmp2 [C D]]. + exploit H0; eauto. intros [tmp2 [Csyntax D]]. destruct dst; monadInv EQ2; simpl add_dest in *. (* for value *) exists (x1 :: tmp1 ++ tmp2); split. @@ -988,7 +988,7 @@ Opaque makeif. monadInv H; exists (@nil ident); split; auto with gensym. constructor. (* cons *) monadInv H1. exploit H; eauto. intros [tmp1 [A B]]. - exploit H0; eauto. intros [tmp2 [C D]]. + exploit H0; eauto. intros [tmp2 [Csyntax D]]. exists (tmp1 ++ tmp2); split. econstructor; eauto with gensym. eauto with gensym. @@ -1054,13 +1054,13 @@ Qed. Theorem transl_function_spec: forall f tf, transl_function f = OK tf -> - tr_stmt f.(C.fn_body) tf.(fn_body) - /\ fn_return tf = C.fn_return f - /\ fn_params tf = C.fn_params f - /\ fn_vars tf = C.fn_vars f. + tr_stmt f.(Csyntax.fn_body) tf.(fn_body) + /\ fn_return tf = Csyntax.fn_return f + /\ fn_params tf = Csyntax.fn_params f + /\ fn_vars tf = Csyntax.fn_vars f. Proof. intros until tf. unfold transl_function. - case_eq (transl_stmt (C.fn_body f) (initial_generator tt)); intros; inv H0. + case_eq (transl_stmt (Csyntax.fn_body f) (initial_generator tt)); intros; inv H0. simpl. intuition. eapply transl_stmt_meets_spec; eauto. Qed. diff --git a/cfrontend/SimplLocalsproof.v b/cfrontend/SimplLocalsproof.v index f58a213..8df7b6e 100644 --- a/cfrontend/SimplLocalsproof.v +++ b/cfrontend/SimplLocalsproof.v @@ -83,7 +83,7 @@ Lemma type_of_global_preserved: Proof. unfold type_of_global; intros. rewrite varinfo_preserved. destruct (Genv.find_var_info ge id). auto. - destruct (Genv.find_funct_ptr ge id) as [fd|]_eqn; inv H. + destruct (Genv.find_funct_ptr ge id) as [fd|] eqn:?; inv H. exploit function_ptr_translated; eauto. intros [tf [A B]]. rewrite A. decEq. apply type_of_fundef_preserved; auto. Qed. @@ -183,12 +183,12 @@ Lemma match_envs_extcall: Proof. intros. eapply match_envs_invariant; eauto. intros. destruct H0. eapply H8. intros; red. auto. auto. - red in H2. intros. destruct (f b) as [[b' delta]|]_eqn. + red in H2. intros. destruct (f b) as [[b' delta]|] eqn:?. eapply H1; eauto. - destruct (f' b) as [[b' delta]|]_eqn; auto. + destruct (f' b) as [[b' delta]|] eqn:?; auto. exploit H2; eauto. unfold Mem.valid_block. intros [A B]. omegaContradiction. - intros. destruct (f b) as [[b'' delta']|]_eqn. eauto. + intros. destruct (f b) as [[b'' delta']|] eqn:?. eauto. exploit H2; eauto. unfold Mem.valid_block. intros [A B]. omegaContradiction. Qed. @@ -405,7 +405,7 @@ Lemma match_envs_set_temp: match_envs f cenv e (PTree.set id v le) m lo hi te (PTree.set id tv tle) tlo thi. Proof. intros. unfold check_temp in H1. - destruct (VSet.mem id cenv) as []_eqn; monadInv H1. + destruct (VSet.mem id cenv) eqn:?; monadInv H1. destruct H. constructor; eauto; intros. (* vars *) generalize (me_vars0 id0); intros MV; inv MV. @@ -477,8 +477,8 @@ Remark add_local_variable_charact: VSet.In id1 cenv \/ exists chunk, access_mode ty = By_value chunk /\ id = id1 /\ VSet.mem id atk = false. Proof. intros. unfold add_local_variable. split; intros. - destruct (access_mode ty) as []_eqn; auto. - destruct (VSet.mem id atk) as []_eqn; auto. + destruct (access_mode ty) eqn:?; auto. + destruct (VSet.mem id atk) eqn:?; auto. rewrite VSF.add_iff in H. destruct H; auto. right; exists m; auto. destruct H as [A | [chunk [A [B C]]]]. destruct (access_mode ty); auto. destruct (VSet.mem id atk); auto. rewrite VSF.add_iff; auto. @@ -639,7 +639,7 @@ Proof. (* inductive case *) simpl in H1. inv H1. simpl. - destruct (VSet.mem id cenv) as []_eqn. simpl. + destruct (VSet.mem id cenv) eqn:?. simpl. (* variable is lifted out of memory *) exploit Mem.alloc_left_unmapped_inject; eauto. intros [j1 [A [B [C D]]]]. @@ -782,7 +782,7 @@ Proof. assert (forall id l1 l2, (In id (var_names l1) -> In id (var_names l2)) -> (create_undef_temps l1)!id = None \/ (create_undef_temps l1)!id = (create_undef_temps l2)!id). - intros. destruct ((create_undef_temps l1)!id) as [v1|]_eqn; auto. + intros. destruct ((create_undef_temps l1)!id) as [v1|] eqn:?; auto. exploit create_undef_temps_inv; eauto. intros [A B]. subst v1. exploit list_in_map_inv. unfold var_names in H. apply H. eexact B. intros [[id1 ty1] [P Q]]. simpl in P; subst id1. @@ -813,7 +813,7 @@ Remark filter_charact: In x (List.filter f l) <-> In x l /\ f x = true. Proof. induction l; simpl. tauto. - destruct (f a) as []_eqn. + destruct (f a) eqn:?. simpl. rewrite IHl. intuition congruence. intuition congruence. Qed. @@ -902,7 +902,7 @@ Proof. unfold var_names in i. exploit list_in_map_inv; eauto. intros [[id' ty] [EQ IN]]; simpl in EQ; subst id'. exploit F; eauto. intros [b [P R]]. - destruct (VSet.mem id cenv) as []_eqn. + destruct (VSet.mem id cenv) eqn:?. (* local var, lifted *) destruct R as [U V]. exploit H2; eauto. intros [chunk X]. eapply match_var_lifted with (v := Vundef) (tv := Vundef); eauto. @@ -918,7 +918,7 @@ Proof. (* non-local var *) exploit G; eauto. unfold empty_env. rewrite PTree.gempty. intros [U V]. eapply match_var_not_local; eauto. - destruct (VSet.mem id cenv) as []_eqn; auto. + destruct (VSet.mem id cenv) eqn:?; auto. elim n; eauto. (* temps *) @@ -1072,7 +1072,7 @@ Proof. (* inductive case *) inv NOREPET. inv CASTED. inv VINJ. exploit me_vars; eauto. instantiate (1 := id); intros MV. - destruct (VSet.mem id cenv) as []_eqn. + destruct (VSet.mem id cenv) eqn:?. (* lifted to temp *) eapply IHbind_parameters with (tle1 := PTree.set id v' tle1); eauto. eapply match_envs_assign_lifted; eauto. @@ -1164,7 +1164,7 @@ Proof. induction l; simpl; intros. contradiction. destruct a as [[b1 lo1] hi1]. - destruct (Mem.free m b1 lo1 hi1) as [m1|]_eqn; try discriminate. + destruct (Mem.free m b1 lo1 hi1) as [m1|] eqn:?; try discriminate. destruct H0. inv H0. eapply Mem.free_range_perm; eauto. red; intros. eapply Mem.perm_free_3; eauto. eapply IHl; eauto. Qed. @@ -1209,7 +1209,7 @@ Lemma free_list_right_inject: Proof. induction l; simpl; intros. congruence. - destruct a as [[b lo] hi]. destruct (Mem.free m2 b lo hi) as [m21|]_eqn; try discriminate. + destruct a as [[b lo] hi]. destruct (Mem.free m2 b lo hi) as [m21|] eqn:?; try discriminate. eapply IHl with (m2 := m21); eauto. eapply Mem.free_right_inject; eauto. Qed. @@ -1380,8 +1380,8 @@ Proof. destruct (classify_cmp ty1 ty2); try destruct s; inv H0; try discriminate; inv H1; inv H; TrivialInject. destruct (Int.eq i Int.zero); try discriminate; auto. destruct (Int.eq i Int.zero); try discriminate; auto. - destruct (Mem.valid_pointer m b1 (Int.unsigned ofs1)) as []_eqn; try discriminate. - destruct (Mem.valid_pointer m b0 (Int.unsigned ofs0)) as []_eqn; try discriminate. + destruct (Mem.valid_pointer m b1 (Int.unsigned ofs1)) eqn:?; try discriminate. + destruct (Mem.valid_pointer m b0 (Int.unsigned ofs0)) eqn:?; try discriminate. simpl in H3. rewrite (Mem.valid_pointer_inject_val _ _ _ _ _ _ _ MEMINJ Heqb). rewrite (Mem.valid_pointer_inject_val _ _ _ _ _ _ _ MEMINJ Heqb0). @@ -1509,7 +1509,7 @@ Proof. (* addrof *) exploit eval_simpl_lvalue; eauto. destruct a; auto with compat. - destruct a; auto. destruct (VSet.mem i cenv) as []_eqn; auto. + destruct a; auto. destruct (VSet.mem i cenv) eqn:?; auto. elim (H0 i). apply VSet.singleton_2. auto. apply VSet.mem_2. auto. intros [b' [ofs' [A B]]]. exists (Vptr b' ofs'); split; auto. constructor; auto. @@ -1529,7 +1529,7 @@ Proof. (* rval *) assert (EITHER: (exists id, exists ty, a = Evar id ty /\ VSet.mem id cenv = true) \/ (match a with Evar id _ => VSet.mem id cenv = false | _ => True end)). - destruct a; auto. destruct (VSet.mem i cenv) as []_eqn; auto. left; exists i; exists t; auto. + destruct a; auto. destruct (VSet.mem i cenv) eqn:?; auto. left; exists i; exists t; auto. destruct EITHER as [ [id [ty [EQ OPT]]] | NONOPT ]. (* a variable pulled out of memory *) subst a. simpl. rewrite OPT. @@ -1696,10 +1696,10 @@ Lemma match_cont_extcall: Proof. intros. eapply match_cont_invariant; eauto. destruct H0. intros. eapply H5; eauto. - red in H2. intros. destruct (f b) as [[b' delta] | ]_eqn. auto. - destruct (f' b) as [[b' delta] | ]_eqn; auto. + red in H2. intros. destruct (f b) as [[b' delta] | ] eqn:?. auto. + destruct (f' b) as [[b' delta] | ] eqn:?; auto. exploit H2; eauto. unfold Mem.valid_block. intros [A B]. omegaContradiction. - red in H2. intros. destruct (f b) as [[b'' delta''] | ]_eqn. auto. + red in H2. intros. destruct (f b) as [[b'' delta''] | ] eqn:?. auto. exploit H2; eauto. unfold Mem.valid_block. intros [A B]. omegaContradiction. Qed. @@ -1752,7 +1752,7 @@ Remark free_list_nextblock: Proof. induction l; simpl; intros. congruence. - destruct a. destruct p. destruct (Mem.free m b z0 z) as [m1|]_eqn; try discriminate. + destruct a. destruct p. destruct (Mem.free m b z0 z) as [m1|] eqn:?; try discriminate. transitivity (Mem.nextblock m1). eauto. eapply Mem.nextblock_free; eauto. Qed. @@ -1764,7 +1764,7 @@ Remark free_list_load: Proof. induction l; simpl; intros. inv H; auto. - destruct a. destruct p. destruct (Mem.free m b z0 z) as [m1|]_eqn; try discriminate. + destruct a. destruct p. destruct (Mem.free m b z0 z) as [m1|] eqn:?; try discriminate. transitivity (Mem.load chunk m1 b' 0). eauto. eapply Mem.load_free. eauto. left. assert (b' < b) by eauto. unfold block; omega. Qed. @@ -1860,7 +1860,7 @@ Remark is_liftable_var_charact: end. Proof. intros. destruct a; simpl; auto. - destruct (VSet.mem i cenv) as []_eqn. + destruct (VSet.mem i cenv) eqn:?. exists t; auto. auto. Qed. @@ -2202,7 +2202,7 @@ Proof. apply val_list_inject_incr with j'; eauto. eexact B. eexact C. intros. apply (create_undef_temps_lifted id f). auto. - intros. destruct (create_undef_temps (fn_temps f))!id as [v|]_eqn; auto. + intros. destruct (create_undef_temps (fn_temps f))!id as [v|] eqn:?; auto. exploit create_undef_temps_inv; eauto. intros [P Q]. elim (H3 id id); auto. intros [tel [tm1 [P [Q [R [S T]]]]]]. change (cenv_for_gen (addr_taken_stmt (fn_body f)) (fn_params f ++ fn_vars f)) diff --git a/checklink/Asm_printers.ml b/checklink/Asm_printers.ml index 094d51d..aeb4b3f 100644 --- a/checklink/Asm_printers.ml +++ b/checklink/Asm_printers.ml @@ -1,21 +1,10 @@ +open Camlcoq open Asm open AST -open BinInt -open BinPos open Library -let rec int_of_pos = function - | Coq_xH -> 1 - | Coq_xO q -> 2 * int_of_pos q - | Coq_xI q -> 2 * int_of_pos q + 1 - -let string_of_pos p = string_of_int (int_of_pos p) - -let string_of_coq_Z = function - | Z0 -> "0" - | Zpos p -> string_of_pos p - | Zneg p -> "-" ^ string_of_pos p - +let string_of_pos p = Z.to_string (Z.Zpos p) +let string_of_coq_Z = Z.to_string let string_of_ident = string_of_pos let string_of_label = string_of_pos let string_of_iint = string_of_coq_Z diff --git a/checklink/Check.ml b/checklink/Check.ml index a1cc004..9d668fa 100644 --- a/checklink/Check.ml +++ b/checklink/Check.ml @@ -1,8 +1,7 @@ +open Camlcoq open Asm open Asm_printers open AST -open BinInt -open BinPos open Bitstring_utils open C2C open Camlcoq @@ -204,7 +203,7 @@ let re_variadic_stub: Str.regexp = Str.regexp "\\(.*\\)\\$[if]*$" address, unless the symbol is a stub from CompCert. Otherwise, it filters out all symbols whose virtual address does not match [vaddr]. *) -let idmap_unify (k: positive) (vaddr: int32) (sfw: s_framework) +let idmap_unify (k: P.t) (vaddr: int32) (sfw: s_framework) : s_framework or_err = try ( (* get the list of possible symbols for ident [k] *) @@ -438,13 +437,13 @@ let match_csts (cc: constant) (ec: int32): checker = fun ffw -> (* sda should be handled separately in places it occurs *) fatal "Unhandled Csymbol_sda, please report." -let match_z_int32 (cz: coq_Z) (ei: int32) = +let match_z_int32 (cz: Z.t) (ei: int32) = let cz = z_int32 cz in check_eq ( Printf.sprintf "match_z_int32 %s %s" (string_of_int32 cz) (string_of_int32 ei) ) cz ei -let match_z_int (cz: coq_Z) (ei: int) = +let match_z_int (cz: Z.t) (ei: int) = let cz = z_int32 cz in let ei = Safe32.of_int ei in check_eq ( @@ -452,7 +451,7 @@ let match_z_int (cz: coq_Z) (ei: int) = ) cz ei (* [m] is interpreted as a bitmask, and checked against [ei]. *) -let match_mask (m: coq_Z) (ei: int32) = +let match_mask (m: Z.t) (ei: int32) = let m = z_int32_lax m in check_eq ( Printf.sprintf "match_mask %s %s" diff --git a/checklink/Frameworks.ml b/checklink/Frameworks.ml index 074a432..35144dc 100644 --- a/checklink/Frameworks.ml +++ b/checklink/Frameworks.ml @@ -1,6 +1,6 @@ +open Camlcoq open Asm open AST -open BinPos open ELF_types open Lens open Library @@ -62,7 +62,7 @@ type e_framework = { } module PosOT = struct - type t = positive + type t = P.t let compare = Pervasives.compare end diff --git a/checklink/Library.ml b/checklink/Library.ml index c38c1f1..acea80a 100644 --- a/checklink/Library.ml +++ b/checklink/Library.ml @@ -1,5 +1,3 @@ -open BinInt -open BinPos open Camlcoq type bitstring = Bitstring.bitstring @@ -75,9 +73,9 @@ exception Int32Overflow (* Can only return positive numbers 0 <= res < 2^31 *) let positive_int32 p = let rec positive_int32_unsafe = function - | Coq_xI(p) -> Int32.(add (shift_left (positive_int32_unsafe p) 1) 1l) - | Coq_xO(p) -> Int32.(shift_left (positive_int32_unsafe p) 1) - | Coq_xH -> 1l + | P.Coq_xI(p) -> Int32.(add (shift_left (positive_int32_unsafe p) 1) 1l) + | P.Coq_xO(p) -> Int32.(shift_left (positive_int32_unsafe p) 1) + | P.Coq_xH -> 1l in let res = positive_int32_unsafe p in if res >= 0l @@ -86,27 +84,27 @@ let positive_int32 p = (* This allows for 1 bit of overflow, effectively returning a negative *) let rec positive_int32_lax = function -| Coq_xI(p) -> +| P.Coq_xI(p) -> let acc = positive_int32_lax p in if acc < 0l then raise Int32Overflow else Int32.(add (shift_left acc 1) 1l) -| Coq_xO(p) -> +| P.Coq_xO(p) -> let acc = positive_int32_lax p in if acc < 0l then raise Int32Overflow else Int32.shift_left acc 1 -| Coq_xH -> 1l +| P.Coq_xH -> 1l let z_int32 = function -| Z0 -> 0l -| Zpos(p) -> positive_int32 p -| Zneg(p) -> Int32.neg (positive_int32 p) +| Z.Z0 -> 0l +| Z.Zpos(p) -> positive_int32 p +| Z.Zneg(p) -> Int32.neg (positive_int32 p) let z_int32_lax = function -| Z0 -> 0l -| Zpos(p) -> positive_int32_lax p -| Zneg(_) -> raise Int32Overflow +| Z.Z0 -> 0l +| Z.Zpos(p) -> positive_int32_lax p +| Z.Zneg(_) -> raise Int32Overflow let z_int z = Safe32.to_int (z_int32 z) diff --git a/common/AST.v b/common/AST.v index 40da732..d2065d6 100644 --- a/common/AST.v +++ b/common/AST.v @@ -225,10 +225,10 @@ Proof. revert x EQ H0. induction (prog_defs p); simpl; intros. inv EQ. contradiction. destruct a as [id [f|v]]. - destruct (transf_fun f) as [tf1|msg]_eqn; monadInv EQ. + destruct (transf_fun f) as [tf1|msg] eqn:?; monadInv EQ. simpl in H0; destruct H0. inv H. exists f; auto. exploit IHl; eauto. intros [f' [P Q]]; exists f'; auto. - destruct (transf_globvar v) as [tv1|msg]_eqn; monadInv EQ. + destruct (transf_globvar v) as [tv1|msg] eqn:?; monadInv EQ. simpl in H0; destruct H0. inv H. exploit IHl; eauto. intros [f' [P Q]]; exists f'; auto. Qed. @@ -245,10 +245,10 @@ Proof. revert x EQ H0. induction (prog_defs p); simpl; intros. inv EQ. contradiction. destruct a as [id [f|v]]. - destruct (transf_fun f) as [tf1|msg]_eqn; monadInv EQ. + destruct (transf_fun f) as [tf1|msg] eqn:?; monadInv EQ. simpl in H0; destruct H0. inv H. exploit IHl; eauto. intros [v' [P Q]]; exists v'; auto. - destruct (transf_globvar v) as [tv1|msg]_eqn; monadInv EQ. + destruct (transf_globvar v) as [tv1|msg] eqn:?; monadInv EQ. simpl in H0; destruct H0. inv H. monadInv Heqr. simpl. exists (gvar_info v). split. left. destruct v; auto. auto. exploit IHl; eauto. intros [v' [P Q]]; exists v'; auto. @@ -394,11 +394,11 @@ Proof. monadInv EQ. constructor. destruct a as [id [f|v]]. (* function *) - destruct (transf_fun f) as [tf|?]_eqn; monadInv EQ. + destruct (transf_fun f) as [tf|?] eqn:?; monadInv EQ. constructor; auto. constructor; auto. (* variable *) unfold transf_globvar in EQ. - destruct (transf_var (gvar_info v)) as [tinfo|?]_eqn; simpl in EQ; monadInv EQ. + destruct (transf_var (gvar_info v)) as [tinfo|?] eqn:?; simpl in EQ; monadInv EQ. constructor; auto. destruct v; simpl in *. constructor; auto. Qed. diff --git a/common/Globalenvs.v b/common/Globalenvs.v index 100cab8..d426440 100644 --- a/common/Globalenvs.v +++ b/common/Globalenvs.v @@ -607,14 +607,14 @@ Proof. unfold alloc_global. intros. destruct g as [id [f|v]]. (* function *) - destruct (Mem.alloc m 0 1) as [m1 b]_eqn. + destruct (Mem.alloc m 0 1) as [m1 b] eqn:?. erewrite Mem.nextblock_drop; eauto. erewrite Mem.nextblock_alloc; eauto. (* variable *) set (init := gvar_init v) in *. set (sz := init_data_list_size init) in *. - destruct (Mem.alloc m 0 sz) as [m1 b]_eqn. - destruct (store_zeros m1 b 0 sz) as [m2|]_eqn; try discriminate. - destruct (store_init_data_list m2 b 0 init) as [m3|]_eqn; try discriminate. + destruct (Mem.alloc m 0 sz) as [m1 b] eqn:?. + destruct (store_zeros m1 b 0 sz) as [m2|] eqn:?; try discriminate. + destruct (store_init_data_list m2 b 0 init) as [m3|] eqn:?; try discriminate. erewrite Mem.nextblock_drop; eauto. erewrite store_init_data_list_nextblock; eauto. erewrite store_zeros_nextblock; eauto. @@ -629,7 +629,7 @@ Proof. induction gl. simpl; intros. inv H; unfold block; omega. simpl length; rewrite inj_S; simpl; intros. - destruct (alloc_global m a) as [m1|]_eqn; try discriminate. + destruct (alloc_global m a) as [m1|] eqn:?; try discriminate. erewrite IHgl; eauto. erewrite alloc_global_nextblock; eauto. unfold block; omega. Qed. @@ -672,7 +672,7 @@ Remark alloc_global_perm: Proof. intros. destruct idg as [id [f|v]]; simpl in H. (* function *) - destruct (Mem.alloc m 0 1) as [m1 b]_eqn. + destruct (Mem.alloc m 0 1) as [m1 b] eqn:?. assert (b' <> b). apply Mem.valid_not_valid_diff with m; eauto with mem. split; intros. eapply Mem.perm_drop_3; eauto. eapply Mem.perm_alloc_1; eauto. @@ -680,9 +680,9 @@ Proof. (* variable *) set (init := gvar_init v) in *. set (sz := init_data_list_size init) in *. - destruct (Mem.alloc m 0 sz) as [m1 b]_eqn. - destruct (store_zeros m1 b 0 sz) as [m2|]_eqn; try discriminate. - destruct (store_init_data_list m2 b 0 init) as [m3|]_eqn; try discriminate. + destruct (Mem.alloc m 0 sz) as [m1 b] eqn:?. + destruct (store_zeros m1 b 0 sz) as [m2|] eqn:?; try discriminate. + destruct (store_init_data_list m2 b 0 init) as [m3|] eqn:?; try discriminate. assert (b' <> b). apply Mem.valid_not_valid_diff with m; eauto with mem. split; intros. eapply Mem.perm_drop_3; eauto. @@ -703,7 +703,7 @@ Remark alloc_globals_perm: Proof. induction gl. simpl; intros. inv H. tauto. - simpl; intros. destruct (alloc_global m a) as [m1|]_eqn; try discriminate. + simpl; intros. destruct (alloc_global m a) as [m1|] eqn:?; try discriminate. erewrite alloc_global_perm; eauto. eapply IHgl; eauto. unfold Mem.valid_block in *. erewrite alloc_global_nextblock; eauto. omega. Qed. @@ -734,7 +734,7 @@ Remark store_init_data_list_outside: Proof. induction il; simpl. intros; congruence. - intros. destruct (store_init_data m b p a) as [m1|]_eqn; try congruence. + intros. destruct (store_init_data m b p a) as [m1|] eqn:?; try congruence. transitivity (Mem.load chunk m1 b' q). eapply IHil; eauto. generalize (init_data_size_pos a). intuition omega. destruct a; simpl in Heqo; @@ -784,7 +784,7 @@ Proof. induction il; simpl. auto. - intros. destruct (store_init_data m b p a) as [m1|]_eqn; try congruence. + intros. destruct (store_init_data m b p a) as [m1|] eqn:?; try congruence. exploit IHil; eauto. intro D. destruct a; simpl in Heqo; intuition. eapply (A Mint8unsigned (Vint i)); eauto. @@ -804,7 +804,7 @@ Remark load_alloc_global: Proof. intros. destruct g as [f|v]; simpl in H. (* function *) - destruct (Mem.alloc m 0 1) as [m1 b']_eqn. + destruct (Mem.alloc m 0 1) as [m1 b'] eqn:?. assert (b <> b'). apply Mem.valid_not_valid_diff with m; eauto with mem. transitivity (Mem.load chunk m1 b p). eapply Mem.load_drop; eauto. @@ -812,9 +812,9 @@ Proof. (* variable *) set (init := gvar_init v) in *. set (sz := init_data_list_size init) in *. - destruct (Mem.alloc m 0 sz) as [m1 b']_eqn. - destruct (store_zeros m1 b' 0 sz) as [m2|]_eqn; try discriminate. - destruct (store_init_data_list m2 b' 0 init) as [m3|]_eqn; try discriminate. + destruct (Mem.alloc m 0 sz) as [m1 b'] eqn:?. + destruct (store_zeros m1 b' 0 sz) as [m2|] eqn:?; try discriminate. + destruct (store_init_data_list m2 b' 0 init) as [m3|] eqn:?; try discriminate. assert (b <> b'). apply Mem.valid_not_valid_diff with m; eauto with mem. transitivity (Mem.load chunk m3 b p). eapply Mem.load_drop; eauto. @@ -833,7 +833,7 @@ Remark load_alloc_globals: Proof. induction gl; simpl; intros. congruence. - destruct (alloc_global m a) as [m''|]_eqn; try discriminate. + destruct (alloc_global m a) as [m''|] eqn:?; try discriminate. transitivity (Mem.load chunk m'' b p). apply IHgl; auto. unfold Mem.valid_block in *. erewrite alloc_global_nextblock; eauto. omega. @@ -895,9 +895,9 @@ Proof. inv H3. simpl in H0. set (init := gvar_init gv) in *. set (sz := init_data_list_size init) in *. - destruct (Mem.alloc m 0 sz) as [m1 b']_eqn. - destruct (store_zeros m1 b' 0 sz) as [m2|]_eqn; try discriminate. - destruct (store_init_data_list m2 b' 0 init) as [m3|]_eqn; try discriminate. + destruct (Mem.alloc m 0 sz) as [m1 b'] eqn:?. + destruct (store_zeros m1 b' 0 sz) as [m2|] eqn:?; try discriminate. + destruct (store_init_data_list m2 b' 0 init) as [m3|] eqn:?; try discriminate. exploit Mem.alloc_result; eauto. intro RES. replace (genv_next ge0) with b' by congruence. split. red; intros. eapply Mem.perm_drop_1; eauto. @@ -928,7 +928,7 @@ Proof. destruct (ZIndexed.eq b (genv_next ge0)). (* same *) inv H3. simpl in H0. - destruct (Mem.alloc m 0 1) as [m1 b']_eqn. + destruct (Mem.alloc m 0 1) as [m1 b'] eqn:?. exploit Mem.alloc_result; eauto. intro RES. replace (genv_next ge0) with b' by congruence. split. eapply Mem.perm_drop_1; eauto. omega. @@ -964,7 +964,7 @@ Lemma alloc_globals_initialized: Proof. induction gl; simpl; intros. inv H0; auto. - destruct a as [id g]. destruct (alloc_global m (id, g)) as [m1|]_eqn; try discriminate. + destruct a as [id g]. destruct (alloc_global m (id, g)) as [m1|] eqn:?; try discriminate. exploit alloc_global_initialized; eauto. intros [P [Q R]]. eapply IHgl; eauto. Qed. @@ -1099,16 +1099,16 @@ Lemma alloc_global_neutral: Proof. intros. destruct idg as [id [f|v]]; simpl in H. (* function *) - destruct (Mem.alloc m 0 1) as [m1 b]_eqn. + destruct (Mem.alloc m 0 1) as [m1 b] eqn:?. assert (b < thr). rewrite (Mem.alloc_result _ _ _ _ _ Heqp). auto. eapply Mem.drop_inject_neutral; eauto. eapply Mem.alloc_inject_neutral; eauto. (* variable *) set (init := gvar_init v) in *. set (sz := init_data_list_size init) in *. - destruct (Mem.alloc m 0 sz) as [m1 b]_eqn. - destruct (store_zeros m1 b 0 sz) as [m2|]_eqn; try discriminate. - destruct (store_init_data_list ge m2 b 0 init) as [m3|]_eqn; try discriminate. + destruct (Mem.alloc m 0 sz) as [m1 b] eqn:?. + destruct (store_zeros m1 b 0 sz) as [m2|] eqn:?; try discriminate. + destruct (store_init_data_list ge m2 b 0 init) as [m3|] eqn:?; try discriminate. assert (b < thr). rewrite (Mem.alloc_result _ _ _ _ _ Heqp). auto. eapply Mem.drop_inject_neutral; eauto. eapply store_init_data_list_neutral with (m := m2) (b := b); eauto. @@ -1210,7 +1210,7 @@ Lemma alloc_global_augment: Proof. intros. destruct idg as [id [f|v]]; simpl in H. (* function *) - destruct (Mem.alloc m2 0 1) as [m3 b]_eqn. + destruct (Mem.alloc m2 0 1) as [m3 b] eqn:?. assert (b >= thr). rewrite (Mem.alloc_result _ _ _ _ _ Heqp). auto. eapply Mem.drop_outside_inject. 2: eauto. eapply Mem.alloc_right_inject; eauto. @@ -1219,9 +1219,9 @@ Proof. (* variable *) set (init := gvar_init v) in *. set (sz := init_data_list_size init) in *. - destruct (Mem.alloc m2 0 sz) as [m3 b]_eqn. - destruct (store_zeros m3 b 0 sz) as [m4|]_eqn; try discriminate. - destruct (store_init_data_list ge m4 b 0 init) as [m5|]_eqn; try discriminate. + destruct (Mem.alloc m2 0 sz) as [m3 b] eqn:?. + destruct (store_zeros m3 b 0 sz) as [m4|] eqn:?; try discriminate. + destruct (store_init_data_list ge m4 b 0 init) as [m5|] eqn:?; try discriminate. assert (b >= thr). rewrite (Mem.alloc_result _ _ _ _ _ Heqp). auto. eapply Mem.drop_outside_inject. 2: eauto. eapply store_init_data_list_augment. 3: eauto. 2: eauto. @@ -1497,7 +1497,7 @@ Proof. assert (forall m', store_init_data (globalenv p) m b ofs a = Some m' -> store_init_data (globalenv p') m b ofs a = Some m'). destruct a; simpl; auto. rewrite find_symbol_match. auto. - simpl in H. destruct (find_symbol (globalenv p) i) as [b'|]_eqn; try discriminate. + simpl in H. destruct (find_symbol (globalenv p) i) as [b'|] eqn:?; try discriminate. apply new_ids_fresh. congruence. case_eq (store_init_data (globalenv p) m b ofs a); intros. rewrite H1 in H. @@ -1513,14 +1513,14 @@ Lemma alloc_globals_match: Proof. induction 1; simpl; intros. auto. - destruct (alloc_global (globalenv p) m a1) as [m1|]_eqn; try discriminate. + destruct (alloc_global (globalenv p) m a1) as [m1|] eqn:?; try discriminate. assert (alloc_global (globalenv p') m b1 = Some m1). inv H; simpl in *. auto. set (sz := init_data_list_size init) in *. - destruct (Mem.alloc m 0 sz) as [m2 b]_eqn. - destruct (store_zeros m2 b 0 sz) as [m3|]_eqn; try discriminate. - destruct (store_init_data_list (globalenv p) m3 b 0 init) as [m4|]_eqn; try discriminate. + destruct (Mem.alloc m 0 sz) as [m2 b] eqn:?. + destruct (store_zeros m2 b 0 sz) as [m3|] eqn:?; try discriminate. + destruct (store_init_data_list (globalenv p) m3 b 0 init) as [m4|] eqn:?; try discriminate. erewrite store_init_data_list_match; eauto. rewrite H2. eauto. Qed. @@ -1718,7 +1718,7 @@ Hypothesis transf_OK: Remark transf_augment_OK: transform_partial_augment_program transf_fun transf_var nil p.(prog_main) p = OK p'. Proof. - rewrite <- transf_OK. apply symmetry. apply transform_partial_program2_augment. + rewrite <- transf_OK. symmetry. apply transform_partial_program2_augment. Qed. Theorem find_funct_ptr_transf_partial2: diff --git a/common/Memory.v b/common/Memory.v index 37f21d7..514e1e0 100644 --- a/common/Memory.v +++ b/common/Memory.v @@ -1023,7 +1023,7 @@ Proof. decEq. rewrite store_mem_contents; simpl. rewrite ZMap.gsspec. destruct (ZIndexed.eq b' b). subst b'. destruct H. congruence. - destruct (zle n 0). + destruct (zle n 0) as [z | n0]. rewrite (nat_of_Z_neg _ z). auto. destruct H. omegaContradiction. apply getN_setN_outside. rewrite encode_val_length. rewrite <- size_chunk_conv. @@ -1108,7 +1108,7 @@ Proof. assert (length mvl = sz). generalize (encode_val_length chunk v). rewrite <- H1. rewrite SZ. simpl; congruence. - rewrite H4. rewrite size_chunk_conv in z0. omega. + rewrite H4. rewrite size_chunk_conv in *. omega. contradiction. (* 3. ofs > ofs': @@ -1126,8 +1126,8 @@ Proof. rewrite setN_outside. rewrite ZMap.gss. auto. omega. assert (~memval_valid_first (c'#ofs)). rewrite SZ' in PSHAPE. simpl in PSHAPE. inv PSHAPE. - apply H4. apply getN_in. rewrite size_chunk_conv in z. - rewrite SZ' in z. rewrite inj_S in z. omega. + apply H4. apply getN_in. rewrite size_chunk_conv in *. + rewrite SZ' in *. rewrite inj_S in *. omega. contradiction. Qed. @@ -3632,18 +3632,18 @@ Lemma mem_inj_compose: Proof. intros. unfold compose_meminj. inv H; inv H0; constructor; intros. (* perm *) - destruct (f b1) as [[b' delta'] |]_eqn; try discriminate. - destruct (f' b') as [[b'' delta''] |]_eqn; inv H. + destruct (f b1) as [[b' delta'] |] eqn:?; try discriminate. + destruct (f' b') as [[b'' delta''] |] eqn:?; inv H. replace (ofs + (delta' + delta'')) with ((ofs + delta') + delta'') by omega. eauto. (* valid access *) - destruct (f b1) as [[b' delta'] |]_eqn; try discriminate. - destruct (f' b') as [[b'' delta''] |]_eqn; inv H. + destruct (f b1) as [[b' delta'] |] eqn:?; try discriminate. + destruct (f' b') as [[b'' delta''] |] eqn:?; inv H. replace (ofs + (delta' + delta'')) with ((ofs + delta') + delta'') by omega. eauto. (* memval *) - destruct (f b1) as [[b' delta'] |]_eqn; try discriminate. - destruct (f' b') as [[b'' delta''] |]_eqn; inv H. + destruct (f b1) as [[b' delta'] |] eqn:?; try discriminate. + destruct (f' b') as [[b'' delta''] |] eqn:?; inv H. replace (ofs + (delta' + delta'')) with ((ofs + delta') + delta'') by omega. eapply memval_inject_compose; eauto. Qed. @@ -3661,15 +3661,15 @@ Proof. intros. erewrite mi_freeblocks0; eauto. (* mapped *) intros. - destruct (f b) as [[b1 delta1] |]_eqn; try discriminate. - destruct (f' b1) as [[b2 delta2] |]_eqn; inv H. + destruct (f b) as [[b1 delta1] |] eqn:?; try discriminate. + destruct (f' b1) as [[b2 delta2] |] eqn:?; inv H. eauto. (* no overlap *) red; intros. - destruct (f b1) as [[b1x delta1x] |]_eqn; try discriminate. - destruct (f' b1x) as [[b1y delta1y] |]_eqn; inv H0. - destruct (f b2) as [[b2x delta2x] |]_eqn; try discriminate. - destruct (f' b2x) as [[b2y delta2y] |]_eqn; inv H1. + destruct (f b1) as [[b1x delta1x] |] eqn:?; try discriminate. + destruct (f' b1x) as [[b1y delta1y] |] eqn:?; inv H0. + destruct (f b2) as [[b2x delta2x] |] eqn:?; try discriminate. + destruct (f' b2x) as [[b2y delta2y] |] eqn:?; inv H1. exploit mi_no_overlap0; eauto. intros A. destruct (eq_block b1x b2x). subst b1x. destruct A. congruence. @@ -3680,8 +3680,8 @@ Proof. unfold block; omega. (* representable *) intros. - destruct (f b) as [[b1 delta1] |]_eqn; try discriminate. - destruct (f' b1) as [[b2 delta2] |]_eqn; inv H. + destruct (f b) as [[b1 delta1] |] eqn:?; try discriminate. + destruct (f' b1) as [[b2 delta2] |] eqn:?; inv H. exploit mi_representable0; eauto. intros [A B]. set (ofs' := Int.repr (Int.unsigned ofs + delta1)). assert (Int.unsigned ofs' = Int.unsigned ofs + delta1). diff --git a/common/PrintAST.ml b/common/PrintAST.ml index 53741d5..7f2ed3f 100644 --- a/common/PrintAST.ml +++ b/common/PrintAST.ml @@ -42,7 +42,7 @@ let name_of_external = function | EF_malloc -> "malloc" | EF_free -> "free" | EF_memcpy(sz, al) -> - sprintf "memcpy size %ld align %ld " (camlint_of_z sz) (camlint_of_z al) + sprintf "memcpy size %s align %s " (Z.to_string sz) (Z.to_string al) | EF_annot(text, targs) -> sprintf "annot %S" (extern_atom text) | EF_annot_val(text, targ) -> sprintf "annot_val %S" (extern_atom text) | EF_inline_asm text -> sprintf "inline_asm %S" (extern_atom text) diff --git a/common/Values.v b/common/Values.v index 1c03789..177cd93 100644 --- a/common/Values.v +++ b/common/Values.v @@ -620,7 +620,7 @@ Theorem modu_divu: modu x y = Some z -> exists v, divu x y = Some v /\ z = sub x (mul v y). Proof. intros. destruct x; destruct y; simpl in *; try discriminate. - destruct (Int.eq i0 Int.zero) as []_eqn; inv H. + destruct (Int.eq i0 Int.zero) eqn:?; inv H. exists (Vint (Int.divu i i0)); split; auto. simpl. rewrite Int.modu_divu. auto. generalize (Int.eq_spec i0 Int.zero). rewrite Heqb; auto. @@ -731,7 +731,7 @@ Theorem shrx_carry: add (shr x y) (shr_carry x y) = z. Proof. intros. destruct x; destruct y; simpl in H; inv H. - destruct (Int.ltu i0 (Int.repr 31)) as []_eqn; inv H1. + destruct (Int.ltu i0 (Int.repr 31)) eqn:?; inv H1. exploit Int.ltu_inv; eauto. change (Int.unsigned (Int.repr 31)) with 31. intros. assert (Int.ltu i0 Int.iwordsize = true). unfold Int.ltu. apply zlt_true. change (Int.unsigned Int.iwordsize) with 32. omega. @@ -746,7 +746,7 @@ Theorem shrx_shr: z = shr (if Int.lt p Int.zero then add x (Vint (Int.sub (Int.shl Int.one q) Int.one)) else x) (Vint q). Proof. intros. destruct x; destruct y; simpl in H; inv H. - destruct (Int.ltu i0 (Int.repr 31)) as []_eqn; inv H1. + destruct (Int.ltu i0 (Int.repr 31)) eqn:?; inv H1. exploit Int.ltu_inv; eauto. change (Int.unsigned (Int.repr 31)) with 31. intros. assert (Int.ltu i0 Int.iwordsize = true). unfold Int.ltu. apply zlt_true. change (Int.unsigned Int.iwordsize) with 32. omega. @@ -1030,8 +1030,8 @@ Proof. destruct v1; simpl in H2; try discriminate; destruct v2; simpl in H2; try discriminate; inv H0; inv H1; simpl; auto. - destruct (valid_ptr b0 (Int.unsigned i)) as []_eqn; try discriminate. - destruct (valid_ptr b1 (Int.unsigned i0)) as []_eqn; try discriminate. + destruct (valid_ptr b0 (Int.unsigned i)) eqn:?; try discriminate. + destruct (valid_ptr b1 (Int.unsigned i0)) eqn:?; try discriminate. rewrite (H _ _ Heqb2). rewrite (H _ _ Heqb0). auto. Qed. diff --git a/driver/Compiler.v b/driver/Compiler.v index ed27f38..9db7f42 100644 --- a/driver/Compiler.v +++ b/driver/Compiler.v @@ -217,18 +217,18 @@ Proof. repeat rewrite compose_print_identity in H. simpl in H. set (p1 := Tailcall.transf_program p) in *. - destruct (Inlining.transf_program p1) as [p11|]_eqn; simpl in H; try discriminate. + destruct (Inlining.transf_program p1) as [p11|] eqn:?; simpl in H; try discriminate. set (p12 := Renumber.transf_program p11) in *. set (p2 := Constprop.transf_program p12) in *. set (p21 := Renumber.transf_program p2) in *. - destruct (CSE.transf_program p21) as [p3|]_eqn; simpl in H; try discriminate. - destruct (Allocation.transf_program p3) as [p4|]_eqn; simpl in H; try discriminate. + destruct (CSE.transf_program p21) as [p3|] eqn:?; simpl in H; try discriminate. + destruct (Allocation.transf_program p3) as [p4|] eqn:?; simpl in H; try discriminate. set (p5 := Tunneling.tunnel_program p4) in *. - destruct (Linearize.transf_program p5) as [p6|]_eqn; simpl in H; try discriminate. + destruct (Linearize.transf_program p5) as [p6|] eqn:?; simpl in H; try discriminate. set (p7 := CleanupLabels.transf_program p6) in *. set (p8 := Reload.transf_program p7) in *. set (p9 := RRE.transf_program p8) in *. - destruct (Stacking.transf_program p9) as [p10|]_eqn; simpl in H; try discriminate. + destruct (Stacking.transf_program p9) as [p10|] eqn:?; simpl in H; try discriminate. assert(TY1: LTLtyping.wt_program p5). eapply Tunnelingtyping.program_typing_preserved. @@ -274,7 +274,7 @@ Proof. repeat rewrite compose_print_identity in H. simpl in H. set (p1 := Selection.sel_program p) in *. - destruct (RTLgen.transl_program p1) as [p2|]_eqn; simpl in H; try discriminate. + destruct (RTLgen.transl_program p1) as [p2|] eqn:?; simpl in H; try discriminate. eapply compose_forward_simulation. apply Selectionproof.transf_program_correct. eapply compose_forward_simulation. apply RTLgenproof.transf_program_correct. eassumption. exact (fst (transf_rtl_program_correct _ _ H)). diff --git a/driver/Driver.ml b/driver/Driver.ml index 85f6079..6c00cb7 100644 --- a/driver/Driver.ml +++ b/driver/Driver.ml @@ -11,6 +11,7 @@ (* *********************************************************************) open Printf +open Camlcoq open Clflags (* Location of the compatibility library *) @@ -37,9 +38,9 @@ let safe_remove file = let print_error oc msg = let print_one_error = function - | Errors.MSG s -> output_string oc (Camlcoq.camlstring_of_coqstring s) - | Errors.CTX i -> output_string oc (Camlcoq.extern_atom i) - | Errors.POS i -> fprintf oc "%ld" (Camlcoq.camlint_of_positive i) + | Errors.MSG s -> output_string oc (camlstring_of_coqstring s) + | Errors.CTX i -> output_string oc (extern_atom i) + | Errors.POS i -> fprintf oc "%ld" (P.to_int32 i) in List.iter print_one_error msg; output_char oc '\n' diff --git a/driver/Interp.ml b/driver/Interp.ml index f3d75ea..9ea9d0c 100644 --- a/driver/Interp.ml +++ b/driver/Interp.ml @@ -17,8 +17,6 @@ type caml_float = float open Format open Camlcoq open Datatypes -open BinPos -open BinInt open AST open Integers open Floats @@ -148,7 +146,7 @@ let compare_mem m1 m2 = (* should permissions be taken into account? *) (* Comparing continuations *) -let some_expr = Evar(Coq_xH, Tvoid) +let some_expr = Evar(P.one, Tvoid) let rank_cont = function | Kstop -> 0 @@ -258,7 +256,7 @@ let extract_string ge m id ofs = Some(Buffer.contents b) end else begin Buffer.add_char b c; - extract blk (coq_Zsucc ofs) + extract blk (Z.succ ofs) end | _ -> None in diff --git a/extraction/extraction.v b/extraction/extraction.v index 26cdb6d..89c708b 100644 --- a/extraction/extraction.v +++ b/extraction/extraction.v @@ -99,6 +99,15 @@ Extract Inlined Constant Fappli_IEEE.B2R => "fun _ -> assert false". Extract Inlined Constant Fappli_IEEE.round_mode => "fun _ -> assert false". Extract Inlined Constant Fcalc_bracket.inbetween_loc => "fun _ -> assert false". +(* Needed in Coq 4.00 to avoid problems with Function definitions. *) +Set Extraction AccessOpaque. + (* Go! *) Cd "extraction". -Recursive Extraction Library Compiler. +(* Recursive Extraction Library Compiler. *) +Separate Extraction + Compiler.transf_c_program Compiler.transf_cminor_program + Cexec.do_initial_state Cexec.do_step Cexec.at_final_state + Initializers.transl_init Initializers.constval + Csyntax.Eindex Csyntax.Epreincr. + diff --git a/ia32/Asmgenproof.v b/ia32/Asmgenproof.v index 3d0c57f..d618d44 100644 --- a/ia32/Asmgenproof.v +++ b/ia32/Asmgenproof.v @@ -1122,7 +1122,8 @@ Proof. intros. simpl in H2. destruct (transl_cond_correct tge tf cond args _ _ rs m' H2) as [rs' [A [B C]]]. - unfold PregEq.t in B; rewrite EC in B. + rewrite EC in B (* 8.4 *) + || (unfold PregEq.t in B; rewrite EC in B) (* 8.3 *). destruct (testcond_for_condition cond); simpl in *. (* simple jcc *) exists (Pjcc c1 lbl); exists k; exists rs'. @@ -1130,8 +1131,8 @@ Proof. split. eapply agree_exten_temps; eauto. simpl. rewrite B. auto. (* jcc; jcc *) - destruct (eval_testcond c1 rs') as [b1|]_eqn; - destruct (eval_testcond c2 rs') as [b2|]_eqn; inv B. + destruct (eval_testcond c1 rs') as [b1|] eqn:?; + destruct (eval_testcond c2 rs') as [b2|] eqn:?; inv B. destruct b1. (* first jcc jumps *) exists (Pjcc c1 lbl); exists (Pjcc c2 lbl :: k); exists rs'. @@ -1147,8 +1148,8 @@ Proof. simpl. rewrite eval_testcond_nextinstr. rewrite Heqo0. destruct b2; auto || discriminate. (* jcc2 *) - destruct (eval_testcond c1 rs') as [b1|]_eqn; - destruct (eval_testcond c2 rs') as [b2|]_eqn; inv B. + destruct (eval_testcond c1 rs') as [b1|] eqn:?; + destruct (eval_testcond c2 rs') as [b2|] eqn:?; inv B. destruct (andb_prop _ _ H4). subst. exists (Pjcc2 c1 c2 lbl); exists k; exists rs'. split. eexact A. @@ -1169,7 +1170,8 @@ Proof. left; eapply exec_straight_steps; eauto. intros. simpl in H0. destruct (transl_cond_correct tge tf cond args _ _ rs m' H0) as [rs' [A [B C]]]. - unfold PregEq.t in B; rewrite EC in B. + rewrite EC in B (* 8.4 *) + || (unfold PregEq.t in B; rewrite EC in B) (* 8.3 *). destruct (testcond_for_condition cond); simpl in *. (* simple jcc *) econstructor; split. @@ -1178,8 +1180,8 @@ Proof. split. apply agree_nextinstr. eapply agree_exten_temps; eauto. simpl; congruence. (* jcc ; jcc *) - destruct (eval_testcond c1 rs') as [b1|]_eqn; - destruct (eval_testcond c2 rs') as [b2|]_eqn; inv B. + destruct (eval_testcond c1 rs') as [b1|] eqn:?; + destruct (eval_testcond c2 rs') as [b2|] eqn:?; inv B. destruct (orb_false_elim _ _ H2); subst. econstructor; split. eapply exec_straight_trans. eexact A. @@ -1188,8 +1190,8 @@ Proof. split. apply agree_nextinstr. apply agree_nextinstr. eapply agree_exten_temps; eauto. simpl; congruence. (* jcc2 *) - destruct (eval_testcond c1 rs') as [b1|]_eqn; - destruct (eval_testcond c2 rs') as [b2|]_eqn; inv B. + destruct (eval_testcond c1 rs') as [b1|] eqn:?; + destruct (eval_testcond c2 rs') as [b2|] eqn:?; inv B. exists (nextinstr rs'); split. eapply exec_straight_trans. eexact A. apply exec_straight_one. simpl. diff --git a/ia32/Asmgenproof1.v b/ia32/Asmgenproof1.v index 0a46677..7a4348b 100644 --- a/ia32/Asmgenproof1.v +++ b/ia32/Asmgenproof1.v @@ -1099,12 +1099,12 @@ Proof. rewrite (int_ltu_not i i0). destruct (Int.ltu i i0); destruct (Int.eq i i0); reflexivity. destruct (Int.ltu i i0); reflexivity. (* int ptr *) - destruct (Int.eq i Int.zero) as []_eqn; try discriminate. + destruct (Int.eq i Int.zero) eqn:?; try discriminate. destruct c; simpl in *; inv H1. rewrite Heqb1; reflexivity. rewrite Heqb1; reflexivity. (* ptr int *) - destruct (Int.eq i0 Int.zero) as []_eqn; try discriminate. + destruct (Int.eq i0 Int.zero) eqn:?; try discriminate. destruct c; simpl in *; inv H1. rewrite Heqb1; reflexivity. rewrite Heqb1; reflexivity. @@ -1396,13 +1396,13 @@ Proof. (* comp *) simpl. rewrite (ireg_of_eq _ _ EQ). rewrite (ireg_of_eq _ _ EQ1). econstructor. split. apply exec_straight_one. simpl. eauto. auto. - split. destruct (Val.cmp_bool c0 (rs x) (rs x0)) as []_eqn; auto. + split. destruct (Val.cmp_bool c0 (rs x) (rs x0)) eqn:?; auto. eapply testcond_for_signed_comparison_correct; eauto. intros. unfold compare_ints. repeat SOther. (* compu *) simpl. rewrite (ireg_of_eq _ _ EQ). rewrite (ireg_of_eq _ _ EQ1). econstructor. split. apply exec_straight_one. simpl. eauto. auto. - split. destruct (Val.cmpu_bool (Mem.valid_pointer m) c0 (rs x) (rs x0)) as []_eqn; auto. + split. destruct (Val.cmpu_bool (Mem.valid_pointer m) c0 (rs x) (rs x0)) eqn:?; auto. eapply testcond_for_unsigned_comparison_correct; eauto. intros. unfold compare_ints. repeat SOther. (* compimm *) @@ -1412,13 +1412,13 @@ Proof. eapply testcond_for_signed_comparison_correct; eauto. intros. unfold compare_ints. repeat SOther. econstructor; split. apply exec_straight_one. simpl; eauto. auto. - split. destruct (Val.cmp_bool c0 (rs x) (Vint i)) as []_eqn; auto. + split. destruct (Val.cmp_bool c0 (rs x) (Vint i)) eqn:?; auto. eapply testcond_for_signed_comparison_correct; eauto. intros. unfold compare_ints. repeat SOther. (* compuimm *) simpl. rewrite (ireg_of_eq _ _ EQ). econstructor. split. apply exec_straight_one. simpl. eauto. auto. - split. destruct (Val.cmpu_bool (Mem.valid_pointer m) c0 (rs x) (Vint i)) as []_eqn; auto. + split. destruct (Val.cmpu_bool (Mem.valid_pointer m) c0 (rs x) (Vint i)) eqn:?; auto. eapply testcond_for_unsigned_comparison_correct; eauto. intros. unfold compare_ints. repeat SOther. (* compf *) @@ -1613,22 +1613,22 @@ Proof. (* div *) apply SAME. specialize (divs_mods_exist (rs x0) (rs x1)). rewrite H0. - destruct (Val.mods (rs x0) (rs x1)) as [vr|]_eqn; intros; try contradiction. + destruct (Val.mods (rs x0) (rs x1)) as [vr|] eqn:?; intros; try contradiction. eapply mk_div_correct with (dsem := Val.divs) (msem := Val.mods); eauto. (* divu *) apply SAME. specialize (divu_modu_exist (rs x0) (rs x1)). rewrite H0. - destruct (Val.modu (rs x0) (rs x1)) as [vr|]_eqn; intros; try contradiction. + destruct (Val.modu (rs x0) (rs x1)) as [vr|] eqn:?; intros; try contradiction. eapply mk_div_correct with (dsem := Val.divu) (msem := Val.modu); eauto. (* mod *) apply SAME. specialize (divs_mods_exist (rs x0) (rs x1)). rewrite H0. - destruct (Val.divs (rs x0) (rs x1)) as [vq|]_eqn; intros; try contradiction. + destruct (Val.divs (rs x0) (rs x1)) as [vq|] eqn:?; intros; try contradiction. eapply mk_mod_correct with (dsem := Val.divs) (msem := Val.mods); eauto. (* modu *) apply SAME. specialize (divu_modu_exist (rs x0) (rs x1)). rewrite H0. - destruct (Val.divu (rs x0) (rs x1)) as [vq|]_eqn; intros; try contradiction. + destruct (Val.divu (rs x0) (rs x1)) as [vq|] eqn:?; intros; try contradiction. eapply mk_mod_correct with (dsem := Val.divu) (msem := Val.modu); eauto. (* shl *) apply SAME. eapply mk_shift_correct; eauto. diff --git a/ia32/ConstpropOpproof.v b/ia32/ConstpropOpproof.v index 1a0508c..9003743 100644 --- a/ia32/ConstpropOpproof.v +++ b/ia32/ConstpropOpproof.v @@ -158,10 +158,10 @@ Proof. destruct (Int.ltu n Int.iwordsize); simpl; auto. eapply eval_static_addressing_correct; eauto. unfold eval_static_intoffloat. - destruct (Float.intoffloat n1) as []_eqn; simpl in H0; inv H0. + destruct (Float.intoffloat n1) eqn:?; simpl in H0; inv H0. simpl; auto. destruct (propagate_float_constants tt); simpl; auto. - unfold eval_static_condition_val. destruct (eval_static_condition c vl0) as [b|]_eqn. + unfold eval_static_condition_val. destruct (eval_static_condition c vl0) as [b|] eqn:?. rewrite (eval_static_condition_correct _ _ _ m _ H Heqo). destruct b; simpl; auto. simpl; auto. @@ -290,7 +290,7 @@ Proof. exists (Vint Int.zero); split; auto. destruct (rs#r1); simpl; auto. rewrite Int.mul_zero; auto. predSpec Int.eq Int.eq_spec n Int.one; intros. subst. exists (rs#r1); split; auto. destruct (rs#r1); simpl; auto. rewrite Int.mul_one; auto. - destruct (Int.is_power2 n) as []_eqn; intros. + destruct (Int.is_power2 n) eqn:?; intros. rewrite (Val.mul_pow2 rs#r1 _ _ Heqo). apply make_shlimm_correct; auto. econstructor; split; eauto. auto. Qed. @@ -303,8 +303,8 @@ Lemma make_divimm_correct: exists w, eval_operation ge sp op rs##args m = Some w /\ Val.lessdef v w. Proof. intros; unfold make_divimm. - destruct (Int.is_power2 n) as []_eqn. - destruct (Int.ltu i (Int.repr 31)) as []_eqn. + destruct (Int.is_power2 n) eqn:?. + destruct (Int.ltu i (Int.repr 31)) eqn:?. exists v; split; auto. simpl. eapply Val.divs_pow2; eauto. congruence. exists v; auto. exists v; auto. @@ -318,7 +318,7 @@ Lemma make_divuimm_correct: exists w, eval_operation ge sp op rs##args m = Some w /\ Val.lessdef v w. Proof. intros; unfold make_divuimm. - destruct (Int.is_power2 n) as []_eqn. + destruct (Int.is_power2 n) eqn:?. replace v with (Val.shru rs#r1 (Vint i)). eapply make_shruimm_correct; eauto. eapply Val.divu_pow2; eauto. congruence. @@ -333,7 +333,7 @@ Lemma make_moduimm_correct: exists w, eval_operation ge sp op rs##args m = Some w /\ Val.lessdef v w. Proof. intros; unfold make_moduimm. - destruct (Int.is_power2 n) as []_eqn. + destruct (Int.is_power2 n) eqn:?. exists v; split; auto. simpl. decEq. eapply Val.modu_pow2; eauto. congruence. exists v; auto. Qed. @@ -430,10 +430,10 @@ Lemma builtin_strength_reduction_correct: Proof. intros until m'. unfold builtin_strength_reduction. destruct (builtin_strength_reduction_match ef args vl); simpl; intros; InvApproxRegs; SimplVMA. - unfold symbol_address in H. destruct (Genv.find_symbol ge symb) as [b|]_eqn; rewrite H in H0. + unfold symbol_address in H. destruct (Genv.find_symbol ge symb) as [b|] eqn:?; rewrite H in H0. rewrite volatile_load_global_charact. exists b; auto. inv H0. - unfold symbol_address in H1. destruct (Genv.find_symbol ge symb) as [b|]_eqn; rewrite H1 in H0. + unfold symbol_address in H1. destruct (Genv.find_symbol ge symb) as [b|] eqn:?; rewrite H1 in H0. rewrite volatile_store_global_charact. exists b; auto. inv H0. auto. diff --git a/ia32/Op.v b/ia32/Op.v index 8169594..93a867a 100644 --- a/ia32/Op.v +++ b/ia32/Op.v @@ -642,8 +642,8 @@ Proof. right. apply Int.no_overlap_sound; auto. (* Aglobal *) unfold symbol_address in *. - destruct (Genv.find_symbol ge i1) as []_eqn; inv H2. - destruct (Genv.find_symbol ge i) as []_eqn; inv H1. + destruct (Genv.find_symbol ge i1) eqn:?; inv H2. + destruct (Genv.find_symbol ge i) eqn:?; inv H1. destruct (ident_eq i i1). subst. replace (Int.unsigned n1) with (Int.unsigned (Int.add Int.zero n1)). replace (Int.unsigned n2) with (Int.unsigned (Int.add Int.zero n2)). @@ -653,9 +653,9 @@ Proof. left. red; intros; elim n. subst. eapply Genv.genv_vars_inj; eauto. (* Abased *) unfold symbol_address in *. - destruct (Genv.find_symbol ge i1) as []_eqn; simpl in *; try discriminate. + destruct (Genv.find_symbol ge i1) eqn:?; simpl in *; try discriminate. destruct v; inv H2. - destruct (Genv.find_symbol ge i) as []_eqn; inv H1. + destruct (Genv.find_symbol ge i) eqn:?; inv H1. destruct (ident_eq i i1). subst. rewrite (Int.add_commut i0 i3). rewrite (Int.add_commut i2 i3). right. apply Int.no_overlap_sound; auto. @@ -776,8 +776,8 @@ Opaque Int.add. Val.cmpu_bool (Mem.valid_pointer m1) c v1 v2 = Some b -> Val.cmpu_bool (Mem.valid_pointer m2) c v1' v2' = Some b). intros. inv H; simpl in H1; try discriminate; inv H0; simpl in H1; try discriminate; simpl; auto. - destruct (Mem.valid_pointer m1 b1 (Int.unsigned ofs1)) as []_eqn; try discriminate. - destruct (Mem.valid_pointer m1 b0 (Int.unsigned ofs0)) as []_eqn; try discriminate. + destruct (Mem.valid_pointer m1 b1 (Int.unsigned ofs1)) eqn:?; try discriminate. + destruct (Mem.valid_pointer m1 b0 (Int.unsigned ofs0)) eqn:?; try discriminate. rewrite (valid_pointer_inj _ H2 Heqb4). rewrite (valid_pointer_inj _ H Heqb0). simpl. destruct (zeq b1 b0); simpl in H1. @@ -878,7 +878,7 @@ Proof. inv H4; simpl in H1; inv H1. simpl. destruct (Float.intoffloat f0); simpl in H2; inv H2. exists (Vint i); auto. inv H4; simpl in H1; inv H1. simpl. TrivialExists. - subst v1. destruct (eval_condition c vl1 m1) as []_eqn. + subst v1. destruct (eval_condition c vl1 m1) eqn:?. exploit eval_condition_inj; eauto. intros EQ; rewrite EQ. destruct b; simpl; constructor. simpl; constructor. @@ -995,7 +995,7 @@ Hypothesis sp_inj: f sp1 = Some(sp2, delta). Remark symbol_address_inject: forall id ofs, val_inject f (symbol_address genv id ofs) (symbol_address genv id ofs). Proof. - intros. unfold symbol_address. destruct (Genv.find_symbol genv id) as []_eqn; auto. + intros. unfold symbol_address. destruct (Genv.find_symbol genv id) eqn:?; auto. exploit (proj1 globals); eauto. intros. econstructor; eauto. rewrite Int.add_zero; auto. Qed. diff --git a/ia32/PrintAsm.ml b/ia32/PrintAsm.ml index da08de8..601869b 100644 --- a/ia32/PrintAsm.ml +++ b/ia32/PrintAsm.ml @@ -787,7 +787,7 @@ let print_init oc = function (camlint64_of_coqint (Floats.Float.bits_of_double n)) comment (camlfloat_of_coqfloat n) | Init_space n -> - let n = camlint_of_z n in + let n = Z.to_int32 n in if n > 0l then fprintf oc " .space %ld\n" n | Init_addrof(symb, ofs) -> fprintf oc " .long %a\n" diff --git a/ia32/SelectOpproof.v b/ia32/SelectOpproof.v index 136a765..18deca6 100644 --- a/ia32/SelectOpproof.v +++ b/ia32/SelectOpproof.v @@ -228,12 +228,12 @@ Proof. destruct (shlimm_match a); intros; InvEval. exists (Vint (Int.shl n1 n)); split. EvalOp. simpl. destruct (Int.ltu n Int.iwordsize); auto. - destruct (Int.ltu (Int.add n n1) Int.iwordsize) as []_eqn. + destruct (Int.ltu (Int.add n n1) Int.iwordsize) eqn:?. exists (Val.shl v1 (Vint (Int.add n n1))); split. EvalOp. subst. destruct v1; simpl; auto. rewrite Heqb. - destruct (Int.ltu n1 Int.iwordsize) as []_eqn; simpl; auto. - destruct (Int.ltu n Int.iwordsize) as []_eqn; simpl; auto. + destruct (Int.ltu n1 Int.iwordsize) eqn:?; simpl; auto. + destruct (Int.ltu n Int.iwordsize) eqn:?; simpl; auto. rewrite Int.add_commut. rewrite Int.shl_shl; auto. rewrite Int.add_commut; auto. subst. TrivialExists. econstructor. EvalOp. simpl; eauto. constructor. simpl. auto. @@ -259,12 +259,12 @@ Proof. destruct (shruimm_match a); intros; InvEval. exists (Vint (Int.shru n1 n)); split. EvalOp. simpl. destruct (Int.ltu n Int.iwordsize); auto. - destruct (Int.ltu (Int.add n n1) Int.iwordsize) as []_eqn. + destruct (Int.ltu (Int.add n n1) Int.iwordsize) eqn:?. exists (Val.shru v1 (Vint (Int.add n n1))); split. EvalOp. subst. destruct v1; simpl; auto. rewrite Heqb. - destruct (Int.ltu n1 Int.iwordsize) as []_eqn; simpl; auto. - destruct (Int.ltu n Int.iwordsize) as []_eqn; simpl; auto. + destruct (Int.ltu n1 Int.iwordsize) eqn:?; simpl; auto. + destruct (Int.ltu n Int.iwordsize) eqn:?; simpl; auto. rewrite Int.add_commut. rewrite Int.shru_shru; auto. rewrite Int.add_commut; auto. subst. TrivialExists. econstructor. EvalOp. simpl; eauto. constructor. simpl. auto. @@ -281,12 +281,12 @@ Proof. destruct (shrimm_match a); intros; InvEval. exists (Vint (Int.shr n1 n)); split. EvalOp. simpl. destruct (Int.ltu n Int.iwordsize); auto. - destruct (Int.ltu (Int.add n n1) Int.iwordsize) as []_eqn. + destruct (Int.ltu (Int.add n n1) Int.iwordsize) eqn:?. exists (Val.shr v1 (Vint (Int.add n n1))); split. EvalOp. subst. destruct v1; simpl; auto. rewrite Heqb. - destruct (Int.ltu n1 Int.iwordsize) as []_eqn; simpl; auto. - destruct (Int.ltu n Int.iwordsize) as []_eqn; simpl; auto. + destruct (Int.ltu n1 Int.iwordsize) eqn:?; simpl; auto. + destruct (Int.ltu n Int.iwordsize) eqn:?; simpl; auto. rewrite Int.add_commut. rewrite Int.shr_shr; auto. rewrite Int.add_commut; auto. subst. TrivialExists. econstructor. EvalOp. simpl; eauto. constructor. simpl. auto. @@ -417,25 +417,25 @@ Proof. InvEval. rewrite Val.or_commut. apply eval_orimm; auto. InvEval. apply eval_orimm; auto. (* shlimm - shruimm *) - destruct (Int.eq (Int.add n1 n2) Int.iwordsize && same_expr_pure t1 t2) as []_eqn. + destruct (Int.eq (Int.add n1 n2) Int.iwordsize && same_expr_pure t1 t2) eqn:?. destruct (andb_prop _ _ Heqb0). generalize (Int.eq_spec (Int.add n1 n2) Int.iwordsize); rewrite H1; intros EQ. InvEval. exploit eval_same_expr; eauto. intros [EQ1 EQ2]; subst. exists (Val.ror v0 (Vint n2)); split. EvalOp. destruct v0; simpl; auto. - destruct (Int.ltu n1 Int.iwordsize) as []_eqn; auto. - destruct (Int.ltu n2 Int.iwordsize) as []_eqn; auto. + destruct (Int.ltu n1 Int.iwordsize) eqn:?; auto. + destruct (Int.ltu n2 Int.iwordsize) eqn:?; auto. simpl. rewrite <- Int.or_ror; auto. TrivialExists. (* shruimm - shlimm *) - destruct (Int.eq (Int.add n1 n2) Int.iwordsize && same_expr_pure t1 t2) as []_eqn. + destruct (Int.eq (Int.add n1 n2) Int.iwordsize && same_expr_pure t1 t2) eqn:?. destruct (andb_prop _ _ Heqb0). generalize (Int.eq_spec (Int.add n1 n2) Int.iwordsize); rewrite H1; intros EQ. InvEval. exploit eval_same_expr; eauto. intros [EQ1 EQ2]; subst. exists (Val.ror v1 (Vint n2)); split. EvalOp. destruct v1; simpl; auto. - destruct (Int.ltu n2 Int.iwordsize) as []_eqn; auto. - destruct (Int.ltu n1 Int.iwordsize) as []_eqn; auto. + destruct (Int.ltu n2 Int.iwordsize) eqn:?; auto. + destruct (Int.ltu n1 Int.iwordsize) eqn:?; auto. simpl. rewrite Int.or_commut. rewrite <- Int.or_ror; auto. TrivialExists. (* default *) @@ -717,7 +717,7 @@ Theorem eval_intuoffloat: exists v, eval_expr ge sp e m le (intuoffloat a) v /\ Val.lessdef y v. Proof. intros. destruct x; simpl in H0; try discriminate. - destruct (Float.intuoffloat f) as [n|]_eqn; simpl in H0; inv H0. + destruct (Float.intuoffloat f) as [n|] eqn:?; simpl in H0; inv H0. exists (Vint n); split; auto. unfold intuoffloat. set (im := Int.repr Int.half_modulus). set (fm := Float.floatofintu im). @@ -729,7 +729,7 @@ Proof. econstructor. instantiate (1 := Vfloat fm). EvalOp. eapply eval_Econdition with (vb := Float.cmp Clt f fm). eauto with evalexpr. auto. - destruct (Float.cmp Clt f fm) as []_eqn. + destruct (Float.cmp Clt f fm) eqn:?. exploit Float.intuoffloat_intoffloat_1; eauto. intro EQ. EvalOp. simpl. rewrite EQ; auto. exploit Float.intuoffloat_intoffloat_2; eauto. @@ -763,7 +763,7 @@ Proof. eapply eval_Econdition with (vb := Int.ltu i Float.ox8000_0000). constructor. eauto. constructor. simpl. auto. - destruct (Int.ltu i Float.ox8000_0000) as []_eqn. + destruct (Int.ltu i Float.ox8000_0000) eqn:?. rewrite Float.floatofintu_floatofint_1; auto. unfold floatofint. EvalOp. exploit (eval_addimm (Int.neg Float.ox8000_0000) (Vint i :: le) (Eletvar 0)); eauto. diff --git a/lib/Camlcoq.ml b/lib/Camlcoq.ml index 00c2103..442766d 100644 --- a/lib/Camlcoq.ml +++ b/lib/Camlcoq.ml @@ -16,75 +16,206 @@ (* Library of useful Caml <-> Coq conversions *) open Datatypes -open BinPos +open BinNums open BinInt +open BinPos open Floats -(* Integers *) +(* Coq's [nat] type and some of its operations *) -let rec camlint_of_positive = function - | Coq_xI p -> Int32.add (Int32.shift_left (camlint_of_positive p) 1) 1l - | Coq_xO p -> Int32.shift_left (camlint_of_positive p) 1 - | Coq_xH -> 1l +module Nat = struct -let camlint_of_z = function - | Z0 -> 0l - | Zpos p -> camlint_of_positive p - | Zneg p -> Int32.neg (camlint_of_positive p) + type t = nat = O | S of t + + let rec to_int = function + | O -> 0 + | S n -> succ (to_int n) + + let rec to_int32 = function + | O -> 0l + | S n -> Int32.succ(to_int32 n) + + let rec of_int n = + assert (n >= 0); + if n = 0 then O else S (of_int (pred n)) + + let rec of_int32 n = + assert (n >= 0l); + if n = 0l then O else S (of_int32 (Int32.pred n)) + +end + + +(* Coq's [positive] type and some of its operations *) -let camlint_of_coqint : Integers.Int.int -> int32 = camlint_of_z +module P = struct -let rec camlint64_of_positive = function - | Coq_xI p -> Int64.add (Int64.shift_left (camlint64_of_positive p) 1) 1L - | Coq_xO p -> Int64.shift_left (camlint64_of_positive p) 1 + type t = positive = Coq_xI of t | Coq_xO of t | Coq_xH + + let one = Coq_xH + let succ = Pos.succ + let pred = Pos.pred + let add = Pos.add + let sub = Pos.sub + let eq x y = (Pos.compare x y = Eq) + let lt x y = (Pos.compare x y = Lt) + let gt x y = (Pos.compare x y = Gt) + let le x y = (Pos.compare x y <> Gt) + let ge x y = (Pos.compare x y <> Lt) + + let rec to_int = function + | Coq_xI p -> (to_int p lsl 1) + 1 + | Coq_xO p -> to_int p lsl 1 + | Coq_xH -> 1 + + let rec of_int n = + if n = 0 then assert false else + if n = 1 then Coq_xH else + if n land 1 = 0 + then Coq_xO (of_int (n lsr 1)) + else Coq_xI (of_int (n lsr 1)) + + let rec to_int32 = function + | Coq_xI p -> Int32.add (Int32.shift_left (to_int32 p) 1) 1l + | Coq_xO p -> Int32.shift_left (to_int32 p) 1 + | Coq_xH -> 1l + + let rec of_int32 n = + if n = 0l then assert false else + if n = 1l then Coq_xH else + if Int32.logand n 1l = 0l + then Coq_xO (of_int32 (Int32.shift_right_logical n 1)) + else Coq_xI (of_int32 (Int32.shift_right_logical n 1)) + + let rec to_int64 = function + | Coq_xI p -> Int64.add (Int64.shift_left (to_int64 p) 1) 1L + | Coq_xO p -> Int64.shift_left (to_int64 p) 1 | Coq_xH -> 1L -let camlint64_of_z = function - | Z0 -> 0L - | Zpos p -> camlint64_of_positive p - | Zneg p -> Int64.neg (camlint64_of_positive p) + let rec of_int64 n = + if n = 0L then assert false else + if n = 1L then Coq_xH else + if Int64.logand n 1L = 0L + then Coq_xO (of_int64 (Int64.shift_right_logical n 1)) + else Coq_xI (of_int64 (Int64.shift_right_logical n 1)) + + let (+) = add + let (-) = sub + let (=) = eq + let (<) = lt + let (<=) = le + let (>) = gt + let (>=) = ge + +end + +(* Coq's [Z] type and some of its operations *) + +module Z = struct + + type t = coq_Z = Z0 | Zpos of positive | Zneg of positive + + let zero = Z0 + let one = Zpos Coq_xH + let mone = Zneg Coq_xH + let succ = Z.succ + let pred = Z.pred + let neg = Z.opp + let add = Z.add + let sub = Z.sub + let mul = Z.mul + let eq x y = (Z.compare x y = Eq) + let lt x y = (Z.compare x y = Lt) + let gt x y = (Z.compare x y = Gt) + let le x y = (Z.compare x y <> Gt) + let ge x y = (Z.compare x y <> Lt) + + let to_int = function + | Z0 -> 0 + | Zpos p -> P.to_int p + | Zneg p -> - (P.to_int p) + + let of_sint n = + if n = 0 then Z0 else + if n > 0 then Zpos (P.of_int n) + else Zneg (P.of_int (-n)) + + let of_uint n = + if n = 0 then Z0 else Zpos (P.of_int n) + + let to_int32 = function + | Z0 -> 0l + | Zpos p -> P.to_int32 p + | Zneg p -> Int32.neg (P.to_int32 p) -let camlint64_of_coqint : Integers.Int64.int -> int64 = camlint64_of_z + let of_sint32 n = + if n = 0l then Z0 else + if n > 0l then Zpos (P.of_int32 n) + else Zneg (P.of_int32 (Int32.neg n)) -let rec camlint_of_nat = function - | O -> 0 - | S n -> camlint_of_nat n + 1 - -let rec nat_of_camlint n = - assert (n >= 0l); - if n = 0l then O else S (nat_of_camlint (Int32.sub n 1l)) - -let rec positive_of_camlint n = - if n = 0l then assert false else - if n = 1l then Coq_xH else - if Int32.logand n 1l = 0l - then Coq_xO (positive_of_camlint (Int32.shift_right_logical n 1)) - else Coq_xI (positive_of_camlint (Int32.shift_right_logical n 1)) - -let z_of_camlint n = - if n = 0l then Z0 else - if n > 0l then Zpos (positive_of_camlint n) - else Zneg (positive_of_camlint (Int32.neg n)) - -let coqint_of_camlint (n: int32) : Integers.Int.int = - (* Interpret n as unsigned so that resulting Z is in range *) - if n = 0l then Z0 else Zpos (positive_of_camlint n) - -let rec positive_of_camlint64 n = - if n = 0L then assert false else - if n = 1L then Coq_xH else - if Int64.logand n 1L = 0L - then Coq_xO (positive_of_camlint64 (Int64.shift_right_logical n 1)) - else Coq_xI (positive_of_camlint64 (Int64.shift_right_logical n 1)) - -let z_of_camlint64 n = - if n = 0L then Z0 else - if n > 0L then Zpos (positive_of_camlint64 n) - else Zneg (positive_of_camlint64 (Int64.neg n)) - -let coqint_of_camlint64 (n: int64) : Integers.Int64.int = - (* Interpret n as unsigned so that resulting Z is in range *) - if n = 0L then Z0 else Zpos (positive_of_camlint64 n) + let of_uint32 n = + if n = 0l then Z0 else Zpos (P.of_int32 n) + + let to_int64 = function + | Z0 -> 0L + | Zpos p -> P.to_int64 p + | Zneg p -> Int64.neg (P.to_int64 p) + + let of_sint64 n = + if n = 0L then Z0 else + if n > 0L then Zpos (P.of_int64 n) + else Zneg (P.of_int64 (Int64.neg n)) + + let of_uint64 n = + if n = 0L then Z0 else Zpos (P.of_int64 n) + + let rec to_string_rec base buff x = + if x = Z0 then () else begin + let (q, r) = Z.div_eucl x base in + to_string_rec base buff q; + let q' = to_int q in + Buffer.add_char buff (Char.chr + (if q' < 10 then Char.code '0' + q' + else Char.code 'A' + q' - 10)) + end + + let to_string_aux base x = + match x with + | Z0 -> "0" + | Zpos _ -> + let buff = Buffer.create 10 in + to_string_rec base buff x; + Buffer.contents buff + | Zneg p -> + let buff = Buffer.create 10 in + Buffer.add_char buff '-'; + to_string_rec base buff (Zpos p); + Buffer.contents buff + + let dec = to_string_aux (of_uint 10) + + let hex = to_string_aux (of_uint 16) + + let to_string = dec + + let (+) = add + let (-) = sub + let ( * ) = mul + let (=) = eq + let (<) = lt + let (<=) = le + let (>) = gt + let (>=) = ge +end + +(* Alternate names *) + +let camlint_of_coqint : Integers.Int.int -> int32 = Z.to_int32 +let coqint_of_camlint : int32 -> Integers.Int.int = Z.of_uint32 + (* interpret the int32 as unsigned so that result Z is in range for int *) +let camlint64_of_coqint : Integers.Int64.int -> int64 = Z.to_int64 +let coqint_of_camlint64 : int64 -> Integers.Int64.int = Z.of_uint64 + (* interpret the int64 as unsigned so that result Z is in range for int *) (* Atoms (positive integers representing strings) *) @@ -97,7 +228,7 @@ let intern_string s = Hashtbl.find atom_of_string s with Not_found -> let a = !next_atom in - next_atom := coq_Psucc !next_atom; + next_atom := Pos.succ !next_atom; Hashtbl.add atom_of_string s a; Hashtbl.add string_of_atom a s; a @@ -106,7 +237,7 @@ let extern_atom a = try Hashtbl.find string_of_atom a with Not_found -> - Printf.sprintf "$%ld" (camlint_of_positive a) + Printf.sprintf "$%d" (P.to_int a) let first_unused_ident () = !next_atom diff --git a/lib/Coqlib.v b/lib/Coqlib.v index 3d5df25..676aa0a 100644 --- a/lib/Coqlib.v +++ b/lib/Coqlib.v @@ -33,7 +33,7 @@ Ltac caseEq name := generalize (refl_equal name); pattern name at -1 in |- *; case name. Ltac destructEq name := - destruct name as []_eqn. + destruct name eqn:?. Ltac decEq := match goal with @@ -393,7 +393,7 @@ Qed. Lemma Zmin_spec: forall x y, Zmin x y = if zlt x y then x else y. Proof. - intros. case (zlt x y); unfold Zlt, Zge; intros. + intros. case (zlt x y); unfold Zlt, Zge; intro z. unfold Zmin. rewrite z. auto. unfold Zmin. caseEq (x ?= y); intro. apply Zcompare_Eq_eq. auto. @@ -404,7 +404,7 @@ Qed. Lemma Zmax_spec: forall x y, Zmax x y = if zlt y x then x else y. Proof. - intros. case (zlt y x); unfold Zlt, Zge; intros. + intros. case (zlt y x); unfold Zlt, Zge; intro z. unfold Zmax. rewrite <- (Zcompare_antisym y x). rewrite z. simpl. auto. unfold Zmax. rewrite <- (Zcompare_antisym y x). @@ -565,7 +565,7 @@ Qed. Lemma Zdivides_trans: forall x y z, (x | y) -> (y | z) -> (x | z). Proof. - intros. inv H. inv H0. exists (q0 * q). ring. + intros x y z [a A] [b B]; subst. exists (a*b); ring. Qed. Definition Zdivide_dec: diff --git a/lib/Floats.v b/lib/Floats.v index aae2646..711fd61 100644 --- a/lib/Floats.v +++ b/lib/Floats.v @@ -362,7 +362,7 @@ Proof. destruct c, x, y; simpl; try destruct b; try destruct b0; try reflexivity; rewrite <- (Zcompare_antisym e e1); destruct (e ?= e1); try reflexivity; change Eq with (CompOpp Eq); rewrite <- (Pcompare_antisym m m0 Eq); - simpl; destruct ((m ?= m0)%positive Eq); try reflexivity. + simpl; destruct (Pcompare m m0 Eq); reflexivity. Qed. Theorem cmp_ne_eq: @@ -524,6 +524,7 @@ Proof. destruct (binary_normalize64_exact (Int.unsigned x)); [now smart_omega|]. match goal with [|- _ _ _ ?f = _] => destruct f end; intuition. exfalso; simpl in H2; change 0%R with (Z2R 0) in H2; apply eq_Z2R in H2; omega. + try (change (53 ?= 1024) with Lt in H1). (* for Coq 8.4 *) simpl Zcompare in *. match goal with [|- _ _ _ ?f = _] => destruct f end; intuition. exfalso; simpl in H0; change 0%R with (Z2R 0) in H0; apply eq_Z2R in H0; omega. @@ -718,6 +719,8 @@ Proof. rewrite (Ztrunc_floor (B2R _ _ x)), <- Zfloor_minus, <- Ztrunc_floor; [f_equal; assumption|apply Rle_0_minus; left; assumption|]. left; eapply Rlt_trans; [|now apply H2]; apply (Z2R_lt 0); reflexivity. + try (change (0 ?= 53) with Lt in H6,H8). (* for Coq 8.4 *) + try (change (53 ?= 1024) with Lt in H6,H8). (* for Coq 8.4 *) exfalso; simpl Zcompare in H6, H8; rewrite H6, H8 in H9. destruct H9 as [|[]]; [discriminate|..]. eapply Rle_trans in H9; [|apply Rle_0_minus; left; assumption]; apply (le_Z2R 0) in H9; apply H9; reflexivity. @@ -761,7 +764,7 @@ unfold Int64.or, Int64.bitwise_binop in H0. rewrite Int64.unsigned_repr, Int64.bits_of_Z_of_bits in H0. rewrite orb_false_intro in H0; [discriminate|reflexivity|]. rewrite Int64.sign_bit_of_Z. -match goal with [|- ((if ?c then _ else _) = _)] => destruct c end. +match goal with [|- ((if ?c then _ else _) = _)] => destruct c as [z0|z0] end. reflexivity. rewrite Int64.unsigned_repr in z0; [exfalso|]; now smart_omega. vm_compute; split; congruence. @@ -793,7 +796,7 @@ Proof. intros; unfold from_words, double_of_bits, b64_of_bits, binary_float_of_bits. rewrite B2R_FF2B; unfold is_finite; rewrite match_FF2B; unfold binary_float_of_bits_aux; rewrite split_bits_or; simpl; pose proof (Int.unsigned_range x). - destruct (Int.unsigned x + Zpower_pos 2 52) as []_eqn. + destruct (Int.unsigned x + Zpower_pos 2 52) eqn:?. exfalso; now smart_omega. simpl; rewrite <- Heqz; unfold F2R; simpl. rewrite <- (Z2R_plus 4503599627370496), Rmult_1_r. @@ -822,6 +825,7 @@ Proof. rewrite round_exact in H3 by smart_omega. match goal with [H3:if Rlt_bool ?x ?y then _ else _ |- _] => pose proof (Rlt_bool_spec x y); destruct (Rlt_bool x y) end; destruct H3. + try (change (53 ?= 1024) with Lt in H3,H5). (* for Coq 8.4 *) simpl Zcompare in *; apply B2R_inj; try match goal with [H':B2R _ _ ?f = _ , H'':is_finite _ _ ?f = true |- is_finite_strict _ _ ?f = true] => destruct f; [ @@ -869,6 +873,8 @@ Proof. rewrite round_exact in H3 by smart_omega. match goal with [H3:if Rlt_bool ?x ?y then _ else _ |- _] => pose proof (Rlt_bool_spec x y); destruct (Rlt_bool x y) end; destruct H3. + try (change (0 ?= 53) with Lt in H3,H5). (* for Coq 8.4 *) + try (change (53 ?= 1024) with Lt in H3,H5). (* for Coq 8.4 *) simpl Zcompare in *; apply B2R_inj; try match goal with [H':B2R _ _ ?f = _ , H'':is_finite _ _ ?f = true |- is_finite_strict _ _ ?f = true] => destruct f; [ diff --git a/lib/Integers.v b/lib/Integers.v index 7d5f016..9844ed1 100644 --- a/lib/Integers.v +++ b/lib/Integers.v @@ -168,7 +168,7 @@ Lemma Z_mod_two_p_range: Proof. induction n; simpl; intros. rewrite two_power_nat_O. omega. - rewrite two_power_nat_S. destruct (Z_bin_decomp x) as [b y]_eqn. + rewrite two_power_nat_S. destruct (Z_bin_decomp x) as [b y] eqn:?. rewrite Z_bin_comp_eq. generalize (IHn y). destruct b; omega. Qed. @@ -179,7 +179,7 @@ Proof. induction n; simpl; intros. rewrite two_power_nat_O. exists x. ring. rewrite two_power_nat_S. - destruct (Z_bin_decomp x) as [b y]_eqn. + destruct (Z_bin_decomp x) as [b y] eqn:?. destruct (IHn y) as [z EQ]. exists z. rewrite (Z_bin_comp_decomp2 _ _ _ Heqp). repeat rewrite Z_bin_comp_eq. rewrite EQ at 1. ring. @@ -1171,7 +1171,7 @@ Proof. Z_of_bits n (bits_of_Z n x) 0 = k * two_power_nat n + x). induction n; intros; simpl. rewrite two_power_nat_O. exists (-x). omega. - rewrite two_power_nat_S. destruct (Z_bin_decomp x) as [b y]_eqn. + rewrite two_power_nat_S. destruct (Z_bin_decomp x) as [b y] eqn:?. rewrite zeq_true. destruct (IHn y) as [k EQ]. replace (Z_of_bits n (fun i => if zeq i 0 then b else bits_of_Z n y (i - 1)) 1) with (Z_of_bits n (bits_of_Z n y) 0). @@ -1302,7 +1302,7 @@ Proof. auto. destruct (zlt i 0). apply bits_of_Z_below. auto. simpl. - destruct (Z_bin_decomp x) as [b x1]_eqn. + destruct (Z_bin_decomp x) as [b x1] eqn:?. destruct (zeq i 0). subst i. simpl in H. assert (x = 0) by omega. subst x. simpl in Heqp. congruence. apply IHn. @@ -2199,7 +2199,7 @@ Proof. simpl. rewrite two_power_nat_O in H0. assert (x = 0). omega. subst x. omega. rewrite two_power_nat_S in H0. simpl Z_one_bits. - destruct (Z_bin_decomp x) as [b y]_eqn. + destruct (Z_bin_decomp x) as [b y] eqn:?. rewrite (Z_bin_comp_decomp2 _ _ _ Heqp). assert (EQ: y * two_p (i + 1) = powerserie (Z_one_bits n y (i + 1))). apply IHn. omega. diff --git a/lib/Iteration.v b/lib/Iteration.v index 235b650..1c3c9cc 100644 --- a/lib/Iteration.v +++ b/lib/Iteration.v @@ -171,7 +171,7 @@ Proof. intros. unfold iter in H1. rewrite unroll_Fix in H1. unfold iter_step in H1. destruct (peq x 1). discriminate. specialize (step_prop a H0). - destruct (step a) as [b'|a']_eqn. + destruct (step a) as [b'|a'] eqn:?. inv H1. auto. apply H with (Ppred x) a'. apply Ppred_Plt; auto. auto. auto. Qed. diff --git a/lib/Postorder.v b/lib/Postorder.v index 3a76b0d..4a83ea5 100644 --- a/lib/Postorder.v +++ b/lib/Postorder.v @@ -148,8 +148,8 @@ Proof. constructor; intros. eauto. caseEq (s.(map)!root); intros. congruence. exploit GREY; eauto. intros [? ?]; contradiction. - destruct (s.(map)!x) as []_eqn; try congruence. - destruct (s.(map)!y) as []_eqn; try congruence. + destruct (s.(map)!x) eqn:?; try congruence. + destruct (s.(map)!y) eqn:?; try congruence. exploit COLOR; eauto. intros. exploit GREY; eauto. intros [? ?]; contradiction. (* not finished *) destruct succ_x as [ | y succ_x ]. @@ -189,7 +189,7 @@ Proof. exists l'; auto. (* children y needs traversing *) - destruct ((gr s)!y) as [ succs_y | ]_eqn. + destruct ((gr s)!y) as [ succs_y | ] eqn:?. (* y has children *) constructor; simpl; intros. (* sub *) @@ -241,7 +241,7 @@ Qed. Lemma initial_state_spec: invariant (init_state ginit root). Proof. - unfold init_state. destruct (ginit!root) as [succs|]_eqn. + unfold init_state. destruct (ginit!root) as [succs|] eqn:?. (* root has succs *) constructor; simpl; intros. (* sub *) @@ -315,7 +315,7 @@ Proof. discriminate. destruct succs as [ | y succs ]. inv H. simpl. apply lex_ord_right. omega. - destruct ((gr s)!y) as [succs'|]_eqn. + destruct ((gr s)!y) as [succs'|] eqn:?. inv H. simpl. apply lex_ord_left. eapply PTree_Properties.cardinal_remove; eauto. inv H. simpl. apply lex_ord_right. omega. Qed. diff --git a/powerpc/Asmgenproof1.v b/powerpc/Asmgenproof1.v index 2af4f70..f1c206e 100644 --- a/powerpc/Asmgenproof1.v +++ b/powerpc/Asmgenproof1.v @@ -1516,6 +1516,7 @@ Lemma transl_load_correct: Proof. intros. exploit eval_addressing_lessdef. eapply preg_vals; eauto. eauto. + unfold PregEq.t. intros [a' [A B]]. exploit Mem.loadv_extends; eauto. intros [v' [C D]]. apply transl_load_store_correct with ms; auto. @@ -1570,6 +1571,7 @@ Lemma transl_store_correct: Proof. intros. exploit eval_addressing_lessdef. eapply preg_vals; eauto. eauto. + unfold PregEq.t. intros [a' [A B]]. assert (Z: Val.lessdef (ms src) (rs (preg_of src))). eapply preg_val; eauto. exploit Mem.storev_extends; eauto. intros [m1' [C D]]. diff --git a/powerpc/ConstpropOpproof.v b/powerpc/ConstpropOpproof.v index eef3944..7d557c6 100644 --- a/powerpc/ConstpropOpproof.v +++ b/powerpc/ConstpropOpproof.v @@ -155,7 +155,7 @@ Proof. destruct (propagate_float_constants tt); simpl; auto. unfold eval_static_condition_val, Val.of_optbool. - destruct (eval_static_condition c vl0) as []_eqn. + destruct (eval_static_condition c vl0) eqn:?. rewrite (eval_static_condition_correct _ _ _ m _ H Heqo). destruct b; simpl; auto. simpl; auto. @@ -240,7 +240,7 @@ Proof. intros; unfold make_shlimm. predSpec Int.eq Int.eq_spec n Int.zero; intros. subst. exists (rs#r1); split; auto. destruct (rs#r1); simpl; auto. rewrite Int.shl_zero. auto. - destruct (Int.ltu n Int.iwordsize) as []_eqn; intros. + destruct (Int.ltu n Int.iwordsize) eqn:?; intros. rewrite Val.shl_rolm; auto. econstructor; split; eauto. auto. econstructor; split; eauto. simpl. congruence. Qed. @@ -254,7 +254,7 @@ Proof. intros; unfold make_shrimm. predSpec Int.eq Int.eq_spec n Int.zero; intros. subst. exists (rs#r1); split; auto. destruct (rs#r1); simpl; auto. rewrite Int.shr_zero. auto. - destruct (Int.ltu n Int.iwordsize) as []_eqn. + destruct (Int.ltu n Int.iwordsize) eqn:?. econstructor; split; eauto. simpl. auto. econstructor; split; eauto. simpl. congruence. Qed. @@ -268,7 +268,7 @@ Proof. intros; unfold make_shruimm. predSpec Int.eq Int.eq_spec n Int.zero; intros. subst. exists (rs#r1); split; auto. destruct (rs#r1); simpl; auto. rewrite Int.shru_zero. auto. - destruct (Int.ltu n Int.iwordsize) as []_eqn; intros. + destruct (Int.ltu n Int.iwordsize) eqn:?; intros. rewrite Val.shru_rolm; auto. econstructor; split; eauto. auto. econstructor; split; eauto. simpl. congruence. Qed. @@ -284,7 +284,7 @@ Proof. exists (Vint Int.zero); split; auto. destruct (rs#r1); simpl; auto. rewrite Int.mul_zero; auto. predSpec Int.eq Int.eq_spec n Int.one; intros. subst. exists (rs#r1); split; auto. destruct (rs#r1); simpl; auto. rewrite Int.mul_one; auto. - destruct (Int.is_power2 n) as []_eqn; intros. + destruct (Int.is_power2 n) eqn:?; intros. rewrite (Val.mul_pow2 rs#r1 _ _ Heqo). rewrite Val.shl_rolm. econstructor; split; eauto. auto. eapply Int.is_power2_range; eauto. @@ -299,8 +299,8 @@ Lemma make_divimm_correct: exists w, eval_operation ge sp op rs##args m = Some w /\ Val.lessdef v w. Proof. intros; unfold make_divimm. - destruct (Int.is_power2 n) as []_eqn. - destruct (Int.ltu i (Int.repr 31)) as []_eqn. + destruct (Int.is_power2 n) eqn:?. + destruct (Int.ltu i (Int.repr 31)) eqn:?. exists v; split; auto. simpl. eapply Val.divs_pow2; eauto. congruence. exists v; auto. exists v; auto. @@ -314,7 +314,7 @@ Lemma make_divuimm_correct: exists w, eval_operation ge sp op rs##args m = Some w /\ Val.lessdef v w. Proof. intros; unfold make_divuimm. - destruct (Int.is_power2 n) as []_eqn. + destruct (Int.is_power2 n) eqn:?. econstructor; split. simpl; eauto. exploit Int.is_power2_range; eauto. intros RANGE. rewrite <- Val.shru_rolm; auto. rewrite H0 in H. @@ -439,10 +439,10 @@ Lemma builtin_strength_reduction_correct: Proof. intros until m'. unfold builtin_strength_reduction. destruct (builtin_strength_reduction_match ef args vl); simpl; intros; InvApproxRegs; SimplVMA. - unfold symbol_address in H. destruct (Genv.find_symbol ge symb) as [b|]_eqn; rewrite H in H0. + unfold symbol_address in H. destruct (Genv.find_symbol ge symb) as [b|] eqn:?; rewrite H in H0. rewrite volatile_load_global_charact. exists b; auto. inv H0. - unfold symbol_address in H1. destruct (Genv.find_symbol ge symb) as [b|]_eqn; rewrite H1 in H0. + unfold symbol_address in H1. destruct (Genv.find_symbol ge symb) as [b|] eqn:?; rewrite H1 in H0. rewrite volatile_store_global_charact. exists b; auto. inv H0. auto. diff --git a/powerpc/Op.v b/powerpc/Op.v index e59e15f..58bcb2c 100644 --- a/powerpc/Op.v +++ b/powerpc/Op.v @@ -576,8 +576,8 @@ Proof. right. apply Int.no_overlap_sound; auto. (* Aglobal *) unfold symbol_address in *. - destruct (Genv.find_symbol ge i1) as []_eqn; inv H2. - destruct (Genv.find_symbol ge i) as []_eqn; inv H1. + destruct (Genv.find_symbol ge i1) eqn:?; inv H2. + destruct (Genv.find_symbol ge i) eqn:?; inv H1. destruct (ident_eq i i1). subst. replace (Int.unsigned n1) with (Int.unsigned (Int.add Int.zero n1)). replace (Int.unsigned n2) with (Int.unsigned (Int.add Int.zero n2)). @@ -587,9 +587,9 @@ Proof. left. red; intros; elim n. subst. eapply Genv.genv_vars_inj; eauto. (* Abased *) unfold symbol_address in *. - destruct (Genv.find_symbol ge i1) as []_eqn; simpl in *; try discriminate. + destruct (Genv.find_symbol ge i1) eqn:?; simpl in *; try discriminate. destruct v; inv H2. - destruct (Genv.find_symbol ge i) as []_eqn; inv H1. + destruct (Genv.find_symbol ge i) eqn:?; inv H1. destruct (ident_eq i i1). subst. rewrite (Int.add_commut i0 i3). rewrite (Int.add_commut i2 i3). right. apply Int.no_overlap_sound; auto. @@ -706,8 +706,8 @@ Opaque Int.add. Val.cmpu_bool (Mem.valid_pointer m1) c v1 v2 = Some b -> Val.cmpu_bool (Mem.valid_pointer m2) c v1' v2' = Some b). intros. inv H; simpl in H1; try discriminate; inv H0; simpl in H1; try discriminate; simpl; auto. - destruct (Mem.valid_pointer m1 b1 (Int.unsigned ofs1)) as []_eqn; try discriminate. - destruct (Mem.valid_pointer m1 b0 (Int.unsigned ofs0)) as []_eqn; try discriminate. + destruct (Mem.valid_pointer m1 b1 (Int.unsigned ofs1)) eqn:?; try discriminate. + destruct (Mem.valid_pointer m1 b0 (Int.unsigned ofs0)) eqn:?; try discriminate. rewrite (valid_pointer_inj _ H2 Heqb4). rewrite (valid_pointer_inj _ H Heqb0). simpl. destruct (zeq b1 b0); simpl in H1. @@ -792,7 +792,7 @@ Proof. inv H4; simpl in H1; inv H1. simpl. destruct (Float.intoffloat f0); simpl in H2; inv H2. exists (Vint i); auto. inv H4; inv H2; simpl; auto. - subst v1. destruct (eval_condition c vl1 m1) as []_eqn. + subst v1. destruct (eval_condition c vl1 m1) eqn:?. exploit eval_condition_inj; eauto. intros EQ; rewrite EQ. destruct b; simpl; constructor. simpl; constructor. @@ -923,7 +923,7 @@ Hypothesis sp_inj: f sp1 = Some(sp2, delta). Remark symbol_address_inject: forall id ofs, val_inject f (symbol_address genv id ofs) (symbol_address genv id ofs). Proof. - intros. unfold symbol_address. destruct (Genv.find_symbol genv id) as []_eqn; auto. + intros. unfold symbol_address. destruct (Genv.find_symbol genv id) eqn:?; auto. exploit (proj1 globals); eauto. intros. econstructor; eauto. rewrite Int.add_zero; auto. Qed. diff --git a/powerpc/PrintAsm.ml b/powerpc/PrintAsm.ml index a20448c..f56c3f2 100644 --- a/powerpc/PrintAsm.ml +++ b/powerpc/PrintAsm.ml @@ -924,7 +924,7 @@ let print_init oc = function (Int64.logand b 0xFFFFFFFFL) comment (camlfloat_of_coqfloat n) | Init_space n -> - let n = camlint_of_z n in + let n = Z.to_int32 n in if n > 0l then fprintf oc " .space %ld\n" n | Init_addrof(symb, ofs) -> fprintf oc " .long %a\n" diff --git a/powerpc/SelectOpproof.v b/powerpc/SelectOpproof.v index 5e49366..7be8858 100644 --- a/powerpc/SelectOpproof.v +++ b/powerpc/SelectOpproof.v @@ -232,7 +232,7 @@ Proof. red; intros. unfold shlimm. predSpec Int.eq Int.eq_spec n Int.zero. subst. exists x; split; auto. destruct x; simpl; auto. rewrite Int.shl_zero; auto. - destruct (Int.ltu n Int.iwordsize) as []_eqn. + destruct (Int.ltu n Int.iwordsize) eqn:?. rewrite Val.shl_rolm; auto. apply eval_rolm; auto. TrivialExists. econstructor. eauto. econstructor. EvalOp. simpl; eauto. constructor. auto. Qed. @@ -244,7 +244,7 @@ Proof. red; intros. unfold shruimm. predSpec Int.eq Int.eq_spec n Int.zero. subst. exists x; split; auto. destruct x; simpl; auto. rewrite Int.shru_zero; auto. - destruct (Int.ltu n Int.iwordsize) as []_eqn. + destruct (Int.ltu n Int.iwordsize) eqn:?. rewrite Val.shru_rolm; auto. apply eval_rolm; auto. TrivialExists. econstructor. eauto. econstructor. EvalOp. simpl; eauto. constructor. auto. Qed. @@ -257,7 +257,7 @@ Proof. predSpec Int.eq Int.eq_spec n Int.zero. intros. subst. exists x; split; auto. destruct x; simpl; auto. rewrite Int.shr_zero; auto. case (shrimm_match a); intros. - destruct (Int.lt mask1 Int.zero) as []_eqn. + destruct (Int.lt mask1 Int.zero) eqn:?. TrivialExists. replace (Val.shr x (Vint n)) with (Val.shru x (Vint n)). apply eval_shruimm; auto. @@ -331,7 +331,7 @@ Proof. InvEval. TrivialExists. simpl. rewrite Int.and_commut; auto. set (n' := Int.and n n2). destruct (Int.eq (Int.shru (Int.shl n' amount) amount) n' && - Int.ltu amount Int.iwordsize) as []_eqn. + Int.ltu amount Int.iwordsize) eqn:?. InvEval. destruct (andb_prop _ _ Heqb). generalize (Int.eq_spec (Int.shru (Int.shl n' amount) amount) n'). rewrite H1; intros. replace (Val.and x (Vint n)) @@ -349,7 +349,7 @@ Proof. destruct v1; auto. simpl. unfold Int.rolm. rewrite Int.and_assoc. decEq. decEq. decEq. apply Int.and_commut. destruct (Int.eq (Int.shru (Int.shl n amount) amount) n && - Int.ltu amount Int.iwordsize) as []_eqn. + Int.ltu amount Int.iwordsize) eqn:?. InvEval. destruct (andb_prop _ _ Heqb). generalize (Int.eq_spec (Int.shru (Int.shl n amount) amount) n). rewrite H0; intros. replace (Val.and x (Vint n)) @@ -402,20 +402,20 @@ Theorem eval_or: binary_constructor_sound or Val.or. Proof. red; intros until y; unfold or; case (or_match a b); intros. (* rolm - rolm *) - destruct (Int.eq amount1 amount2 && same_expr_pure t1 t2) as []_eqn. + destruct (Int.eq amount1 amount2 && same_expr_pure t1 t2) eqn:?. destruct (andb_prop _ _ Heqb0). generalize (Int.eq_spec amount1 amount2). rewrite H1. intro. subst amount2. InvEval. exploit eval_same_expr; eauto. intros [EQ1 EQ2]. subst. rewrite Val.or_rolm. TrivialExists. TrivialExists. (* andimm - rolm *) - destruct (Int.eq mask1 (Int.not mask2) && is_rlw_mask mask2) as []_eqn. + destruct (Int.eq mask1 (Int.not mask2) && is_rlw_mask mask2) eqn:?. destruct (andb_prop _ _ Heqb0). generalize (Int.eq_spec mask1 (Int.not mask2)); rewrite H1; intros. InvEval. subst. TrivialExists. TrivialExists. (* rolm - andimm *) - destruct (Int.eq mask2 (Int.not mask1) && is_rlw_mask mask1) as []_eqn. + destruct (Int.eq mask2 (Int.not mask1) && is_rlw_mask mask1) eqn:?. destruct (andb_prop _ _ Heqb0). generalize (Int.eq_spec mask2 (Int.not mask1)); rewrite H1; intros. InvEval. subst. rewrite Val.or_commut. TrivialExists. @@ -507,7 +507,7 @@ Theorem eval_divuimm: exists v, eval_expr ge sp e m le (divuimm a n) v /\ Val.lessdef z v. Proof. intros; unfold divuimm. - destruct (Int.is_power2 n) as []_eqn. + destruct (Int.is_power2 n) eqn:?. replace z with (Val.shru x (Vint i)). apply eval_shruimm; auto. eapply Val.divu_pow2; eauto. TrivialExists. @@ -533,7 +533,7 @@ Theorem eval_moduimm: exists v, eval_expr ge sp e m le (moduimm a n) v /\ Val.lessdef z v. Proof. intros; unfold moduimm. - destruct (Int.is_power2 n) as []_eqn. + destruct (Int.is_power2 n) eqn:?. replace z with (Val.and x (Vint (Int.sub n Int.one))). apply eval_andimm; auto. eapply Val.modu_pow2; eauto. exploit Val.modu_divu; eauto. intros [v [A B]]. @@ -758,7 +758,7 @@ Theorem eval_intuoffloat: exists v, eval_expr ge sp e m le (intuoffloat a) v /\ Val.lessdef y v. Proof. intros. destruct x; simpl in H0; try discriminate. - destruct (Float.intuoffloat f) as [n|]_eqn; simpl in H0; inv H0. + destruct (Float.intuoffloat f) as [n|] eqn:?; simpl in H0; inv H0. exists (Vint n); split; auto. unfold intuoffloat. set (im := Int.repr Int.half_modulus). set (fm := Float.floatofintu im). @@ -770,7 +770,7 @@ Proof. econstructor. instantiate (1 := Vfloat fm). EvalOp. eapply eval_Econdition with (vb := Float.cmp Clt f fm). eauto with evalexpr. auto. - destruct (Float.cmp Clt f fm) as []_eqn. + destruct (Float.cmp Clt f fm) eqn:?. exploit Float.intuoffloat_intoffloat_1; eauto. intro EQ. EvalOp. simpl. rewrite EQ; auto. exploit Float.intuoffloat_intoffloat_2; eauto. -- cgit v1.2.3