summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Sewell2018-07-27 18:52:40 +0100
committerPeter Sewell2018-07-27 18:52:40 +0100
commit34c745ff78a409daeddf4b5a78e28c85c62eb6fd (patch)
treee9f391cab299f83953a489992de590cbb220c983
parent4c84c70eafbbf9bea475e3264f21eedc3555021f (diff)
Revert "wib" (mistaken delete of sail_latexcc)
This reverts commit 4c84c70eafbbf9bea475e3264f21eedc3555021f.
-rw-r--r--cheri/Makefile9
-rw-r--r--cheri/sail_latexcc/commands.tex544
-rw-r--r--cheri/sail_latexcc/sailccBitStr.tex1
-rw-r--r--cheri/sail_latexcc/sailccCPtrCmpOp.tex10
-rw-r--r--cheri/sail_latexcc/sailccCPtrCmpOpofnum.tex1
-rw-r--r--cheri/sail_latexcc/sailccCapLen.tex1
-rw-r--r--cheri/sail_latexcc/sailccCapReg.tex1
-rw-r--r--cheri/sail_latexcc/sailccCapStruct.tex22
-rw-r--r--cheri/sail_latexcc/sailccClearRegSet.tex6
-rw-r--r--cheri/sail_latexcc/sailccClearRegSetofnum.tex1
-rw-r--r--cheri/sail_latexcc/sailccHighestSetBit.tex1
-rw-r--r--cheri/sail_latexcc/sailccMIPSread.tex1
-rw-r--r--cheri/sail_latexcc/sailccMIPSwrite.tex1
-rw-r--r--cheri/sail_latexcc/sailccReadRAM.tex2
-rw-r--r--cheri/sail_latexcc/sailccWriteRAM.tex2
-rw-r--r--cheri/sail_latexcc/sailccabsatom.tex7
-rw-r--r--cheri/sail_latexcc/sailccabsint.tex6
-rw-r--r--cheri/sail_latexcc/sailccaddatom.tex2
-rw-r--r--cheri/sail_latexcc/sailccaddbits.tex6
-rw-r--r--cheri/sail_latexcc/sailccaddbitsint.tex6
-rw-r--r--cheri/sail_latexcc/sailccaddint.tex1
-rw-r--r--cheri/sail_latexcc/sailccaddrange.tex2
-rw-r--r--cheri/sail_latexcc/sailccaddvec.tex1
-rw-r--r--cheri/sail_latexcc/sailccaddvecint.tex1
-rw-r--r--cheri/sail_latexcc/sailccandbits.tex1
-rw-r--r--cheri/sail_latexcc/sailccandbool.tex1
-rw-r--r--cheri/sail_latexcc/sailccappend.tex1
-rw-r--r--cheri/sail_latexcc/sailccappendsixfour.tex1
-rw-r--r--cheri/sail_latexcc/sailccatopcorrection.tex1
-rw-r--r--cheri/sail_latexcc/sailccbits.tex1
-rw-r--r--cheri/sail_latexcc/sailccbitstobool.tex1
-rw-r--r--cheri/sail_latexcc/sailccbittobool.tex1
-rw-r--r--cheri/sail_latexcc/sailccbitvectoraccess.tex6
-rw-r--r--cheri/sail_latexcc/sailccbitvectorconcat.tex2
-rw-r--r--cheri/sail_latexcc/sailccbitvectorlength.tex1
-rw-r--r--cheri/sail_latexcc/sailccbitvectorupdate.tex6
-rw-r--r--cheri/sail_latexcc/sailccbooltobits.tex1
-rw-r--r--cheri/sail_latexcc/sailcccapRegToCapStruct.tex1
-rw-r--r--cheri/sail_latexcc/sailcccapStructToCapReg.tex1
-rw-r--r--cheri/sail_latexcc/sailcccapStructToMemBits.tex1
-rw-r--r--cheri/sail_latexcc/sailcccapStructToMemBitsonetwoeight.tex1
-rw-r--r--cheri/sail_latexcc/sailcccastunitvec.tex1
-rw-r--r--cheri/sail_latexcc/sailcccomputeE.tex1
-rw-r--r--cheri/sail_latexcc/sailccconcatstr.tex1
-rw-r--r--cheri/sail_latexcc/sailccdiv.tex7
-rw-r--r--cheri/sail_latexcc/sailccdivint.tex7
-rw-r--r--cheri/sail_latexcc/sailcceqanything.tex1
-rw-r--r--cheri/sail_latexcc/sailcceqatom.tex1
-rw-r--r--cheri/sail_latexcc/sailcceqbit.tex1
-rw-r--r--cheri/sail_latexcc/sailcceqbits.tex6
-rw-r--r--cheri/sail_latexcc/sailcceqbittwo.tex1
-rw-r--r--cheri/sail_latexcc/sailcceqbool.tex1
-rw-r--r--cheri/sail_latexcc/sailcceqint.tex1
-rw-r--r--cheri/sail_latexcc/sailcceqrange.tex1
-rw-r--r--cheri/sail_latexcc/sailccfastRepCheck.tex1
-rw-r--r--cheri/sail_latexcc/sailccfnCPtrCmpOpofnum.tex10
-rw-r--r--cheri/sail_latexcc/sailccfnClearRegSetofnum.tex6
-rw-r--r--cheri/sail_latexcc/sailccfnHighestSetBit.tex5
-rw-r--r--cheri/sail_latexcc/sailccfnMIPSread.tex1
-rw-r--r--cheri/sail_latexcc/sailccfnMIPSwrite.tex1
-rw-r--r--cheri/sail_latexcc/sailccfnatopcorrection.tex7
-rw-r--r--cheri/sail_latexcc/sailccfnbitstobool.tex1
-rw-r--r--cheri/sail_latexcc/sailccfnbittobool.tex4
-rw-r--r--cheri/sail_latexcc/sailccfnbooltobits.tex1
-rw-r--r--cheri/sail_latexcc/sailccfncapRegToCapStruct.tex27
-rw-r--r--cheri/sail_latexcc/sailccfncapStructToCapReg.tex2
-rw-r--r--cheri/sail_latexcc/sailccfncapStructToMemBits.tex2
-rw-r--r--cheri/sail_latexcc/sailccfncapStructToMemBitsonetwoeight.tex12
-rw-r--r--cheri/sail_latexcc/sailccfncastunitvec.tex4
-rw-r--r--cheri/sail_latexcc/sailccfncomputeE.tex7
-rw-r--r--cheri/sail_latexcc/sailccfnfastRepCheck.tex23
-rw-r--r--cheri/sail_latexcc/sailccfngetCapBase.tex10
-rw-r--r--cheri/sail_latexcc/sailccfngetCapCursor.tex1
-rw-r--r--cheri/sail_latexcc/sailccfngetCapHardPerms.tex12
-rw-r--r--cheri/sail_latexcc/sailccfngetCapLength.tex6
-rw-r--r--cheri/sail_latexcc/sailccfngetCapOffset.tex3
-rw-r--r--cheri/sail_latexcc/sailccfngetCapPerms.tex5
-rw-r--r--cheri/sail_latexcc/sailccfngetCapTop.tex11
-rw-r--r--cheri/sail_latexcc/sailccfnincCapOffset.tex5
-rw-r--r--cheri/sail_latexcc/sailccfninttocap.tex2
-rw-r--r--cheri/sail_latexcc/sailccfnisnone.tex4
-rw-r--r--cheri/sail_latexcc/sailccfnissome.tex4
-rw-r--r--cheri/sail_latexcc/sailccfnmask.tex1
-rw-r--r--cheri/sail_latexcc/sailccfnmemBitsToCapBits.tex2
-rw-r--r--cheri/sail_latexcc/sailccfnmemBitsToCapBitsonetwoeight.tex2
-rw-r--r--cheri/sail_latexcc/sailccfnmipssignextend.tex1
-rw-r--r--cheri/sail_latexcc/sailccfnmipszzeroextend.tex1
-rw-r--r--cheri/sail_latexcc/sailccfnneqanything.tex1
-rw-r--r--cheri/sail_latexcc/sailccfnneqatom.tex1
-rw-r--r--cheri/sail_latexcc/sailccfnneqbool.tex1
-rw-r--r--cheri/sail_latexcc/sailccfnneqint.tex1
-rw-r--r--cheri/sail_latexcc/sailccfnneqrange.tex1
-rw-r--r--cheri/sail_latexcc/sailccfnneqvec.tex1
-rw-r--r--cheri/sail_latexcc/sailccfnnumofCPtrCmpOp.tex10
-rw-r--r--cheri/sail_latexcc/sailccfnnumofClearRegSet.tex6
-rw-r--r--cheri/sail_latexcc/sailccfnones.tex1
-rw-r--r--cheri/sail_latexcc/sailccfnroundUp.tex5
-rw-r--r--cheri/sail_latexcc/sailccfnsailmask.tex1
-rw-r--r--cheri/sail_latexcc/sailccfnsealCap.tex5
-rw-r--r--cheri/sail_latexcc/sailccfnsetCapBounds.tex13
-rw-r--r--cheri/sail_latexcc/sailccfnsetCapOffset.tex6
-rw-r--r--cheri/sail_latexcc/sailccfnsetCapPerms.tex16
-rw-r--r--cheri/sail_latexcc/sailccfntobits.tex1
-rw-r--r--cheri/sail_latexcc/sailccfnzeightoperatorzzerozIsznine.tex1
-rw-r--r--cheri/sail_latexcc/sailccfnzeightoperatorzzerozIuznine.tex1
-rw-r--r--cheri/sail_latexcc/sailccfnzeightoperatorzzerozKzJsznine.tex1
-rw-r--r--cheri/sail_latexcc/sailccfnzeightoperatorzzerozKzJuznine.tex1
-rw-r--r--cheri/sail_latexcc/sailccfnzeightoperatorzzerozQzQznine.tex1
-rw-r--r--cheri/sail_latexcc/sailccfnzzeros.tex1
-rw-r--r--cheri/sail_latexcc/sailccgetCapBase.tex1
-rw-r--r--cheri/sail_latexcc/sailccgetCapCursor.tex1
-rw-r--r--cheri/sail_latexcc/sailccgetCapHardPerms.tex1
-rw-r--r--cheri/sail_latexcc/sailccgetCapLength.tex1
-rw-r--r--cheri/sail_latexcc/sailccgetCapOffset.tex1
-rw-r--r--cheri/sail_latexcc/sailccgetCapPerms.tex1
-rw-r--r--cheri/sail_latexcc/sailccgetCapTop.tex1
-rw-r--r--cheri/sail_latexcc/sailccgetsliceint.tex1
-rw-r--r--cheri/sail_latexcc/sailccgettimens.tex1
-rw-r--r--cheri/sail_latexcc/sailccgtatom.tex1
-rw-r--r--cheri/sail_latexcc/sailccgtatomrange.tex1
-rw-r--r--cheri/sail_latexcc/sailccgteqatom.tex1
-rw-r--r--cheri/sail_latexcc/sailccgteqatomrange.tex1
-rw-r--r--cheri/sail_latexcc/sailccgteqint.tex1
-rw-r--r--cheri/sail_latexcc/sailccgteqrangeatom.tex1
-rw-r--r--cheri/sail_latexcc/sailccgtint.tex1
-rw-r--r--cheri/sail_latexcc/sailccgtrangeatom.tex1
-rw-r--r--cheri/sail_latexcc/sailccincCapOffset.tex1
-rw-r--r--cheri/sail_latexcc/sailccintpower.tex1
-rw-r--r--cheri/sail_latexcc/sailccinttocap.tex1
-rw-r--r--cheri/sail_latexcc/sailccisnone.tex1
-rw-r--r--cheri/sail_latexcc/sailccissome.tex1
-rw-r--r--cheri/sail_latexcc/sailcclength.tex1
-rw-r--r--cheri/sail_latexcc/sailccltatom.tex1
-rw-r--r--cheri/sail_latexcc/sailccltatomrange.tex1
-rw-r--r--cheri/sail_latexcc/sailcclteqatom.tex1
-rw-r--r--cheri/sail_latexcc/sailcclteqatomrange.tex1
-rw-r--r--cheri/sail_latexcc/sailcclteqint.tex1
-rw-r--r--cheri/sail_latexcc/sailcclteqrangeatom.tex1
-rw-r--r--cheri/sail_latexcc/sailccltint.tex1
-rw-r--r--cheri/sail_latexcc/sailccltrangeatom.tex1
-rw-r--r--cheri/sail_latexcc/sailccmask.tex1
-rw-r--r--cheri/sail_latexcc/sailccmax.tex1
-rw-r--r--cheri/sail_latexcc/sailccmaxatom.tex1
-rw-r--r--cheri/sail_latexcc/sailccmaxint.tex1
-rw-r--r--cheri/sail_latexcc/sailccmaxnat.tex1
-rw-r--r--cheri/sail_latexcc/sailccmemBitsToCapBits.tex1
-rw-r--r--cheri/sail_latexcc/sailccmemBitsToCapBitsonetwoeight.tex1
-rw-r--r--cheri/sail_latexcc/sailccmin.tex1
-rw-r--r--cheri/sail_latexcc/sailccminatom.tex1
-rw-r--r--cheri/sail_latexcc/sailccminint.tex1
-rw-r--r--cheri/sail_latexcc/sailccminnat.tex1
-rw-r--r--cheri/sail_latexcc/sailccmipssignextend.tex1
-rw-r--r--cheri/sail_latexcc/sailccmipszzeroextend.tex1
-rw-r--r--cheri/sail_latexcc/sailccmod.tex7
-rw-r--r--cheri/sail_latexcc/sailccmodint.tex7
-rw-r--r--cheri/sail_latexcc/sailccmodulus.tex1
-rw-r--r--cheri/sail_latexcc/sailccmultatom.tex2
-rw-r--r--cheri/sail_latexcc/sailccmultint.tex1
-rw-r--r--cheri/sail_latexcc/sailccnegate.tex1
-rw-r--r--cheri/sail_latexcc/sailccnegateatom.tex1
-rw-r--r--cheri/sail_latexcc/sailccnegateint.tex1
-rw-r--r--cheri/sail_latexcc/sailccnegaterange.tex1
-rw-r--r--cheri/sail_latexcc/sailccneqanything.tex1
-rw-r--r--cheri/sail_latexcc/sailccneqatom.tex1
-rw-r--r--cheri/sail_latexcc/sailccneqbool.tex1
-rw-r--r--cheri/sail_latexcc/sailccneqint.tex1
-rw-r--r--cheri/sail_latexcc/sailccneqrange.tex1
-rw-r--r--cheri/sail_latexcc/sailccneqvec.tex1
-rw-r--r--cheri/sail_latexcc/sailccnot.tex1
-rw-r--r--cheri/sail_latexcc/sailccnotbool.tex1
-rw-r--r--cheri/sail_latexcc/sailccnotvec.tex1
-rw-r--r--cheri/sail_latexcc/sailccnumofCPtrCmpOp.tex1
-rw-r--r--cheri/sail_latexcc/sailccnumofClearRegSet.tex1
-rw-r--r--cheri/sail_latexcc/sailccones.tex1
-rw-r--r--cheri/sail_latexcc/sailccorbits.tex1
-rw-r--r--cheri/sail_latexcc/sailccorbool.tex1
-rw-r--r--cheri/sail_latexcc/sailccplainvectoraccess.tex6
-rw-r--r--cheri/sail_latexcc/sailccplainvectorupdate.tex6
-rw-r--r--cheri/sail_latexcc/sailccpowtwo.tex1
-rw-r--r--cheri/sail_latexcc/sailccprerrbits.tex1
-rw-r--r--cheri/sail_latexcc/sailccprerrendline.tex1
-rw-r--r--cheri/sail_latexcc/sailccprerrint.tex1
-rw-r--r--cheri/sail_latexcc/sailccprerrstring.tex1
-rw-r--r--cheri/sail_latexcc/sailccprint.tex1
-rw-r--r--cheri/sail_latexcc/sailccprintbits.tex1
-rw-r--r--cheri/sail_latexcc/sailccprintint.tex1
-rw-r--r--cheri/sail_latexcc/sailccputchar.tex1
-rw-r--r--cheri/sail_latexcc/sailccquotient.tex1
-rw-r--r--cheri/sail_latexcc/sailccquotientnat.tex1
-rw-r--r--cheri/sail_latexcc/sailccquotroundzzero.tex1
-rw-r--r--cheri/sail_latexcc/sailccregderef.tex1
-rw-r--r--cheri/sail_latexcc/sailccremroundzzero.tex1
-rw-r--r--cheri/sail_latexcc/sailccreplicatebits.tex1
-rw-r--r--cheri/sail_latexcc/sailccroundUp.tex1
-rw-r--r--cheri/sail_latexcc/sailccsailccnegatev.tex1
-rw-r--r--cheri/sail_latexcc/sailccsailccregderefv.tex1
-rw-r--r--cheri/sail_latexcc/sailccsailccsailccsailcczeightoperatorzzerozJzJzninevvv.tex1
-rw-r--r--cheri/sail_latexcc/sailccsailccsailcczeightoperatorzzerozBzninevv.tex1
-rw-r--r--cheri/sail_latexcc/sailccsailccsailcczeightoperatorzzerozFzninevv.tex1
-rw-r--r--cheri/sail_latexcc/sailccsailccsailcczeightoperatorzzerozJzJzninevv.tex1
-rw-r--r--cheri/sail_latexcc/sailccsailccsailcczeightoperatorzzerozfivezninevv.tex1
-rw-r--r--cheri/sail_latexcc/sailccsailcczeightoperatorzzerozAzninev.tex1
-rw-r--r--cheri/sail_latexcc/sailccsailcczeightoperatorzzerozBzninev.tex1
-rw-r--r--cheri/sail_latexcc/sailccsailcczeightoperatorzzerozDzninev.tex1
-rw-r--r--cheri/sail_latexcc/sailccsailcczeightoperatorzzerozFzninev.tex1
-rw-r--r--cheri/sail_latexcc/sailccsailcczeightoperatorzzerozJzJzninev.tex1
-rw-r--r--cheri/sail_latexcc/sailccsailcczeightoperatorzzerozQzninev.tex1
-rw-r--r--cheri/sail_latexcc/sailccsailcczeightoperatorzzerozUzninev.tex1
-rw-r--r--cheri/sail_latexcc/sailccsailcczeightoperatorzzerozfivezninev.tex1
-rw-r--r--cheri/sail_latexcc/sailccsailcczeightoperatorzzerozonezJzninev.tex1
-rw-r--r--cheri/sail_latexcc/sailccsailcczeightoperatorzzerozsixzninev.tex1
-rw-r--r--cheri/sail_latexcc/sailccsailmask.tex1
-rw-r--r--cheri/sail_latexcc/sailccsailsignextend.tex1
-rw-r--r--cheri/sail_latexcc/sailccsailzzeroextend.tex1
-rw-r--r--cheri/sail_latexcc/sailccsailzzeros.tex1
-rw-r--r--cheri/sail_latexcc/sailccsealCap.tex1
-rw-r--r--cheri/sail_latexcc/sailccsetCapBounds.tex1
-rw-r--r--cheri/sail_latexcc/sailccsetCapOffset.tex1
-rw-r--r--cheri/sail_latexcc/sailccsetCapPerms.tex1
-rw-r--r--cheri/sail_latexcc/sailccsetslicebits.tex2
-rw-r--r--cheri/sail_latexcc/sailccsetsliceint.tex1
-rw-r--r--cheri/sail_latexcc/sailccshiftbitsleft.tex1
-rw-r--r--cheri/sail_latexcc/sailccshiftbitsright.tex1
-rw-r--r--cheri/sail_latexcc/sailccshiftl.tex1
-rw-r--r--cheri/sail_latexcc/sailccshiftr.tex1
-rw-r--r--cheri/sail_latexcc/sailccshlint.tex1
-rw-r--r--cheri/sail_latexcc/sailccshrint.tex1
-rw-r--r--cheri/sail_latexcc/sailccsigned.tex4
-rw-r--r--cheri/sail_latexcc/sailccsignextend.tex1
-rw-r--r--cheri/sail_latexcc/sailccslice.tex2
-rw-r--r--cheri/sail_latexcc/sailccstringofint.tex1
-rw-r--r--cheri/sail_latexcc/sailccsubatom.tex2
-rw-r--r--cheri/sail_latexcc/sailccsubint.tex1
-rw-r--r--cheri/sail_latexcc/sailccsubrange.tex2
-rw-r--r--cheri/sail_latexcc/sailccsubvec.tex1
-rw-r--r--cheri/sail_latexcc/sailccsubvecint.tex1
-rw-r--r--cheri/sail_latexcc/sailcctobits.tex1
-rw-r--r--cheri/sail_latexcc/sailcctruncate.tex6
-rw-r--r--cheri/sail_latexcc/sailccuintsixfour.tex1
-rw-r--r--cheri/sail_latexcc/sailccunsigned.tex7
-rw-r--r--cheri/sail_latexcc/sailccvectoraccess.tex1
-rw-r--r--cheri/sail_latexcc/sailccvectorlength.tex6
-rw-r--r--cheri/sail_latexcc/sailccvectorsubrange.tex7
-rw-r--r--cheri/sail_latexcc/sailccvectorupdate.tex1
-rw-r--r--cheri/sail_latexcc/sailccvectorupdatesubrange.tex6
-rw-r--r--cheri/sail_latexcc/sailccxorvec.tex1
-rw-r--r--cheri/sail_latexcc/sailcczW.tex1
-rw-r--r--cheri/sail_latexcc/sailcczeightoperatorzzerozAsznine.tex1
-rw-r--r--cheri/sail_latexcc/sailcczeightoperatorzzerozAuznine.tex1
-rw-r--r--cheri/sail_latexcc/sailcczeightoperatorzzerozAznine.tex1
-rw-r--r--cheri/sail_latexcc/sailcczeightoperatorzzerozBznine.tex1
-rw-r--r--cheri/sail_latexcc/sailcczeightoperatorzzerozDznine.tex1
-rw-r--r--cheri/sail_latexcc/sailcczeightoperatorzzerozFznine.tex1
-rw-r--r--cheri/sail_latexcc/sailcczeightoperatorzzerozIsznine.tex1
-rw-r--r--cheri/sail_latexcc/sailcczeightoperatorzzerozIuznine.tex1
-rw-r--r--cheri/sail_latexcc/sailcczeightoperatorzzerozIzIznine.tex1
-rw-r--r--cheri/sail_latexcc/sailcczeightoperatorzzerozIzJznine.tex1
-rw-r--r--cheri/sail_latexcc/sailcczeightoperatorzzerozIznine.tex1
-rw-r--r--cheri/sail_latexcc/sailcczeightoperatorzzerozJzJznine.tex1
-rw-r--r--cheri/sail_latexcc/sailcczeightoperatorzzerozKzJsznine.tex1
-rw-r--r--cheri/sail_latexcc/sailcczeightoperatorzzerozKzJuznine.tex1
-rw-r--r--cheri/sail_latexcc/sailcczeightoperatorzzerozKzJznine.tex1
-rw-r--r--cheri/sail_latexcc/sailcczeightoperatorzzerozKzKsznine.tex1
-rw-r--r--cheri/sail_latexcc/sailcczeightoperatorzzerozKzKznine.tex1
-rw-r--r--cheri/sail_latexcc/sailcczeightoperatorzzerozKznine.tex1
-rw-r--r--cheri/sail_latexcc/sailcczeightoperatorzzerozQzQznine.tex1
-rw-r--r--cheri/sail_latexcc/sailcczeightoperatorzzerozQznine.tex1
-rw-r--r--cheri/sail_latexcc/sailcczeightoperatorzzerozUznine.tex1
-rw-r--r--cheri/sail_latexcc/sailcczeightoperatorzzerozfiveznine.tex1
-rw-r--r--cheri/sail_latexcc/sailcczeightoperatorzzerozonezJznine.tex1
-rw-r--r--cheri/sail_latexcc/sailcczeightoperatorzzerozsixznine.tex1
-rw-r--r--cheri/sail_latexcc/sailcczzeroextend.tex1
-rw-r--r--cheri/sail_latexcc/sailcczzeros.tex1
273 files changed, 1165 insertions, 9 deletions
diff --git a/cheri/Makefile b/cheri/Makefile
index 3074cd96..0d207391 100644
--- a/cheri/Makefile
+++ b/cheri/Makefile
@@ -61,15 +61,6 @@ latex_256: $(CHERI_SAILS)
latex: latex_128 latex_256
-# to install latex in the right place - specific to PS checkouts
-CHERI_ARCH_PATH=/home/pes20/ctsrd/ctsrd/reports/cheri-architecture
-install_latex:
- rm -rf $(CHERI_ARCH_PATH)/sail_latex/*.tex
- cp sail_latex/*.tex $(CHERI_ARCH_PATH)/sail_latex
-
-#rm -rf $(CHERI_ARCH_PATH)/sail_latexcc/*.tex
-#cp sail_latexcc/*.tex $(CHERI_ARCH_PATH)/sail_latexcc
-
cheri128: $(CHERI128_SAILS) $(CHERI_MAIN)
$(SAIL) -ocaml -o $@ $^
diff --git a/cheri/sail_latexcc/commands.tex b/cheri/sail_latexcc/commands.tex
new file mode 100644
index 00000000..8b9678a1
--- /dev/null
+++ b/cheri/sail_latexcc/commands.tex
@@ -0,0 +1,544 @@
+\newcommand{\sailccsailccregderefv}{\label{zregzyderef} \lstinputlisting[language=sail]{sail_latexcc/sailccsailccregderefv.tex}}
+
+\newcommand{\sailccregderef}{\label{zzyregzyderef} \lstinputlisting[language=sail]{sail_latexcc/sailccregderef.tex}}
+
+\newcommand{\sailcceqbittwo}{\label{zeqzybittwo} \lstinputlisting[language=sail]{sail_latexcc/sailcceqbittwo.tex}}
+
+\newcommand{\sailccsailccsailccsailcczeightoperatorzzerozJzJzninevvv}{\label{zzeightoperatorzzerozJzJznine} \lstinputlisting[language=sail]{sail_latexcc/sailccsailccsailccsailcczeightoperatorzzerozJzJzninevvv.tex}}
+
+\newcommand{\sailccdiv}{\label{zdiv} \lstinputlisting[language=sail]{sail_latexcc/sailccdiv.tex}}
+
+\newcommand{\sailccsailccsailcczeightoperatorzzerozFzninevv}{\label{zzeightoperatorzzerozFznine} \lstinputlisting[language=sail]{sail_latexcc/sailccsailccsailcczeightoperatorzzerozFzninevv.tex}}
+
+\newcommand{\sailccmod}{\label{zmod} \lstinputlisting[language=sail]{sail_latexcc/sailccmod.tex}}
+
+\newcommand{\sailccsailccsailcczeightoperatorzzerozfivezninevv}{\label{zzeightoperatorzzerozfiveznine} \lstinputlisting[language=sail]{sail_latexcc/sailccsailccsailcczeightoperatorzzerozfivezninevv.tex}}
+
+\newcommand{\sailccabsatom}{\label{zabszyatom} \lstinputlisting[language=sail]{sail_latexcc/sailccabsatom.tex}}
+
+\newcommand{\sailccnotbool}{\label{znotzybool} \lstinputlisting[language=sail]{sail_latexcc/sailccnotbool.tex}}
+
+\newcommand{\sailccandbool}{\label{zandzybool} \lstinputlisting[language=sail]{sail_latexcc/sailccandbool.tex}}
+
+\newcommand{\sailccorbool}{\label{zorzybool} \lstinputlisting[language=sail]{sail_latexcc/sailccorbool.tex}}
+
+\newcommand{\sailcceqatom}{\label{zeqzyatom} \lstinputlisting[language=sail]{sail_latexcc/sailcceqatom.tex}}
+
+\newcommand{\sailccneqatom}{\label{zneqzyatom} \lstinputlisting[language=sail]{sail_latexcc/sailccneqatom.tex}}
+
+\newcommand{\sailccfnneqatom}{\label{zneqzyatom} \lstinputlisting[language=sail]{sail_latexcc/sailccfnneqatom.tex}}
+
+\newcommand{\sailcclteqatom}{\label{zlteqzyatom} \lstinputlisting[language=sail]{sail_latexcc/sailcclteqatom.tex}}
+
+\newcommand{\sailccgteqatom}{\label{zgteqzyatom} \lstinputlisting[language=sail]{sail_latexcc/sailccgteqatom.tex}}
+
+\newcommand{\sailccltatom}{\label{zltzyatom} \lstinputlisting[language=sail]{sail_latexcc/sailccltatom.tex}}
+
+\newcommand{\sailccgtatom}{\label{zgtzyatom} \lstinputlisting[language=sail]{sail_latexcc/sailccgtatom.tex}}
+
+\newcommand{\sailccltrangeatom}{\label{zltzyrangezyatom} \lstinputlisting[language=sail]{sail_latexcc/sailccltrangeatom.tex}}
+
+\newcommand{\sailcclteqrangeatom}{\label{zlteqzyrangezyatom} \lstinputlisting[language=sail]{sail_latexcc/sailcclteqrangeatom.tex}}
+
+\newcommand{\sailccgtrangeatom}{\label{zgtzyrangezyatom} \lstinputlisting[language=sail]{sail_latexcc/sailccgtrangeatom.tex}}
+
+\newcommand{\sailccgteqrangeatom}{\label{zgteqzyrangezyatom} \lstinputlisting[language=sail]{sail_latexcc/sailccgteqrangeatom.tex}}
+
+\newcommand{\sailccltatomrange}{\label{zltzyatomzyrange} \lstinputlisting[language=sail]{sail_latexcc/sailccltatomrange.tex}}
+
+\newcommand{\sailcclteqatomrange}{\label{zlteqzyatomzyrange} \lstinputlisting[language=sail]{sail_latexcc/sailcclteqatomrange.tex}}
+
+\newcommand{\sailccgtatomrange}{\label{zgtzyatomzyrange} \lstinputlisting[language=sail]{sail_latexcc/sailccgtatomrange.tex}}
+
+\newcommand{\sailccgteqatomrange}{\label{zgteqzyatomzyrange} \lstinputlisting[language=sail]{sail_latexcc/sailccgteqatomrange.tex}}
+
+\newcommand{\sailcceqrange}{\label{zeqzyrange} \lstinputlisting[language=sail]{sail_latexcc/sailcceqrange.tex}}
+
+\newcommand{\sailcceqint}{\label{zeqzyint} \lstinputlisting[language=sail]{sail_latexcc/sailcceqint.tex}}
+
+\newcommand{\sailcceqbool}{\label{zeqzybool} \lstinputlisting[language=sail]{sail_latexcc/sailcceqbool.tex}}
+
+\newcommand{\sailccneqrange}{\label{zneqzyrange} \lstinputlisting[language=sail]{sail_latexcc/sailccneqrange.tex}}
+
+\newcommand{\sailccfnneqrange}{\label{zneqzyrange} \lstinputlisting[language=sail]{sail_latexcc/sailccfnneqrange.tex}}
+
+\newcommand{\sailccneqint}{\label{zneqzyint} \lstinputlisting[language=sail]{sail_latexcc/sailccneqint.tex}}
+
+\newcommand{\sailccfnneqint}{\label{zneqzyint} \lstinputlisting[language=sail]{sail_latexcc/sailccfnneqint.tex}}
+
+\newcommand{\sailccneqbool}{\label{zneqzybool} \lstinputlisting[language=sail]{sail_latexcc/sailccneqbool.tex}}
+
+\newcommand{\sailccfnneqbool}{\label{zneqzybool} \lstinputlisting[language=sail]{sail_latexcc/sailccfnneqbool.tex}}
+
+\newcommand{\sailcclteqint}{\label{zlteqzyint} \lstinputlisting[language=sail]{sail_latexcc/sailcclteqint.tex}}
+
+\newcommand{\sailccgteqint}{\label{zgteqzyint} \lstinputlisting[language=sail]{sail_latexcc/sailccgteqint.tex}}
+
+\newcommand{\sailccltint}{\label{zltzyint} \lstinputlisting[language=sail]{sail_latexcc/sailccltint.tex}}
+
+\newcommand{\sailccgtint}{\label{zgtzyint} \lstinputlisting[language=sail]{sail_latexcc/sailccgtint.tex}}
+
+\newcommand{\sailccsailccsailcczeightoperatorzzerozJzJzninevv}{\label{zzeightoperatorzzerozJzJznine} \lstinputlisting[language=sail]{sail_latexcc/sailccsailccsailcczeightoperatorzzerozJzJzninevv.tex}}
+
+\newcommand{\sailccsailcczeightoperatorzzerozonezJzninev}{\label{zzeightoperatorzzerozonezJznine} \lstinputlisting[language=sail]{sail_latexcc/sailccsailcczeightoperatorzzerozonezJzninev.tex}}
+
+\newcommand{\sailccsailcczeightoperatorzzerozUzninev}{\label{zzeightoperatorzzerozUznine} \lstinputlisting[language=sail]{sail_latexcc/sailccsailcczeightoperatorzzerozUzninev.tex}}
+
+\newcommand{\sailccsailcczeightoperatorzzerozsixzninev}{\label{zzeightoperatorzzerozsixznine} \lstinputlisting[language=sail]{sail_latexcc/sailccsailcczeightoperatorzzerozsixzninev.tex}}
+
+\newcommand{\sailcczeightoperatorzzerozIzJznine}{\label{zzeightoperatorzzerozIzJznine} \lstinputlisting[language=sail]{sail_latexcc/sailcczeightoperatorzzerozIzJznine.tex}}
+
+\newcommand{\sailcczeightoperatorzzerozIznine}{\label{zzeightoperatorzzerozIznine} \lstinputlisting[language=sail]{sail_latexcc/sailcczeightoperatorzzerozIznine.tex}}
+
+\newcommand{\sailcczeightoperatorzzerozKzJznine}{\label{zzeightoperatorzzerozKzJznine} \lstinputlisting[language=sail]{sail_latexcc/sailcczeightoperatorzzerozKzJznine.tex}}
+
+\newcommand{\sailcczeightoperatorzzerozKznine}{\label{zzeightoperatorzzerozKznine} \lstinputlisting[language=sail]{sail_latexcc/sailcczeightoperatorzzerozKznine.tex}}
+
+\newcommand{\sailccaddatom}{\label{zaddzyatom} \lstinputlisting[language=sail]{sail_latexcc/sailccaddatom.tex}}
+
+\newcommand{\sailccaddint}{\label{zaddzyint} \lstinputlisting[language=sail]{sail_latexcc/sailccaddint.tex}}
+
+\newcommand{\sailccsailccsailcczeightoperatorzzerozBzninevv}{\label{zzeightoperatorzzerozBznine} \lstinputlisting[language=sail]{sail_latexcc/sailccsailccsailcczeightoperatorzzerozBzninevv.tex}}
+
+\newcommand{\sailccsubatom}{\label{zsubzyatom} \lstinputlisting[language=sail]{sail_latexcc/sailccsubatom.tex}}
+
+\newcommand{\sailccsubint}{\label{zsubzyint} \lstinputlisting[language=sail]{sail_latexcc/sailccsubint.tex}}
+
+\newcommand{\sailccsailcczeightoperatorzzerozDzninev}{\label{zzeightoperatorzzerozDznine} \lstinputlisting[language=sail]{sail_latexcc/sailccsailcczeightoperatorzzerozDzninev.tex}}
+
+\newcommand{\sailccnegateatom}{\label{znegatezyatom} \lstinputlisting[language=sail]{sail_latexcc/sailccnegateatom.tex}}
+
+\newcommand{\sailccnegateint}{\label{znegatezyint} \lstinputlisting[language=sail]{sail_latexcc/sailccnegateint.tex}}
+
+\newcommand{\sailccsailccnegatev}{\label{znegate} \lstinputlisting[language=sail]{sail_latexcc/sailccsailccnegatev.tex}}
+
+\newcommand{\sailccmultatom}{\label{zmultzyatom} \lstinputlisting[language=sail]{sail_latexcc/sailccmultatom.tex}}
+
+\newcommand{\sailccmultint}{\label{zmultzyint} \lstinputlisting[language=sail]{sail_latexcc/sailccmultint.tex}}
+
+\newcommand{\sailccsailcczeightoperatorzzerozAzninev}{\label{zzeightoperatorzzerozAznine} \lstinputlisting[language=sail]{sail_latexcc/sailccsailcczeightoperatorzzerozAzninev.tex}}
+
+\newcommand{\sailccprintint}{\label{zprintzyint} \lstinputlisting[language=sail]{sail_latexcc/sailccprintint.tex}}
+
+\newcommand{\sailccprerrint}{\label{zprerrzyint} \lstinputlisting[language=sail]{sail_latexcc/sailccprerrint.tex}}
+
+\newcommand{\sailccshlint}{\label{zshlzyint} \lstinputlisting[language=sail]{sail_latexcc/sailccshlint.tex}}
+
+\newcommand{\sailccshrint}{\label{zshrzyint} \lstinputlisting[language=sail]{sail_latexcc/sailccshrint.tex}}
+
+\newcommand{\sailccdivint}{\label{zdivzyint} \lstinputlisting[language=sail]{sail_latexcc/sailccdivint.tex}}
+
+\newcommand{\sailccsailcczeightoperatorzzerozFzninev}{\label{zzeightoperatorzzerozFznine} \lstinputlisting[language=sail]{sail_latexcc/sailccsailcczeightoperatorzzerozFzninev.tex}}
+
+\newcommand{\sailccmodint}{\label{zmodzyint} \lstinputlisting[language=sail]{sail_latexcc/sailccmodint.tex}}
+
+\newcommand{\sailccsailcczeightoperatorzzerozfivezninev}{\label{zzeightoperatorzzerozfiveznine} \lstinputlisting[language=sail]{sail_latexcc/sailccsailcczeightoperatorzzerozfivezninev.tex}}
+
+\newcommand{\sailccabsint}{\label{zabszyint} \lstinputlisting[language=sail]{sail_latexcc/sailccabsint.tex}}
+
+\newcommand{\sailccisnone}{\label{ziszynone} \lstinputlisting[language=sail]{sail_latexcc/sailccisnone.tex}}
+
+\newcommand{\sailccfnisnone}{\label{ziszynone} \lstinputlisting[language=sail]{sail_latexcc/sailccfnisnone.tex}}
+
+\newcommand{\sailccissome}{\label{ziszysome} \lstinputlisting[language=sail]{sail_latexcc/sailccissome.tex}}
+
+\newcommand{\sailccfnissome}{\label{ziszysome} \lstinputlisting[language=sail]{sail_latexcc/sailccfnissome.tex}}
+
+\newcommand{\sailccbits}{\label{zbits} \lstinputlisting[language=sail]{sail_latexcc/sailccbits.tex}}
+
+\newcommand{\sailcceqbit}{\label{zeqzybit} \lstinputlisting[language=sail]{sail_latexcc/sailcceqbit.tex}}
+
+\newcommand{\sailcceqbits}{\label{zeqzybits} \lstinputlisting[language=sail]{sail_latexcc/sailcceqbits.tex}}
+
+\newcommand{\sailccsailcczeightoperatorzzerozJzJzninev}{\label{zzeightoperatorzzerozJzJznine} \lstinputlisting[language=sail]{sail_latexcc/sailccsailcczeightoperatorzzerozJzJzninev.tex}}
+
+\newcommand{\sailccbitvectorlength}{\label{zbitvectorzylength} \lstinputlisting[language=sail]{sail_latexcc/sailccbitvectorlength.tex}}
+
+\newcommand{\sailccvectorlength}{\label{zvectorzylength} \lstinputlisting[language=sail]{sail_latexcc/sailccvectorlength.tex}}
+
+\newcommand{\sailcclength}{\label{zlength} \lstinputlisting[language=sail]{sail_latexcc/sailcclength.tex}}
+
+\newcommand{\sailccsailzzeros}{\label{zsailzyzzeros} \lstinputlisting[language=sail]{sail_latexcc/sailccsailzzeros.tex}}
+
+\newcommand{\sailccprintbits}{\label{zprintzybits} \lstinputlisting[language=sail]{sail_latexcc/sailccprintbits.tex}}
+
+\newcommand{\sailccprerrbits}{\label{zprerrzybits} \lstinputlisting[language=sail]{sail_latexcc/sailccprerrbits.tex}}
+
+\newcommand{\sailccsailsignextend}{\label{zsailzysignzyextend} \lstinputlisting[language=sail]{sail_latexcc/sailccsailsignextend.tex}}
+
+\newcommand{\sailccsailzzeroextend}{\label{zsailzyzzerozyextend} \lstinputlisting[language=sail]{sail_latexcc/sailccsailzzeroextend.tex}}
+
+\newcommand{\sailcctruncate}{\label{ztruncate} \lstinputlisting[language=sail]{sail_latexcc/sailcctruncate.tex}}
+
+\newcommand{\sailccsailmask}{\label{zsailzymask} \lstinputlisting[language=sail]{sail_latexcc/sailccsailmask.tex}}
+
+\newcommand{\sailccfnsailmask}{\label{zsailzymask} \lstinputlisting[language=sail]{sail_latexcc/sailccfnsailmask.tex}}
+
+\newcommand{\sailccsailcczeightoperatorzzerozQzninev}{\label{zzeightoperatorzzerozQznine} \lstinputlisting[language=sail]{sail_latexcc/sailccsailcczeightoperatorzzerozQzninev.tex}}
+
+\newcommand{\sailccbitvectorconcat}{\label{zbitvectorzyconcat} \lstinputlisting[language=sail]{sail_latexcc/sailccbitvectorconcat.tex}}
+
+\newcommand{\sailccappend}{\label{zappend} \lstinputlisting[language=sail]{sail_latexcc/sailccappend.tex}}
+
+\newcommand{\sailccappendsixfour}{\label{zappendzysixfour} \lstinputlisting[language=sail]{sail_latexcc/sailccappendsixfour.tex}}
+
+\newcommand{\sailccbitvectoraccess}{\label{zbitvectorzyaccess} \lstinputlisting[language=sail]{sail_latexcc/sailccbitvectoraccess.tex}}
+
+\newcommand{\sailccplainvectoraccess}{\label{zplainzyvectorzyaccess} \lstinputlisting[language=sail]{sail_latexcc/sailccplainvectoraccess.tex}}
+
+\newcommand{\sailccvectoraccess}{\label{zvectorzyaccess} \lstinputlisting[language=sail]{sail_latexcc/sailccvectoraccess.tex}}
+
+\newcommand{\sailccbitvectorupdate}{\label{zbitvectorzyupdate} \lstinputlisting[language=sail]{sail_latexcc/sailccbitvectorupdate.tex}}
+
+\newcommand{\sailccplainvectorupdate}{\label{zplainzyvectorzyupdate} \lstinputlisting[language=sail]{sail_latexcc/sailccplainvectorupdate.tex}}
+
+\newcommand{\sailccvectorupdate}{\label{zvectorzyupdate} \lstinputlisting[language=sail]{sail_latexcc/sailccvectorupdate.tex}}
+
+\newcommand{\sailccaddbits}{\label{zaddzybits} \lstinputlisting[language=sail]{sail_latexcc/sailccaddbits.tex}}
+
+\newcommand{\sailccaddbitsint}{\label{zaddzybitszyint} \lstinputlisting[language=sail]{sail_latexcc/sailccaddbitsint.tex}}
+
+\newcommand{\sailccsailcczeightoperatorzzerozBzninev}{\label{zzeightoperatorzzerozBznine} \lstinputlisting[language=sail]{sail_latexcc/sailccsailcczeightoperatorzzerozBzninev.tex}}
+
+\newcommand{\sailccvectorsubrange}{\label{zvectorzysubrange} \lstinputlisting[language=sail]{sail_latexcc/sailccvectorsubrange.tex}}
+
+\newcommand{\sailccvectorupdatesubrange}{\label{zvectorzyupdatezysubrange} \lstinputlisting[language=sail]{sail_latexcc/sailccvectorupdatesubrange.tex}}
+
+\newcommand{\sailccgetsliceint}{\label{zgetzyslicezyint} \lstinputlisting[language=sail]{sail_latexcc/sailccgetsliceint.tex}}
+
+\newcommand{\sailccsetsliceint}{\label{zsetzyslicezyint} \lstinputlisting[language=sail]{sail_latexcc/sailccsetsliceint.tex}}
+
+\newcommand{\sailccsetslicebits}{\label{zsetzyslicezybits} \lstinputlisting[language=sail]{sail_latexcc/sailccsetslicebits.tex}}
+
+\newcommand{\sailccslice}{\label{zslice} \lstinputlisting[language=sail]{sail_latexcc/sailccslice.tex}}
+
+\newcommand{\sailccreplicatebits}{\label{zreplicatezybits} \lstinputlisting[language=sail]{sail_latexcc/sailccreplicatebits.tex}}
+
+\newcommand{\sailccunsigned}{\label{zunsigned} \lstinputlisting[language=sail]{sail_latexcc/sailccunsigned.tex}}
+
+\newcommand{\sailccsigned}{\label{zsigned} \lstinputlisting[language=sail]{sail_latexcc/sailccsigned.tex}}
+
+\newcommand{\sailcceqanything}{\label{zeqzyanything} \lstinputlisting[language=sail]{sail_latexcc/sailcceqanything.tex}}
+
+\newcommand{\sailcczeightoperatorzzerozJzJznine}{\label{zzeightoperatorzzerozJzJznine} \lstinputlisting[language=sail]{sail_latexcc/sailcczeightoperatorzzerozJzJznine.tex}}
+
+\newcommand{\sailccnotvec}{\label{znotzyvec} \lstinputlisting[language=sail]{sail_latexcc/sailccnotvec.tex}}
+
+\newcommand{\sailcczW}{\label{zzW} \lstinputlisting[language=sail]{sail_latexcc/sailcczW.tex}}
+
+\newcommand{\sailccnot}{\label{znot} \lstinputlisting[language=sail]{sail_latexcc/sailccnot.tex}}
+
+\newcommand{\sailccneqvec}{\label{zneqzyvec} \lstinputlisting[language=sail]{sail_latexcc/sailccneqvec.tex}}
+
+\newcommand{\sailccfnneqvec}{\label{zneqzyvec} \lstinputlisting[language=sail]{sail_latexcc/sailccfnneqvec.tex}}
+
+\newcommand{\sailccneqanything}{\label{zneqzyanything} \lstinputlisting[language=sail]{sail_latexcc/sailccneqanything.tex}}
+
+\newcommand{\sailccfnneqanything}{\label{zneqzyanything} \lstinputlisting[language=sail]{sail_latexcc/sailccfnneqanything.tex}}
+
+\newcommand{\sailcczeightoperatorzzerozonezJznine}{\label{zzeightoperatorzzerozonezJznine} \lstinputlisting[language=sail]{sail_latexcc/sailcczeightoperatorzzerozonezJznine.tex}}
+
+\newcommand{\sailccandbits}{\label{zandzybits} \lstinputlisting[language=sail]{sail_latexcc/sailccandbits.tex}}
+
+\newcommand{\sailcczeightoperatorzzerozsixznine}{\label{zzeightoperatorzzerozsixznine} \lstinputlisting[language=sail]{sail_latexcc/sailcczeightoperatorzzerozsixznine.tex}}
+
+\newcommand{\sailccorbits}{\label{zorzybits} \lstinputlisting[language=sail]{sail_latexcc/sailccorbits.tex}}
+
+\newcommand{\sailcczeightoperatorzzerozUznine}{\label{zzeightoperatorzzerozUznine} \lstinputlisting[language=sail]{sail_latexcc/sailcczeightoperatorzzerozUznine.tex}}
+
+\newcommand{\sailcccastunitvec}{\label{zcastzyunitzyvec} \lstinputlisting[language=sail]{sail_latexcc/sailcccastunitvec.tex}}
+
+\newcommand{\sailccfncastunitvec}{\label{zcastzyunitzyvec} \lstinputlisting[language=sail]{sail_latexcc/sailccfncastunitvec.tex}}
+
+\newcommand{\sailccprint}{\label{zprint} \lstinputlisting[language=sail]{sail_latexcc/sailccprint.tex}}
+
+\newcommand{\sailccprerrendline}{\label{zprerrzyendline} \lstinputlisting[language=sail]{sail_latexcc/sailccprerrendline.tex}}
+
+\newcommand{\sailccprerrstring}{\label{zprerrzystring} \lstinputlisting[language=sail]{sail_latexcc/sailccprerrstring.tex}}
+
+\newcommand{\sailccputchar}{\label{zputchar} \lstinputlisting[language=sail]{sail_latexcc/sailccputchar.tex}}
+
+\newcommand{\sailccconcatstr}{\label{zconcatzystr} \lstinputlisting[language=sail]{sail_latexcc/sailccconcatstr.tex}}
+
+\newcommand{\sailccstringofint}{\label{zstringzyofzyint} \lstinputlisting[language=sail]{sail_latexcc/sailccstringofint.tex}}
+
+\newcommand{\sailccBitStr}{\label{zBitStr} \lstinputlisting[language=sail]{sail_latexcc/sailccBitStr.tex}}
+
+\newcommand{\sailccxorvec}{\label{zxorzyvec} \lstinputlisting[language=sail]{sail_latexcc/sailccxorvec.tex}}
+
+\newcommand{\sailccintpower}{\label{zintzypower} \lstinputlisting[language=sail]{sail_latexcc/sailccintpower.tex}}
+
+\newcommand{\sailcczeightoperatorzzerozQznine}{\label{zzeightoperatorzzerozQznine} \lstinputlisting[language=sail]{sail_latexcc/sailcczeightoperatorzzerozQznine.tex}}
+
+\newcommand{\sailccaddrange}{\label{zaddzyrange} \lstinputlisting[language=sail]{sail_latexcc/sailccaddrange.tex}}
+
+\newcommand{\sailccaddvec}{\label{zaddzyvec} \lstinputlisting[language=sail]{sail_latexcc/sailccaddvec.tex}}
+
+\newcommand{\sailccaddvecint}{\label{zaddzyveczyint} \lstinputlisting[language=sail]{sail_latexcc/sailccaddvecint.tex}}
+
+\newcommand{\sailcczeightoperatorzzerozBznine}{\label{zzeightoperatorzzerozBznine} \lstinputlisting[language=sail]{sail_latexcc/sailcczeightoperatorzzerozBznine.tex}}
+
+\newcommand{\sailccsubrange}{\label{zsubzyrange} \lstinputlisting[language=sail]{sail_latexcc/sailccsubrange.tex}}
+
+\newcommand{\sailccsubvec}{\label{zsubzyvec} \lstinputlisting[language=sail]{sail_latexcc/sailccsubvec.tex}}
+
+\newcommand{\sailccsubvecint}{\label{zsubzyveczyint} \lstinputlisting[language=sail]{sail_latexcc/sailccsubvecint.tex}}
+
+\newcommand{\sailccnegaterange}{\label{znegatezyrange} \lstinputlisting[language=sail]{sail_latexcc/sailccnegaterange.tex}}
+
+\newcommand{\sailcczeightoperatorzzerozDznine}{\label{zzeightoperatorzzerozDznine} \lstinputlisting[language=sail]{sail_latexcc/sailcczeightoperatorzzerozDznine.tex}}
+
+\newcommand{\sailccnegate}{\label{znegate} \lstinputlisting[language=sail]{sail_latexcc/sailccnegate.tex}}
+
+\newcommand{\sailcczeightoperatorzzerozAznine}{\label{zzeightoperatorzzerozAznine} \lstinputlisting[language=sail]{sail_latexcc/sailcczeightoperatorzzerozAznine.tex}}
+
+\newcommand{\sailccquotientnat}{\label{zquotientzynat} \lstinputlisting[language=sail]{sail_latexcc/sailccquotientnat.tex}}
+
+\newcommand{\sailccquotient}{\label{zquotient} \lstinputlisting[language=sail]{sail_latexcc/sailccquotient.tex}}
+
+\newcommand{\sailcczeightoperatorzzerozFznine}{\label{zzeightoperatorzzerozFznine} \lstinputlisting[language=sail]{sail_latexcc/sailcczeightoperatorzzerozFznine.tex}}
+
+\newcommand{\sailccquotroundzzero}{\label{zquotzyroundzyzzero} \lstinputlisting[language=sail]{sail_latexcc/sailccquotroundzzero.tex}}
+
+\newcommand{\sailccremroundzzero}{\label{zremzyroundzyzzero} \lstinputlisting[language=sail]{sail_latexcc/sailccremroundzzero.tex}}
+
+\newcommand{\sailccmodulus}{\label{zmodulus} \lstinputlisting[language=sail]{sail_latexcc/sailccmodulus.tex}}
+
+\newcommand{\sailcczeightoperatorzzerozfiveznine}{\label{zzeightoperatorzzerozfiveznine} \lstinputlisting[language=sail]{sail_latexcc/sailcczeightoperatorzzerozfiveznine.tex}}
+
+\newcommand{\sailccminnat}{\label{zminzynat} \lstinputlisting[language=sail]{sail_latexcc/sailccminnat.tex}}
+
+\newcommand{\sailccminint}{\label{zminzyint} \lstinputlisting[language=sail]{sail_latexcc/sailccminint.tex}}
+
+\newcommand{\sailccmaxnat}{\label{zmaxzynat} \lstinputlisting[language=sail]{sail_latexcc/sailccmaxnat.tex}}
+
+\newcommand{\sailccmaxint}{\label{zmaxzyint} \lstinputlisting[language=sail]{sail_latexcc/sailccmaxint.tex}}
+
+\newcommand{\sailccminatom}{\label{zminzyatom} \lstinputlisting[language=sail]{sail_latexcc/sailccminatom.tex}}
+
+\newcommand{\sailccmaxatom}{\label{zmaxzyatom} \lstinputlisting[language=sail]{sail_latexcc/sailccmaxatom.tex}}
+
+\newcommand{\sailccmin}{\label{zmin} \lstinputlisting[language=sail]{sail_latexcc/sailccmin.tex}}
+
+\newcommand{\sailccmax}{\label{zmax} \lstinputlisting[language=sail]{sail_latexcc/sailccmax.tex}}
+
+\newcommand{\sailccWriteRAM}{\label{zzyzyWriteRAM} \lstinputlisting[language=sail]{sail_latexcc/sailccWriteRAM.tex}}
+
+\newcommand{\sailccMIPSwrite}{\label{zzyzyMIPSzywrite} \lstinputlisting[language=sail]{sail_latexcc/sailccMIPSwrite.tex}}
+
+\newcommand{\sailccfnMIPSwrite}{\label{zzyzyMIPSzywrite} \lstinputlisting[language=sail]{sail_latexcc/sailccfnMIPSwrite.tex}}
+
+\newcommand{\sailccReadRAM}{\label{zzyzyReadRAM} \lstinputlisting[language=sail]{sail_latexcc/sailccReadRAM.tex}}
+
+\newcommand{\sailccMIPSread}{\label{zzyzyMIPSzyread} \lstinputlisting[language=sail]{sail_latexcc/sailccMIPSread.tex}}
+
+\newcommand{\sailccfnMIPSread}{\label{zzyzyMIPSzyread} \lstinputlisting[language=sail]{sail_latexcc/sailccfnMIPSread.tex}}
+
+\newcommand{\sailcczeightoperatorzzerozQzQznine}{\label{zzeightoperatorzzerozQzQznine} \lstinputlisting[language=sail]{sail_latexcc/sailcczeightoperatorzzerozQzQznine.tex}}
+
+\newcommand{\sailccfnzeightoperatorzzerozQzQznine}{\label{zzeightoperatorzzerozQzQznine} \lstinputlisting[language=sail]{sail_latexcc/sailccfnzeightoperatorzzerozQzQznine.tex}}
+
+\newcommand{\sailccpowtwo}{\label{zpowtwo} \lstinputlisting[language=sail]{sail_latexcc/sailccpowtwo.tex}}
+
+\newcommand{\sailccmipssignextend}{\label{zmipszysignzyextend} \lstinputlisting[language=sail]{sail_latexcc/sailccmipssignextend.tex}}
+
+\newcommand{\sailccmipszzeroextend}{\label{zmipszyzzerozyextend} \lstinputlisting[language=sail]{sail_latexcc/sailccmipszzeroextend.tex}}
+
+\newcommand{\sailccfnmipssignextend}{\label{zmipszysignzyextend} \lstinputlisting[language=sail]{sail_latexcc/sailccfnmipssignextend.tex}}
+
+\newcommand{\sailccfnmipszzeroextend}{\label{zmipszyzzerozyextend} \lstinputlisting[language=sail]{sail_latexcc/sailccfnmipszzeroextend.tex}}
+
+\newcommand{\sailccsignextend}{\label{zsignzyextend} \lstinputlisting[language=sail]{sail_latexcc/sailccsignextend.tex}}
+
+\newcommand{\sailcczzeroextend}{\label{zzzerozyextend} \lstinputlisting[language=sail]{sail_latexcc/sailcczzeroextend.tex}}
+
+\newcommand{\sailcczzeros}{\label{zzzeros} \lstinputlisting[language=sail]{sail_latexcc/sailcczzeros.tex}}
+
+\newcommand{\sailccfnzzeros}{\label{zzzeros} \lstinputlisting[language=sail]{sail_latexcc/sailccfnzzeros.tex}}
+
+\newcommand{\sailccones}{\label{zones} \lstinputlisting[language=sail]{sail_latexcc/sailccones.tex}}
+
+\newcommand{\sailccfnones}{\label{zones} \lstinputlisting[language=sail]{sail_latexcc/sailccfnones.tex}}
+
+\newcommand{\sailcczeightoperatorzzerozIsznine}{\label{zzeightoperatorzzerozIzysznine} \lstinputlisting[language=sail]{sail_latexcc/sailcczeightoperatorzzerozIsznine.tex}}
+
+\newcommand{\sailcczeightoperatorzzerozKzJsznine}{\label{zzeightoperatorzzerozKzJzysznine} \lstinputlisting[language=sail]{sail_latexcc/sailcczeightoperatorzzerozKzJsznine.tex}}
+
+\newcommand{\sailcczeightoperatorzzerozIuznine}{\label{zzeightoperatorzzerozIzyuznine} \lstinputlisting[language=sail]{sail_latexcc/sailcczeightoperatorzzerozIuznine.tex}}
+
+\newcommand{\sailcczeightoperatorzzerozKzJuznine}{\label{zzeightoperatorzzerozKzJzyuznine} \lstinputlisting[language=sail]{sail_latexcc/sailcczeightoperatorzzerozKzJuznine.tex}}
+
+\newcommand{\sailccfnzeightoperatorzzerozIsznine}{\label{zzeightoperatorzzerozIzysznine} \lstinputlisting[language=sail]{sail_latexcc/sailccfnzeightoperatorzzerozIsznine.tex}}
+
+\newcommand{\sailccfnzeightoperatorzzerozKzJsznine}{\label{zzeightoperatorzzerozKzJzysznine} \lstinputlisting[language=sail]{sail_latexcc/sailccfnzeightoperatorzzerozKzJsznine.tex}}
+
+\newcommand{\sailccfnzeightoperatorzzerozIuznine}{\label{zzeightoperatorzzerozIzyuznine} \lstinputlisting[language=sail]{sail_latexcc/sailccfnzeightoperatorzzerozIuznine.tex}}
+
+\newcommand{\sailccfnzeightoperatorzzerozKzJuznine}{\label{zzeightoperatorzzerozKzJzyuznine} \lstinputlisting[language=sail]{sail_latexcc/sailccfnzeightoperatorzzerozKzJuznine.tex}}
+
+\newcommand{\sailccbooltobits}{\label{zboolzytozybits} \lstinputlisting[language=sail]{sail_latexcc/sailccbooltobits.tex}}
+
+\newcommand{\sailccfnbooltobits}{\label{zboolzytozybits} \lstinputlisting[language=sail]{sail_latexcc/sailccfnbooltobits.tex}}
+
+\newcommand{\sailccbittobool}{\label{zbitzytozybool} \lstinputlisting[language=sail]{sail_latexcc/sailccbittobool.tex}}
+
+\newcommand{\sailccfnbittobool}{\label{zbitzytozybool} \lstinputlisting[language=sail]{sail_latexcc/sailccfnbittobool.tex}}
+
+\newcommand{\sailccbitstobool}{\label{zbitszytozybool} \lstinputlisting[language=sail]{sail_latexcc/sailccbitstobool.tex}}
+
+\newcommand{\sailccfnbitstobool}{\label{zbitszytozybool} \lstinputlisting[language=sail]{sail_latexcc/sailccfnbitstobool.tex}}
+
+\newcommand{\sailccshiftbitsright}{\label{zshiftzybitszyright} \lstinputlisting[language=sail]{sail_latexcc/sailccshiftbitsright.tex}}
+
+\newcommand{\sailccshiftbitsleft}{\label{zshiftzybitszyleft} \lstinputlisting[language=sail]{sail_latexcc/sailccshiftbitsleft.tex}}
+
+\newcommand{\sailccshiftl}{\label{zshiftl} \lstinputlisting[language=sail]{sail_latexcc/sailccshiftl.tex}}
+
+\newcommand{\sailccshiftr}{\label{zshiftr} \lstinputlisting[language=sail]{sail_latexcc/sailccshiftr.tex}}
+
+\newcommand{\sailcczeightoperatorzzerozKzKznine}{\label{zzeightoperatorzzerozKzKznine} \lstinputlisting[language=sail]{sail_latexcc/sailcczeightoperatorzzerozKzKznine.tex}}
+
+\newcommand{\sailcczeightoperatorzzerozIzIznine}{\label{zzeightoperatorzzerozIzIznine} \lstinputlisting[language=sail]{sail_latexcc/sailcczeightoperatorzzerozIzIznine.tex}}
+
+\newcommand{\sailcczeightoperatorzzerozKzKsznine}{\label{zzeightoperatorzzerozKzKzysznine} \lstinputlisting[language=sail]{sail_latexcc/sailcczeightoperatorzzerozKzKsznine.tex}}
+
+\newcommand{\sailcczeightoperatorzzerozAsznine}{\label{zzeightoperatorzzerozAzysznine} \lstinputlisting[language=sail]{sail_latexcc/sailcczeightoperatorzzerozAsznine.tex}}
+
+\newcommand{\sailcczeightoperatorzzerozAuznine}{\label{zzeightoperatorzzerozAzyuznine} \lstinputlisting[language=sail]{sail_latexcc/sailcczeightoperatorzzerozAuznine.tex}}
+
+\newcommand{\sailcctobits}{\label{ztozybits}
+\function{to\_bits} converts an integer to a bit vector of given length. If the integer is negative a twos-complement representation is used. If the integer is too large (or too negative) to fit in the requested length then it is truncated to the least significant bits.
+\lstinputlisting[language=sail]{sail_latexcc/sailcctobits.tex}}
+
+\newcommand{\sailccfntobits}{\label{ztozybits} \lstinputlisting[language=sail]{sail_latexcc/sailccfntobits.tex}}
+
+\newcommand{\sailccmask}{\label{zmask} \lstinputlisting[language=sail]{sail_latexcc/sailccmask.tex}}
+
+\newcommand{\sailccfnmask}{\label{zmask} \lstinputlisting[language=sail]{sail_latexcc/sailccfnmask.tex}}
+
+\newcommand{\sailccgettimens}{\label{zgetzytimezyns} \lstinputlisting[language=sail]{sail_latexcc/sailccgettimens.tex}}
+
+\newcommand{\sailccCapLen}{\label{zCapLen} \lstinputlisting[language=sail]{sail_latexcc/sailccCapLen.tex}}
+
+\newcommand{\sailccuintsixfour}{\label{zuintsixfour} \lstinputlisting[language=sail]{sail_latexcc/sailccuintsixfour.tex}}
+
+\newcommand{\sailccCPtrCmpOp}{\label{zCPtrCmpOp} \lstinputlisting[language=sail]{sail_latexcc/sailccCPtrCmpOp.tex}}
+
+\newcommand{\sailccCPtrCmpOpofnum}{\label{zCPtrCmpOpzyofzynum} \lstinputlisting[language=sail]{sail_latexcc/sailccCPtrCmpOpofnum.tex}}
+
+\newcommand{\sailccfnCPtrCmpOpofnum}{\label{zCPtrCmpOpzyofzynum} \lstinputlisting[language=sail]{sail_latexcc/sailccfnCPtrCmpOpofnum.tex}}
+
+\newcommand{\sailccnumofCPtrCmpOp}{\label{znumzyofzyCPtrCmpOp} \lstinputlisting[language=sail]{sail_latexcc/sailccnumofCPtrCmpOp.tex}}
+
+\newcommand{\sailccfnnumofCPtrCmpOp}{\label{znumzyofzyCPtrCmpOp} \lstinputlisting[language=sail]{sail_latexcc/sailccfnnumofCPtrCmpOp.tex}}
+
+\newcommand{\sailccClearRegSet}{\label{zClearRegSet} \lstinputlisting[language=sail]{sail_latexcc/sailccClearRegSet.tex}}
+
+\newcommand{\sailccClearRegSetofnum}{\label{zClearRegSetzyofzynum} \lstinputlisting[language=sail]{sail_latexcc/sailccClearRegSetofnum.tex}}
+
+\newcommand{\sailccfnClearRegSetofnum}{\label{zClearRegSetzyofzynum} \lstinputlisting[language=sail]{sail_latexcc/sailccfnClearRegSetofnum.tex}}
+
+\newcommand{\sailccnumofClearRegSet}{\label{znumzyofzyClearRegSet} \lstinputlisting[language=sail]{sail_latexcc/sailccnumofClearRegSet.tex}}
+
+\newcommand{\sailccfnnumofClearRegSet}{\label{znumzyofzyClearRegSet} \lstinputlisting[language=sail]{sail_latexcc/sailccfnnumofClearRegSet.tex}}
+
+\newcommand{\sailccCapReg}{\label{zCapReg} \lstinputlisting[language=sail]{sail_latexcc/sailccCapReg.tex}}
+
+\newcommand{\sailccCapStruct}{\label{zCapStruct} \lstinputlisting[language=sail]{sail_latexcc/sailccCapStruct.tex}}
+
+\newcommand{\sailcccapRegToCapStruct}{\label{zcapRegToCapStruct} \lstinputlisting[language=sail]{sail_latexcc/sailcccapRegToCapStruct.tex}}
+
+\newcommand{\sailccfncapRegToCapStruct}{\label{zcapRegToCapStruct} \lstinputlisting[language=sail]{sail_latexcc/sailccfncapRegToCapStruct.tex}}
+
+\newcommand{\sailccgetCapHardPerms}{\label{zgetCapHardPerms} \lstinputlisting[language=sail]{sail_latexcc/sailccgetCapHardPerms.tex}}
+
+\newcommand{\sailccfngetCapHardPerms}{\label{zgetCapHardPerms} \lstinputlisting[language=sail]{sail_latexcc/sailccfngetCapHardPerms.tex}}
+
+\newcommand{\sailcccapStructToMemBitsonetwoeight}{\label{zcapStructToMemBitsonetwoeight} \lstinputlisting[language=sail]{sail_latexcc/sailcccapStructToMemBitsonetwoeight.tex}}
+
+\newcommand{\sailccfncapStructToMemBitsonetwoeight}{\label{zcapStructToMemBitsonetwoeight} \lstinputlisting[language=sail]{sail_latexcc/sailccfncapStructToMemBitsonetwoeight.tex}}
+
+\newcommand{\sailcccapStructToCapReg}{\label{zcapStructToCapReg} \lstinputlisting[language=sail]{sail_latexcc/sailcccapStructToCapReg.tex}}
+
+\newcommand{\sailccfncapStructToCapReg}{\label{zcapStructToCapReg} \lstinputlisting[language=sail]{sail_latexcc/sailccfncapStructToCapReg.tex}}
+
+\newcommand{\sailccmemBitsToCapBitsonetwoeight}{\label{zmemBitsToCapBitsonetwoeight} \lstinputlisting[language=sail]{sail_latexcc/sailccmemBitsToCapBitsonetwoeight.tex}}
+
+\newcommand{\sailccfnmemBitsToCapBitsonetwoeight}{\label{zmemBitsToCapBitsonetwoeight} \lstinputlisting[language=sail]{sail_latexcc/sailccfnmemBitsToCapBitsonetwoeight.tex}}
+
+\newcommand{\sailcccapStructToMemBits}{\label{zcapStructToMemBits} \lstinputlisting[language=sail]{sail_latexcc/sailcccapStructToMemBits.tex}}
+
+\newcommand{\sailccfncapStructToMemBits}{\label{zcapStructToMemBits} \lstinputlisting[language=sail]{sail_latexcc/sailccfncapStructToMemBits.tex}}
+
+\newcommand{\sailccmemBitsToCapBits}{\label{zmemBitsToCapBits} \lstinputlisting[language=sail]{sail_latexcc/sailccmemBitsToCapBits.tex}}
+
+\newcommand{\sailccfnmemBitsToCapBits}{\label{zmemBitsToCapBits} \lstinputlisting[language=sail]{sail_latexcc/sailccfnmemBitsToCapBits.tex}}
+
+\newcommand{\sailccgetCapPerms}{\label{zgetCapPerms} \lstinputlisting[language=sail]{sail_latexcc/sailccgetCapPerms.tex}}
+
+\newcommand{\sailccfngetCapPerms}{\label{zgetCapPerms} \lstinputlisting[language=sail]{sail_latexcc/sailccfngetCapPerms.tex}}
+
+\newcommand{\sailccsetCapPerms}{\label{zsetCapPerms} \lstinputlisting[language=sail]{sail_latexcc/sailccsetCapPerms.tex}}
+
+\newcommand{\sailccfnsetCapPerms}{\label{zsetCapPerms} \lstinputlisting[language=sail]{sail_latexcc/sailccfnsetCapPerms.tex}}
+
+\newcommand{\sailccsealCap}{\label{zsealCap} \lstinputlisting[language=sail]{sail_latexcc/sailccsealCap.tex}}
+
+\newcommand{\sailccfnsealCap}{\label{zsealCap} \lstinputlisting[language=sail]{sail_latexcc/sailccfnsealCap.tex}}
+
+\newcommand{\sailccatopcorrection}{\label{zazytopzycorrection} \lstinputlisting[language=sail]{sail_latexcc/sailccatopcorrection.tex}}
+
+\newcommand{\sailccfnatopcorrection}{\label{zazytopzycorrection} \lstinputlisting[language=sail]{sail_latexcc/sailccfnatopcorrection.tex}}
+
+\newcommand{\sailccgetCapBase}{\label{zgetCapBase} \lstinputlisting[language=sail]{sail_latexcc/sailccgetCapBase.tex}}
+
+\newcommand{\sailccfngetCapBase}{\label{zgetCapBase} \lstinputlisting[language=sail]{sail_latexcc/sailccfngetCapBase.tex}}
+
+\newcommand{\sailccgetCapTop}{\label{zgetCapTop} \lstinputlisting[language=sail]{sail_latexcc/sailccgetCapTop.tex}}
+
+\newcommand{\sailccfngetCapTop}{\label{zgetCapTop} \lstinputlisting[language=sail]{sail_latexcc/sailccfngetCapTop.tex}}
+
+\newcommand{\sailccgetCapOffset}{\label{zgetCapOffset} \lstinputlisting[language=sail]{sail_latexcc/sailccgetCapOffset.tex}}
+
+\newcommand{\sailccfngetCapOffset}{\label{zgetCapOffset} \lstinputlisting[language=sail]{sail_latexcc/sailccfngetCapOffset.tex}}
+
+\newcommand{\sailccgetCapLength}{\label{zgetCapLength} \lstinputlisting[language=sail]{sail_latexcc/sailccgetCapLength.tex}}
+
+\newcommand{\sailccfngetCapLength}{\label{zgetCapLength} \lstinputlisting[language=sail]{sail_latexcc/sailccfngetCapLength.tex}}
+
+\newcommand{\sailccgetCapCursor}{\label{zgetCapCursor} \lstinputlisting[language=sail]{sail_latexcc/sailccgetCapCursor.tex}}
+
+\newcommand{\sailccfngetCapCursor}{\label{zgetCapCursor} \lstinputlisting[language=sail]{sail_latexcc/sailccfngetCapCursor.tex}}
+
+\newcommand{\sailccfastRepCheck}{\label{zfastRepCheck} \lstinputlisting[language=sail]{sail_latexcc/sailccfastRepCheck.tex}}
+
+\newcommand{\sailccfnfastRepCheck}{\label{zfastRepCheck} \lstinputlisting[language=sail]{sail_latexcc/sailccfnfastRepCheck.tex}}
+
+\newcommand{\sailccsetCapOffset}{\label{zsetCapOffset} \lstinputlisting[language=sail]{sail_latexcc/sailccsetCapOffset.tex}}
+
+\newcommand{\sailccfnsetCapOffset}{\label{zsetCapOffset} \lstinputlisting[language=sail]{sail_latexcc/sailccfnsetCapOffset.tex}}
+
+\newcommand{\sailccincCapOffset}{\label{zincCapOffset} \lstinputlisting[language=sail]{sail_latexcc/sailccincCapOffset.tex}}
+
+\newcommand{\sailccfnincCapOffset}{\label{zincCapOffset} \lstinputlisting[language=sail]{sail_latexcc/sailccfnincCapOffset.tex}}
+
+\newcommand{\sailccHighestSetBit}{\label{zHighestSetBit} \lstinputlisting[language=sail]{sail_latexcc/sailccHighestSetBit.tex}}
+
+\newcommand{\sailccfnHighestSetBit}{\label{zHighestSetBit} \lstinputlisting[language=sail]{sail_latexcc/sailccfnHighestSetBit.tex}}
+
+\newcommand{\sailccroundUp}{\label{zroundUp} \lstinputlisting[language=sail]{sail_latexcc/sailccroundUp.tex}}
+
+\newcommand{\sailccfnroundUp}{\label{zroundUp} \lstinputlisting[language=sail]{sail_latexcc/sailccfnroundUp.tex}}
+
+\newcommand{\sailcccomputeE}{\label{zcomputeE} \lstinputlisting[language=sail]{sail_latexcc/sailcccomputeE.tex}}
+
+\newcommand{\sailccfncomputeE}{\label{zcomputeE} \lstinputlisting[language=sail]{sail_latexcc/sailccfncomputeE.tex}}
+
+\newcommand{\sailccsetCapBounds}{\label{zsetCapBounds} \lstinputlisting[language=sail]{sail_latexcc/sailccsetCapBounds.tex}}
+
+\newcommand{\sailccfnsetCapBounds}{\label{zsetCapBounds} \lstinputlisting[language=sail]{sail_latexcc/sailccfnsetCapBounds.tex}}
+
+\newcommand{\sailccinttocap}{\label{zintzytozycap} \lstinputlisting[language=sail]{sail_latexcc/sailccinttocap.tex}}
+
+\newcommand{\sailccfninttocap}{\label{zintzytozycap} \lstinputlisting[language=sail]{sail_latexcc/sailccfninttocap.tex}}
+
diff --git a/cheri/sail_latexcc/sailccBitStr.tex b/cheri/sail_latexcc/sailccBitStr.tex
new file mode 100644
index 00000000..a0d408ab
--- /dev/null
+++ b/cheri/sail_latexcc/sailccBitStr.tex
@@ -0,0 +1 @@
+val BitStr = "string_of_bits" : forall 'n. #\hyperref[zbits]{bits}#('n) -> string
diff --git a/cheri/sail_latexcc/sailccCPtrCmpOp.tex b/cheri/sail_latexcc/sailccCPtrCmpOp.tex
new file mode 100644
index 00000000..cb0a73ae
--- /dev/null
+++ b/cheri/sail_latexcc/sailccCPtrCmpOp.tex
@@ -0,0 +1,10 @@
+enum CPtrCmpOp = {
+ CEQ,
+ CNE,
+ CLT,
+ CLE,
+ CLTU,
+ CLEU,
+ CEXEQ,
+ CNEXEQ
+}
diff --git a/cheri/sail_latexcc/sailccCPtrCmpOpofnum.tex b/cheri/sail_latexcc/sailccCPtrCmpOpofnum.tex
new file mode 100644
index 00000000..bd6ca31c
--- /dev/null
+++ b/cheri/sail_latexcc/sailccCPtrCmpOpofnum.tex
@@ -0,0 +1 @@
+val CPtrCmpOp_of_num : forall ('e : Int), 0 <= 'e & 'e <= 7. atom('e) -> CPtrCmpOp
diff --git a/cheri/sail_latexcc/sailccCapLen.tex b/cheri/sail_latexcc/sailccCapLen.tex
new file mode 100644
index 00000000..812f45ff
--- /dev/null
+++ b/cheri/sail_latexcc/sailccCapLen.tex
@@ -0,0 +1 @@
+type CapLen = range(0, 2 ^ 65)
diff --git a/cheri/sail_latexcc/sailccCapReg.tex b/cheri/sail_latexcc/sailccCapReg.tex
new file mode 100644
index 00000000..702141d9
--- /dev/null
+++ b/cheri/sail_latexcc/sailccCapReg.tex
@@ -0,0 +1 @@
+type CapReg = #\hyperref[zbits]{bits}#(129)
diff --git a/cheri/sail_latexcc/sailccCapStruct.tex b/cheri/sail_latexcc/sailccCapStruct.tex
new file mode 100644
index 00000000..b1df7ec5
--- /dev/null
+++ b/cheri/sail_latexcc/sailccCapStruct.tex
@@ -0,0 +1,22 @@
+struct CapStruct = {
+ tag : bool ,
+ uperms : #\hyperref[zbits]{bits}#(4) ,
+ access_system_regs : bool ,
+ permit_unseal : bool ,
+ permit_ccall : bool ,
+ permit_seal : bool ,
+ permit_store_local_cap : bool ,
+ permit_store_cap : bool ,
+ permit_load_cap : bool ,
+ permit_store : bool ,
+ permit_load : bool ,
+ permit_execute : bool ,
+ global : bool ,
+ reserved : #\hyperref[zbits]{bits}#(2) ,
+ E : #\hyperref[zbits]{bits}#(6) ,
+ sealed : bool ,
+ B : #\hyperref[zbits]{bits}#(20),
+ T : #\hyperref[zbits]{bits}#(20),
+ otype : #\hyperref[zbits]{bits}#(24),
+ address : #\hyperref[zbits]{bits}#(64)
+}
diff --git a/cheri/sail_latexcc/sailccClearRegSet.tex b/cheri/sail_latexcc/sailccClearRegSet.tex
new file mode 100644
index 00000000..c04ea7d4
--- /dev/null
+++ b/cheri/sail_latexcc/sailccClearRegSet.tex
@@ -0,0 +1,6 @@
+enum ClearRegSet = {
+GPLo,
+GPHi,
+CLo,
+CHi
+}
diff --git a/cheri/sail_latexcc/sailccClearRegSetofnum.tex b/cheri/sail_latexcc/sailccClearRegSetofnum.tex
new file mode 100644
index 00000000..c73d36d9
--- /dev/null
+++ b/cheri/sail_latexcc/sailccClearRegSetofnum.tex
@@ -0,0 +1 @@
+val ClearRegSet_of_num : forall ('e : Int), 0 <= 'e & 'e <= 3. atom('e) -> ClearRegSet
diff --git a/cheri/sail_latexcc/sailccHighestSetBit.tex b/cheri/sail_latexcc/sailccHighestSetBit.tex
new file mode 100644
index 00000000..eb8a5e36
--- /dev/null
+++ b/cheri/sail_latexcc/sailccHighestSetBit.tex
@@ -0,0 +1 @@
+val HighestSetBit : forall 'N , 'N >= 2. #\hyperref[zbits]{bits}#('N) -> {'n, 0 <= 'n < 'N . (bool, atom('n))}
diff --git a/cheri/sail_latexcc/sailccMIPSread.tex b/cheri/sail_latexcc/sailccMIPSread.tex
new file mode 100644
index 00000000..92ca59cc
--- /dev/null
+++ b/cheri/sail_latexcc/sailccMIPSread.tex
@@ -0,0 +1 @@
+val __MIPS_read : forall 'n, 'n >= 0. (#\hyperref[zbits]{bits}#(64), atom('n)) -> #\hyperref[zbits]{bits}#(8 * 'n) effect {rmem}
diff --git a/cheri/sail_latexcc/sailccMIPSwrite.tex b/cheri/sail_latexcc/sailccMIPSwrite.tex
new file mode 100644
index 00000000..cc67fa20
--- /dev/null
+++ b/cheri/sail_latexcc/sailccMIPSwrite.tex
@@ -0,0 +1 @@
+val __MIPS_write : forall 'n. (#\hyperref[zbits]{bits}#(64), atom('n), #\hyperref[zbits]{bits}#(8 * 'n)) -> unit effect {wmv}
diff --git a/cheri/sail_latexcc/sailccReadRAM.tex b/cheri/sail_latexcc/sailccReadRAM.tex
new file mode 100644
index 00000000..68d629a6
--- /dev/null
+++ b/cheri/sail_latexcc/sailccReadRAM.tex
@@ -0,0 +1,2 @@
+val __ReadRAM = "read_ram" : forall 'n 'm, 'n >= 0.
+ (atom('m), atom('n), #\hyperref[zbits]{bits}#('m), #\hyperref[zbits]{bits}#('m)) -> #\hyperref[zbits]{bits}#(8 * 'n) effect {rmem}
diff --git a/cheri/sail_latexcc/sailccWriteRAM.tex b/cheri/sail_latexcc/sailccWriteRAM.tex
new file mode 100644
index 00000000..2ed4aca2
--- /dev/null
+++ b/cheri/sail_latexcc/sailccWriteRAM.tex
@@ -0,0 +1,2 @@
+val __WriteRAM = "write_ram" : forall 'n 'm.
+ (atom('m), atom('n), #\hyperref[zbits]{bits}#('m), #\hyperref[zbits]{bits}#('m), #\hyperref[zbits]{bits}#(8 * 'n)) -> bool effect {wmv}
diff --git a/cheri/sail_latexcc/sailccabsatom.tex b/cheri/sail_latexcc/sailccabsatom.tex
new file mode 100644
index 00000000..5164ef32
--- /dev/null
+++ b/cheri/sail_latexcc/sailccabsatom.tex
@@ -0,0 +1,7 @@
+val abs_atom = {
+ smt : "abs",
+ ocaml: "abs_int",
+ lem: "abs_int",
+ c: "abs_int",
+ coq: "abs_with_eq"
+} : forall 'n. atom('n) -> {'o, 'o = #\hyperref[zabszyatom]{abs\_atom}#('n). atom('o)}
diff --git a/cheri/sail_latexcc/sailccabsint.tex b/cheri/sail_latexcc/sailccabsint.tex
new file mode 100644
index 00000000..d3b67cfb
--- /dev/null
+++ b/cheri/sail_latexcc/sailccabsint.tex
@@ -0,0 +1,6 @@
+val abs_int = {
+ smt : "abs",
+ ocaml: "abs_int",
+ lem: "abs_int",
+ coq: "Z.abs"
+} : (int, int) -> int
diff --git a/cheri/sail_latexcc/sailccaddatom.tex b/cheri/sail_latexcc/sailccaddatom.tex
new file mode 100644
index 00000000..8b6ac810
--- /dev/null
+++ b/cheri/sail_latexcc/sailccaddatom.tex
@@ -0,0 +1,2 @@
+val add_atom = {ocaml: "add_int", lem: "integerAdd", c: "add_int", coq: "Z.add"} : forall 'n 'm.
+ (atom('n), atom('m)) -> atom('n + 'm)
diff --git a/cheri/sail_latexcc/sailccaddbits.tex b/cheri/sail_latexcc/sailccaddbits.tex
new file mode 100644
index 00000000..95f653d1
--- /dev/null
+++ b/cheri/sail_latexcc/sailccaddbits.tex
@@ -0,0 +1,6 @@
+val add_bits = {
+ ocaml: "add_vec",
+ lem: "add_vec",
+ c: "add_bits",
+ coq: "add_vec"
+} : forall 'n. (#\hyperref[zbits]{bits}#('n), #\hyperref[zbits]{bits}#('n)) -> #\hyperref[zbits]{bits}#('n)
diff --git a/cheri/sail_latexcc/sailccaddbitsint.tex b/cheri/sail_latexcc/sailccaddbitsint.tex
new file mode 100644
index 00000000..ee9a8aa2
--- /dev/null
+++ b/cheri/sail_latexcc/sailccaddbitsint.tex
@@ -0,0 +1,6 @@
+val add_bits_int = {
+ ocaml: "add_vec_int",
+ lem: "add_vec_int",
+ c: "add_bits_int",
+ coq: "add_vec_int"
+} : forall 'n. (#\hyperref[zbits]{bits}#('n), int) -> #\hyperref[zbits]{bits}#('n)
diff --git a/cheri/sail_latexcc/sailccaddint.tex b/cheri/sail_latexcc/sailccaddint.tex
new file mode 100644
index 00000000..9fe5b078
--- /dev/null
+++ b/cheri/sail_latexcc/sailccaddint.tex
@@ -0,0 +1 @@
+val add_int = {ocaml: "add_int", lem: "integerAdd", c: "add_int", coq: "Z.add"} : (int, int) -> int
diff --git a/cheri/sail_latexcc/sailccaddrange.tex b/cheri/sail_latexcc/sailccaddrange.tex
new file mode 100644
index 00000000..fbf498b1
--- /dev/null
+++ b/cheri/sail_latexcc/sailccaddrange.tex
@@ -0,0 +1,2 @@
+val add_range = {ocaml: "add_int", lem: "integerAdd", coq: "add_range", c: "add_int"} : forall 'n 'm 'o 'p.
+ (range('n, 'm), range('o, 'p)) -> range('n + 'o, 'm + 'p)
diff --git a/cheri/sail_latexcc/sailccaddvec.tex b/cheri/sail_latexcc/sailccaddvec.tex
new file mode 100644
index 00000000..bb625afe
--- /dev/null
+++ b/cheri/sail_latexcc/sailccaddvec.tex
@@ -0,0 +1 @@
+val add_vec = "add_vec" : forall 'n. (#\hyperref[zbits]{bits}#('n), #\hyperref[zbits]{bits}#('n)) -> #\hyperref[zbits]{bits}#('n)
diff --git a/cheri/sail_latexcc/sailccaddvecint.tex b/cheri/sail_latexcc/sailccaddvecint.tex
new file mode 100644
index 00000000..189ad4aa
--- /dev/null
+++ b/cheri/sail_latexcc/sailccaddvecint.tex
@@ -0,0 +1 @@
+val add_vec_int = "add_vec_int" : forall 'n. (#\hyperref[zbits]{bits}#('n), int) -> #\hyperref[zbits]{bits}#('n)
diff --git a/cheri/sail_latexcc/sailccandbits.tex b/cheri/sail_latexcc/sailccandbits.tex
new file mode 100644
index 00000000..8e35bd5b
--- /dev/null
+++ b/cheri/sail_latexcc/sailccandbits.tex
@@ -0,0 +1 @@
+val and_bits = {c:"and_bits", _: "and_vec"} : forall 'n. (#\hyperref[zbits]{bits}#('n), #\hyperref[zbits]{bits}#('n)) -> #\hyperref[zbits]{bits}#('n)
diff --git a/cheri/sail_latexcc/sailccandbool.tex b/cheri/sail_latexcc/sailccandbool.tex
new file mode 100644
index 00000000..926dce9f
--- /dev/null
+++ b/cheri/sail_latexcc/sailccandbool.tex
@@ -0,0 +1 @@
+val and_bool = {coq: "andb", _: "and_bool"} : (bool, bool) -> bool
diff --git a/cheri/sail_latexcc/sailccappend.tex b/cheri/sail_latexcc/sailccappend.tex
new file mode 100644
index 00000000..56c12116
--- /dev/null
+++ b/cheri/sail_latexcc/sailccappend.tex
@@ -0,0 +1 @@
+overload append = {bitvector_concat} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailccappendsixfour.tex b/cheri/sail_latexcc/sailccappendsixfour.tex
new file mode 100644
index 00000000..633593b3
--- /dev/null
+++ b/cheri/sail_latexcc/sailccappendsixfour.tex
@@ -0,0 +1 @@
+val "append_64" : forall 'n. (#\hyperref[zbits]{bits}#('n), #\hyperref[zbits]{bits}#(64)) -> #\hyperref[zbits]{bits}#('n + 64)
diff --git a/cheri/sail_latexcc/sailccatopcorrection.tex b/cheri/sail_latexcc/sailccatopcorrection.tex
new file mode 100644
index 00000000..13bbaf7b
--- /dev/null
+++ b/cheri/sail_latexcc/sailccatopcorrection.tex
@@ -0,0 +1 @@
+val a_top_correction : (bits(20), bits(20), bits(20)) -> bits(65)
diff --git a/cheri/sail_latexcc/sailccbits.tex b/cheri/sail_latexcc/sailccbits.tex
new file mode 100644
index 00000000..88255b5a
--- /dev/null
+++ b/cheri/sail_latexcc/sailccbits.tex
@@ -0,0 +1 @@
+type #\hyperref[zbits]{bits}# ('n : Int) = vector('n, dec, bit)
diff --git a/cheri/sail_latexcc/sailccbitstobool.tex b/cheri/sail_latexcc/sailccbitstobool.tex
new file mode 100644
index 00000000..17cb3483
--- /dev/null
+++ b/cheri/sail_latexcc/sailccbitstobool.tex
@@ -0,0 +1 @@
+val cast bits_to_bool : #\hyperref[zbits]{bits}#(1) -> bool
diff --git a/cheri/sail_latexcc/sailccbittobool.tex b/cheri/sail_latexcc/sailccbittobool.tex
new file mode 100644
index 00000000..13a2dfb8
--- /dev/null
+++ b/cheri/sail_latexcc/sailccbittobool.tex
@@ -0,0 +1 @@
+val cast bit_to_bool : bit -> bool
diff --git a/cheri/sail_latexcc/sailccbitvectoraccess.tex b/cheri/sail_latexcc/sailccbitvectoraccess.tex
new file mode 100644
index 00000000..4bb98eb8
--- /dev/null
+++ b/cheri/sail_latexcc/sailccbitvectoraccess.tex
@@ -0,0 +1,6 @@
+val bitvector_access = {
+ ocaml: "access",
+ lem: "access_vec_dec",
+ coq: "access_vec_dec",
+ c: "vector_access"
+} : forall ('n : Int), 'n >= 0. (#\hyperref[zbits]{bits}#('n), int) -> bit
diff --git a/cheri/sail_latexcc/sailccbitvectorconcat.tex b/cheri/sail_latexcc/sailccbitvectorconcat.tex
new file mode 100644
index 00000000..afc03901
--- /dev/null
+++ b/cheri/sail_latexcc/sailccbitvectorconcat.tex
@@ -0,0 +1,2 @@
+val bitvector_concat = {ocaml: "append", lem: "concat_vec", c: "append", coq: "concat_vec"} : forall ('n : Int) ('m : Int).
+ (#\hyperref[zbits]{bits}#('n), #\hyperref[zbits]{bits}#('m)) -> #\hyperref[zbits]{bits}#('n + 'm)
diff --git a/cheri/sail_latexcc/sailccbitvectorlength.tex b/cheri/sail_latexcc/sailccbitvectorlength.tex
new file mode 100644
index 00000000..ac601acd
--- /dev/null
+++ b/cheri/sail_latexcc/sailccbitvectorlength.tex
@@ -0,0 +1 @@
+val bitvector_length = {coq: "length_mword", _:"length"} : forall 'n. #\hyperref[zbits]{bits}#('n) -> atom('n)
diff --git a/cheri/sail_latexcc/sailccbitvectorupdate.tex b/cheri/sail_latexcc/sailccbitvectorupdate.tex
new file mode 100644
index 00000000..6524146e
--- /dev/null
+++ b/cheri/sail_latexcc/sailccbitvectorupdate.tex
@@ -0,0 +1,6 @@
+val bitvector_update = {
+ ocaml: "update",
+ lem: "update_vec_dec",
+ coq: "update_vec_dec",
+ c: "vector_update"
+} : forall 'n, 'n >= 0. (#\hyperref[zbits]{bits}#('n), int, bit) -> #\hyperref[zbits]{bits}#('n)
diff --git a/cheri/sail_latexcc/sailccbooltobits.tex b/cheri/sail_latexcc/sailccbooltobits.tex
new file mode 100644
index 00000000..711ab763
--- /dev/null
+++ b/cheri/sail_latexcc/sailccbooltobits.tex
@@ -0,0 +1 @@
+val cast bool_to_bits : bool -> #\hyperref[zbits]{bits}#(1)
diff --git a/cheri/sail_latexcc/sailcccapRegToCapStruct.tex b/cheri/sail_latexcc/sailcccapRegToCapStruct.tex
new file mode 100644
index 00000000..bd64d554
--- /dev/null
+++ b/cheri/sail_latexcc/sailcccapRegToCapStruct.tex
@@ -0,0 +1 @@
+val capRegToCapStruct : CapReg -> CapStruct
diff --git a/cheri/sail_latexcc/sailcccapStructToCapReg.tex b/cheri/sail_latexcc/sailcccapStructToCapReg.tex
new file mode 100644
index 00000000..b5409845
--- /dev/null
+++ b/cheri/sail_latexcc/sailcccapStructToCapReg.tex
@@ -0,0 +1 @@
+val capStructToCapReg : CapStruct -> CapReg
diff --git a/cheri/sail_latexcc/sailcccapStructToMemBits.tex b/cheri/sail_latexcc/sailcccapStructToMemBits.tex
new file mode 100644
index 00000000..4a49e9c0
--- /dev/null
+++ b/cheri/sail_latexcc/sailcccapStructToMemBits.tex
@@ -0,0 +1 @@
+val capStructToMemBits : CapStruct -> bits(128)
diff --git a/cheri/sail_latexcc/sailcccapStructToMemBitsonetwoeight.tex b/cheri/sail_latexcc/sailcccapStructToMemBitsonetwoeight.tex
new file mode 100644
index 00000000..8f3a8d0f
--- /dev/null
+++ b/cheri/sail_latexcc/sailcccapStructToMemBitsonetwoeight.tex
@@ -0,0 +1 @@
+val capStructToMemBits128 : CapStruct -> bits(128)
diff --git a/cheri/sail_latexcc/sailcccastunitvec.tex b/cheri/sail_latexcc/sailcccastunitvec.tex
new file mode 100644
index 00000000..e0391ded
--- /dev/null
+++ b/cheri/sail_latexcc/sailcccastunitvec.tex
@@ -0,0 +1 @@
+val cast cast_unit_vec : bit -> #\hyperref[zbits]{bits}#(1)
diff --git a/cheri/sail_latexcc/sailcccomputeE.tex b/cheri/sail_latexcc/sailcccomputeE.tex
new file mode 100644
index 00000000..893cea49
--- /dev/null
+++ b/cheri/sail_latexcc/sailcccomputeE.tex
@@ -0,0 +1 @@
+val computeE : bits(65) -> range(0, 48) effect {escape}
diff --git a/cheri/sail_latexcc/sailccconcatstr.tex b/cheri/sail_latexcc/sailccconcatstr.tex
new file mode 100644
index 00000000..07556728
--- /dev/null
+++ b/cheri/sail_latexcc/sailccconcatstr.tex
@@ -0,0 +1 @@
+val concat_str = {lem: "stringAppend", coq: "String.append", _: "concat_str"} : (string, string) -> string
diff --git a/cheri/sail_latexcc/sailccdiv.tex b/cheri/sail_latexcc/sailccdiv.tex
new file mode 100644
index 00000000..58318fe9
--- /dev/null
+++ b/cheri/sail_latexcc/sailccdiv.tex
@@ -0,0 +1,7 @@
+val div = {
+ smt: "div",
+ ocaml: "quotient",
+ lem: "integerDiv",
+ c: "tdiv_int",
+ coq: "div_with_eq"
+} : forall 'n 'm. (atom('n), atom('m)) -> {'o, 'o = #\hyperref[zdiv]{div}#('n, 'm). atom('o)}
diff --git a/cheri/sail_latexcc/sailccdivint.tex b/cheri/sail_latexcc/sailccdivint.tex
new file mode 100644
index 00000000..34ae6121
--- /dev/null
+++ b/cheri/sail_latexcc/sailccdivint.tex
@@ -0,0 +1,7 @@
+val div_int = {
+ smt: "div",
+ ocaml: "quotient",
+ lem: "integerDiv",
+ c: "tdiv_int",
+ coq: "Z.quot"
+} : (int, int) -> int
diff --git a/cheri/sail_latexcc/sailcceqanything.tex b/cheri/sail_latexcc/sailcceqanything.tex
new file mode 100644
index 00000000..9b5d3c92
--- /dev/null
+++ b/cheri/sail_latexcc/sailcceqanything.tex
@@ -0,0 +1 @@
+val eq_anything = {ocaml: "(#\hyperref[zfun]{fun}# (x, y) -> x = y)", lem: "eq", coq: "generic_eq", _:"eq_anything"} : forall ('a : Type). ('a, 'a) -> bool
diff --git a/cheri/sail_latexcc/sailcceqatom.tex b/cheri/sail_latexcc/sailcceqatom.tex
new file mode 100644
index 00000000..0325ab15
--- /dev/null
+++ b/cheri/sail_latexcc/sailcceqatom.tex
@@ -0,0 +1 @@
+val eq_atom = {ocaml: "eq_int", lem: "eq", c: "eq_int", coq: "Z.eqb"} : forall 'n 'm. (atom('n), atom('m)) -> bool
diff --git a/cheri/sail_latexcc/sailcceqbit.tex b/cheri/sail_latexcc/sailcceqbit.tex
new file mode 100644
index 00000000..205d3436
--- /dev/null
+++ b/cheri/sail_latexcc/sailcceqbit.tex
@@ -0,0 +1 @@
+val eq_bit = { lem : "eq", _ : "eq_bit" } : (bit, bit) -> bool
diff --git a/cheri/sail_latexcc/sailcceqbits.tex b/cheri/sail_latexcc/sailcceqbits.tex
new file mode 100644
index 00000000..e78ed19a
--- /dev/null
+++ b/cheri/sail_latexcc/sailcceqbits.tex
@@ -0,0 +1,6 @@
+val eq_bits = {
+ ocaml: "eq_list",
+ lem: "eq_vec",
+ c: "eq_bits",
+ coq: "eq_vec"
+} : forall 'n. (vector('n, dec, bit), vector('n, dec, bit)) -> bool
diff --git a/cheri/sail_latexcc/sailcceqbittwo.tex b/cheri/sail_latexcc/sailcceqbittwo.tex
new file mode 100644
index 00000000..59353940
--- /dev/null
+++ b/cheri/sail_latexcc/sailcceqbittwo.tex
@@ -0,0 +1 @@
+val eq_bit2 = "eq_bit" : (bit, bit) -> bool
diff --git a/cheri/sail_latexcc/sailcceqbool.tex b/cheri/sail_latexcc/sailcceqbool.tex
new file mode 100644
index 00000000..4d2c346b
--- /dev/null
+++ b/cheri/sail_latexcc/sailcceqbool.tex
@@ -0,0 +1 @@
+val eq_bool = {ocaml: "eq_bool", lem: "eq", c: "eq_bool", coq: "Bool.eqb"} : (bool, bool) -> bool
diff --git a/cheri/sail_latexcc/sailcceqint.tex b/cheri/sail_latexcc/sailcceqint.tex
new file mode 100644
index 00000000..4c0462c1
--- /dev/null
+++ b/cheri/sail_latexcc/sailcceqint.tex
@@ -0,0 +1 @@
+val eq_int = {ocaml: "eq_int", lem: "eq", c: "eq_int", coq: "Z.eqb"} : (int, int) -> bool
diff --git a/cheri/sail_latexcc/sailcceqrange.tex b/cheri/sail_latexcc/sailcceqrange.tex
new file mode 100644
index 00000000..7f1cd5f2
--- /dev/null
+++ b/cheri/sail_latexcc/sailcceqrange.tex
@@ -0,0 +1 @@
+val eq_range = {ocaml: "eq_int", lem: "eq", c: "eq_int", coq: "eq_range"} : forall 'n 'm 'o 'p. (range('n, 'm), range('o, 'p)) -> bool
diff --git a/cheri/sail_latexcc/sailccfastRepCheck.tex b/cheri/sail_latexcc/sailccfastRepCheck.tex
new file mode 100644
index 00000000..2dd665fb
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfastRepCheck.tex
@@ -0,0 +1 @@
+val fastRepCheck : (CapStruct, bits(64)) -> bool
diff --git a/cheri/sail_latexcc/sailccfnCPtrCmpOpofnum.tex b/cheri/sail_latexcc/sailccfnCPtrCmpOpofnum.tex
new file mode 100644
index 00000000..6ab563f3
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnCPtrCmpOpofnum.tex
@@ -0,0 +1,10 @@
+function CPtrCmpOp_of_num arg# = match arg# {
+ 0 => CEQ,
+ 1 => CNE,
+ 2 => CLT,
+ 3 => CLE,
+ 4 => CLTU,
+ 5 => CLEU,
+ 6 => CEXEQ,
+ _ => CNEXEQ
+}
diff --git a/cheri/sail_latexcc/sailccfnClearRegSetofnum.tex b/cheri/sail_latexcc/sailccfnClearRegSetofnum.tex
new file mode 100644
index 00000000..edfe64e3
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnClearRegSetofnum.tex
@@ -0,0 +1,6 @@
+function ClearRegSet_of_num arg# = match arg# {
+ 0 => GPLo,
+ 1 => GPHi,
+ 2 => CLo,
+ _ => CHi
+}
diff --git a/cheri/sail_latexcc/sailccfnHighestSetBit.tex b/cheri/sail_latexcc/sailccfnHighestSetBit.tex
new file mode 100644
index 00000000..dbbc5b49
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnHighestSetBit.tex
@@ -0,0 +1,5 @@
+function HighestSetBit x = {
+ foreach (i #\hyperref[zfrom]{from}# ('N - 1) to 0 by 1 in dec)
+ if [x[i]] == 0b1 then return (true, i);
+ return (false, 0)
+}
diff --git a/cheri/sail_latexcc/sailccfnMIPSread.tex b/cheri/sail_latexcc/sailccfnMIPSread.tex
new file mode 100644
index 00000000..ee937856
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnMIPSread.tex
@@ -0,0 +1 @@
+function #\hyperref[zzyzyMIPSzyread]{\_\_MIPS\_read}# (addr, width) = #\hyperref[zzyzyReadRAM]{\_\_ReadRAM}#(64, width, 0x0000_0000_0000_0000, addr)
diff --git a/cheri/sail_latexcc/sailccfnMIPSwrite.tex b/cheri/sail_latexcc/sailccfnMIPSwrite.tex
new file mode 100644
index 00000000..5e81f335
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnMIPSwrite.tex
@@ -0,0 +1 @@
+function #\hyperref[zzyzyMIPSzywrite]{\_\_MIPS\_write}# (addr, width, data) = let _ = #\hyperref[zzyzyWriteRAM]{\_\_WriteRAM}#(64, width, 0x0000_0000_0000_0000, addr, data) in ()
diff --git a/cheri/sail_latexcc/sailccfnatopcorrection.tex b/cheri/sail_latexcc/sailccfnatopcorrection.tex
new file mode 100644
index 00000000..3a6be173
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnatopcorrection.tex
@@ -0,0 +1,7 @@
+function #\hyperref[zazytopzycorrection]{a\_top\_correction}#(a_mid, R, bound) : (#\hyperref[zbits]{bits}#(20), #\hyperref[zbits]{bits}#(20), #\hyperref[zbits]{bits}#(20)) -> #\hyperref[zbits]{bits}#(65) =
+ match (a_mid <_u R, bound <_u R) {
+ (false, false) => #\hyperref[zzzeros]{zeros}#(),
+ (false, true) => #\hyperref[zzzerozyextend]{zero\_extend}#(0b1),
+ (true, false) => #\hyperref[zones]{ones}#(),
+ (true, true) => #\hyperref[zzzeros]{zeros}#()
+ }
diff --git a/cheri/sail_latexcc/sailccfnbitstobool.tex b/cheri/sail_latexcc/sailccfnbitstobool.tex
new file mode 100644
index 00000000..1cb33076
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnbitstobool.tex
@@ -0,0 +1 @@
+function bits_to_bool x = #\hyperref[zbitzytozybool]{bit\_to\_bool}#(x[0])
diff --git a/cheri/sail_latexcc/sailccfnbittobool.tex b/cheri/sail_latexcc/sailccfnbittobool.tex
new file mode 100644
index 00000000..a5eea578
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnbittobool.tex
@@ -0,0 +1,4 @@
+function bit_to_bool b = match b {
+ bitone => true,
+ _ => false
+}
diff --git a/cheri/sail_latexcc/sailccfnbooltobits.tex b/cheri/sail_latexcc/sailccfnbooltobits.tex
new file mode 100644
index 00000000..99075369
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnbooltobits.tex
@@ -0,0 +1 @@
+function bool_to_bits x = if x then 0b1 else 0b0
diff --git a/cheri/sail_latexcc/sailccfncapRegToCapStruct.tex b/cheri/sail_latexcc/sailccfncapRegToCapStruct.tex
new file mode 100644
index 00000000..4af338b9
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfncapRegToCapStruct.tex
@@ -0,0 +1,27 @@
+function #\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(c) : CapReg -> CapStruct =
+ let s : bool = c[104] in
+ let Bc : #\hyperref[zbits]{bits}#(20) = if s then c[103..96] @ 0x000 else c[103..84] in
+ let Tc : #\hyperref[zbits]{bits}#(20) = if s then c[83..76] @ 0x000 else c[83..64] in
+ let otype : #\hyperref[zbits]{bits}#(24) = if s then c[95..84] @ c[75..64] else #\hyperref[zzzeros]{zeros}#() in
+ struct {
+ tag = c[128],
+ uperms = c[127..124],
+ access_system_regs = c[123],
+ permit_unseal = c[122],
+ permit_ccall = c[121],
+ permit_seal = c[120],
+ permit_store_local_cap = c[119],
+ permit_store_cap = c[118],
+ permit_load_cap = c[117],
+ permit_store = c[116],
+ permit_load = c[115],
+ permit_execute = c[114],
+ global = c[113],
+ reserved = c[112..111],
+ E = c[110..105],
+ sealed = s,
+ B = Bc,
+ T = Tc,
+ otype = otype,
+ address = c[63..0]
+ }
diff --git a/cheri/sail_latexcc/sailccfncapStructToCapReg.tex b/cheri/sail_latexcc/sailccfncapStructToCapReg.tex
new file mode 100644
index 00000000..f6b02365
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfncapStructToCapReg.tex
@@ -0,0 +1,2 @@
+function #\hyperref[zcapStructToCapReg]{capStructToCapReg}#(cap) : CapStruct -> CapReg =
+ (cap.tag @ #\hyperref[zcapStructToMemBitsonetwoeight]{capStructToMemBits128}#(cap))
diff --git a/cheri/sail_latexcc/sailccfncapStructToMemBits.tex b/cheri/sail_latexcc/sailccfncapStructToMemBits.tex
new file mode 100644
index 00000000..ea19467f
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfncapStructToMemBits.tex
@@ -0,0 +1,2 @@
+function #\hyperref[zcapStructToMemBits]{capStructToMemBits}#(cap) : CapStruct -> #\hyperref[zbits]{bits}#(128) =
+ #\hyperref[zcapStructToMemBitsonetwoeight]{capStructToMemBits128}#(cap) ^ null_cap_bits
diff --git a/cheri/sail_latexcc/sailccfncapStructToMemBitsonetwoeight.tex b/cheri/sail_latexcc/sailccfncapStructToMemBitsonetwoeight.tex
new file mode 100644
index 00000000..08da637f
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfncapStructToMemBitsonetwoeight.tex
@@ -0,0 +1,12 @@
+function #\hyperref[zcapStructToMemBitsonetwoeight]{capStructToMemBits128}#(cap) : CapStruct -> #\hyperref[zbits]{bits}#(128) =
+ let b : #\hyperref[zbits]{bits}#(20) = if cap.sealed then (cap.B)[19..12] @ (cap.otype)[23..12] else cap.B in
+ let t : #\hyperref[zbits]{bits}#(20) = if cap.sealed then (cap.T)[19..12] @ (cap.otype)[11..0] else cap.T in
+ ( cap.uperms
+ @ #\hyperref[zgetCapHardPerms]{getCapHardPerms}#(cap)
+ @ cap.reserved
+ @ cap.E
+ @ cap.sealed
+ @ b
+ @ t
+ @ cap.address
+ )
diff --git a/cheri/sail_latexcc/sailccfncastunitvec.tex b/cheri/sail_latexcc/sailccfncastunitvec.tex
new file mode 100644
index 00000000..1bb7a9e0
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfncastunitvec.tex
@@ -0,0 +1,4 @@
+function cast_unit_vec b = match b {
+ bitzero => 0b0,
+ _ => 0b1
+}
diff --git a/cheri/sail_latexcc/sailccfncomputeE.tex b/cheri/sail_latexcc/sailccfncomputeE.tex
new file mode 100644
index 00000000..ef4cb71b
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfncomputeE.tex
@@ -0,0 +1,7 @@
+function #\hyperref[zcomputeE]{computeE}# (rlength) : #\hyperref[zbits]{bits}#(65) -> range(0, 48) =
+ let (nonzero, 'msb) = #\hyperref[zHighestSetBit]{HighestSetBit}#((rlength + (rlength >> 6)) >> 19) in
+ if nonzero then
+ /* above will always return <= 45 because 19 bits of zero are shifted in from right */
+ {assert(0 <= msb & msb <= 45); #\hyperref[zroundUp]{roundUp}# (#\hyperref[zmin]{min}#(msb,45)) }
+ else
+ 0
diff --git a/cheri/sail_latexcc/sailccfnfastRepCheck.tex b/cheri/sail_latexcc/sailccfnfastRepCheck.tex
new file mode 100644
index 00000000..3e4d2111
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnfastRepCheck.tex
@@ -0,0 +1,23 @@
+function #\hyperref[zfastRepCheck]{fastRepCheck}#(c, i) : (CapStruct, #\hyperref[zbits]{bits}#(64)) -> bool=
+ let 'E = #\hyperref[zunsigned]{unsigned}#(c.E) in
+ if (E >= 44) then
+ true /* in this case representable region is whole address space */
+ else
+ let E' = #\hyperref[zmin]{min}#(E, 43) in
+ let i_top = #\hyperref[zsigned]{signed}#(i[63..E+20]) in
+ let i_mid : #\hyperref[zbits]{bits}#(20) = i[E+19..E] in
+ let a_mid : #\hyperref[zbits]{bits}#(20) = (c.address)[E+19..E] in
+ let R : #\hyperref[zbits]{bits}#(20) = (c.B) - 0x01000 in
+ let diff : #\hyperref[zbits]{bits}#(20) = R - a_mid in
+ let diff1 : #\hyperref[zbits]{bits}#(20) = diff - 1 in
+ /* i_top determines 1. whether the increment is inRange
+ i.e. less than the size of the representable region
+ (2**(E+20)) and 2. whether it is positive or negative. To
+ satisfy 1. all top bits must be the same so we are
+ interested in the cases i_top is 0 or -1 */
+ if (i_top == 0) then
+ i_mid <_u diff1
+ else if (i_top == -1) then
+ (i_mid >=_u diff) & (R != a_mid)
+ else
+ false
diff --git a/cheri/sail_latexcc/sailccfngetCapBase.tex b/cheri/sail_latexcc/sailccfngetCapBase.tex
new file mode 100644
index 00000000..51677965
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfngetCapBase.tex
@@ -0,0 +1,10 @@
+function #\hyperref[zgetCapBase]{getCapBase}#(c) : CapStruct -> uint64 =
+ let E = #\hyperref[zmin]{min}#(#\hyperref[zunsigned]{unsigned}#(c.E), 48) in
+ let Bc : #\hyperref[zbits]{bits}#(20) = c.B in
+ let a : #\hyperref[zbits]{bits}#(65) = #\hyperref[zzzerozyextend]{zero\_extend}#(c.address) in
+ let R : #\hyperref[zbits]{bits}#(20) = Bc - 0x01000 in /* wraps */
+ let a_mid : #\hyperref[zbits]{bits}#(20) = #\hyperref[zmask]{mask}#(a >> E) in
+ let correction = #\hyperref[zazytopzycorrection]{a\_top\_correction}#(a_mid, R, Bc) in
+ let a_top = a >> E+20 in
+ let base : #\hyperref[zbits]{bits}#(64) = #\hyperref[zmask]{mask}#(((a_top + correction) @ Bc) << E) in
+ #\hyperref[zunsigned]{unsigned}#(base)
diff --git a/cheri/sail_latexcc/sailccfngetCapCursor.tex b/cheri/sail_latexcc/sailccfngetCapCursor.tex
new file mode 100644
index 00000000..9f5d5757
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfngetCapCursor.tex
@@ -0,0 +1 @@
+function #\hyperref[zgetCapCursor]{getCapCursor}#(cap) : CapStruct -> uint64 = #\hyperref[zunsigned]{unsigned}#(cap.address)
diff --git a/cheri/sail_latexcc/sailccfngetCapHardPerms.tex b/cheri/sail_latexcc/sailccfngetCapHardPerms.tex
new file mode 100644
index 00000000..0b86b980
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfngetCapHardPerms.tex
@@ -0,0 +1,12 @@
+function #\hyperref[zgetCapHardPerms]{getCapHardPerms}#(cap) : CapStruct -> #\hyperref[zbits]{bits}#(11) =
+ (cap.access_system_regs
+ @ cap.permit_unseal
+ @ cap.permit_ccall
+ @ cap.permit_seal
+ @ cap.permit_store_local_cap
+ @ cap.permit_store_cap
+ @ cap.permit_load_cap
+ @ cap.permit_store
+ @ cap.permit_load
+ @ cap.permit_execute
+ @ cap.global)
diff --git a/cheri/sail_latexcc/sailccfngetCapLength.tex b/cheri/sail_latexcc/sailccfngetCapLength.tex
new file mode 100644
index 00000000..e9ce6566
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfngetCapLength.tex
@@ -0,0 +1,6 @@
+function #\hyperref[zgetCapLength]{getCapLength}#(c) : CapStruct -> CapLen =
+ let 'top = #\hyperref[zgetCapTop]{getCapTop}#(c) in
+ let 'base = #\hyperref[zgetCapBase]{getCapBase}#(c) in {
+ assert (top >= base);
+ top - base
+ }
diff --git a/cheri/sail_latexcc/sailccfngetCapOffset.tex b/cheri/sail_latexcc/sailccfngetCapOffset.tex
new file mode 100644
index 00000000..8bf83916
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfngetCapOffset.tex
@@ -0,0 +1,3 @@
+function #\hyperref[zgetCapOffset]{getCapOffset}#(c) : CapStruct -> uint64 =
+ let base = #\hyperref[zgetCapBase]{getCapBase}#(c) in
+ (#\hyperref[zunsigned]{unsigned}#(c.address) - base) % #\hyperref[zpowtwo]{pow2}#(64)
diff --git a/cheri/sail_latexcc/sailccfngetCapPerms.tex b/cheri/sail_latexcc/sailccfngetCapPerms.tex
new file mode 100644
index 00000000..9701e163
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfngetCapPerms.tex
@@ -0,0 +1,5 @@
+function #\hyperref[zgetCapPerms]{getCapPerms}#(cap) : CapStruct -> #\hyperref[zbits]{bits}#(31) =
+ let perms : #\hyperref[zbits]{bits}#(15) = #\hyperref[zzzerozyextend]{zero\_extend}#(#\hyperref[zgetCapHardPerms]{getCapHardPerms}#(cap)) in
+ (0x000 /* uperms 30-19 */
+ @ cap.uperms
+ @ perms)
diff --git a/cheri/sail_latexcc/sailccfngetCapTop.tex b/cheri/sail_latexcc/sailccfngetCapTop.tex
new file mode 100644
index 00000000..1be5af24
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfngetCapTop.tex
@@ -0,0 +1,11 @@
+function #\hyperref[zgetCapTop]{getCapTop}# (c) : CapStruct -> CapLen =
+ let E = #\hyperref[zmin]{min}#(#\hyperref[zunsigned]{unsigned}#(c.E), 48) in
+ let Bc : #\hyperref[zbits]{bits}#(20) = c.B in
+ let T : #\hyperref[zbits]{bits}#(20) = c.T in
+ let a : #\hyperref[zbits]{bits}#(65) = #\hyperref[zzzerozyextend]{zero\_extend}#(c.address) in
+ let R : #\hyperref[zbits]{bits}#(20) = Bc - 0x01000 in /* wraps */
+ let a_mid : #\hyperref[zbits]{bits}#(20) = #\hyperref[zmask]{mask}#(a >> E) in
+ let correction = #\hyperref[zazytopzycorrection]{a\_top\_correction}#(a_mid, R, T) in
+ let a_top = a >> E+20 in
+ let top1 : #\hyperref[zbits]{bits}#(65) = #\hyperref[zmask]{mask}#((a_top + correction) @ T) in
+ #\hyperref[zunsigned]{unsigned}#(top1 << E)
diff --git a/cheri/sail_latexcc/sailccfnincCapOffset.tex b/cheri/sail_latexcc/sailccfnincCapOffset.tex
new file mode 100644
index 00000000..59d3237e
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnincCapOffset.tex
@@ -0,0 +1,5 @@
+function #\hyperref[zincCapOffset]{incCapOffset}#(c, delta) : (CapStruct, #\hyperref[zbits]{bits}#(64)) -> (bool, CapStruct) =
+ let newAddress : #\hyperref[zbits]{bits}#(64) = c.address + delta in
+ let newCap = { c with address = newAddress } in
+ let representable = #\hyperref[zfastRepCheck]{fastRepCheck}#(c, delta) in
+ (representable, newCap)
diff --git a/cheri/sail_latexcc/sailccfninttocap.tex b/cheri/sail_latexcc/sailccfninttocap.tex
new file mode 100644
index 00000000..31bb2bec
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfninttocap.tex
@@ -0,0 +1,2 @@
+function #\hyperref[zintzytozycap]{int\_to\_cap}# (offset) : #\hyperref[zbits]{bits}#(64) -> CapStruct =
+ {null_cap with address = offset}
diff --git a/cheri/sail_latexcc/sailccfnisnone.tex b/cheri/sail_latexcc/sailccfnisnone.tex
new file mode 100644
index 00000000..877cc2a0
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnisnone.tex
@@ -0,0 +1,4 @@
+function is_none opt = match opt {
+ #\hyperref[zSome]{Some}#(_) => false,
+ #\hyperref[zNone]{None}#() => true
+}
diff --git a/cheri/sail_latexcc/sailccfnissome.tex b/cheri/sail_latexcc/sailccfnissome.tex
new file mode 100644
index 00000000..f1f5f655
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnissome.tex
@@ -0,0 +1,4 @@
+function is_some opt = match opt {
+ #\hyperref[zSome]{Some}#(_) => true,
+ #\hyperref[zNone]{None}#() => false
+}
diff --git a/cheri/sail_latexcc/sailccfnmask.tex b/cheri/sail_latexcc/sailccfnmask.tex
new file mode 100644
index 00000000..e62ea529
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnmask.tex
@@ -0,0 +1 @@
+function mask bs = bs['n - 1 .. 0]
diff --git a/cheri/sail_latexcc/sailccfnmemBitsToCapBits.tex b/cheri/sail_latexcc/sailccfnmemBitsToCapBits.tex
new file mode 100644
index 00000000..198cf984
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnmemBitsToCapBits.tex
@@ -0,0 +1,2 @@
+function #\hyperref[zmemBitsToCapBits]{memBitsToCapBits}#(tag, b) : (bool, #\hyperref[zbits]{bits}#(128)) -> #\hyperref[zbits]{bits}#(129) =
+ #\hyperref[zmemBitsToCapBitsonetwoeight]{memBitsToCapBits128}#(tag, b ^ null_cap_bits)
diff --git a/cheri/sail_latexcc/sailccfnmemBitsToCapBitsonetwoeight.tex b/cheri/sail_latexcc/sailccfnmemBitsToCapBitsonetwoeight.tex
new file mode 100644
index 00000000..723571e9
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnmemBitsToCapBitsonetwoeight.tex
@@ -0,0 +1,2 @@
+function #\hyperref[zmemBitsToCapBitsonetwoeight]{memBitsToCapBits128}#(tag, b) : (bool, #\hyperref[zbits]{bits}#(128)) -> CapReg=
+ (tag @ b)
diff --git a/cheri/sail_latexcc/sailccfnmipssignextend.tex b/cheri/sail_latexcc/sailccfnmipssignextend.tex
new file mode 100644
index 00000000..80945b61
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnmipssignextend.tex
@@ -0,0 +1 @@
+function mips_sign_extend v = #\hyperref[zsailzysignzyextend]{sail\_sign\_extend}#(v, sizeof('m))
diff --git a/cheri/sail_latexcc/sailccfnmipszzeroextend.tex b/cheri/sail_latexcc/sailccfnmipszzeroextend.tex
new file mode 100644
index 00000000..6c9914d9
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnmipszzeroextend.tex
@@ -0,0 +1 @@
+function mips_zero_extend v = #\hyperref[zsailzyzzerozyextend]{sail\_zero\_extend}#(v, sizeof('m))
diff --git a/cheri/sail_latexcc/sailccfnneqanything.tex b/cheri/sail_latexcc/sailccfnneqanything.tex
new file mode 100644
index 00000000..1605ed05
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnneqanything.tex
@@ -0,0 +1 @@
+function #\hyperref[zneqzyanything]{neq\_anything}# (x, y) = #\hyperref[znotzybool]{not\_bool}#(x == y)
diff --git a/cheri/sail_latexcc/sailccfnneqatom.tex b/cheri/sail_latexcc/sailccfnneqatom.tex
new file mode 100644
index 00000000..e9a9f93f
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnneqatom.tex
@@ -0,0 +1 @@
+function #\hyperref[zneqzyatom]{neq\_atom}# (x, y) = #\hyperref[znotzybool]{not\_bool}#(#\hyperref[zeqzyatom]{eq\_atom}#(x, y))
diff --git a/cheri/sail_latexcc/sailccfnneqbool.tex b/cheri/sail_latexcc/sailccfnneqbool.tex
new file mode 100644
index 00000000..65007b8e
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnneqbool.tex
@@ -0,0 +1 @@
+function #\hyperref[zneqzybool]{neq\_bool}# (x, y) = #\hyperref[znotzybool]{not\_bool}#(#\hyperref[zeqzybool]{eq\_bool}#(x, y))
diff --git a/cheri/sail_latexcc/sailccfnneqint.tex b/cheri/sail_latexcc/sailccfnneqint.tex
new file mode 100644
index 00000000..952a7735
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnneqint.tex
@@ -0,0 +1 @@
+function #\hyperref[zneqzyint]{neq\_int}# (x, y) = #\hyperref[znotzybool]{not\_bool}#(#\hyperref[zeqzyint]{eq\_int}#(x, y))
diff --git a/cheri/sail_latexcc/sailccfnneqrange.tex b/cheri/sail_latexcc/sailccfnneqrange.tex
new file mode 100644
index 00000000..43f49e9e
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnneqrange.tex
@@ -0,0 +1 @@
+function #\hyperref[zneqzyrange]{neq\_range}# (x, y) = #\hyperref[znotzybool]{not\_bool}#(#\hyperref[zeqzyrange]{eq\_range}#(x, y))
diff --git a/cheri/sail_latexcc/sailccfnneqvec.tex b/cheri/sail_latexcc/sailccfnneqvec.tex
new file mode 100644
index 00000000..c446df08
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnneqvec.tex
@@ -0,0 +1 @@
+function #\hyperref[zneqzyvec]{neq\_vec}# (x, y) = #\hyperref[znotzybool]{not\_bool}#(#\hyperref[zeqzybits]{eq\_bits}#(x, y))
diff --git a/cheri/sail_latexcc/sailccfnnumofCPtrCmpOp.tex b/cheri/sail_latexcc/sailccfnnumofCPtrCmpOp.tex
new file mode 100644
index 00000000..4d20546b
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnnumofCPtrCmpOp.tex
@@ -0,0 +1,10 @@
+function num_of_CPtrCmpOp arg# = match arg# {
+ CEQ => 0,
+ CNE => 1,
+ CLT => 2,
+ CLE => 3,
+ CLTU => 4,
+ CLEU => 5,
+ CEXEQ => 6,
+ CNEXEQ => 7
+}
diff --git a/cheri/sail_latexcc/sailccfnnumofClearRegSet.tex b/cheri/sail_latexcc/sailccfnnumofClearRegSet.tex
new file mode 100644
index 00000000..3dd58b89
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnnumofClearRegSet.tex
@@ -0,0 +1,6 @@
+function num_of_ClearRegSet arg# = match arg# {
+ GPLo => 0,
+ GPHi => 1,
+ CLo => 2,
+ CHi => 3
+}
diff --git a/cheri/sail_latexcc/sailccfnones.tex b/cheri/sail_latexcc/sailccfnones.tex
new file mode 100644
index 00000000..e58040d7
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnones.tex
@@ -0,0 +1 @@
+function #\hyperref[zones]{ones}#() = #\hyperref[zreplicatezybits]{replicate\_bits}# (0b1,'n)
diff --git a/cheri/sail_latexcc/sailccfnroundUp.tex b/cheri/sail_latexcc/sailccfnroundUp.tex
new file mode 100644
index 00000000..1ed68a59
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnroundUp.tex
@@ -0,0 +1,5 @@
+function #\hyperref[zroundUp]{roundUp}#(e) : range(0, 45) -> range(0, 48) =
+ let 'r = e % 4 in
+ if (r == 0)
+ then e
+ else (e - r + 4)
diff --git a/cheri/sail_latexcc/sailccfnsailmask.tex b/cheri/sail_latexcc/sailccfnsailmask.tex
new file mode 100644
index 00000000..37ede658
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnsailmask.tex
@@ -0,0 +1 @@
+function #\hyperref[zsailzymask]{sail\_mask}#(len, v) = if len <= #\hyperref[zlength]{length}#(v) then #\hyperref[ztruncate]{truncate}#(v, len) else #\hyperref[zsailzyzzerozyextend]{sail\_zero\_extend}#(v, len)
diff --git a/cheri/sail_latexcc/sailccfnsealCap.tex b/cheri/sail_latexcc/sailccfnsealCap.tex
new file mode 100644
index 00000000..55c55014
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnsealCap.tex
@@ -0,0 +1,5 @@
+function #\hyperref[zsealCap]{sealCap}#(cap, otype) : (CapStruct, #\hyperref[zbits]{bits}#(24)) -> (bool, CapStruct) =
+ if (((cap.T)[11..0] == #\hyperref[zzzeros]{zeros}#()) & ((cap.B)[11..0] == #\hyperref[zzzeros]{zeros}#())) then
+ (true, {cap with sealed=true, otype=otype})
+ else
+ (false, cap /* XXX should be undefined? */ )
diff --git a/cheri/sail_latexcc/sailccfnsetCapBounds.tex b/cheri/sail_latexcc/sailccfnsetCapBounds.tex
new file mode 100644
index 00000000..44808068
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnsetCapBounds.tex
@@ -0,0 +1,13 @@
+function #\hyperref[zsetCapBounds]{setCapBounds}#(cap, base, top) : (CapStruct, #\hyperref[zbits]{bits}#(64), #\hyperref[zbits]{bits}#(65)) -> (bool, CapStruct) =
+ /* {cap with base=base; length=(#\hyperref[zbits]{bits}#(64)) length; offset=0} */
+ let 'e = #\hyperref[zcomputeE]{computeE}#(top - (0b0 @ base)) in
+ let Bc : #\hyperref[zbits]{bits}#(20) = #\hyperref[zmask]{mask}#(base >> e) in
+ let T : #\hyperref[zbits]{bits}#(20) = #\hyperref[zmask]{mask}#(top >> e) in
+ let e_mask : #\hyperref[zbits]{bits}#(65) = #\hyperref[zzzerozyextend]{zero\_extend}#(#\hyperref[zreplicatezybits]{replicate\_bits}#(0b1, e)) in
+ let e_bits = top & e_mask in
+ let T2 : #\hyperref[zbits]{bits}#(20) = T + (if #\hyperref[zunsigned]{unsigned}#(e_bits) == 0 then 0x00000 else 0x00001) in
+ let newCap = {cap with address=base, E=#\hyperref[ztozybits]{to\_bits}#(6, e), B=Bc, T=T2} in
+ let newBase = #\hyperref[zgetCapBase]{getCapBase}#(newCap) in
+ let newTop = #\hyperref[zgetCapTop]{getCapTop}#(newCap) in
+ let exact = (#\hyperref[zunsigned]{unsigned}#(base) == newBase) & (#\hyperref[zunsigned]{unsigned}#(top) == newTop) in
+ (exact, newCap)
diff --git a/cheri/sail_latexcc/sailccfnsetCapOffset.tex b/cheri/sail_latexcc/sailccfnsetCapOffset.tex
new file mode 100644
index 00000000..f272f7d3
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnsetCapOffset.tex
@@ -0,0 +1,6 @@
+function #\hyperref[zsetCapOffset]{setCapOffset}#(c, offset) : (CapStruct, #\hyperref[zbits]{bits}#(64)) -> (bool, CapStruct) =
+ let base : #\hyperref[zbits]{bits}#(64) = #\hyperref[ztozybits]{to\_bits}#(64, #\hyperref[zgetCapBase]{getCapBase}#(c)) in
+ let newAddress : #\hyperref[zbits]{bits}#(64) = base + offset in
+ let newCap = { c with address = newAddress } in
+ let representable = #\hyperref[zfastRepCheck]{fastRepCheck}#(c, (newAddress - c.address)) in
+ (representable, newCap)
diff --git a/cheri/sail_latexcc/sailccfnsetCapPerms.tex b/cheri/sail_latexcc/sailccfnsetCapPerms.tex
new file mode 100644
index 00000000..5af9e7f6
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnsetCapPerms.tex
@@ -0,0 +1,16 @@
+function #\hyperref[zsetCapPerms]{setCapPerms}#(cap, perms) : (CapStruct, #\hyperref[zbits]{bits}#(31)) -> CapStruct =
+ { cap with
+ uperms = perms[18..15],
+ /* 14..11 reserved -- ignore */
+ access_system_regs = perms[10],
+ permit_unseal = perms[9],
+ permit_ccall = perms[8],
+ permit_seal = perms[7],
+ permit_store_local_cap = perms[6],
+ permit_store_cap = perms[5],
+ permit_load_cap = perms[4],
+ permit_store = perms[3],
+ permit_load = perms[2],
+ permit_execute = perms[1],
+ global = perms[0]
+ }
diff --git a/cheri/sail_latexcc/sailccfntobits.tex b/cheri/sail_latexcc/sailccfntobits.tex
new file mode 100644
index 00000000..d1df5e83
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfntobits.tex
@@ -0,0 +1 @@
+function #\hyperref[ztozybits]{to\_bits}# (l, n) = #\hyperref[zgetzyslicezyint]{get\_slice\_int}#(l, n, 0)
diff --git a/cheri/sail_latexcc/sailccfnzeightoperatorzzerozIsznine.tex b/cheri/sail_latexcc/sailccfnzeightoperatorzzerozIsznine.tex
new file mode 100644
index 00000000..62e5a2e4
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnzeightoperatorzzerozIsznine.tex
@@ -0,0 +1 @@
+function operator <#\hyperref[zzys]{\_s}# (x, y) = #\hyperref[zsigned]{signed}#(x) < #\hyperref[zsigned]{signed}#(y)
diff --git a/cheri/sail_latexcc/sailccfnzeightoperatorzzerozIuznine.tex b/cheri/sail_latexcc/sailccfnzeightoperatorzzerozIuznine.tex
new file mode 100644
index 00000000..3f946820
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnzeightoperatorzzerozIuznine.tex
@@ -0,0 +1 @@
+function operator <#\hyperref[zzyu]{\_u}# (x, y) = #\hyperref[zunsigned]{unsigned}#(x) < #\hyperref[zunsigned]{unsigned}#(y)
diff --git a/cheri/sail_latexcc/sailccfnzeightoperatorzzerozKzJsznine.tex b/cheri/sail_latexcc/sailccfnzeightoperatorzzerozKzJsznine.tex
new file mode 100644
index 00000000..57ecf181
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnzeightoperatorzzerozKzJsznine.tex
@@ -0,0 +1 @@
+function operator >=#\hyperref[zzys]{\_s}# (x, y) = #\hyperref[zsigned]{signed}#(x) >= #\hyperref[zsigned]{signed}#(y)
diff --git a/cheri/sail_latexcc/sailccfnzeightoperatorzzerozKzJuznine.tex b/cheri/sail_latexcc/sailccfnzeightoperatorzzerozKzJuznine.tex
new file mode 100644
index 00000000..6df36c6f
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnzeightoperatorzzerozKzJuznine.tex
@@ -0,0 +1 @@
+function operator >=#\hyperref[zzyu]{\_u}# (x, y) = #\hyperref[zunsigned]{unsigned}#(x) >= #\hyperref[zunsigned]{unsigned}#(y)
diff --git a/cheri/sail_latexcc/sailccfnzeightoperatorzzerozQzQznine.tex b/cheri/sail_latexcc/sailccfnzeightoperatorzzerozQzQznine.tex
new file mode 100644
index 00000000..2c372e1b
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnzeightoperatorzzerozQzQznine.tex
@@ -0,0 +1 @@
+function operator ^^ (bs, n) = #\hyperref[zreplicatezybits]{replicate\_bits}# (bs, n)
diff --git a/cheri/sail_latexcc/sailccfnzzeros.tex b/cheri/sail_latexcc/sailccfnzzeros.tex
new file mode 100644
index 00000000..38d463fb
--- /dev/null
+++ b/cheri/sail_latexcc/sailccfnzzeros.tex
@@ -0,0 +1 @@
+function #\hyperref[zzzeros]{zeros}#() = #\hyperref[zreplicatezybits]{replicate\_bits}# (0b0,'n)
diff --git a/cheri/sail_latexcc/sailccgetCapBase.tex b/cheri/sail_latexcc/sailccgetCapBase.tex
new file mode 100644
index 00000000..c7044d1d
--- /dev/null
+++ b/cheri/sail_latexcc/sailccgetCapBase.tex
@@ -0,0 +1 @@
+val getCapBase : CapStruct -> uint64
diff --git a/cheri/sail_latexcc/sailccgetCapCursor.tex b/cheri/sail_latexcc/sailccgetCapCursor.tex
new file mode 100644
index 00000000..fd5d72d8
--- /dev/null
+++ b/cheri/sail_latexcc/sailccgetCapCursor.tex
@@ -0,0 +1 @@
+val getCapCursor : CapStruct -> uint64
diff --git a/cheri/sail_latexcc/sailccgetCapHardPerms.tex b/cheri/sail_latexcc/sailccgetCapHardPerms.tex
new file mode 100644
index 00000000..3b65a7c0
--- /dev/null
+++ b/cheri/sail_latexcc/sailccgetCapHardPerms.tex
@@ -0,0 +1 @@
+val getCapHardPerms : CapStruct -> bits(11)
diff --git a/cheri/sail_latexcc/sailccgetCapLength.tex b/cheri/sail_latexcc/sailccgetCapLength.tex
new file mode 100644
index 00000000..be84bfb5
--- /dev/null
+++ b/cheri/sail_latexcc/sailccgetCapLength.tex
@@ -0,0 +1 @@
+val getCapLength : CapStruct -> CapLen effect {escape}
diff --git a/cheri/sail_latexcc/sailccgetCapOffset.tex b/cheri/sail_latexcc/sailccgetCapOffset.tex
new file mode 100644
index 00000000..668c3df1
--- /dev/null
+++ b/cheri/sail_latexcc/sailccgetCapOffset.tex
@@ -0,0 +1 @@
+val getCapOffset : CapStruct -> uint64
diff --git a/cheri/sail_latexcc/sailccgetCapPerms.tex b/cheri/sail_latexcc/sailccgetCapPerms.tex
new file mode 100644
index 00000000..b2dabf89
--- /dev/null
+++ b/cheri/sail_latexcc/sailccgetCapPerms.tex
@@ -0,0 +1 @@
+val getCapPerms : CapStruct -> bits(31)
diff --git a/cheri/sail_latexcc/sailccgetCapTop.tex b/cheri/sail_latexcc/sailccgetCapTop.tex
new file mode 100644
index 00000000..ff0e5f95
--- /dev/null
+++ b/cheri/sail_latexcc/sailccgetCapTop.tex
@@ -0,0 +1 @@
+val getCapTop : CapStruct -> CapLen
diff --git a/cheri/sail_latexcc/sailccgetsliceint.tex b/cheri/sail_latexcc/sailccgetsliceint.tex
new file mode 100644
index 00000000..2b30d096
--- /dev/null
+++ b/cheri/sail_latexcc/sailccgetsliceint.tex
@@ -0,0 +1 @@
+val get_slice_int = "get_slice_int" : forall 'w. (atom('w), int, int) -> #\hyperref[zbits]{bits}#('w)
diff --git a/cheri/sail_latexcc/sailccgettimens.tex b/cheri/sail_latexcc/sailccgettimens.tex
new file mode 100644
index 00000000..74cfd526
--- /dev/null
+++ b/cheri/sail_latexcc/sailccgettimens.tex
@@ -0,0 +1 @@
+val "get_time_ns" : unit -> int
diff --git a/cheri/sail_latexcc/sailccgtatom.tex b/cheri/sail_latexcc/sailccgtatom.tex
new file mode 100644
index 00000000..b2147a8f
--- /dev/null
+++ b/cheri/sail_latexcc/sailccgtatom.tex
@@ -0,0 +1 @@
+val gt_atom = {coq: "Z.gtb", _: "gt"} : forall 'n 'm. (atom('n), atom('m)) -> bool
diff --git a/cheri/sail_latexcc/sailccgtatomrange.tex b/cheri/sail_latexcc/sailccgtatomrange.tex
new file mode 100644
index 00000000..3c520181
--- /dev/null
+++ b/cheri/sail_latexcc/sailccgtatomrange.tex
@@ -0,0 +1 @@
+val gt_atom_range = {coq: "gtb_range_r", _: "gt"} : forall 'n 'm 'o. (atom('n), range('m, 'o)) -> bool
diff --git a/cheri/sail_latexcc/sailccgteqatom.tex b/cheri/sail_latexcc/sailccgteqatom.tex
new file mode 100644
index 00000000..fb3b66b2
--- /dev/null
+++ b/cheri/sail_latexcc/sailccgteqatom.tex
@@ -0,0 +1 @@
+val gteq_atom = {coq: "Z.geb", _: "gteq"} : forall 'n 'm. (atom('n), atom('m)) -> bool
diff --git a/cheri/sail_latexcc/sailccgteqatomrange.tex b/cheri/sail_latexcc/sailccgteqatomrange.tex
new file mode 100644
index 00000000..7aaf633f
--- /dev/null
+++ b/cheri/sail_latexcc/sailccgteqatomrange.tex
@@ -0,0 +1 @@
+val gteq_atom_range = {coq: "geb_range_r", _: "gteq"} : forall 'n 'm 'o. (atom('n), range('m, 'o)) -> bool
diff --git a/cheri/sail_latexcc/sailccgteqint.tex b/cheri/sail_latexcc/sailccgteqint.tex
new file mode 100644
index 00000000..77271d1f
--- /dev/null
+++ b/cheri/sail_latexcc/sailccgteqint.tex
@@ -0,0 +1 @@
+val gteq_int = {coq: "Z.geb", _:"gteq"} : (int, int) -> bool
diff --git a/cheri/sail_latexcc/sailccgteqrangeatom.tex b/cheri/sail_latexcc/sailccgteqrangeatom.tex
new file mode 100644
index 00000000..fda25265
--- /dev/null
+++ b/cheri/sail_latexcc/sailccgteqrangeatom.tex
@@ -0,0 +1 @@
+val gteq_range_atom = {coq: "geb_range_l", _: "gteq"} : forall 'n 'm 'o. (range('n, 'm), atom('o)) -> bool
diff --git a/cheri/sail_latexcc/sailccgtint.tex b/cheri/sail_latexcc/sailccgtint.tex
new file mode 100644
index 00000000..2d953eec
--- /dev/null
+++ b/cheri/sail_latexcc/sailccgtint.tex
@@ -0,0 +1 @@
+val gt_int = {coq: "Z.gtb", _:"gt"} : (int, int) -> bool
diff --git a/cheri/sail_latexcc/sailccgtrangeatom.tex b/cheri/sail_latexcc/sailccgtrangeatom.tex
new file mode 100644
index 00000000..b8635909
--- /dev/null
+++ b/cheri/sail_latexcc/sailccgtrangeatom.tex
@@ -0,0 +1 @@
+val gt_range_atom = {coq: "gtb_range_l", _: "gt"} : forall 'n 'm 'o. (range('n, 'm), atom('o)) -> bool
diff --git a/cheri/sail_latexcc/sailccincCapOffset.tex b/cheri/sail_latexcc/sailccincCapOffset.tex
new file mode 100644
index 00000000..21c08cb5
--- /dev/null
+++ b/cheri/sail_latexcc/sailccincCapOffset.tex
@@ -0,0 +1 @@
+val incCapOffset : (CapStruct, bits(64)) -> (bool, CapStruct)
diff --git a/cheri/sail_latexcc/sailccintpower.tex b/cheri/sail_latexcc/sailccintpower.tex
new file mode 100644
index 00000000..0aa13188
--- /dev/null
+++ b/cheri/sail_latexcc/sailccintpower.tex
@@ -0,0 +1 @@
+val int_power = {ocaml: "int_power", lem: "pow", coq: "Z.pow"} : (int, int) -> int
diff --git a/cheri/sail_latexcc/sailccinttocap.tex b/cheri/sail_latexcc/sailccinttocap.tex
new file mode 100644
index 00000000..0f4cd328
--- /dev/null
+++ b/cheri/sail_latexcc/sailccinttocap.tex
@@ -0,0 +1 @@
+val int_to_cap : bits(64) -> CapStruct
diff --git a/cheri/sail_latexcc/sailccisnone.tex b/cheri/sail_latexcc/sailccisnone.tex
new file mode 100644
index 00000000..76688d37
--- /dev/null
+++ b/cheri/sail_latexcc/sailccisnone.tex
@@ -0,0 +1 @@
+val is_none : forall ('a : Type). #\hyperref[zoption]{option}#('a) -> bool
diff --git a/cheri/sail_latexcc/sailccissome.tex b/cheri/sail_latexcc/sailccissome.tex
new file mode 100644
index 00000000..071ac6b6
--- /dev/null
+++ b/cheri/sail_latexcc/sailccissome.tex
@@ -0,0 +1 @@
+val is_some : forall ('a : Type). #\hyperref[zoption]{option}#('a) -> bool
diff --git a/cheri/sail_latexcc/sailcclength.tex b/cheri/sail_latexcc/sailcclength.tex
new file mode 100644
index 00000000..248c8507
--- /dev/null
+++ b/cheri/sail_latexcc/sailcclength.tex
@@ -0,0 +1 @@
+overload length = {bitvector_length, vector_length} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailccltatom.tex b/cheri/sail_latexcc/sailccltatom.tex
new file mode 100644
index 00000000..5cca54df
--- /dev/null
+++ b/cheri/sail_latexcc/sailccltatom.tex
@@ -0,0 +1 @@
+val lt_atom = {coq: "Z.ltb", _: "lt"} : forall 'n 'm. (atom('n), atom('m)) -> bool
diff --git a/cheri/sail_latexcc/sailccltatomrange.tex b/cheri/sail_latexcc/sailccltatomrange.tex
new file mode 100644
index 00000000..19d3375d
--- /dev/null
+++ b/cheri/sail_latexcc/sailccltatomrange.tex
@@ -0,0 +1 @@
+val lt_atom_range = {coq: "ltb_range_r", _: "lt"} : forall 'n 'm 'o. (atom('n), range('m, 'o)) -> bool
diff --git a/cheri/sail_latexcc/sailcclteqatom.tex b/cheri/sail_latexcc/sailcclteqatom.tex
new file mode 100644
index 00000000..26e27e2d
--- /dev/null
+++ b/cheri/sail_latexcc/sailcclteqatom.tex
@@ -0,0 +1 @@
+val lteq_atom = {coq: "Z.leb", _: "lteq"} : forall 'n 'm. (atom('n), atom('m)) -> bool
diff --git a/cheri/sail_latexcc/sailcclteqatomrange.tex b/cheri/sail_latexcc/sailcclteqatomrange.tex
new file mode 100644
index 00000000..6e951cf7
--- /dev/null
+++ b/cheri/sail_latexcc/sailcclteqatomrange.tex
@@ -0,0 +1 @@
+val lteq_atom_range = {coq: "leb_range_r", _: "lteq"} : forall 'n 'm 'o. (atom('n), range('m, 'o)) -> bool
diff --git a/cheri/sail_latexcc/sailcclteqint.tex b/cheri/sail_latexcc/sailcclteqint.tex
new file mode 100644
index 00000000..555176be
--- /dev/null
+++ b/cheri/sail_latexcc/sailcclteqint.tex
@@ -0,0 +1 @@
+val lteq_int = {coq: "Z.leb", _:"lteq"} : (int, int) -> bool
diff --git a/cheri/sail_latexcc/sailcclteqrangeatom.tex b/cheri/sail_latexcc/sailcclteqrangeatom.tex
new file mode 100644
index 00000000..f8fcd32d
--- /dev/null
+++ b/cheri/sail_latexcc/sailcclteqrangeatom.tex
@@ -0,0 +1 @@
+val lteq_range_atom = {coq: "leb_range_l", _: "lteq"} : forall 'n 'm 'o. (range('n, 'm), atom('o)) -> bool
diff --git a/cheri/sail_latexcc/sailccltint.tex b/cheri/sail_latexcc/sailccltint.tex
new file mode 100644
index 00000000..40bd4e85
--- /dev/null
+++ b/cheri/sail_latexcc/sailccltint.tex
@@ -0,0 +1 @@
+val lt_int = {coq: "Z.ltb", _:"lt"} : (int, int) -> bool
diff --git a/cheri/sail_latexcc/sailccltrangeatom.tex b/cheri/sail_latexcc/sailccltrangeatom.tex
new file mode 100644
index 00000000..d8495496
--- /dev/null
+++ b/cheri/sail_latexcc/sailccltrangeatom.tex
@@ -0,0 +1 @@
+val lt_range_atom = {coq: "ltb_range_l", _: "lt"} : forall 'n 'm 'o. (range('n, 'm), atom('o)) -> bool
diff --git a/cheri/sail_latexcc/sailccmask.tex b/cheri/sail_latexcc/sailccmask.tex
new file mode 100644
index 00000000..35d052db
--- /dev/null
+++ b/cheri/sail_latexcc/sailccmask.tex
@@ -0,0 +1 @@
+val mask : forall 'm 'n , 'm >= 'n > 0 . #\hyperref[zbits]{bits}#('m) -> #\hyperref[zbits]{bits}#('n)
diff --git a/cheri/sail_latexcc/sailccmax.tex b/cheri/sail_latexcc/sailccmax.tex
new file mode 100644
index 00000000..1ceed42c
--- /dev/null
+++ b/cheri/sail_latexcc/sailccmax.tex
@@ -0,0 +1 @@
+overload max = {max_atom, max_nat, max_int} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailccmaxatom.tex b/cheri/sail_latexcc/sailccmaxatom.tex
new file mode 100644
index 00000000..6cbdfa7f
--- /dev/null
+++ b/cheri/sail_latexcc/sailccmaxatom.tex
@@ -0,0 +1 @@
+val max_atom = {ocaml: "max_int", lem: "max", coq: "max_atom", c:"max_int"} : forall 'a 'b . (atom('a), atom('b)) -> {'c, ('c = 'a | 'c = 'b) & 'c >= 'a & 'c >= 'b . atom('c)}
diff --git a/cheri/sail_latexcc/sailccmaxint.tex b/cheri/sail_latexcc/sailccmaxint.tex
new file mode 100644
index 00000000..c537babb
--- /dev/null
+++ b/cheri/sail_latexcc/sailccmaxint.tex
@@ -0,0 +1 @@
+val max_int = {lem: "max", coq: "Z.max", _: "max_int"} : (int, int) -> int
diff --git a/cheri/sail_latexcc/sailccmaxnat.tex b/cheri/sail_latexcc/sailccmaxnat.tex
new file mode 100644
index 00000000..1b62334a
--- /dev/null
+++ b/cheri/sail_latexcc/sailccmaxnat.tex
@@ -0,0 +1 @@
+val max_nat = {lem: "max", coq: "Z.max", _: "max_int"} : (nat, nat) -> nat
diff --git a/cheri/sail_latexcc/sailccmemBitsToCapBits.tex b/cheri/sail_latexcc/sailccmemBitsToCapBits.tex
new file mode 100644
index 00000000..a5c86272
--- /dev/null
+++ b/cheri/sail_latexcc/sailccmemBitsToCapBits.tex
@@ -0,0 +1 @@
+val memBitsToCapBits : (bool, bits(128)) -> bits(129)
diff --git a/cheri/sail_latexcc/sailccmemBitsToCapBitsonetwoeight.tex b/cheri/sail_latexcc/sailccmemBitsToCapBitsonetwoeight.tex
new file mode 100644
index 00000000..4eb94a3d
--- /dev/null
+++ b/cheri/sail_latexcc/sailccmemBitsToCapBitsonetwoeight.tex
@@ -0,0 +1 @@
+val memBitsToCapBits128 : (bool, bits(128)) -> CapReg
diff --git a/cheri/sail_latexcc/sailccmin.tex b/cheri/sail_latexcc/sailccmin.tex
new file mode 100644
index 00000000..94097198
--- /dev/null
+++ b/cheri/sail_latexcc/sailccmin.tex
@@ -0,0 +1 @@
+overload min = {min_atom, min_nat, min_int} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailccminatom.tex b/cheri/sail_latexcc/sailccminatom.tex
new file mode 100644
index 00000000..acfea384
--- /dev/null
+++ b/cheri/sail_latexcc/sailccminatom.tex
@@ -0,0 +1 @@
+val min_atom = {ocaml: "min_int", lem: "min", coq: "min_atom", c:"min_int"} : forall 'a 'b . (atom('a), atom('b)) -> {'c, ('c = 'a | 'c = 'b) & 'c <= 'a & 'c <= 'b . atom('c)}
diff --git a/cheri/sail_latexcc/sailccminint.tex b/cheri/sail_latexcc/sailccminint.tex
new file mode 100644
index 00000000..3d633d08
--- /dev/null
+++ b/cheri/sail_latexcc/sailccminint.tex
@@ -0,0 +1 @@
+val min_int = {lem: "min", coq: "Z.min", _: "min_int"} : (int, int) -> int
diff --git a/cheri/sail_latexcc/sailccminnat.tex b/cheri/sail_latexcc/sailccminnat.tex
new file mode 100644
index 00000000..85409bd8
--- /dev/null
+++ b/cheri/sail_latexcc/sailccminnat.tex
@@ -0,0 +1 @@
+val min_nat = {lem: "min", coq: "Z.min", _: "min_int"} : (nat, nat) -> nat
diff --git a/cheri/sail_latexcc/sailccmipssignextend.tex b/cheri/sail_latexcc/sailccmipssignextend.tex
new file mode 100644
index 00000000..e613567d
--- /dev/null
+++ b/cheri/sail_latexcc/sailccmipssignextend.tex
@@ -0,0 +1 @@
+val mips_sign_extend : forall 'n 'm , 'm >= 'n . #\hyperref[zbits]{bits}#('n) -> #\hyperref[zbits]{bits}#('m)
diff --git a/cheri/sail_latexcc/sailccmipszzeroextend.tex b/cheri/sail_latexcc/sailccmipszzeroextend.tex
new file mode 100644
index 00000000..adbb4188
--- /dev/null
+++ b/cheri/sail_latexcc/sailccmipszzeroextend.tex
@@ -0,0 +1 @@
+val mips_zero_extend : forall 'n 'm , 'm >= 'n . #\hyperref[zbits]{bits}#('n) -> #\hyperref[zbits]{bits}#('m)
diff --git a/cheri/sail_latexcc/sailccmod.tex b/cheri/sail_latexcc/sailccmod.tex
new file mode 100644
index 00000000..ab70dd7a
--- /dev/null
+++ b/cheri/sail_latexcc/sailccmod.tex
@@ -0,0 +1,7 @@
+val mod = {
+ smt: "mod",
+ ocaml: "modulus",
+ lem: "integerMod",
+ c: "tmod_int",
+ coq: "mod_with_eq"
+} : forall 'n 'm. (atom('n), atom('m)) -> {'o, 'o = #\hyperref[zmod]{mod}#('n, 'm). atom('o)}
diff --git a/cheri/sail_latexcc/sailccmodint.tex b/cheri/sail_latexcc/sailccmodint.tex
new file mode 100644
index 00000000..bd5677aa
--- /dev/null
+++ b/cheri/sail_latexcc/sailccmodint.tex
@@ -0,0 +1,7 @@
+val mod_int = {
+ smt: "mod",
+ ocaml: "modulus",
+ lem: "integerMod",
+ c: "tmod_int",
+ coq: "Z.rem"
+} : (int, int) -> int
diff --git a/cheri/sail_latexcc/sailccmodulus.tex b/cheri/sail_latexcc/sailccmodulus.tex
new file mode 100644
index 00000000..ca23a339
--- /dev/null
+++ b/cheri/sail_latexcc/sailccmodulus.tex
@@ -0,0 +1 @@
+val modulus = {ocaml: "modulus", lem: "hardware_mod", coq: "euclid_modulo", _ : "tmod_int"} : forall 'n, 'n > 0 . (int, atom('n)) -> range(0, 'n - 1)
diff --git a/cheri/sail_latexcc/sailccmultatom.tex b/cheri/sail_latexcc/sailccmultatom.tex
new file mode 100644
index 00000000..bbac3e2f
--- /dev/null
+++ b/cheri/sail_latexcc/sailccmultatom.tex
@@ -0,0 +1,2 @@
+val mult_atom = {ocaml: "mult", lem: "integerMult", c: "mult_int", coq: "Z.mul"} : forall 'n 'm.
+ (atom('n), atom('m)) -> atom('n * 'm)
diff --git a/cheri/sail_latexcc/sailccmultint.tex b/cheri/sail_latexcc/sailccmultint.tex
new file mode 100644
index 00000000..08698e6f
--- /dev/null
+++ b/cheri/sail_latexcc/sailccmultint.tex
@@ -0,0 +1 @@
+val mult_int = {ocaml: "mult", lem: "integerMult", c: "mult_int", coq: "Z.mul"} : (int, int) -> int
diff --git a/cheri/sail_latexcc/sailccnegate.tex b/cheri/sail_latexcc/sailccnegate.tex
new file mode 100644
index 00000000..ce000062
--- /dev/null
+++ b/cheri/sail_latexcc/sailccnegate.tex
@@ -0,0 +1 @@
+overload negate = {negate_range, negate_int} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailccnegateatom.tex b/cheri/sail_latexcc/sailccnegateatom.tex
new file mode 100644
index 00000000..d1361e63
--- /dev/null
+++ b/cheri/sail_latexcc/sailccnegateatom.tex
@@ -0,0 +1 @@
+val negate_atom = {ocaml: "negate", lem: "integerNegate", c: "neg_int", coq: "Z.opp"} : forall 'n. atom('n) -> atom(- 'n)
diff --git a/cheri/sail_latexcc/sailccnegateint.tex b/cheri/sail_latexcc/sailccnegateint.tex
new file mode 100644
index 00000000..52375787
--- /dev/null
+++ b/cheri/sail_latexcc/sailccnegateint.tex
@@ -0,0 +1 @@
+val negate_int = {ocaml: "negate", lem: "integerNegate", c: "neg_int", coq: "Z.opp"} : int -> int
diff --git a/cheri/sail_latexcc/sailccnegaterange.tex b/cheri/sail_latexcc/sailccnegaterange.tex
new file mode 100644
index 00000000..7a4ad386
--- /dev/null
+++ b/cheri/sail_latexcc/sailccnegaterange.tex
@@ -0,0 +1 @@
+val negate_range = {ocaml: "minus_big_int", lem: "integerNegate", coq: "negate_range"} : forall 'n 'm. range('n, 'm) -> range(- 'm, - 'n)
diff --git a/cheri/sail_latexcc/sailccneqanything.tex b/cheri/sail_latexcc/sailccneqanything.tex
new file mode 100644
index 00000000..a898649e
--- /dev/null
+++ b/cheri/sail_latexcc/sailccneqanything.tex
@@ -0,0 +1 @@
+val neq_anything = {lem: "neq", coq: "generic_neq"} : forall ('a : Type). ('a, 'a) -> bool
diff --git a/cheri/sail_latexcc/sailccneqatom.tex b/cheri/sail_latexcc/sailccneqatom.tex
new file mode 100644
index 00000000..be777013
--- /dev/null
+++ b/cheri/sail_latexcc/sailccneqatom.tex
@@ -0,0 +1 @@
+val neq_atom = {lem: "neq", coq: "neq_atom"} : forall 'n 'm. (atom('n), atom('m)) -> bool
diff --git a/cheri/sail_latexcc/sailccneqbool.tex b/cheri/sail_latexcc/sailccneqbool.tex
new file mode 100644
index 00000000..0d80dc17
--- /dev/null
+++ b/cheri/sail_latexcc/sailccneqbool.tex
@@ -0,0 +1 @@
+val neq_bool : (bool, bool) -> bool
diff --git a/cheri/sail_latexcc/sailccneqint.tex b/cheri/sail_latexcc/sailccneqint.tex
new file mode 100644
index 00000000..b233ca6b
--- /dev/null
+++ b/cheri/sail_latexcc/sailccneqint.tex
@@ -0,0 +1 @@
+val neq_int = {lem: "neq"} : (int, int) -> bool
diff --git a/cheri/sail_latexcc/sailccneqrange.tex b/cheri/sail_latexcc/sailccneqrange.tex
new file mode 100644
index 00000000..d2d8fb0c
--- /dev/null
+++ b/cheri/sail_latexcc/sailccneqrange.tex
@@ -0,0 +1 @@
+val neq_range = {lem: "neq"} : forall 'n 'm 'o 'p. (range('n, 'm), range('o, 'p)) -> bool
diff --git a/cheri/sail_latexcc/sailccneqvec.tex b/cheri/sail_latexcc/sailccneqvec.tex
new file mode 100644
index 00000000..f655b3d8
--- /dev/null
+++ b/cheri/sail_latexcc/sailccneqvec.tex
@@ -0,0 +1 @@
+val neq_vec = {lem: "neq"} : forall 'n. (#\hyperref[zbits]{bits}#('n), #\hyperref[zbits]{bits}#('n)) -> bool
diff --git a/cheri/sail_latexcc/sailccnot.tex b/cheri/sail_latexcc/sailccnot.tex
new file mode 100644
index 00000000..515b3ef9
--- /dev/null
+++ b/cheri/sail_latexcc/sailccnot.tex
@@ -0,0 +1 @@
+val not = {coq:"negb", _:"not"} : bool -> bool
diff --git a/cheri/sail_latexcc/sailccnotbool.tex b/cheri/sail_latexcc/sailccnotbool.tex
new file mode 100644
index 00000000..7630f6c2
--- /dev/null
+++ b/cheri/sail_latexcc/sailccnotbool.tex
@@ -0,0 +1 @@
+val not_bool = {coq: "negb", _: "not"} : bool -> bool
diff --git a/cheri/sail_latexcc/sailccnotvec.tex b/cheri/sail_latexcc/sailccnotvec.tex
new file mode 100644
index 00000000..a560a544
--- /dev/null
+++ b/cheri/sail_latexcc/sailccnotvec.tex
@@ -0,0 +1 @@
+val not_vec = {c:"not_bits", _:"not_vec"} : forall 'n. #\hyperref[zbits]{bits}#('n) -> #\hyperref[zbits]{bits}#('n)
diff --git a/cheri/sail_latexcc/sailccnumofCPtrCmpOp.tex b/cheri/sail_latexcc/sailccnumofCPtrCmpOp.tex
new file mode 100644
index 00000000..40f1bfa9
--- /dev/null
+++ b/cheri/sail_latexcc/sailccnumofCPtrCmpOp.tex
@@ -0,0 +1 @@
+val num_of_CPtrCmpOp : CPtrCmpOp -> {'e, 0 <= 'e & 'e <= 7. atom('e)}
diff --git a/cheri/sail_latexcc/sailccnumofClearRegSet.tex b/cheri/sail_latexcc/sailccnumofClearRegSet.tex
new file mode 100644
index 00000000..14ea7bea
--- /dev/null
+++ b/cheri/sail_latexcc/sailccnumofClearRegSet.tex
@@ -0,0 +1 @@
+val num_of_ClearRegSet : ClearRegSet -> {'e, 0 <= 'e & 'e <= 3. atom('e)}
diff --git a/cheri/sail_latexcc/sailccones.tex b/cheri/sail_latexcc/sailccones.tex
new file mode 100644
index 00000000..94fd805f
--- /dev/null
+++ b/cheri/sail_latexcc/sailccones.tex
@@ -0,0 +1 @@
+val ones : forall 'n, 'n >= 0 . unit -> #\hyperref[zbits]{bits}#('n)
diff --git a/cheri/sail_latexcc/sailccorbits.tex b/cheri/sail_latexcc/sailccorbits.tex
new file mode 100644
index 00000000..55db5ffa
--- /dev/null
+++ b/cheri/sail_latexcc/sailccorbits.tex
@@ -0,0 +1 @@
+val or_bits = {c: "or_bits", _: "or_vec"} : forall 'n. (#\hyperref[zbits]{bits}#('n), #\hyperref[zbits]{bits}#('n)) -> #\hyperref[zbits]{bits}#('n)
diff --git a/cheri/sail_latexcc/sailccorbool.tex b/cheri/sail_latexcc/sailccorbool.tex
new file mode 100644
index 00000000..4b6bfa15
--- /dev/null
+++ b/cheri/sail_latexcc/sailccorbool.tex
@@ -0,0 +1 @@
+val or_bool = {coq: "orb", _: "or_bool"} : (bool, bool) -> bool
diff --git a/cheri/sail_latexcc/sailccplainvectoraccess.tex b/cheri/sail_latexcc/sailccplainvectoraccess.tex
new file mode 100644
index 00000000..94824f77
--- /dev/null
+++ b/cheri/sail_latexcc/sailccplainvectoraccess.tex
@@ -0,0 +1,6 @@
+val plain_vector_access = {
+ ocaml: "access",
+ lem: "access_list_dec",
+ coq: "vec_access_dec",
+ c: "vector_access"
+} : forall ('n : Int) ('m : Int) ('a : Type), 0 <= 'm < 'n. (vector('n, dec, 'a), atom('m)) -> 'a
diff --git a/cheri/sail_latexcc/sailccplainvectorupdate.tex b/cheri/sail_latexcc/sailccplainvectorupdate.tex
new file mode 100644
index 00000000..6880d9bd
--- /dev/null
+++ b/cheri/sail_latexcc/sailccplainvectorupdate.tex
@@ -0,0 +1,6 @@
+val plain_vector_update = {
+ ocaml: "update",
+ lem: "update_list_dec",
+ coq: "vec_update_dec",
+ c: "vector_update"
+} : forall '#\hyperref[zn]{n}# ('a : Type). (vector('n, dec, 'a), int, 'a) -> vector('n, dec, 'a)
diff --git a/cheri/sail_latexcc/sailccpowtwo.tex b/cheri/sail_latexcc/sailccpowtwo.tex
new file mode 100644
index 00000000..41da946e
--- /dev/null
+++ b/cheri/sail_latexcc/sailccpowtwo.tex
@@ -0,0 +1 @@
+val pow2 = "pow2" : forall 'n. atom('n) -> atom(2 ^ 'n)
diff --git a/cheri/sail_latexcc/sailccprerrbits.tex b/cheri/sail_latexcc/sailccprerrbits.tex
new file mode 100644
index 00000000..7d926384
--- /dev/null
+++ b/cheri/sail_latexcc/sailccprerrbits.tex
@@ -0,0 +1 @@
+val "prerr_bits" : forall 'n. (string, #\hyperref[zbits]{bits}#('n)) -> unit
diff --git a/cheri/sail_latexcc/sailccprerrendline.tex b/cheri/sail_latexcc/sailccprerrendline.tex
new file mode 100644
index 00000000..ad4a94a0
--- /dev/null
+++ b/cheri/sail_latexcc/sailccprerrendline.tex
@@ -0,0 +1 @@
+val "prerr_endline" : string -> unit
diff --git a/cheri/sail_latexcc/sailccprerrint.tex b/cheri/sail_latexcc/sailccprerrint.tex
new file mode 100644
index 00000000..ce7a7d61
--- /dev/null
+++ b/cheri/sail_latexcc/sailccprerrint.tex
@@ -0,0 +1 @@
+val "prerr_int" : (string, int) -> unit
diff --git a/cheri/sail_latexcc/sailccprerrstring.tex b/cheri/sail_latexcc/sailccprerrstring.tex
new file mode 100644
index 00000000..7b849da2
--- /dev/null
+++ b/cheri/sail_latexcc/sailccprerrstring.tex
@@ -0,0 +1 @@
+val "prerr_string" : string -> unit
diff --git a/cheri/sail_latexcc/sailccprint.tex b/cheri/sail_latexcc/sailccprint.tex
new file mode 100644
index 00000000..50a64219
--- /dev/null
+++ b/cheri/sail_latexcc/sailccprint.tex
@@ -0,0 +1 @@
+val print = "print_endline" : string -> unit
diff --git a/cheri/sail_latexcc/sailccprintbits.tex b/cheri/sail_latexcc/sailccprintbits.tex
new file mode 100644
index 00000000..8783a59a
--- /dev/null
+++ b/cheri/sail_latexcc/sailccprintbits.tex
@@ -0,0 +1 @@
+val "print_bits" : forall 'n. (string, #\hyperref[zbits]{bits}#('n)) -> unit
diff --git a/cheri/sail_latexcc/sailccprintint.tex b/cheri/sail_latexcc/sailccprintint.tex
new file mode 100644
index 00000000..ddf33afc
--- /dev/null
+++ b/cheri/sail_latexcc/sailccprintint.tex
@@ -0,0 +1 @@
+val "print_int" : (string, int) -> unit
diff --git a/cheri/sail_latexcc/sailccputchar.tex b/cheri/sail_latexcc/sailccputchar.tex
new file mode 100644
index 00000000..a123c709
--- /dev/null
+++ b/cheri/sail_latexcc/sailccputchar.tex
@@ -0,0 +1 @@
+val putchar = {c:"sail_putchar", _:"putchar"} : int -> unit
diff --git a/cheri/sail_latexcc/sailccquotient.tex b/cheri/sail_latexcc/sailccquotient.tex
new file mode 100644
index 00000000..7dba5359
--- /dev/null
+++ b/cheri/sail_latexcc/sailccquotient.tex
@@ -0,0 +1 @@
+val quotient = {ocaml: "quotient", lem: "integerDiv", coq: "Z.mod"} : (int, int) -> int
diff --git a/cheri/sail_latexcc/sailccquotientnat.tex b/cheri/sail_latexcc/sailccquotientnat.tex
new file mode 100644
index 00000000..14db4ae0
--- /dev/null
+++ b/cheri/sail_latexcc/sailccquotientnat.tex
@@ -0,0 +1 @@
+val quotient_nat = {ocaml: "quotient", lem: "integerDiv", coq: "Z.div"} : (nat, nat) -> nat
diff --git a/cheri/sail_latexcc/sailccquotroundzzero.tex b/cheri/sail_latexcc/sailccquotroundzzero.tex
new file mode 100644
index 00000000..9523cfcc
--- /dev/null
+++ b/cheri/sail_latexcc/sailccquotroundzzero.tex
@@ -0,0 +1 @@
+val quot_round_zero = {ocaml: "quot_round_zero", lem: "hardware_quot", coq: "Z.quot", _ : "tdiv_int"} : (int, int) -> int
diff --git a/cheri/sail_latexcc/sailccregderef.tex b/cheri/sail_latexcc/sailccregderef.tex
new file mode 100644
index 00000000..7f1dc7e8
--- /dev/null
+++ b/cheri/sail_latexcc/sailccregderef.tex
@@ -0,0 +1 @@
+val _reg_deref = "reg_deref" : forall ('a : Type). #\hyperref[zregister]{register}#('a) -> 'a
diff --git a/cheri/sail_latexcc/sailccremroundzzero.tex b/cheri/sail_latexcc/sailccremroundzzero.tex
new file mode 100644
index 00000000..9d8113ba
--- /dev/null
+++ b/cheri/sail_latexcc/sailccremroundzzero.tex
@@ -0,0 +1 @@
+val rem_round_zero = {ocaml: "rem_round_zero", lem: "hardware_mod", coq: "Z.rem", _ : "tmod_int"} : (int, int) -> int
diff --git a/cheri/sail_latexcc/sailccreplicatebits.tex b/cheri/sail_latexcc/sailccreplicatebits.tex
new file mode 100644
index 00000000..cd7a97d7
--- /dev/null
+++ b/cheri/sail_latexcc/sailccreplicatebits.tex
@@ -0,0 +1 @@
+val replicate_bits = "replicate_bits" : forall 'n 'm. (#\hyperref[zbits]{bits}#('n), atom('m)) -> #\hyperref[zbits]{bits}#('n * 'm)
diff --git a/cheri/sail_latexcc/sailccroundUp.tex b/cheri/sail_latexcc/sailccroundUp.tex
new file mode 100644
index 00000000..b7e31074
--- /dev/null
+++ b/cheri/sail_latexcc/sailccroundUp.tex
@@ -0,0 +1 @@
+val roundUp : range(0, 45) -> range(0, 48)
diff --git a/cheri/sail_latexcc/sailccsailccnegatev.tex b/cheri/sail_latexcc/sailccsailccnegatev.tex
new file mode 100644
index 00000000..4f7aea58
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsailccnegatev.tex
@@ -0,0 +1 @@
+overload negate = {negate_atom, negate_int} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailccsailccregderefv.tex b/cheri/sail_latexcc/sailccsailccregderefv.tex
new file mode 100644
index 00000000..f5de92ca
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsailccregderefv.tex
@@ -0,0 +1 @@
+val "reg_deref" : forall ('a : Type). #\hyperref[zregister]{register}#('a) -> 'a effect {rreg}
diff --git a/cheri/sail_latexcc/sailccsailccsailccsailcczeightoperatorzzerozJzJzninevvv.tex b/cheri/sail_latexcc/sailccsailccsailccsailcczeightoperatorzzerozJzJzninevvv.tex
new file mode 100644
index 00000000..0f72fdc9
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsailccsailccsailcczeightoperatorzzerozJzJzninevvv.tex
@@ -0,0 +1 @@
+overload (operator ==) = {eq_bit2} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailccsailccsailcczeightoperatorzzerozBzninevv.tex b/cheri/sail_latexcc/sailccsailccsailcczeightoperatorzzerozBzninevv.tex
new file mode 100644
index 00000000..eacd556c
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsailccsailcczeightoperatorzzerozBzninevv.tex
@@ -0,0 +1 @@
+overload (operator +) = {add_atom, add_int} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailccsailccsailcczeightoperatorzzerozFzninevv.tex b/cheri/sail_latexcc/sailccsailccsailcczeightoperatorzzerozFzninevv.tex
new file mode 100644
index 00000000..73c40722
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsailccsailcczeightoperatorzzerozFzninevv.tex
@@ -0,0 +1 @@
+overload (operator /) = {div} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailccsailccsailcczeightoperatorzzerozJzJzninevv.tex b/cheri/sail_latexcc/sailccsailccsailcczeightoperatorzzerozJzJzninevv.tex
new file mode 100644
index 00000000..47b1d0f6
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsailccsailcczeightoperatorzzerozJzJzninevv.tex
@@ -0,0 +1 @@
+overload (operator ==) = {eq_atom, eq_range, eq_int, eq_bool} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailccsailccsailcczeightoperatorzzerozfivezninevv.tex b/cheri/sail_latexcc/sailccsailccsailcczeightoperatorzzerozfivezninevv.tex
new file mode 100644
index 00000000..552e0c24
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsailccsailcczeightoperatorzzerozfivezninevv.tex
@@ -0,0 +1 @@
+overload (operator %) = {mod} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozAzninev.tex b/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozAzninev.tex
new file mode 100644
index 00000000..afe7a721
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozAzninev.tex
@@ -0,0 +1 @@
+overload (operator *) = {mult_atom, mult_int} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozBzninev.tex b/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozBzninev.tex
new file mode 100644
index 00000000..ddc56bfd
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozBzninev.tex
@@ -0,0 +1 @@
+overload (operator +) = {add_bits, add_bits_int} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozDzninev.tex b/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozDzninev.tex
new file mode 100644
index 00000000..5d12fdf1
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozDzninev.tex
@@ -0,0 +1 @@
+overload (operator -) = {sub_atom, sub_int} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozFzninev.tex b/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozFzninev.tex
new file mode 100644
index 00000000..38e9124b
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozFzninev.tex
@@ -0,0 +1 @@
+overload (operator /) = {div_int} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozJzJzninev.tex b/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozJzJzninev.tex
new file mode 100644
index 00000000..1314a962
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozJzJzninev.tex
@@ -0,0 +1 @@
+overload (operator ==) = {eq_bit, eq_bits} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozQzninev.tex b/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozQzninev.tex
new file mode 100644
index 00000000..05769645
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozQzninev.tex
@@ -0,0 +1 @@
+overload (operator ^) = {sail_mask} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozUzninev.tex b/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozUzninev.tex
new file mode 100644
index 00000000..1ebacbc4
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozUzninev.tex
@@ -0,0 +1 @@
+overload (operator |) = {or_bool} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozfivezninev.tex b/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozfivezninev.tex
new file mode 100644
index 00000000..14fa73b8
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozfivezninev.tex
@@ -0,0 +1 @@
+overload (operator %) = {mod_int} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozonezJzninev.tex b/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozonezJzninev.tex
new file mode 100644
index 00000000..527cf596
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozonezJzninev.tex
@@ -0,0 +1 @@
+overload (operator !=) = {neq_atom, neq_range, neq_int, neq_bool} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozsixzninev.tex b/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozsixzninev.tex
new file mode 100644
index 00000000..be6f29ef
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsailcczeightoperatorzzerozsixzninev.tex
@@ -0,0 +1 @@
+overload (operator &) = {and_bool} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailccsailmask.tex b/cheri/sail_latexcc/sailccsailmask.tex
new file mode 100644
index 00000000..45862747
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsailmask.tex
@@ -0,0 +1 @@
+val sail_mask : forall 'len 'v, 'len >= 0 & 'v >= 0. (atom('len), vector('v, dec, bit)) -> vector('len, dec, bit)
diff --git a/cheri/sail_latexcc/sailccsailsignextend.tex b/cheri/sail_latexcc/sailccsailsignextend.tex
new file mode 100644
index 00000000..dfaa5c86
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsailsignextend.tex
@@ -0,0 +1 @@
+val sail_sign_extend = "sign_extend" : forall 'n 'm, 'm >= 'n. (#\hyperref[zbits]{bits}#('n), atom('m)) -> #\hyperref[zbits]{bits}#('m)
diff --git a/cheri/sail_latexcc/sailccsailzzeroextend.tex b/cheri/sail_latexcc/sailccsailzzeroextend.tex
new file mode 100644
index 00000000..53f6fff9
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsailzzeroextend.tex
@@ -0,0 +1 @@
+val sail_zero_extend = "zero_extend" : forall 'n 'm, 'm >= 'n. (#\hyperref[zbits]{bits}#('n), atom('m)) -> #\hyperref[zbits]{bits}#('m)
diff --git a/cheri/sail_latexcc/sailccsailzzeros.tex b/cheri/sail_latexcc/sailccsailzzeros.tex
new file mode 100644
index 00000000..9c60aa12
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsailzzeros.tex
@@ -0,0 +1 @@
+val sail_zeros = "zeros" : forall 'n. atom('n) -> #\hyperref[zbits]{bits}#('n)
diff --git a/cheri/sail_latexcc/sailccsealCap.tex b/cheri/sail_latexcc/sailccsealCap.tex
new file mode 100644
index 00000000..891ae279
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsealCap.tex
@@ -0,0 +1 @@
+val sealCap : (CapStruct, bits(24)) -> (bool, CapStruct)
diff --git a/cheri/sail_latexcc/sailccsetCapBounds.tex b/cheri/sail_latexcc/sailccsetCapBounds.tex
new file mode 100644
index 00000000..94fbecaf
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsetCapBounds.tex
@@ -0,0 +1 @@
+val setCapBounds : (CapStruct, bits(64), bits(65)) -> (bool, CapStruct) effect {escape}
diff --git a/cheri/sail_latexcc/sailccsetCapOffset.tex b/cheri/sail_latexcc/sailccsetCapOffset.tex
new file mode 100644
index 00000000..fef324f7
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsetCapOffset.tex
@@ -0,0 +1 @@
+val setCapOffset : (CapStruct, bits(64)) -> (bool, CapStruct)
diff --git a/cheri/sail_latexcc/sailccsetCapPerms.tex b/cheri/sail_latexcc/sailccsetCapPerms.tex
new file mode 100644
index 00000000..617f19fb
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsetCapPerms.tex
@@ -0,0 +1 @@
+val setCapPerms : (CapStruct, bits(31)) -> CapStruct
diff --git a/cheri/sail_latexcc/sailccsetslicebits.tex b/cheri/sail_latexcc/sailccsetslicebits.tex
new file mode 100644
index 00000000..8a81bff5
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsetslicebits.tex
@@ -0,0 +1,2 @@
+val set_slice_bits = "set_slice" : forall 'n 'm.
+ (atom('n), atom('m), #\hyperref[zbits]{bits}#('n), int, #\hyperref[zbits]{bits}#('m)) -> #\hyperref[zbits]{bits}#('n)
diff --git a/cheri/sail_latexcc/sailccsetsliceint.tex b/cheri/sail_latexcc/sailccsetsliceint.tex
new file mode 100644
index 00000000..413bf721
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsetsliceint.tex
@@ -0,0 +1 @@
+val set_slice_int = "set_slice_int" : forall 'w. (atom('w), int, int, #\hyperref[zbits]{bits}#('w)) -> int
diff --git a/cheri/sail_latexcc/sailccshiftbitsleft.tex b/cheri/sail_latexcc/sailccshiftbitsleft.tex
new file mode 100644
index 00000000..cdb2eb6a
--- /dev/null
+++ b/cheri/sail_latexcc/sailccshiftbitsleft.tex
@@ -0,0 +1 @@
+val "shift_bits_left" : forall 'n 'm. (#\hyperref[zbits]{bits}#('n), #\hyperref[zbits]{bits}#('m)) -> #\hyperref[zbits]{bits}#('n) effect {undef}
diff --git a/cheri/sail_latexcc/sailccshiftbitsright.tex b/cheri/sail_latexcc/sailccshiftbitsright.tex
new file mode 100644
index 00000000..dbc72b11
--- /dev/null
+++ b/cheri/sail_latexcc/sailccshiftbitsright.tex
@@ -0,0 +1 @@
+val "shift_bits_right" : forall 'n 'm. (#\hyperref[zbits]{bits}#('n), #\hyperref[zbits]{bits}#('m)) -> #\hyperref[zbits]{bits}#('n) effect {undef}
diff --git a/cheri/sail_latexcc/sailccshiftl.tex b/cheri/sail_latexcc/sailccshiftl.tex
new file mode 100644
index 00000000..b2c54c27
--- /dev/null
+++ b/cheri/sail_latexcc/sailccshiftl.tex
@@ -0,0 +1 @@
+val "shiftl" : forall 'm 'n, 'n >= 0. (#\hyperref[zbits]{bits}#('m), atom('n)) -> #\hyperref[zbits]{bits}#('m)
diff --git a/cheri/sail_latexcc/sailccshiftr.tex b/cheri/sail_latexcc/sailccshiftr.tex
new file mode 100644
index 00000000..f282dcbe
--- /dev/null
+++ b/cheri/sail_latexcc/sailccshiftr.tex
@@ -0,0 +1 @@
+val "shiftr" : forall 'm 'n, 'n >= 0. (#\hyperref[zbits]{bits}#('m), atom('n)) -> #\hyperref[zbits]{bits}#('m)
diff --git a/cheri/sail_latexcc/sailccshlint.tex b/cheri/sail_latexcc/sailccshlint.tex
new file mode 100644
index 00000000..8ffbcf6c
--- /dev/null
+++ b/cheri/sail_latexcc/sailccshlint.tex
@@ -0,0 +1 @@
+val shl_int = "shl_int" : (int, int) -> int
diff --git a/cheri/sail_latexcc/sailccshrint.tex b/cheri/sail_latexcc/sailccshrint.tex
new file mode 100644
index 00000000..087c17bb
--- /dev/null
+++ b/cheri/sail_latexcc/sailccshrint.tex
@@ -0,0 +1 @@
+val shr_int = "shr_int" : (int, int) -> int
diff --git a/cheri/sail_latexcc/sailccsigned.tex b/cheri/sail_latexcc/sailccsigned.tex
new file mode 100644
index 00000000..dcdc3049
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsigned.tex
@@ -0,0 +1,4 @@
+val signed = {
+ c: "sail_signed",
+ _: "sint"
+} : forall 'n, 'n > 0. #\hyperref[zbits]{bits}#('n) -> range(- (2 ^ ('n - 1)), 2 ^ ('n - 1) - 1)
diff --git a/cheri/sail_latexcc/sailccsignextend.tex b/cheri/sail_latexcc/sailccsignextend.tex
new file mode 100644
index 00000000..03f56369
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsignextend.tex
@@ -0,0 +1 @@
+overload sign_extend = {mips_sign_extend} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailccslice.tex b/cheri/sail_latexcc/sailccslice.tex
new file mode 100644
index 00000000..b9bb5a70
--- /dev/null
+++ b/cheri/sail_latexcc/sailccslice.tex
@@ -0,0 +1,2 @@
+val slice = "slice" : forall 'n 'm 'o, 0 <= 'o < 'm & 'o + 'n <= 'm & 0 <= 'n.
+ (#\hyperref[zbits]{bits}#('m), atom('o), atom('n)) -> #\hyperref[zbits]{bits}#('n)
diff --git a/cheri/sail_latexcc/sailccstringofint.tex b/cheri/sail_latexcc/sailccstringofint.tex
new file mode 100644
index 00000000..05edaa20
--- /dev/null
+++ b/cheri/sail_latexcc/sailccstringofint.tex
@@ -0,0 +1 @@
+val string_of_int = "string_of_int" : int -> string
diff --git a/cheri/sail_latexcc/sailccsubatom.tex b/cheri/sail_latexcc/sailccsubatom.tex
new file mode 100644
index 00000000..437e2d4c
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsubatom.tex
@@ -0,0 +1,2 @@
+val sub_atom = {ocaml: "sub_int", lem: "integerMinus", c: "sub_int", coq: "Z.sub"} : forall 'n 'm.
+ (atom('n), atom('m)) -> atom('n - 'm)
diff --git a/cheri/sail_latexcc/sailccsubint.tex b/cheri/sail_latexcc/sailccsubint.tex
new file mode 100644
index 00000000..11fdf922
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsubint.tex
@@ -0,0 +1 @@
+val sub_int = {ocaml: "sub_int", lem: "integerMinus", c: "sub_int", coq: "Z.sub"} : (int, int) -> int
diff --git a/cheri/sail_latexcc/sailccsubrange.tex b/cheri/sail_latexcc/sailccsubrange.tex
new file mode 100644
index 00000000..2aad56b6
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsubrange.tex
@@ -0,0 +1,2 @@
+val sub_range = {ocaml: "sub_int", lem: "integerMinus", coq: "sub_range"} : forall 'n 'm 'o 'p.
+ (range('n, 'm), range('o, 'p)) -> range('n - 'p, 'm - 'o)
diff --git a/cheri/sail_latexcc/sailccsubvec.tex b/cheri/sail_latexcc/sailccsubvec.tex
new file mode 100644
index 00000000..b92f07a4
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsubvec.tex
@@ -0,0 +1 @@
+val sub_vec = {c : "sub_bits", _:"sub_vec"} : forall 'n. (#\hyperref[zbits]{bits}#('n), #\hyperref[zbits]{bits}#('n)) -> #\hyperref[zbits]{bits}#('n)
diff --git a/cheri/sail_latexcc/sailccsubvecint.tex b/cheri/sail_latexcc/sailccsubvecint.tex
new file mode 100644
index 00000000..70bf667e
--- /dev/null
+++ b/cheri/sail_latexcc/sailccsubvecint.tex
@@ -0,0 +1 @@
+val sub_vec_int = {c:"sub_bits_int", _: "sub_vec_int"} : forall 'n. (#\hyperref[zbits]{bits}#('n), int) -> #\hyperref[zbits]{bits}#('n)
diff --git a/cheri/sail_latexcc/sailcctobits.tex b/cheri/sail_latexcc/sailcctobits.tex
new file mode 100644
index 00000000..9dd3c655
--- /dev/null
+++ b/cheri/sail_latexcc/sailcctobits.tex
@@ -0,0 +1 @@
+val to_bits : forall 'l, 'l >= 0 .(atom('l), int) -> #\hyperref[zbits]{bits}#('l)
diff --git a/cheri/sail_latexcc/sailcctruncate.tex b/cheri/sail_latexcc/sailcctruncate.tex
new file mode 100644
index 00000000..5f7760f3
--- /dev/null
+++ b/cheri/sail_latexcc/sailcctruncate.tex
@@ -0,0 +1,6 @@
+val truncate = {
+ ocaml: "vector_truncate",
+ lem: "vector_truncate",
+ coq: "vector_truncate",
+ c: "sail_truncate"
+} : forall 'm 'n, 'm >= 0 & 'm <= 'n. (vector('n, dec, bit), atom('m)) -> vector('m, dec, bit)
diff --git a/cheri/sail_latexcc/sailccuintsixfour.tex b/cheri/sail_latexcc/sailccuintsixfour.tex
new file mode 100644
index 00000000..a0d52c8f
--- /dev/null
+++ b/cheri/sail_latexcc/sailccuintsixfour.tex
@@ -0,0 +1 @@
+type uint64 = range(0, (2 ^ 64) - 1)
diff --git a/cheri/sail_latexcc/sailccunsigned.tex b/cheri/sail_latexcc/sailccunsigned.tex
new file mode 100644
index 00000000..47867039
--- /dev/null
+++ b/cheri/sail_latexcc/sailccunsigned.tex
@@ -0,0 +1,7 @@
+val unsigned = {
+ ocaml: "uint",
+ lem: "uint",
+ interpreter: "uint",
+ c: "sail_unsigned",
+ coq: "uint"
+} : forall 'n. #\hyperref[zbits]{bits}#('n) -> range(0, 2 ^ 'n - 1)
diff --git a/cheri/sail_latexcc/sailccvectoraccess.tex b/cheri/sail_latexcc/sailccvectoraccess.tex
new file mode 100644
index 00000000..a8e8074f
--- /dev/null
+++ b/cheri/sail_latexcc/sailccvectoraccess.tex
@@ -0,0 +1 @@
+overload vector_access = {bitvector_access, plain_vector_access} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailccvectorlength.tex b/cheri/sail_latexcc/sailccvectorlength.tex
new file mode 100644
index 00000000..f41d5bfa
--- /dev/null
+++ b/cheri/sail_latexcc/sailccvectorlength.tex
@@ -0,0 +1,6 @@
+val vector_length = {
+ ocaml: "length",
+ lem: "length_list",
+ c: "length",
+ coq: "vec_length"
+} : forall '#\hyperref[zn]{n}# ('a : Type). vector('n, dec, 'a) -> atom('n)
diff --git a/cheri/sail_latexcc/sailccvectorsubrange.tex b/cheri/sail_latexcc/sailccvectorsubrange.tex
new file mode 100644
index 00000000..c069c7b6
--- /dev/null
+++ b/cheri/sail_latexcc/sailccvectorsubrange.tex
@@ -0,0 +1,7 @@
+val vector_subrange = {
+ ocaml: "subrange",
+ lem: "subrange_vec_dec",
+ c: "vector_subrange",
+ coq: "subrange_vec_dec"
+} : forall ('n : Int) ('m : Int) ('o : Int), 0 <= 'o <= 'm < 'n.
+ (#\hyperref[zbits]{bits}#('n), atom('m), atom('o)) -> #\hyperref[zbits]{bits}#('m - 'o + 1)
diff --git a/cheri/sail_latexcc/sailccvectorupdate.tex b/cheri/sail_latexcc/sailccvectorupdate.tex
new file mode 100644
index 00000000..1ec4aaef
--- /dev/null
+++ b/cheri/sail_latexcc/sailccvectorupdate.tex
@@ -0,0 +1 @@
+overload vector_update = {bitvector_update, plain_vector_update} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailccvectorupdatesubrange.tex b/cheri/sail_latexcc/sailccvectorupdatesubrange.tex
new file mode 100644
index 00000000..6ff4f9f6
--- /dev/null
+++ b/cheri/sail_latexcc/sailccvectorupdatesubrange.tex
@@ -0,0 +1,6 @@
+val vector_update_subrange = {
+ ocaml: "update_subrange",
+ lem: "update_subrange_vec_dec",
+ c: "vector_update_subrange",
+ coq: "update_subrange_vec_dec"
+} : forall 'n 'm 'o. (#\hyperref[zbits]{bits}#('n), atom('m), atom('o), #\hyperref[zbits]{bits}#('m - ('o - 1))) -> #\hyperref[zbits]{bits}#('n)
diff --git a/cheri/sail_latexcc/sailccxorvec.tex b/cheri/sail_latexcc/sailccxorvec.tex
new file mode 100644
index 00000000..b3aa7372
--- /dev/null
+++ b/cheri/sail_latexcc/sailccxorvec.tex
@@ -0,0 +1 @@
+val xor_vec = {c: "xor_bits" , _: "xor_vec"} : forall 'n. (#\hyperref[zbits]{bits}#('n), #\hyperref[zbits]{bits}#('n)) -> #\hyperref[zbits]{bits}#('n)
diff --git a/cheri/sail_latexcc/sailcczW.tex b/cheri/sail_latexcc/sailcczW.tex
new file mode 100644
index 00000000..a29ec93f
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczW.tex
@@ -0,0 +1 @@
+overload ~ = {not_bool, not_vec} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailcczeightoperatorzzerozAsznine.tex b/cheri/sail_latexcc/sailcczeightoperatorzzerozAsznine.tex
new file mode 100644
index 00000000..0b0a46e2
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczeightoperatorzzerozAsznine.tex
@@ -0,0 +1 @@
+val operator *_s = "mults_vec" : forall 'n . (#\hyperref[zbits]{bits}#('n), #\hyperref[zbits]{bits}#('n)) -> #\hyperref[zbits]{bits}#(2 * 'n)
diff --git a/cheri/sail_latexcc/sailcczeightoperatorzzerozAuznine.tex b/cheri/sail_latexcc/sailcczeightoperatorzzerozAuznine.tex
new file mode 100644
index 00000000..5b762ba7
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczeightoperatorzzerozAuznine.tex
@@ -0,0 +1 @@
+val operator *_u = "mult_vec" : forall 'n . (#\hyperref[zbits]{bits}#('n), #\hyperref[zbits]{bits}#('n)) -> #\hyperref[zbits]{bits}#(2 * 'n)
diff --git a/cheri/sail_latexcc/sailcczeightoperatorzzerozAznine.tex b/cheri/sail_latexcc/sailcczeightoperatorzzerozAznine.tex
new file mode 100644
index 00000000..2d188f63
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczeightoperatorzzerozAznine.tex
@@ -0,0 +1 @@
+overload (operator *) = {mult_int} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailcczeightoperatorzzerozBznine.tex b/cheri/sail_latexcc/sailcczeightoperatorzzerozBznine.tex
new file mode 100644
index 00000000..432e85e5
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczeightoperatorzzerozBznine.tex
@@ -0,0 +1 @@
+overload (operator +) = {add_range, add_int, add_vec, add_vec_int} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailcczeightoperatorzzerozDznine.tex b/cheri/sail_latexcc/sailcczeightoperatorzzerozDznine.tex
new file mode 100644
index 00000000..d671e6b0
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczeightoperatorzzerozDznine.tex
@@ -0,0 +1 @@
+overload (operator -) = {sub_range, sub_int, sub_vec, sub_vec_int} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailcczeightoperatorzzerozFznine.tex b/cheri/sail_latexcc/sailcczeightoperatorzzerozFznine.tex
new file mode 100644
index 00000000..3c2e441c
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczeightoperatorzzerozFznine.tex
@@ -0,0 +1 @@
+overload (operator /) = {quotient_nat, quotient} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailcczeightoperatorzzerozIsznine.tex b/cheri/sail_latexcc/sailcczeightoperatorzzerozIsznine.tex
new file mode 100644
index 00000000..9b4ebe19
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczeightoperatorzzerozIsznine.tex
@@ -0,0 +1 @@
+val operator <_s : forall 'n, 'n > 0. (#\hyperref[zbits]{bits}#('n), #\hyperref[zbits]{bits}#('n)) -> bool
diff --git a/cheri/sail_latexcc/sailcczeightoperatorzzerozIuznine.tex b/cheri/sail_latexcc/sailcczeightoperatorzzerozIuznine.tex
new file mode 100644
index 00000000..5b54235e
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczeightoperatorzzerozIuznine.tex
@@ -0,0 +1 @@
+val operator <_u : forall 'n, 'n >= 0. (#\hyperref[zbits]{bits}#('n), #\hyperref[zbits]{bits}#('n)) -> bool
diff --git a/cheri/sail_latexcc/sailcczeightoperatorzzerozIzIznine.tex b/cheri/sail_latexcc/sailcczeightoperatorzzerozIzIznine.tex
new file mode 100644
index 00000000..51ff2b6c
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczeightoperatorzzerozIzIznine.tex
@@ -0,0 +1 @@
+overload (operator <<) = {shift_bits_left, shiftl} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailcczeightoperatorzzerozIzJznine.tex b/cheri/sail_latexcc/sailcczeightoperatorzzerozIzJznine.tex
new file mode 100644
index 00000000..d23f28dd
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczeightoperatorzzerozIzJznine.tex
@@ -0,0 +1 @@
+overload (operator <=) = {lteq_atom, lteq_range_atom, lteq_atom_range, lteq_int} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailcczeightoperatorzzerozIznine.tex b/cheri/sail_latexcc/sailcczeightoperatorzzerozIznine.tex
new file mode 100644
index 00000000..8e5e3fe9
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczeightoperatorzzerozIznine.tex
@@ -0,0 +1 @@
+overload (operator <) = {lt_atom, lt_range_atom, lt_atom_range, lt_int} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailcczeightoperatorzzerozJzJznine.tex b/cheri/sail_latexcc/sailcczeightoperatorzzerozJzJznine.tex
new file mode 100644
index 00000000..57ea823c
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczeightoperatorzzerozJzJznine.tex
@@ -0,0 +1 @@
+overload (operator ==) = {eq_anything} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailcczeightoperatorzzerozKzJsznine.tex b/cheri/sail_latexcc/sailcczeightoperatorzzerozKzJsznine.tex
new file mode 100644
index 00000000..032e8600
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczeightoperatorzzerozKzJsznine.tex
@@ -0,0 +1 @@
+val operator >=_s : forall 'n, 'n > 0. (#\hyperref[zbits]{bits}#('n), #\hyperref[zbits]{bits}#('n)) -> bool
diff --git a/cheri/sail_latexcc/sailcczeightoperatorzzerozKzJuznine.tex b/cheri/sail_latexcc/sailcczeightoperatorzzerozKzJuznine.tex
new file mode 100644
index 00000000..eaa72e60
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczeightoperatorzzerozKzJuznine.tex
@@ -0,0 +1 @@
+val operator >=_u : forall 'n, 'n >= 0. (#\hyperref[zbits]{bits}#('n), #\hyperref[zbits]{bits}#('n)) -> bool
diff --git a/cheri/sail_latexcc/sailcczeightoperatorzzerozKzJznine.tex b/cheri/sail_latexcc/sailcczeightoperatorzzerozKzJznine.tex
new file mode 100644
index 00000000..5733b740
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczeightoperatorzzerozKzJznine.tex
@@ -0,0 +1 @@
+overload (operator >=) = {gteq_atom, gteq_range_atom, gteq_atom_range, gteq_int} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailcczeightoperatorzzerozKzKsznine.tex b/cheri/sail_latexcc/sailcczeightoperatorzzerozKzKsznine.tex
new file mode 100644
index 00000000..0f0793a6
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczeightoperatorzzerozKzKsznine.tex
@@ -0,0 +1 @@
+val operator >>_s = "shift_bits_right_arith" : forall 'n 'm. (#\hyperref[zbits]{bits}#('n), #\hyperref[zbits]{bits}#('m)) -> #\hyperref[zbits]{bits}#('n) effect {undef}
diff --git a/cheri/sail_latexcc/sailcczeightoperatorzzerozKzKznine.tex b/cheri/sail_latexcc/sailcczeightoperatorzzerozKzKznine.tex
new file mode 100644
index 00000000..b129e9d2
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczeightoperatorzzerozKzKznine.tex
@@ -0,0 +1 @@
+overload (operator >>) = {shift_bits_right, shiftr} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailcczeightoperatorzzerozKznine.tex b/cheri/sail_latexcc/sailcczeightoperatorzzerozKznine.tex
new file mode 100644
index 00000000..a8da7e48
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczeightoperatorzzerozKznine.tex
@@ -0,0 +1 @@
+overload (operator >) = {gt_atom, gt_range_atom, gt_atom_range, gt_int} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailcczeightoperatorzzerozQzQznine.tex b/cheri/sail_latexcc/sailcczeightoperatorzzerozQzQznine.tex
new file mode 100644
index 00000000..185f501e
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczeightoperatorzzerozQzQznine.tex
@@ -0,0 +1 @@
+val operator ^^ = {lem: "replicate_bits"} : forall 'n 'm, 'm >= 0 . (#\hyperref[zbits]{bits}#('n), atom('m)) -> #\hyperref[zbits]{bits}#('n * 'm)
diff --git a/cheri/sail_latexcc/sailcczeightoperatorzzerozQznine.tex b/cheri/sail_latexcc/sailcczeightoperatorzzerozQznine.tex
new file mode 100644
index 00000000..106b6064
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczeightoperatorzzerozQznine.tex
@@ -0,0 +1 @@
+overload (operator ^) = {xor_vec, int_power} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailcczeightoperatorzzerozUznine.tex b/cheri/sail_latexcc/sailcczeightoperatorzzerozUznine.tex
new file mode 100644
index 00000000..4de737e0
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczeightoperatorzzerozUznine.tex
@@ -0,0 +1 @@
+overload (operator |) = {or_bool, or_bits} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailcczeightoperatorzzerozfiveznine.tex b/cheri/sail_latexcc/sailcczeightoperatorzzerozfiveznine.tex
new file mode 100644
index 00000000..8d6b54c3
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczeightoperatorzzerozfiveznine.tex
@@ -0,0 +1 @@
+overload (operator %) = {modulus} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailcczeightoperatorzzerozonezJznine.tex b/cheri/sail_latexcc/sailcczeightoperatorzzerozonezJznine.tex
new file mode 100644
index 00000000..22052668
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczeightoperatorzzerozonezJznine.tex
@@ -0,0 +1 @@
+overload (operator !=) = {neq_atom, neq_int, neq_vec, neq_anything} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailcczeightoperatorzzerozsixznine.tex b/cheri/sail_latexcc/sailcczeightoperatorzzerozsixznine.tex
new file mode 100644
index 00000000..248fb15e
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczeightoperatorzzerozsixznine.tex
@@ -0,0 +1 @@
+overload (operator &) = {and_bool, and_bits} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailcczzeroextend.tex b/cheri/sail_latexcc/sailcczzeroextend.tex
new file mode 100644
index 00000000..0f754d44
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczzeroextend.tex
@@ -0,0 +1 @@
+overload zero_extend = {mips_zero_extend} \ No newline at end of file
diff --git a/cheri/sail_latexcc/sailcczzeros.tex b/cheri/sail_latexcc/sailcczzeros.tex
new file mode 100644
index 00000000..1c251eda
--- /dev/null
+++ b/cheri/sail_latexcc/sailcczzeros.tex
@@ -0,0 +1 @@
+val zeros : forall 'n, 'n >= 0 . unit -> #\hyperref[zbits]{bits}#('n)