diff options
| author | Alasdair Armstrong | 2018-07-27 16:29:40 +0100 |
|---|---|---|
| committer | Alasdair Armstrong | 2018-07-27 16:29:40 +0100 |
| commit | 313c004c1829700697ea2fe1281cc1f7afe5904a (patch) | |
| tree | 8af9ee022502c8d422daf98178000df5e9317e97 /cheri/sail_latex | |
| parent | 4861ebb08ccd3e13af19b9c12f2164b66a5d2bb0 (diff) | |
Check in snapshot of cheri latex
Diffstat (limited to 'cheri/sail_latex')
1319 files changed, 6975 insertions, 0 deletions
diff --git a/cheri/sail_latex/commands.tex b/cheri/sail_latex/commands.tex new file mode 100644 index 00000000..76072eaf --- /dev/null +++ b/cheri/sail_latex/commands.tex @@ -0,0 +1,2667 @@ +\newcommand{\sailsailregderefv}{\label{zregzyderef} \lstinputlisting[language=sail]{sail_latex/sailsailregderefv.tex}} + +\newcommand{\sailregderef}{\label{zzyregzyderef} \lstinputlisting[language=sail]{sail_latex/sailregderef.tex}} + +\newcommand{\saileqbittwo}{\label{zeqzybittwo} \lstinputlisting[language=sail]{sail_latex/saileqbittwo.tex}} + +\newcommand{\sailsailsailsailzeightoperatorzzerozJzJzninevvv}{\label{zzeightoperatorzzerozJzJznine} \lstinputlisting[language=sail]{sail_latex/sailsailsailsailzeightoperatorzzerozJzJzninevvv.tex}} + +\newcommand{\saildiv}{\label{zdiv} \lstinputlisting[language=sail]{sail_latex/saildiv.tex}} + +\newcommand{\sailsailsailzeightoperatorzzerozFzninevv}{\label{zzeightoperatorzzerozFznine} \lstinputlisting[language=sail]{sail_latex/sailsailsailzeightoperatorzzerozFzninevv.tex}} + +\newcommand{\sailmod}{\label{zmod} \lstinputlisting[language=sail]{sail_latex/sailmod.tex}} + +\newcommand{\sailsailsailzeightoperatorzzerozfivezninevv}{\label{zzeightoperatorzzerozfiveznine} \lstinputlisting[language=sail]{sail_latex/sailsailsailzeightoperatorzzerozfivezninevv.tex}} + +\newcommand{\sailabsatom}{\label{zabszyatom} \lstinputlisting[language=sail]{sail_latex/sailabsatom.tex}} + +\newcommand{\sailnotbool}{\label{znotzybool} \lstinputlisting[language=sail]{sail_latex/sailnotbool.tex}} + +\newcommand{\sailandbool}{\label{zandzybool} \lstinputlisting[language=sail]{sail_latex/sailandbool.tex}} + +\newcommand{\sailorbool}{\label{zorzybool} \lstinputlisting[language=sail]{sail_latex/sailorbool.tex}} + +\newcommand{\saileqatom}{\label{zeqzyatom} \lstinputlisting[language=sail]{sail_latex/saileqatom.tex}} + +\newcommand{\sailneqatom}{\label{zneqzyatom} \lstinputlisting[language=sail]{sail_latex/sailneqatom.tex}} + +\newcommand{\sailfnneqatom}{\label{zneqzyatom} \lstinputlisting[language=sail]{sail_latex/sailfnneqatom.tex}} + +\newcommand{\saillteqatom}{\label{zlteqzyatom} \lstinputlisting[language=sail]{sail_latex/saillteqatom.tex}} + +\newcommand{\sailgteqatom}{\label{zgteqzyatom} \lstinputlisting[language=sail]{sail_latex/sailgteqatom.tex}} + +\newcommand{\sailltatom}{\label{zltzyatom} \lstinputlisting[language=sail]{sail_latex/sailltatom.tex}} + +\newcommand{\sailgtatom}{\label{zgtzyatom} \lstinputlisting[language=sail]{sail_latex/sailgtatom.tex}} + +\newcommand{\sailltrangeatom}{\label{zltzyrangezyatom} \lstinputlisting[language=sail]{sail_latex/sailltrangeatom.tex}} + +\newcommand{\saillteqrangeatom}{\label{zlteqzyrangezyatom} \lstinputlisting[language=sail]{sail_latex/saillteqrangeatom.tex}} + +\newcommand{\sailgtrangeatom}{\label{zgtzyrangezyatom} \lstinputlisting[language=sail]{sail_latex/sailgtrangeatom.tex}} + +\newcommand{\sailgteqrangeatom}{\label{zgteqzyrangezyatom} \lstinputlisting[language=sail]{sail_latex/sailgteqrangeatom.tex}} + +\newcommand{\sailltatomrange}{\label{zltzyatomzyrange} \lstinputlisting[language=sail]{sail_latex/sailltatomrange.tex}} + +\newcommand{\saillteqatomrange}{\label{zlteqzyatomzyrange} \lstinputlisting[language=sail]{sail_latex/saillteqatomrange.tex}} + +\newcommand{\sailgtatomrange}{\label{zgtzyatomzyrange} \lstinputlisting[language=sail]{sail_latex/sailgtatomrange.tex}} + +\newcommand{\sailgteqatomrange}{\label{zgteqzyatomzyrange} \lstinputlisting[language=sail]{sail_latex/sailgteqatomrange.tex}} + +\newcommand{\saileqrange}{\label{zeqzyrange} \lstinputlisting[language=sail]{sail_latex/saileqrange.tex}} + +\newcommand{\saileqint}{\label{zeqzyint} \lstinputlisting[language=sail]{sail_latex/saileqint.tex}} + +\newcommand{\saileqbool}{\label{zeqzybool} \lstinputlisting[language=sail]{sail_latex/saileqbool.tex}} + +\newcommand{\sailneqrange}{\label{zneqzyrange} \lstinputlisting[language=sail]{sail_latex/sailneqrange.tex}} + +\newcommand{\sailfnneqrange}{\label{zneqzyrange} \lstinputlisting[language=sail]{sail_latex/sailfnneqrange.tex}} + +\newcommand{\sailneqint}{\label{zneqzyint} \lstinputlisting[language=sail]{sail_latex/sailneqint.tex}} + +\newcommand{\sailfnneqint}{\label{zneqzyint} \lstinputlisting[language=sail]{sail_latex/sailfnneqint.tex}} + +\newcommand{\sailneqbool}{\label{zneqzybool} \lstinputlisting[language=sail]{sail_latex/sailneqbool.tex}} + +\newcommand{\sailfnneqbool}{\label{zneqzybool} \lstinputlisting[language=sail]{sail_latex/sailfnneqbool.tex}} + +\newcommand{\saillteqint}{\label{zlteqzyint} \lstinputlisting[language=sail]{sail_latex/saillteqint.tex}} + +\newcommand{\sailgteqint}{\label{zgteqzyint} \lstinputlisting[language=sail]{sail_latex/sailgteqint.tex}} + +\newcommand{\sailltint}{\label{zltzyint} \lstinputlisting[language=sail]{sail_latex/sailltint.tex}} + +\newcommand{\sailgtint}{\label{zgtzyint} \lstinputlisting[language=sail]{sail_latex/sailgtint.tex}} + +\newcommand{\sailsailsailzeightoperatorzzerozJzJzninevv}{\label{zzeightoperatorzzerozJzJznine} \lstinputlisting[language=sail]{sail_latex/sailsailsailzeightoperatorzzerozJzJzninevv.tex}} + +\newcommand{\sailsailzeightoperatorzzerozonezJzninev}{\label{zzeightoperatorzzerozonezJznine} \lstinputlisting[language=sail]{sail_latex/sailsailzeightoperatorzzerozonezJzninev.tex}} + +\newcommand{\sailsailzeightoperatorzzerozUzninev}{\label{zzeightoperatorzzerozUznine} \lstinputlisting[language=sail]{sail_latex/sailsailzeightoperatorzzerozUzninev.tex}} + +\newcommand{\sailsailzeightoperatorzzerozsixzninev}{\label{zzeightoperatorzzerozsixznine} \lstinputlisting[language=sail]{sail_latex/sailsailzeightoperatorzzerozsixzninev.tex}} + +\newcommand{\sailzeightoperatorzzerozIzJznine}{\label{zzeightoperatorzzerozIzJznine} \lstinputlisting[language=sail]{sail_latex/sailzeightoperatorzzerozIzJznine.tex}} + +\newcommand{\sailzeightoperatorzzerozIznine}{\label{zzeightoperatorzzerozIznine} \lstinputlisting[language=sail]{sail_latex/sailzeightoperatorzzerozIznine.tex}} + +\newcommand{\sailzeightoperatorzzerozKzJznine}{\label{zzeightoperatorzzerozKzJznine} \lstinputlisting[language=sail]{sail_latex/sailzeightoperatorzzerozKzJznine.tex}} + +\newcommand{\sailzeightoperatorzzerozKznine}{\label{zzeightoperatorzzerozKznine} \lstinputlisting[language=sail]{sail_latex/sailzeightoperatorzzerozKznine.tex}} + +\newcommand{\sailaddatom}{\label{zaddzyatom} \lstinputlisting[language=sail]{sail_latex/sailaddatom.tex}} + +\newcommand{\sailaddint}{\label{zaddzyint} \lstinputlisting[language=sail]{sail_latex/sailaddint.tex}} + +\newcommand{\sailsailsailzeightoperatorzzerozBzninevv}{\label{zzeightoperatorzzerozBznine} \lstinputlisting[language=sail]{sail_latex/sailsailsailzeightoperatorzzerozBzninevv.tex}} + +\newcommand{\sailsubatom}{\label{zsubzyatom} \lstinputlisting[language=sail]{sail_latex/sailsubatom.tex}} + +\newcommand{\sailsubint}{\label{zsubzyint} \lstinputlisting[language=sail]{sail_latex/sailsubint.tex}} + +\newcommand{\sailsailzeightoperatorzzerozDzninev}{\label{zzeightoperatorzzerozDznine} \lstinputlisting[language=sail]{sail_latex/sailsailzeightoperatorzzerozDzninev.tex}} + +\newcommand{\sailnegateatom}{\label{znegatezyatom} \lstinputlisting[language=sail]{sail_latex/sailnegateatom.tex}} + +\newcommand{\sailnegateint}{\label{znegatezyint} \lstinputlisting[language=sail]{sail_latex/sailnegateint.tex}} + +\newcommand{\sailsailnegatev}{\label{znegate} \lstinputlisting[language=sail]{sail_latex/sailsailnegatev.tex}} + +\newcommand{\sailmultatom}{\label{zmultzyatom} \lstinputlisting[language=sail]{sail_latex/sailmultatom.tex}} + +\newcommand{\sailmultint}{\label{zmultzyint} \lstinputlisting[language=sail]{sail_latex/sailmultint.tex}} + +\newcommand{\sailsailzeightoperatorzzerozAzninev}{\label{zzeightoperatorzzerozAznine} \lstinputlisting[language=sail]{sail_latex/sailsailzeightoperatorzzerozAzninev.tex}} + +\newcommand{\sailprintint}{\label{zprintzyint} \lstinputlisting[language=sail]{sail_latex/sailprintint.tex}} + +\newcommand{\sailprerrint}{\label{zprerrzyint} \lstinputlisting[language=sail]{sail_latex/sailprerrint.tex}} + +\newcommand{\sailshlint}{\label{zshlzyint} \lstinputlisting[language=sail]{sail_latex/sailshlint.tex}} + +\newcommand{\sailshrint}{\label{zshrzyint} \lstinputlisting[language=sail]{sail_latex/sailshrint.tex}} + +\newcommand{\saildivint}{\label{zdivzyint} \lstinputlisting[language=sail]{sail_latex/saildivint.tex}} + +\newcommand{\sailsailzeightoperatorzzerozFzninev}{\label{zzeightoperatorzzerozFznine} \lstinputlisting[language=sail]{sail_latex/sailsailzeightoperatorzzerozFzninev.tex}} + +\newcommand{\sailmodint}{\label{zmodzyint} \lstinputlisting[language=sail]{sail_latex/sailmodint.tex}} + +\newcommand{\sailsailzeightoperatorzzerozfivezninev}{\label{zzeightoperatorzzerozfiveznine} \lstinputlisting[language=sail]{sail_latex/sailsailzeightoperatorzzerozfivezninev.tex}} + +\newcommand{\sailabsint}{\label{zabszyint} \lstinputlisting[language=sail]{sail_latex/sailabsint.tex}} + +\newcommand{\sailisnone}{\label{ziszynone} \lstinputlisting[language=sail]{sail_latex/sailisnone.tex}} + +\newcommand{\sailfnisnone}{\label{ziszynone} \lstinputlisting[language=sail]{sail_latex/sailfnisnone.tex}} + +\newcommand{\sailissome}{\label{ziszysome} \lstinputlisting[language=sail]{sail_latex/sailissome.tex}} + +\newcommand{\sailfnissome}{\label{ziszysome} \lstinputlisting[language=sail]{sail_latex/sailfnissome.tex}} + +\newcommand{\sailbits}{\label{zbits} \lstinputlisting[language=sail]{sail_latex/sailbits.tex}} + +\newcommand{\saileqbit}{\label{zeqzybit} \lstinputlisting[language=sail]{sail_latex/saileqbit.tex}} + +\newcommand{\saileqbits}{\label{zeqzybits} \lstinputlisting[language=sail]{sail_latex/saileqbits.tex}} + +\newcommand{\sailsailzeightoperatorzzerozJzJzninev}{\label{zzeightoperatorzzerozJzJznine} \lstinputlisting[language=sail]{sail_latex/sailsailzeightoperatorzzerozJzJzninev.tex}} + +\newcommand{\sailbitvectorlength}{\label{zbitvectorzylength} \lstinputlisting[language=sail]{sail_latex/sailbitvectorlength.tex}} + +\newcommand{\sailvectorlength}{\label{zvectorzylength} \lstinputlisting[language=sail]{sail_latex/sailvectorlength.tex}} + +\newcommand{\saillength}{\label{zlength} \lstinputlisting[language=sail]{sail_latex/saillength.tex}} + +\newcommand{\sailsailzzeros}{\label{zsailzyzzeros} \lstinputlisting[language=sail]{sail_latex/sailsailzzeros.tex}} + +\newcommand{\sailprintbits}{\label{zprintzybits} \lstinputlisting[language=sail]{sail_latex/sailprintbits.tex}} + +\newcommand{\sailprerrbits}{\label{zprerrzybits} \lstinputlisting[language=sail]{sail_latex/sailprerrbits.tex}} + +\newcommand{\sailsailsignextend}{\label{zsailzysignzyextend} \lstinputlisting[language=sail]{sail_latex/sailsailsignextend.tex}} + +\newcommand{\sailsailzzeroextend}{\label{zsailzyzzerozyextend} \lstinputlisting[language=sail]{sail_latex/sailsailzzeroextend.tex}} + +\newcommand{\sailtruncate}{\label{ztruncate} \lstinputlisting[language=sail]{sail_latex/sailtruncate.tex}} + +\newcommand{\sailsailmask}{\label{zsailzymask} \lstinputlisting[language=sail]{sail_latex/sailsailmask.tex}} + +\newcommand{\sailfnsailmask}{\label{zsailzymask} \lstinputlisting[language=sail]{sail_latex/sailfnsailmask.tex}} + +\newcommand{\sailsailzeightoperatorzzerozQzninev}{\label{zzeightoperatorzzerozQznine} \lstinputlisting[language=sail]{sail_latex/sailsailzeightoperatorzzerozQzninev.tex}} + +\newcommand{\sailbitvectorconcat}{\label{zbitvectorzyconcat} \lstinputlisting[language=sail]{sail_latex/sailbitvectorconcat.tex}} + +\newcommand{\sailappend}{\label{zappend} \lstinputlisting[language=sail]{sail_latex/sailappend.tex}} + +\newcommand{\sailappendsixfour}{\label{zappendzysixfour} \lstinputlisting[language=sail]{sail_latex/sailappendsixfour.tex}} + +\newcommand{\sailbitvectoraccess}{\label{zbitvectorzyaccess} \lstinputlisting[language=sail]{sail_latex/sailbitvectoraccess.tex}} + +\newcommand{\sailplainvectoraccess}{\label{zplainzyvectorzyaccess} \lstinputlisting[language=sail]{sail_latex/sailplainvectoraccess.tex}} + +\newcommand{\sailvectoraccess}{\label{zvectorzyaccess} \lstinputlisting[language=sail]{sail_latex/sailvectoraccess.tex}} + +\newcommand{\sailbitvectorupdate}{\label{zbitvectorzyupdate} \lstinputlisting[language=sail]{sail_latex/sailbitvectorupdate.tex}} + +\newcommand{\sailplainvectorupdate}{\label{zplainzyvectorzyupdate} \lstinputlisting[language=sail]{sail_latex/sailplainvectorupdate.tex}} + +\newcommand{\sailvectorupdate}{\label{zvectorzyupdate} \lstinputlisting[language=sail]{sail_latex/sailvectorupdate.tex}} + +\newcommand{\sailaddbits}{\label{zaddzybits} \lstinputlisting[language=sail]{sail_latex/sailaddbits.tex}} + +\newcommand{\sailaddbitsint}{\label{zaddzybitszyint} \lstinputlisting[language=sail]{sail_latex/sailaddbitsint.tex}} + +\newcommand{\sailsailzeightoperatorzzerozBzninev}{\label{zzeightoperatorzzerozBznine} \lstinputlisting[language=sail]{sail_latex/sailsailzeightoperatorzzerozBzninev.tex}} + +\newcommand{\sailvectorsubrange}{\label{zvectorzysubrange} \lstinputlisting[language=sail]{sail_latex/sailvectorsubrange.tex}} + +\newcommand{\sailvectorupdatesubrange}{\label{zvectorzyupdatezysubrange} \lstinputlisting[language=sail]{sail_latex/sailvectorupdatesubrange.tex}} + +\newcommand{\sailgetsliceint}{\label{zgetzyslicezyint} \lstinputlisting[language=sail]{sail_latex/sailgetsliceint.tex}} + +\newcommand{\sailsetsliceint}{\label{zsetzyslicezyint} \lstinputlisting[language=sail]{sail_latex/sailsetsliceint.tex}} + +\newcommand{\sailsetslicebits}{\label{zsetzyslicezybits} \lstinputlisting[language=sail]{sail_latex/sailsetslicebits.tex}} + +\newcommand{\sailslice}{\label{zslice} \lstinputlisting[language=sail]{sail_latex/sailslice.tex}} + +\newcommand{\sailreplicatebits}{\label{zreplicatezybits} \lstinputlisting[language=sail]{sail_latex/sailreplicatebits.tex}} + +\newcommand{\sailunsigned}{\label{zunsigned} \lstinputlisting[language=sail]{sail_latex/sailunsigned.tex}} + +\newcommand{\sailsigned}{\label{zsigned} \lstinputlisting[language=sail]{sail_latex/sailsigned.tex}} + +\newcommand{\saileqanything}{\label{zeqzyanything} \lstinputlisting[language=sail]{sail_latex/saileqanything.tex}} + +\newcommand{\sailzeightoperatorzzerozJzJznine}{\label{zzeightoperatorzzerozJzJznine} \lstinputlisting[language=sail]{sail_latex/sailzeightoperatorzzerozJzJznine.tex}} + +\newcommand{\sailnotvec}{\label{znotzyvec} \lstinputlisting[language=sail]{sail_latex/sailnotvec.tex}} + +\newcommand{\sailzW}{\label{zzW} \lstinputlisting[language=sail]{sail_latex/sailzW.tex}} + +\newcommand{\sailnot}{\label{znot} \lstinputlisting[language=sail]{sail_latex/sailnot.tex}} + +\newcommand{\sailneqvec}{\label{zneqzyvec} \lstinputlisting[language=sail]{sail_latex/sailneqvec.tex}} + +\newcommand{\sailfnneqvec}{\label{zneqzyvec} \lstinputlisting[language=sail]{sail_latex/sailfnneqvec.tex}} + +\newcommand{\sailneqanything}{\label{zneqzyanything} \lstinputlisting[language=sail]{sail_latex/sailneqanything.tex}} + +\newcommand{\sailfnneqanything}{\label{zneqzyanything} \lstinputlisting[language=sail]{sail_latex/sailfnneqanything.tex}} + +\newcommand{\sailzeightoperatorzzerozonezJznine}{\label{zzeightoperatorzzerozonezJznine} \lstinputlisting[language=sail]{sail_latex/sailzeightoperatorzzerozonezJznine.tex}} + +\newcommand{\sailandbits}{\label{zandzybits} \lstinputlisting[language=sail]{sail_latex/sailandbits.tex}} + +\newcommand{\sailzeightoperatorzzerozsixznine}{\label{zzeightoperatorzzerozsixznine} \lstinputlisting[language=sail]{sail_latex/sailzeightoperatorzzerozsixznine.tex}} + +\newcommand{\sailorbits}{\label{zorzybits} \lstinputlisting[language=sail]{sail_latex/sailorbits.tex}} + +\newcommand{\sailzeightoperatorzzerozUznine}{\label{zzeightoperatorzzerozUznine} \lstinputlisting[language=sail]{sail_latex/sailzeightoperatorzzerozUznine.tex}} + +\newcommand{\sailcastunitvec}{\label{zcastzyunitzyvec} \lstinputlisting[language=sail]{sail_latex/sailcastunitvec.tex}} + +\newcommand{\sailfncastunitvec}{\label{zcastzyunitzyvec} \lstinputlisting[language=sail]{sail_latex/sailfncastunitvec.tex}} + +\newcommand{\sailprint}{\label{zprint} \lstinputlisting[language=sail]{sail_latex/sailprint.tex}} + +\newcommand{\sailprerrendline}{\label{zprerrzyendline} \lstinputlisting[language=sail]{sail_latex/sailprerrendline.tex}} + +\newcommand{\sailprerrstring}{\label{zprerrzystring} \lstinputlisting[language=sail]{sail_latex/sailprerrstring.tex}} + +\newcommand{\sailputchar}{\label{zputchar} \lstinputlisting[language=sail]{sail_latex/sailputchar.tex}} + +\newcommand{\sailconcatstr}{\label{zconcatzystr} \lstinputlisting[language=sail]{sail_latex/sailconcatstr.tex}} + +\newcommand{\sailstringofint}{\label{zstringzyofzyint} \lstinputlisting[language=sail]{sail_latex/sailstringofint.tex}} + +\newcommand{\sailBitStr}{\label{zBitStr} \lstinputlisting[language=sail]{sail_latex/sailBitStr.tex}} + +\newcommand{\sailxorvec}{\label{zxorzyvec} \lstinputlisting[language=sail]{sail_latex/sailxorvec.tex}} + +\newcommand{\sailintpower}{\label{zintzypower} \lstinputlisting[language=sail]{sail_latex/sailintpower.tex}} + +\newcommand{\sailzeightoperatorzzerozQznine}{\label{zzeightoperatorzzerozQznine} \lstinputlisting[language=sail]{sail_latex/sailzeightoperatorzzerozQznine.tex}} + +\newcommand{\sailaddrange}{\label{zaddzyrange} \lstinputlisting[language=sail]{sail_latex/sailaddrange.tex}} + +\newcommand{\sailaddvec}{\label{zaddzyvec} \lstinputlisting[language=sail]{sail_latex/sailaddvec.tex}} + +\newcommand{\sailaddvecint}{\label{zaddzyveczyint} \lstinputlisting[language=sail]{sail_latex/sailaddvecint.tex}} + +\newcommand{\sailzeightoperatorzzerozBznine}{\label{zzeightoperatorzzerozBznine} \lstinputlisting[language=sail]{sail_latex/sailzeightoperatorzzerozBznine.tex}} + +\newcommand{\sailsubrange}{\label{zsubzyrange} \lstinputlisting[language=sail]{sail_latex/sailsubrange.tex}} + +\newcommand{\sailsubvec}{\label{zsubzyvec} \lstinputlisting[language=sail]{sail_latex/sailsubvec.tex}} + +\newcommand{\sailsubvecint}{\label{zsubzyveczyint} \lstinputlisting[language=sail]{sail_latex/sailsubvecint.tex}} + +\newcommand{\sailnegaterange}{\label{znegatezyrange} \lstinputlisting[language=sail]{sail_latex/sailnegaterange.tex}} + +\newcommand{\sailzeightoperatorzzerozDznine}{\label{zzeightoperatorzzerozDznine} \lstinputlisting[language=sail]{sail_latex/sailzeightoperatorzzerozDznine.tex}} + +\newcommand{\sailnegate}{\label{znegate} \lstinputlisting[language=sail]{sail_latex/sailnegate.tex}} + +\newcommand{\sailzeightoperatorzzerozAznine}{\label{zzeightoperatorzzerozAznine} \lstinputlisting[language=sail]{sail_latex/sailzeightoperatorzzerozAznine.tex}} + +\newcommand{\sailquotientnat}{\label{zquotientzynat} \lstinputlisting[language=sail]{sail_latex/sailquotientnat.tex}} + +\newcommand{\sailquotient}{\label{zquotient} \lstinputlisting[language=sail]{sail_latex/sailquotient.tex}} + +\newcommand{\sailzeightoperatorzzerozFznine}{\label{zzeightoperatorzzerozFznine} \lstinputlisting[language=sail]{sail_latex/sailzeightoperatorzzerozFznine.tex}} + +\newcommand{\sailquotroundzzero}{\label{zquotzyroundzyzzero} \lstinputlisting[language=sail]{sail_latex/sailquotroundzzero.tex}} + +\newcommand{\sailremroundzzero}{\label{zremzyroundzyzzero} \lstinputlisting[language=sail]{sail_latex/sailremroundzzero.tex}} + +\newcommand{\sailmodulus}{\label{zmodulus} \lstinputlisting[language=sail]{sail_latex/sailmodulus.tex}} + +\newcommand{\sailzeightoperatorzzerozfiveznine}{\label{zzeightoperatorzzerozfiveznine} \lstinputlisting[language=sail]{sail_latex/sailzeightoperatorzzerozfiveznine.tex}} + +\newcommand{\sailminnat}{\label{zminzynat} \lstinputlisting[language=sail]{sail_latex/sailminnat.tex}} + +\newcommand{\sailminint}{\label{zminzyint} \lstinputlisting[language=sail]{sail_latex/sailminint.tex}} + +\newcommand{\sailmaxnat}{\label{zmaxzynat} \lstinputlisting[language=sail]{sail_latex/sailmaxnat.tex}} + +\newcommand{\sailmaxint}{\label{zmaxzyint} \lstinputlisting[language=sail]{sail_latex/sailmaxint.tex}} + +\newcommand{\sailminatom}{\label{zminzyatom} \lstinputlisting[language=sail]{sail_latex/sailminatom.tex}} + +\newcommand{\sailmaxatom}{\label{zmaxzyatom} \lstinputlisting[language=sail]{sail_latex/sailmaxatom.tex}} + +\newcommand{\sailmin}{\label{zmin} \lstinputlisting[language=sail]{sail_latex/sailmin.tex}} + +\newcommand{\sailsailmaxv}{\label{zmax} \lstinputlisting[language=sail]{sail_latex/sailsailmaxv.tex}} + +\newcommand{\sailWriteRAM}{\label{zzyzyWriteRAM} \lstinputlisting[language=sail]{sail_latex/sailWriteRAM.tex}} + +\newcommand{\sailMIPSwrite}{\label{zzyzyMIPSzywrite} \lstinputlisting[language=sail]{sail_latex/sailMIPSwrite.tex}} + +\newcommand{\sailfnMIPSwrite}{\label{zzyzyMIPSzywrite} \lstinputlisting[language=sail]{sail_latex/sailfnMIPSwrite.tex}} + +\newcommand{\sailReadRAM}{\label{zzyzyReadRAM} \lstinputlisting[language=sail]{sail_latex/sailReadRAM.tex}} + +\newcommand{\sailMIPSread}{\label{zzyzyMIPSzyread} \lstinputlisting[language=sail]{sail_latex/sailMIPSread.tex}} + +\newcommand{\sailfnMIPSread}{\label{zzyzyMIPSzyread} \lstinputlisting[language=sail]{sail_latex/sailfnMIPSread.tex}} + +\newcommand{\sailzeightoperatorzzerozQzQznine}{\label{zzeightoperatorzzerozQzQznine} \lstinputlisting[language=sail]{sail_latex/sailzeightoperatorzzerozQzQznine.tex}} + +\newcommand{\sailfnzeightoperatorzzerozQzQznine}{\label{zzeightoperatorzzerozQzQznine} \lstinputlisting[language=sail]{sail_latex/sailfnzeightoperatorzzerozQzQznine.tex}} + +\newcommand{\sailpowtwo}{\label{zpowtwo} \lstinputlisting[language=sail]{sail_latex/sailpowtwo.tex}} + +\newcommand{\sailmipssignextend}{\label{zmipszysignzyextend} \lstinputlisting[language=sail]{sail_latex/sailmipssignextend.tex}} + +\newcommand{\sailmipszzeroextend}{\label{zmipszyzzerozyextend} \lstinputlisting[language=sail]{sail_latex/sailmipszzeroextend.tex}} + +\newcommand{\sailfnmipssignextend}{\label{zmipszysignzyextend} \lstinputlisting[language=sail]{sail_latex/sailfnmipssignextend.tex}} + +\newcommand{\sailfnmipszzeroextend}{\label{zmipszyzzerozyextend} \lstinputlisting[language=sail]{sail_latex/sailfnmipszzeroextend.tex}} + +\newcommand{\sailsignextend}{\label{zsignzyextend} \lstinputlisting[language=sail]{sail_latex/sailsignextend.tex}} + +\newcommand{\sailzzeroextend}{\label{zzzerozyextend} \lstinputlisting[language=sail]{sail_latex/sailzzeroextend.tex}} + +\newcommand{\sailzzeros}{\label{zzzeros} \lstinputlisting[language=sail]{sail_latex/sailzzeros.tex}} + +\newcommand{\sailfnzzeros}{\label{zzzeros} \lstinputlisting[language=sail]{sail_latex/sailfnzzeros.tex}} + +\newcommand{\sailones}{\label{zones} \lstinputlisting[language=sail]{sail_latex/sailones.tex}} + +\newcommand{\sailfnones}{\label{zones} \lstinputlisting[language=sail]{sail_latex/sailfnones.tex}} + +\newcommand{\sailzeightoperatorzzerozIsznine}{\label{zzeightoperatorzzerozIzysznine} \lstinputlisting[language=sail]{sail_latex/sailzeightoperatorzzerozIsznine.tex}} + +\newcommand{\sailzeightoperatorzzerozKzJsznine}{\label{zzeightoperatorzzerozKzJzysznine} \lstinputlisting[language=sail]{sail_latex/sailzeightoperatorzzerozKzJsznine.tex}} + +\newcommand{\sailzeightoperatorzzerozIuznine}{\label{zzeightoperatorzzerozIzyuznine} \lstinputlisting[language=sail]{sail_latex/sailzeightoperatorzzerozIuznine.tex}} + +\newcommand{\sailzeightoperatorzzerozKzJuznine}{\label{zzeightoperatorzzerozKzJzyuznine} \lstinputlisting[language=sail]{sail_latex/sailzeightoperatorzzerozKzJuznine.tex}} + +\newcommand{\sailfnzeightoperatorzzerozIsznine}{\label{zzeightoperatorzzerozIzysznine} \lstinputlisting[language=sail]{sail_latex/sailfnzeightoperatorzzerozIsznine.tex}} + +\newcommand{\sailfnzeightoperatorzzerozKzJsznine}{\label{zzeightoperatorzzerozKzJzysznine} \lstinputlisting[language=sail]{sail_latex/sailfnzeightoperatorzzerozKzJsznine.tex}} + +\newcommand{\sailfnzeightoperatorzzerozIuznine}{\label{zzeightoperatorzzerozIzyuznine} \lstinputlisting[language=sail]{sail_latex/sailfnzeightoperatorzzerozIuznine.tex}} + +\newcommand{\sailfnzeightoperatorzzerozKzJuznine}{\label{zzeightoperatorzzerozKzJzyuznine} \lstinputlisting[language=sail]{sail_latex/sailfnzeightoperatorzzerozKzJuznine.tex}} + +\newcommand{\sailbooltobits}{\label{zboolzytozybits} \lstinputlisting[language=sail]{sail_latex/sailbooltobits.tex}} + +\newcommand{\sailfnbooltobits}{\label{zboolzytozybits} \lstinputlisting[language=sail]{sail_latex/sailfnbooltobits.tex}} + +\newcommand{\sailbittobool}{\label{zbitzytozybool} \lstinputlisting[language=sail]{sail_latex/sailbittobool.tex}} + +\newcommand{\sailfnbittobool}{\label{zbitzytozybool} \lstinputlisting[language=sail]{sail_latex/sailfnbittobool.tex}} + +\newcommand{\sailbitstobool}{\label{zbitszytozybool} \lstinputlisting[language=sail]{sail_latex/sailbitstobool.tex}} + +\newcommand{\sailfnbitstobool}{\label{zbitszytozybool} \lstinputlisting[language=sail]{sail_latex/sailfnbitstobool.tex}} + +\newcommand{\sailshiftbitsright}{\label{zshiftzybitszyright} \lstinputlisting[language=sail]{sail_latex/sailshiftbitsright.tex}} + +\newcommand{\sailshiftbitsleft}{\label{zshiftzybitszyleft} \lstinputlisting[language=sail]{sail_latex/sailshiftbitsleft.tex}} + +\newcommand{\sailshiftl}{\label{zshiftl} \lstinputlisting[language=sail]{sail_latex/sailshiftl.tex}} + +\newcommand{\sailshiftr}{\label{zshiftr} \lstinputlisting[language=sail]{sail_latex/sailshiftr.tex}} + +\newcommand{\sailzeightoperatorzzerozKzKznine}{\label{zzeightoperatorzzerozKzKznine} \lstinputlisting[language=sail]{sail_latex/sailzeightoperatorzzerozKzKznine.tex}} + +\newcommand{\sailzeightoperatorzzerozIzIznine}{\label{zzeightoperatorzzerozIzIznine} \lstinputlisting[language=sail]{sail_latex/sailzeightoperatorzzerozIzIznine.tex}} + +\newcommand{\sailzeightoperatorzzerozKzKsznine}{\label{zzeightoperatorzzerozKzKzysznine} \lstinputlisting[language=sail]{sail_latex/sailzeightoperatorzzerozKzKsznine.tex}} + +\newcommand{\sailzeightoperatorzzerozAsznine}{\label{zzeightoperatorzzerozAzysznine} \lstinputlisting[language=sail]{sail_latex/sailzeightoperatorzzerozAsznine.tex}} + +\newcommand{\sailzeightoperatorzzerozAuznine}{\label{zzeightoperatorzzerozAzyuznine} \lstinputlisting[language=sail]{sail_latex/sailzeightoperatorzzerozAuznine.tex}} + +\newcommand{\sailtobits}{\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_latex/sailtobits.tex}} + +\newcommand{\sailfntobits}{\label{ztozybits} \lstinputlisting[language=sail]{sail_latex/sailfntobits.tex}} + +\newcommand{\sailmask}{\label{zmask} \lstinputlisting[language=sail]{sail_latex/sailmask.tex}} + +\newcommand{\sailfnmask}{\label{zmask} \lstinputlisting[language=sail]{sail_latex/sailfnmask.tex}} + +\newcommand{\sailgettimens}{\label{zgetzytimezyns} \lstinputlisting[language=sail]{sail_latex/sailgettimens.tex}} + +\newcommand{\sailCauseReg}{\label{zCauseReg} \lstinputlisting[language=sail]{sail_latex/sailCauseReg.tex}} + +\newcommand{\sailMkCauseReg}{\label{zMkzyCauseReg} \lstinputlisting[language=sail]{sail_latex/sailMkCauseReg.tex}} + +\newcommand{\sailfnMkCauseReg}{\label{zMkzyCauseReg} \lstinputlisting[language=sail]{sail_latex/sailfnMkCauseReg.tex}} + +\newcommand{\sailgetCauseRegbits}{\label{zzygetzyCauseRegzybits} \lstinputlisting[language=sail]{sail_latex/sailgetCauseRegbits.tex}} + +\newcommand{\sailfngetCauseRegbits}{\label{zzygetzyCauseRegzybits} \lstinputlisting[language=sail]{sail_latex/sailfngetCauseRegbits.tex}} + +\newcommand{\sailsetCauseRegbits}{\label{zzysetzyCauseRegzybits} \lstinputlisting[language=sail]{sail_latex/sailsetCauseRegbits.tex}} + +\newcommand{\sailfnsetCauseRegbits}{\label{zzysetzyCauseRegzybits} \lstinputlisting[language=sail]{sail_latex/sailfnsetCauseRegbits.tex}} + +\newcommand{\sailupdateCauseRegbits}{\label{zzyupdatezyCauseRegzybits} \lstinputlisting[language=sail]{sail_latex/sailupdateCauseRegbits.tex}} + +\newcommand{\sailfnupdateCauseRegbits}{\label{zzyupdatezyCauseRegzybits} \lstinputlisting[language=sail]{sail_latex/sailfnupdateCauseRegbits.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailupdatebitsvvvvvvv}{\label{zupdatezybits} \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailupdatebitsvvvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailmodbitsvvvvvvv}{\label{zzymodzybits} \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailmodbitsvvvvvvv.tex}} + +\newcommand{\sailgetCauseRegBD}{\label{zzygetzyCauseRegzyBD} \lstinputlisting[language=sail]{sail_latex/sailgetCauseRegBD.tex}} + +\newcommand{\sailfngetCauseRegBD}{\label{zzygetzyCauseRegzyBD} \lstinputlisting[language=sail]{sail_latex/sailfngetCauseRegBD.tex}} + +\newcommand{\sailsetCauseRegBD}{\label{zzysetzyCauseRegzyBD} \lstinputlisting[language=sail]{sail_latex/sailsetCauseRegBD.tex}} + +\newcommand{\sailfnsetCauseRegBD}{\label{zzysetzyCauseRegzyBD} \lstinputlisting[language=sail]{sail_latex/sailfnsetCauseRegBD.tex}} + +\newcommand{\sailupdateCauseRegBD}{\label{zzyupdatezyCauseRegzyBD} \lstinputlisting[language=sail]{sail_latex/sailupdateCauseRegBD.tex}} + +\newcommand{\sailfnupdateCauseRegBD}{\label{zzyupdatezyCauseRegzyBD} \lstinputlisting[language=sail]{sail_latex/sailfnupdateCauseRegBD.tex}} + +\newcommand{\sailupdateBD}{\label{zupdatezyBD} \lstinputlisting[language=sail]{sail_latex/sailupdateBD.tex}} + +\newcommand{\sailmodBD}{\label{zzymodzyBD} \lstinputlisting[language=sail]{sail_latex/sailmodBD.tex}} + +\newcommand{\sailgetCauseRegCE}{\label{zzygetzyCauseRegzyCE} \lstinputlisting[language=sail]{sail_latex/sailgetCauseRegCE.tex}} + +\newcommand{\sailfngetCauseRegCE}{\label{zzygetzyCauseRegzyCE} \lstinputlisting[language=sail]{sail_latex/sailfngetCauseRegCE.tex}} + +\newcommand{\sailsetCauseRegCE}{\label{zzysetzyCauseRegzyCE} \lstinputlisting[language=sail]{sail_latex/sailsetCauseRegCE.tex}} + +\newcommand{\sailfnsetCauseRegCE}{\label{zzysetzyCauseRegzyCE} \lstinputlisting[language=sail]{sail_latex/sailfnsetCauseRegCE.tex}} + +\newcommand{\sailupdateCauseRegCE}{\label{zzyupdatezyCauseRegzyCE} \lstinputlisting[language=sail]{sail_latex/sailupdateCauseRegCE.tex}} + +\newcommand{\sailfnupdateCauseRegCE}{\label{zzyupdatezyCauseRegzyCE} \lstinputlisting[language=sail]{sail_latex/sailfnupdateCauseRegCE.tex}} + +\newcommand{\sailupdateCE}{\label{zupdatezyCE} \lstinputlisting[language=sail]{sail_latex/sailupdateCE.tex}} + +\newcommand{\sailmodCE}{\label{zzymodzyCE} \lstinputlisting[language=sail]{sail_latex/sailmodCE.tex}} + +\newcommand{\sailgetCauseRegIV}{\label{zzygetzyCauseRegzyIV} \lstinputlisting[language=sail]{sail_latex/sailgetCauseRegIV.tex}} + +\newcommand{\sailfngetCauseRegIV}{\label{zzygetzyCauseRegzyIV} \lstinputlisting[language=sail]{sail_latex/sailfngetCauseRegIV.tex}} + +\newcommand{\sailsetCauseRegIV}{\label{zzysetzyCauseRegzyIV} \lstinputlisting[language=sail]{sail_latex/sailsetCauseRegIV.tex}} + +\newcommand{\sailfnsetCauseRegIV}{\label{zzysetzyCauseRegzyIV} \lstinputlisting[language=sail]{sail_latex/sailfnsetCauseRegIV.tex}} + +\newcommand{\sailupdateCauseRegIV}{\label{zzyupdatezyCauseRegzyIV} \lstinputlisting[language=sail]{sail_latex/sailupdateCauseRegIV.tex}} + +\newcommand{\sailfnupdateCauseRegIV}{\label{zzyupdatezyCauseRegzyIV} \lstinputlisting[language=sail]{sail_latex/sailfnupdateCauseRegIV.tex}} + +\newcommand{\sailupdateIV}{\label{zupdatezyIV} \lstinputlisting[language=sail]{sail_latex/sailupdateIV.tex}} + +\newcommand{\sailmodIV}{\label{zzymodzyIV} \lstinputlisting[language=sail]{sail_latex/sailmodIV.tex}} + +\newcommand{\sailgetCauseRegWP}{\label{zzygetzyCauseRegzyWP} \lstinputlisting[language=sail]{sail_latex/sailgetCauseRegWP.tex}} + +\newcommand{\sailfngetCauseRegWP}{\label{zzygetzyCauseRegzyWP} \lstinputlisting[language=sail]{sail_latex/sailfngetCauseRegWP.tex}} + +\newcommand{\sailsetCauseRegWP}{\label{zzysetzyCauseRegzyWP} \lstinputlisting[language=sail]{sail_latex/sailsetCauseRegWP.tex}} + +\newcommand{\sailfnsetCauseRegWP}{\label{zzysetzyCauseRegzyWP} \lstinputlisting[language=sail]{sail_latex/sailfnsetCauseRegWP.tex}} + +\newcommand{\sailupdateCauseRegWP}{\label{zzyupdatezyCauseRegzyWP} \lstinputlisting[language=sail]{sail_latex/sailupdateCauseRegWP.tex}} + +\newcommand{\sailfnupdateCauseRegWP}{\label{zzyupdatezyCauseRegzyWP} \lstinputlisting[language=sail]{sail_latex/sailfnupdateCauseRegWP.tex}} + +\newcommand{\sailupdateWP}{\label{zupdatezyWP} \lstinputlisting[language=sail]{sail_latex/sailupdateWP.tex}} + +\newcommand{\sailmodWP}{\label{zzymodzyWP} \lstinputlisting[language=sail]{sail_latex/sailmodWP.tex}} + +\newcommand{\sailgetCauseRegIP}{\label{zzygetzyCauseRegzyIP} \lstinputlisting[language=sail]{sail_latex/sailgetCauseRegIP.tex}} + +\newcommand{\sailfngetCauseRegIP}{\label{zzygetzyCauseRegzyIP} \lstinputlisting[language=sail]{sail_latex/sailfngetCauseRegIP.tex}} + +\newcommand{\sailsetCauseRegIP}{\label{zzysetzyCauseRegzyIP} \lstinputlisting[language=sail]{sail_latex/sailsetCauseRegIP.tex}} + +\newcommand{\sailfnsetCauseRegIP}{\label{zzysetzyCauseRegzyIP} \lstinputlisting[language=sail]{sail_latex/sailfnsetCauseRegIP.tex}} + +\newcommand{\sailupdateCauseRegIP}{\label{zzyupdatezyCauseRegzyIP} \lstinputlisting[language=sail]{sail_latex/sailupdateCauseRegIP.tex}} + +\newcommand{\sailfnupdateCauseRegIP}{\label{zzyupdatezyCauseRegzyIP} \lstinputlisting[language=sail]{sail_latex/sailfnupdateCauseRegIP.tex}} + +\newcommand{\sailupdateIP}{\label{zupdatezyIP} \lstinputlisting[language=sail]{sail_latex/sailupdateIP.tex}} + +\newcommand{\sailmodIP}{\label{zzymodzyIP} \lstinputlisting[language=sail]{sail_latex/sailmodIP.tex}} + +\newcommand{\sailgetCauseRegExcCode}{\label{zzygetzyCauseRegzyExcCode} \lstinputlisting[language=sail]{sail_latex/sailgetCauseRegExcCode.tex}} + +\newcommand{\sailfngetCauseRegExcCode}{\label{zzygetzyCauseRegzyExcCode} \lstinputlisting[language=sail]{sail_latex/sailfngetCauseRegExcCode.tex}} + +\newcommand{\sailsetCauseRegExcCode}{\label{zzysetzyCauseRegzyExcCode} \lstinputlisting[language=sail]{sail_latex/sailsetCauseRegExcCode.tex}} + +\newcommand{\sailfnsetCauseRegExcCode}{\label{zzysetzyCauseRegzyExcCode} \lstinputlisting[language=sail]{sail_latex/sailfnsetCauseRegExcCode.tex}} + +\newcommand{\sailupdateCauseRegExcCode}{\label{zzyupdatezyCauseRegzyExcCode} \lstinputlisting[language=sail]{sail_latex/sailupdateCauseRegExcCode.tex}} + +\newcommand{\sailfnupdateCauseRegExcCode}{\label{zzyupdatezyCauseRegzyExcCode} \lstinputlisting[language=sail]{sail_latex/sailfnupdateCauseRegExcCode.tex}} + +\newcommand{\sailsailupdateExcCodev}{\label{zupdatezyExcCode} \lstinputlisting[language=sail]{sail_latex/sailsailupdateExcCodev.tex}} + +\newcommand{\sailsailmodExcCodev}{\label{zzymodzyExcCode} \lstinputlisting[language=sail]{sail_latex/sailsailmodExcCodev.tex}} + +\newcommand{\sailTLBEntryLoReg}{\label{zTLBEntryLoReg} \lstinputlisting[language=sail]{sail_latex/sailTLBEntryLoReg.tex}} + +\newcommand{\sailMkTLBEntryLoReg}{\label{zMkzyTLBEntryLoReg} \lstinputlisting[language=sail]{sail_latex/sailMkTLBEntryLoReg.tex}} + +\newcommand{\sailfnMkTLBEntryLoReg}{\label{zMkzyTLBEntryLoReg} \lstinputlisting[language=sail]{sail_latex/sailfnMkTLBEntryLoReg.tex}} + +\newcommand{\sailgetTLBEntryLoRegbits}{\label{zzygetzyTLBEntryLoRegzybits} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntryLoRegbits.tex}} + +\newcommand{\sailfngetTLBEntryLoRegbits}{\label{zzygetzyTLBEntryLoRegzybits} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntryLoRegbits.tex}} + +\newcommand{\sailsetTLBEntryLoRegbits}{\label{zzysetzyTLBEntryLoRegzybits} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntryLoRegbits.tex}} + +\newcommand{\sailfnsetTLBEntryLoRegbits}{\label{zzysetzyTLBEntryLoRegzybits} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntryLoRegbits.tex}} + +\newcommand{\sailupdateTLBEntryLoRegbits}{\label{zzyupdatezyTLBEntryLoRegzybits} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntryLoRegbits.tex}} + +\newcommand{\sailfnupdateTLBEntryLoRegbits}{\label{zzyupdatezyTLBEntryLoRegzybits} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntryLoRegbits.tex}} + +\newcommand{\sailsailsailsailsailsailsailupdatebitsvvvvvv}{\label{zupdatezybits} \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailupdatebitsvvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailmodbitsvvvvvv}{\label{zzymodzybits} \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailmodbitsvvvvvv.tex}} + +\newcommand{\sailgetTLBEntryLoRegCapS}{\label{zzygetzyTLBEntryLoRegzyCapS} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntryLoRegCapS.tex}} + +\newcommand{\sailfngetTLBEntryLoRegCapS}{\label{zzygetzyTLBEntryLoRegzyCapS} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntryLoRegCapS.tex}} + +\newcommand{\sailsetTLBEntryLoRegCapS}{\label{zzysetzyTLBEntryLoRegzyCapS} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntryLoRegCapS.tex}} + +\newcommand{\sailfnsetTLBEntryLoRegCapS}{\label{zzysetzyTLBEntryLoRegzyCapS} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntryLoRegCapS.tex}} + +\newcommand{\sailupdateTLBEntryLoRegCapS}{\label{zzyupdatezyTLBEntryLoRegzyCapS} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntryLoRegCapS.tex}} + +\newcommand{\sailfnupdateTLBEntryLoRegCapS}{\label{zzyupdatezyTLBEntryLoRegzyCapS} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntryLoRegCapS.tex}} + +\newcommand{\sailupdateCapS}{\label{zupdatezyCapS} \lstinputlisting[language=sail]{sail_latex/sailupdateCapS.tex}} + +\newcommand{\sailmodCapS}{\label{zzymodzyCapS} \lstinputlisting[language=sail]{sail_latex/sailmodCapS.tex}} + +\newcommand{\sailgetTLBEntryLoRegCapL}{\label{zzygetzyTLBEntryLoRegzyCapL} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntryLoRegCapL.tex}} + +\newcommand{\sailfngetTLBEntryLoRegCapL}{\label{zzygetzyTLBEntryLoRegzyCapL} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntryLoRegCapL.tex}} + +\newcommand{\sailsetTLBEntryLoRegCapL}{\label{zzysetzyTLBEntryLoRegzyCapL} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntryLoRegCapL.tex}} + +\newcommand{\sailfnsetTLBEntryLoRegCapL}{\label{zzysetzyTLBEntryLoRegzyCapL} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntryLoRegCapL.tex}} + +\newcommand{\sailupdateTLBEntryLoRegCapL}{\label{zzyupdatezyTLBEntryLoRegzyCapL} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntryLoRegCapL.tex}} + +\newcommand{\sailfnupdateTLBEntryLoRegCapL}{\label{zzyupdatezyTLBEntryLoRegzyCapL} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntryLoRegCapL.tex}} + +\newcommand{\sailupdateCapL}{\label{zupdatezyCapL} \lstinputlisting[language=sail]{sail_latex/sailupdateCapL.tex}} + +\newcommand{\sailmodCapL}{\label{zzymodzyCapL} \lstinputlisting[language=sail]{sail_latex/sailmodCapL.tex}} + +\newcommand{\sailgetTLBEntryLoRegPFN}{\label{zzygetzyTLBEntryLoRegzyPFN} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntryLoRegPFN.tex}} + +\newcommand{\sailfngetTLBEntryLoRegPFN}{\label{zzygetzyTLBEntryLoRegzyPFN} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntryLoRegPFN.tex}} + +\newcommand{\sailsetTLBEntryLoRegPFN}{\label{zzysetzyTLBEntryLoRegzyPFN} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntryLoRegPFN.tex}} + +\newcommand{\sailfnsetTLBEntryLoRegPFN}{\label{zzysetzyTLBEntryLoRegzyPFN} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntryLoRegPFN.tex}} + +\newcommand{\sailupdateTLBEntryLoRegPFN}{\label{zzyupdatezyTLBEntryLoRegzyPFN} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntryLoRegPFN.tex}} + +\newcommand{\sailfnupdateTLBEntryLoRegPFN}{\label{zzyupdatezyTLBEntryLoRegzyPFN} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntryLoRegPFN.tex}} + +\newcommand{\sailupdatePFN}{\label{zupdatezyPFN} \lstinputlisting[language=sail]{sail_latex/sailupdatePFN.tex}} + +\newcommand{\sailmodPFN}{\label{zzymodzyPFN} \lstinputlisting[language=sail]{sail_latex/sailmodPFN.tex}} + +\newcommand{\sailgetTLBEntryLoRegC}{\label{zzygetzyTLBEntryLoRegzyC} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntryLoRegC.tex}} + +\newcommand{\sailfngetTLBEntryLoRegC}{\label{zzygetzyTLBEntryLoRegzyC} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntryLoRegC.tex}} + +\newcommand{\sailsetTLBEntryLoRegC}{\label{zzysetzyTLBEntryLoRegzyC} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntryLoRegC.tex}} + +\newcommand{\sailfnsetTLBEntryLoRegC}{\label{zzysetzyTLBEntryLoRegzyC} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntryLoRegC.tex}} + +\newcommand{\sailupdateTLBEntryLoRegC}{\label{zzyupdatezyTLBEntryLoRegzyC} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntryLoRegC.tex}} + +\newcommand{\sailfnupdateTLBEntryLoRegC}{\label{zzyupdatezyTLBEntryLoRegzyC} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntryLoRegC.tex}} + +\newcommand{\sailupdateC}{\label{zupdatezyC} \lstinputlisting[language=sail]{sail_latex/sailupdateC.tex}} + +\newcommand{\sailmodC}{\label{zzymodzyC} \lstinputlisting[language=sail]{sail_latex/sailmodC.tex}} + +\newcommand{\sailgetTLBEntryLoRegD}{\label{zzygetzyTLBEntryLoRegzyD} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntryLoRegD.tex}} + +\newcommand{\sailfngetTLBEntryLoRegD}{\label{zzygetzyTLBEntryLoRegzyD} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntryLoRegD.tex}} + +\newcommand{\sailsetTLBEntryLoRegD}{\label{zzysetzyTLBEntryLoRegzyD} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntryLoRegD.tex}} + +\newcommand{\sailfnsetTLBEntryLoRegD}{\label{zzysetzyTLBEntryLoRegzyD} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntryLoRegD.tex}} + +\newcommand{\sailupdateTLBEntryLoRegD}{\label{zzyupdatezyTLBEntryLoRegzyD} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntryLoRegD.tex}} + +\newcommand{\sailfnupdateTLBEntryLoRegD}{\label{zzyupdatezyTLBEntryLoRegzyD} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntryLoRegD.tex}} + +\newcommand{\sailupdateD}{\label{zupdatezyD} \lstinputlisting[language=sail]{sail_latex/sailupdateD.tex}} + +\newcommand{\sailmodD}{\label{zzymodzyD} \lstinputlisting[language=sail]{sail_latex/sailmodD.tex}} + +\newcommand{\sailgetTLBEntryLoRegV}{\label{zzygetzyTLBEntryLoRegzyV} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntryLoRegV.tex}} + +\newcommand{\sailfngetTLBEntryLoRegV}{\label{zzygetzyTLBEntryLoRegzyV} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntryLoRegV.tex}} + +\newcommand{\sailsetTLBEntryLoRegV}{\label{zzysetzyTLBEntryLoRegzyV} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntryLoRegV.tex}} + +\newcommand{\sailfnsetTLBEntryLoRegV}{\label{zzysetzyTLBEntryLoRegzyV} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntryLoRegV.tex}} + +\newcommand{\sailupdateTLBEntryLoRegV}{\label{zzyupdatezyTLBEntryLoRegzyV} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntryLoRegV.tex}} + +\newcommand{\sailfnupdateTLBEntryLoRegV}{\label{zzyupdatezyTLBEntryLoRegzyV} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntryLoRegV.tex}} + +\newcommand{\sailupdateV}{\label{zupdatezyV} \lstinputlisting[language=sail]{sail_latex/sailupdateV.tex}} + +\newcommand{\sailmodV}{\label{zzymodzyV} \lstinputlisting[language=sail]{sail_latex/sailmodV.tex}} + +\newcommand{\sailgetTLBEntryLoRegG}{\label{zzygetzyTLBEntryLoRegzyG} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntryLoRegG.tex}} + +\newcommand{\sailfngetTLBEntryLoRegG}{\label{zzygetzyTLBEntryLoRegzyG} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntryLoRegG.tex}} + +\newcommand{\sailsetTLBEntryLoRegG}{\label{zzysetzyTLBEntryLoRegzyG} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntryLoRegG.tex}} + +\newcommand{\sailfnsetTLBEntryLoRegG}{\label{zzysetzyTLBEntryLoRegzyG} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntryLoRegG.tex}} + +\newcommand{\sailupdateTLBEntryLoRegG}{\label{zzyupdatezyTLBEntryLoRegzyG} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntryLoRegG.tex}} + +\newcommand{\sailfnupdateTLBEntryLoRegG}{\label{zzyupdatezyTLBEntryLoRegzyG} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntryLoRegG.tex}} + +\newcommand{\sailsailupdateGv}{\label{zupdatezyG} \lstinputlisting[language=sail]{sail_latex/sailsailupdateGv.tex}} + +\newcommand{\sailsailmodGv}{\label{zzymodzyG} \lstinputlisting[language=sail]{sail_latex/sailsailmodGv.tex}} + +\newcommand{\sailTLBEntryHiReg}{\label{zTLBEntryHiReg} \lstinputlisting[language=sail]{sail_latex/sailTLBEntryHiReg.tex}} + +\newcommand{\sailMkTLBEntryHiReg}{\label{zMkzyTLBEntryHiReg} \lstinputlisting[language=sail]{sail_latex/sailMkTLBEntryHiReg.tex}} + +\newcommand{\sailfnMkTLBEntryHiReg}{\label{zMkzyTLBEntryHiReg} \lstinputlisting[language=sail]{sail_latex/sailfnMkTLBEntryHiReg.tex}} + +\newcommand{\sailgetTLBEntryHiRegbits}{\label{zzygetzyTLBEntryHiRegzybits} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntryHiRegbits.tex}} + +\newcommand{\sailfngetTLBEntryHiRegbits}{\label{zzygetzyTLBEntryHiRegzybits} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntryHiRegbits.tex}} + +\newcommand{\sailsetTLBEntryHiRegbits}{\label{zzysetzyTLBEntryHiRegzybits} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntryHiRegbits.tex}} + +\newcommand{\sailfnsetTLBEntryHiRegbits}{\label{zzysetzyTLBEntryHiRegzybits} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntryHiRegbits.tex}} + +\newcommand{\sailupdateTLBEntryHiRegbits}{\label{zzyupdatezyTLBEntryHiRegzybits} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntryHiRegbits.tex}} + +\newcommand{\sailfnupdateTLBEntryHiRegbits}{\label{zzyupdatezyTLBEntryHiRegzybits} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntryHiRegbits.tex}} + +\newcommand{\sailsailsailsailsailsailupdatebitsvvvvv}{\label{zupdatezybits} \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailupdatebitsvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailmodbitsvvvvv}{\label{zzymodzybits} \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailmodbitsvvvvv.tex}} + +\newcommand{\sailgetTLBEntryHiRegR}{\label{zzygetzyTLBEntryHiRegzyR} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntryHiRegR.tex}} + +\newcommand{\sailfngetTLBEntryHiRegR}{\label{zzygetzyTLBEntryHiRegzyR} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntryHiRegR.tex}} + +\newcommand{\sailsetTLBEntryHiRegR}{\label{zzysetzyTLBEntryHiRegzyR} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntryHiRegR.tex}} + +\newcommand{\sailfnsetTLBEntryHiRegR}{\label{zzysetzyTLBEntryHiRegzyR} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntryHiRegR.tex}} + +\newcommand{\sailupdateTLBEntryHiRegR}{\label{zzyupdatezyTLBEntryHiRegzyR} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntryHiRegR.tex}} + +\newcommand{\sailfnupdateTLBEntryHiRegR}{\label{zzyupdatezyTLBEntryHiRegzyR} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntryHiRegR.tex}} + +\newcommand{\sailsailupdateRv}{\label{zupdatezyR} \lstinputlisting[language=sail]{sail_latex/sailsailupdateRv.tex}} + +\newcommand{\sailsailmodRv}{\label{zzymodzyR} \lstinputlisting[language=sail]{sail_latex/sailsailmodRv.tex}} + +\newcommand{\sailgetTLBEntryHiRegVPNtwo}{\label{zzygetzyTLBEntryHiRegzyVPNtwo} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntryHiRegVPNtwo.tex}} + +\newcommand{\sailfngetTLBEntryHiRegVPNtwo}{\label{zzygetzyTLBEntryHiRegzyVPNtwo} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntryHiRegVPNtwo.tex}} + +\newcommand{\sailsetTLBEntryHiRegVPNtwo}{\label{zzysetzyTLBEntryHiRegzyVPNtwo} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntryHiRegVPNtwo.tex}} + +\newcommand{\sailfnsetTLBEntryHiRegVPNtwo}{\label{zzysetzyTLBEntryHiRegzyVPNtwo} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntryHiRegVPNtwo.tex}} + +\newcommand{\sailupdateTLBEntryHiRegVPNtwo}{\label{zzyupdatezyTLBEntryHiRegzyVPNtwo} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntryHiRegVPNtwo.tex}} + +\newcommand{\sailfnupdateTLBEntryHiRegVPNtwo}{\label{zzyupdatezyTLBEntryHiRegzyVPNtwo} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntryHiRegVPNtwo.tex}} + +\newcommand{\sailsailupdateVPNtwov}{\label{zupdatezyVPNtwo} \lstinputlisting[language=sail]{sail_latex/sailsailupdateVPNtwov.tex}} + +\newcommand{\sailsailmodVPNtwov}{\label{zzymodzyVPNtwo} \lstinputlisting[language=sail]{sail_latex/sailsailmodVPNtwov.tex}} + +\newcommand{\sailgetTLBEntryHiRegASID}{\label{zzygetzyTLBEntryHiRegzyASID} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntryHiRegASID.tex}} + +\newcommand{\sailfngetTLBEntryHiRegASID}{\label{zzygetzyTLBEntryHiRegzyASID} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntryHiRegASID.tex}} + +\newcommand{\sailsetTLBEntryHiRegASID}{\label{zzysetzyTLBEntryHiRegzyASID} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntryHiRegASID.tex}} + +\newcommand{\sailfnsetTLBEntryHiRegASID}{\label{zzysetzyTLBEntryHiRegzyASID} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntryHiRegASID.tex}} + +\newcommand{\sailupdateTLBEntryHiRegASID}{\label{zzyupdatezyTLBEntryHiRegzyASID} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntryHiRegASID.tex}} + +\newcommand{\sailfnupdateTLBEntryHiRegASID}{\label{zzyupdatezyTLBEntryHiRegzyASID} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntryHiRegASID.tex}} + +\newcommand{\sailsailupdateASIDv}{\label{zupdatezyASID} \lstinputlisting[language=sail]{sail_latex/sailsailupdateASIDv.tex}} + +\newcommand{\sailsailmodASIDv}{\label{zzymodzyASID} \lstinputlisting[language=sail]{sail_latex/sailsailmodASIDv.tex}} + +\newcommand{\sailContextReg}{\label{zContextReg} \lstinputlisting[language=sail]{sail_latex/sailContextReg.tex}} + +\newcommand{\sailMkContextReg}{\label{zMkzyContextReg} \lstinputlisting[language=sail]{sail_latex/sailMkContextReg.tex}} + +\newcommand{\sailfnMkContextReg}{\label{zMkzyContextReg} \lstinputlisting[language=sail]{sail_latex/sailfnMkContextReg.tex}} + +\newcommand{\sailgetContextRegbits}{\label{zzygetzyContextRegzybits} \lstinputlisting[language=sail]{sail_latex/sailgetContextRegbits.tex}} + +\newcommand{\sailfngetContextRegbits}{\label{zzygetzyContextRegzybits} \lstinputlisting[language=sail]{sail_latex/sailfngetContextRegbits.tex}} + +\newcommand{\sailsetContextRegbits}{\label{zzysetzyContextRegzybits} \lstinputlisting[language=sail]{sail_latex/sailsetContextRegbits.tex}} + +\newcommand{\sailfnsetContextRegbits}{\label{zzysetzyContextRegzybits} \lstinputlisting[language=sail]{sail_latex/sailfnsetContextRegbits.tex}} + +\newcommand{\sailupdateContextRegbits}{\label{zzyupdatezyContextRegzybits} \lstinputlisting[language=sail]{sail_latex/sailupdateContextRegbits.tex}} + +\newcommand{\sailfnupdateContextRegbits}{\label{zzyupdatezyContextRegzybits} \lstinputlisting[language=sail]{sail_latex/sailfnupdateContextRegbits.tex}} + +\newcommand{\sailsailsailsailsailupdatebitsvvvv}{\label{zupdatezybits} \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailupdatebitsvvvv.tex}} + +\newcommand{\sailsailsailsailsailmodbitsvvvv}{\label{zzymodzybits} \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailmodbitsvvvv.tex}} + +\newcommand{\sailgetContextRegPTEBase}{\label{zzygetzyContextRegzyPTEBase} \lstinputlisting[language=sail]{sail_latex/sailgetContextRegPTEBase.tex}} + +\newcommand{\sailfngetContextRegPTEBase}{\label{zzygetzyContextRegzyPTEBase} \lstinputlisting[language=sail]{sail_latex/sailfngetContextRegPTEBase.tex}} + +\newcommand{\sailsetContextRegPTEBase}{\label{zzysetzyContextRegzyPTEBase} \lstinputlisting[language=sail]{sail_latex/sailsetContextRegPTEBase.tex}} + +\newcommand{\sailfnsetContextRegPTEBase}{\label{zzysetzyContextRegzyPTEBase} \lstinputlisting[language=sail]{sail_latex/sailfnsetContextRegPTEBase.tex}} + +\newcommand{\sailupdateContextRegPTEBase}{\label{zzyupdatezyContextRegzyPTEBase} \lstinputlisting[language=sail]{sail_latex/sailupdateContextRegPTEBase.tex}} + +\newcommand{\sailfnupdateContextRegPTEBase}{\label{zzyupdatezyContextRegzyPTEBase} \lstinputlisting[language=sail]{sail_latex/sailfnupdateContextRegPTEBase.tex}} + +\newcommand{\sailupdatePTEBase}{\label{zupdatezyPTEBase} \lstinputlisting[language=sail]{sail_latex/sailupdatePTEBase.tex}} + +\newcommand{\sailmodPTEBase}{\label{zzymodzyPTEBase} \lstinputlisting[language=sail]{sail_latex/sailmodPTEBase.tex}} + +\newcommand{\sailgetContextRegBadVPNtwo}{\label{zzygetzyContextRegzyBadVPNtwo} \lstinputlisting[language=sail]{sail_latex/sailgetContextRegBadVPNtwo.tex}} + +\newcommand{\sailfngetContextRegBadVPNtwo}{\label{zzygetzyContextRegzyBadVPNtwo} \lstinputlisting[language=sail]{sail_latex/sailfngetContextRegBadVPNtwo.tex}} + +\newcommand{\sailsetContextRegBadVPNtwo}{\label{zzysetzyContextRegzyBadVPNtwo} \lstinputlisting[language=sail]{sail_latex/sailsetContextRegBadVPNtwo.tex}} + +\newcommand{\sailfnsetContextRegBadVPNtwo}{\label{zzysetzyContextRegzyBadVPNtwo} \lstinputlisting[language=sail]{sail_latex/sailfnsetContextRegBadVPNtwo.tex}} + +\newcommand{\sailupdateContextRegBadVPNtwo}{\label{zzyupdatezyContextRegzyBadVPNtwo} \lstinputlisting[language=sail]{sail_latex/sailupdateContextRegBadVPNtwo.tex}} + +\newcommand{\sailfnupdateContextRegBadVPNtwo}{\label{zzyupdatezyContextRegzyBadVPNtwo} \lstinputlisting[language=sail]{sail_latex/sailfnupdateContextRegBadVPNtwo.tex}} + +\newcommand{\sailupdateBadVPNtwo}{\label{zupdatezyBadVPNtwo} \lstinputlisting[language=sail]{sail_latex/sailupdateBadVPNtwo.tex}} + +\newcommand{\sailmodBadVPNtwo}{\label{zzymodzyBadVPNtwo} \lstinputlisting[language=sail]{sail_latex/sailmodBadVPNtwo.tex}} + +\newcommand{\sailXContextReg}{\label{zXContextReg} \lstinputlisting[language=sail]{sail_latex/sailXContextReg.tex}} + +\newcommand{\sailMkXContextReg}{\label{zMkzyXContextReg} \lstinputlisting[language=sail]{sail_latex/sailMkXContextReg.tex}} + +\newcommand{\sailfnMkXContextReg}{\label{zMkzyXContextReg} \lstinputlisting[language=sail]{sail_latex/sailfnMkXContextReg.tex}} + +\newcommand{\sailgetXContextRegbits}{\label{zzygetzyXContextRegzybits} \lstinputlisting[language=sail]{sail_latex/sailgetXContextRegbits.tex}} + +\newcommand{\sailfngetXContextRegbits}{\label{zzygetzyXContextRegzybits} \lstinputlisting[language=sail]{sail_latex/sailfngetXContextRegbits.tex}} + +\newcommand{\sailsetXContextRegbits}{\label{zzysetzyXContextRegzybits} \lstinputlisting[language=sail]{sail_latex/sailsetXContextRegbits.tex}} + +\newcommand{\sailfnsetXContextRegbits}{\label{zzysetzyXContextRegzybits} \lstinputlisting[language=sail]{sail_latex/sailfnsetXContextRegbits.tex}} + +\newcommand{\sailupdateXContextRegbits}{\label{zzyupdatezyXContextRegzybits} \lstinputlisting[language=sail]{sail_latex/sailupdateXContextRegbits.tex}} + +\newcommand{\sailfnupdateXContextRegbits}{\label{zzyupdatezyXContextRegzybits} \lstinputlisting[language=sail]{sail_latex/sailfnupdateXContextRegbits.tex}} + +\newcommand{\sailsailsailsailupdatebitsvvv}{\label{zupdatezybits} \lstinputlisting[language=sail]{sail_latex/sailsailsailsailupdatebitsvvv.tex}} + +\newcommand{\sailsailsailsailmodbitsvvv}{\label{zzymodzybits} \lstinputlisting[language=sail]{sail_latex/sailsailsailsailmodbitsvvv.tex}} + +\newcommand{\sailgetXContextRegXPTEBase}{\label{zzygetzyXContextRegzyXPTEBase} \lstinputlisting[language=sail]{sail_latex/sailgetXContextRegXPTEBase.tex}} + +\newcommand{\sailfngetXContextRegXPTEBase}{\label{zzygetzyXContextRegzyXPTEBase} \lstinputlisting[language=sail]{sail_latex/sailfngetXContextRegXPTEBase.tex}} + +\newcommand{\sailsetXContextRegXPTEBase}{\label{zzysetzyXContextRegzyXPTEBase} \lstinputlisting[language=sail]{sail_latex/sailsetXContextRegXPTEBase.tex}} + +\newcommand{\sailfnsetXContextRegXPTEBase}{\label{zzysetzyXContextRegzyXPTEBase} \lstinputlisting[language=sail]{sail_latex/sailfnsetXContextRegXPTEBase.tex}} + +\newcommand{\sailupdateXContextRegXPTEBase}{\label{zzyupdatezyXContextRegzyXPTEBase} \lstinputlisting[language=sail]{sail_latex/sailupdateXContextRegXPTEBase.tex}} + +\newcommand{\sailfnupdateXContextRegXPTEBase}{\label{zzyupdatezyXContextRegzyXPTEBase} \lstinputlisting[language=sail]{sail_latex/sailfnupdateXContextRegXPTEBase.tex}} + +\newcommand{\sailupdateXPTEBase}{\label{zupdatezyXPTEBase} \lstinputlisting[language=sail]{sail_latex/sailupdateXPTEBase.tex}} + +\newcommand{\sailmodXPTEBase}{\label{zzymodzyXPTEBase} \lstinputlisting[language=sail]{sail_latex/sailmodXPTEBase.tex}} + +\newcommand{\sailgetXContextRegXR}{\label{zzygetzyXContextRegzyXR} \lstinputlisting[language=sail]{sail_latex/sailgetXContextRegXR.tex}} + +\newcommand{\sailfngetXContextRegXR}{\label{zzygetzyXContextRegzyXR} \lstinputlisting[language=sail]{sail_latex/sailfngetXContextRegXR.tex}} + +\newcommand{\sailsetXContextRegXR}{\label{zzysetzyXContextRegzyXR} \lstinputlisting[language=sail]{sail_latex/sailsetXContextRegXR.tex}} + +\newcommand{\sailfnsetXContextRegXR}{\label{zzysetzyXContextRegzyXR} \lstinputlisting[language=sail]{sail_latex/sailfnsetXContextRegXR.tex}} + +\newcommand{\sailupdateXContextRegXR}{\label{zzyupdatezyXContextRegzyXR} \lstinputlisting[language=sail]{sail_latex/sailupdateXContextRegXR.tex}} + +\newcommand{\sailfnupdateXContextRegXR}{\label{zzyupdatezyXContextRegzyXR} \lstinputlisting[language=sail]{sail_latex/sailfnupdateXContextRegXR.tex}} + +\newcommand{\sailupdateXR}{\label{zupdatezyXR} \lstinputlisting[language=sail]{sail_latex/sailupdateXR.tex}} + +\newcommand{\sailmodXR}{\label{zzymodzyXR} \lstinputlisting[language=sail]{sail_latex/sailmodXR.tex}} + +\newcommand{\sailgetXContextRegXBadVPNtwo}{\label{zzygetzyXContextRegzyXBadVPNtwo} \lstinputlisting[language=sail]{sail_latex/sailgetXContextRegXBadVPNtwo.tex}} + +\newcommand{\sailfngetXContextRegXBadVPNtwo}{\label{zzygetzyXContextRegzyXBadVPNtwo} \lstinputlisting[language=sail]{sail_latex/sailfngetXContextRegXBadVPNtwo.tex}} + +\newcommand{\sailsetXContextRegXBadVPNtwo}{\label{zzysetzyXContextRegzyXBadVPNtwo} \lstinputlisting[language=sail]{sail_latex/sailsetXContextRegXBadVPNtwo.tex}} + +\newcommand{\sailfnsetXContextRegXBadVPNtwo}{\label{zzysetzyXContextRegzyXBadVPNtwo} \lstinputlisting[language=sail]{sail_latex/sailfnsetXContextRegXBadVPNtwo.tex}} + +\newcommand{\sailupdateXContextRegXBadVPNtwo}{\label{zzyupdatezyXContextRegzyXBadVPNtwo} \lstinputlisting[language=sail]{sail_latex/sailupdateXContextRegXBadVPNtwo.tex}} + +\newcommand{\sailfnupdateXContextRegXBadVPNtwo}{\label{zzyupdatezyXContextRegzyXBadVPNtwo} \lstinputlisting[language=sail]{sail_latex/sailfnupdateXContextRegXBadVPNtwo.tex}} + +\newcommand{\sailupdateXBadVPNtwo}{\label{zupdatezyXBadVPNtwo} \lstinputlisting[language=sail]{sail_latex/sailupdateXBadVPNtwo.tex}} + +\newcommand{\sailmodXBadVPNtwo}{\label{zzymodzyXBadVPNtwo} \lstinputlisting[language=sail]{sail_latex/sailmodXBadVPNtwo.tex}} + +\newcommand{\sailTLBIndexT}{\label{zTLBIndexT} \lstinputlisting[language=sail]{sail_latex/sailTLBIndexT.tex}} + +\newcommand{\sailMAX}{\label{zMAX} \lstinputlisting[language=sail]{sail_latex/sailMAX.tex}} + +\newcommand{\sailfnMAX}{\label{zMAX} \lstinputlisting[language=sail]{sail_latex/sailfnMAX.tex}} + +\newcommand{\sailTLBEntry}{\label{zTLBEntry} \lstinputlisting[language=sail]{sail_latex/sailTLBEntry.tex}} + +\newcommand{\sailMkTLBEntry}{\label{zMkzyTLBEntry} \lstinputlisting[language=sail]{sail_latex/sailMkTLBEntry.tex}} + +\newcommand{\sailfnMkTLBEntry}{\label{zMkzyTLBEntry} \lstinputlisting[language=sail]{sail_latex/sailfnMkTLBEntry.tex}} + +\newcommand{\sailgetTLBEntrybits}{\label{zzygetzyTLBEntryzybits} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntrybits.tex}} + +\newcommand{\sailfngetTLBEntrybits}{\label{zzygetzyTLBEntryzybits} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntrybits.tex}} + +\newcommand{\sailsetTLBEntrybits}{\label{zzysetzyTLBEntryzybits} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntrybits.tex}} + +\newcommand{\sailfnsetTLBEntrybits}{\label{zzysetzyTLBEntryzybits} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntrybits.tex}} + +\newcommand{\sailupdateTLBEntrybits}{\label{zzyupdatezyTLBEntryzybits} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntrybits.tex}} + +\newcommand{\sailfnupdateTLBEntrybits}{\label{zzyupdatezyTLBEntryzybits} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntrybits.tex}} + +\newcommand{\sailsailsailupdatebitsvv}{\label{zupdatezybits} \lstinputlisting[language=sail]{sail_latex/sailsailsailupdatebitsvv.tex}} + +\newcommand{\sailsailsailmodbitsvv}{\label{zzymodzybits} \lstinputlisting[language=sail]{sail_latex/sailsailsailmodbitsvv.tex}} + +\newcommand{\sailgetTLBEntrypagemask}{\label{zzygetzyTLBEntryzypagemask} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntrypagemask.tex}} + +\newcommand{\sailfngetTLBEntrypagemask}{\label{zzygetzyTLBEntryzypagemask} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntrypagemask.tex}} + +\newcommand{\sailsetTLBEntrypagemask}{\label{zzysetzyTLBEntryzypagemask} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntrypagemask.tex}} + +\newcommand{\sailfnsetTLBEntrypagemask}{\label{zzysetzyTLBEntryzypagemask} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntrypagemask.tex}} + +\newcommand{\sailupdateTLBEntrypagemask}{\label{zzyupdatezyTLBEntryzypagemask} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntrypagemask.tex}} + +\newcommand{\sailfnupdateTLBEntrypagemask}{\label{zzyupdatezyTLBEntryzypagemask} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntrypagemask.tex}} + +\newcommand{\sailupdatepagemask}{\label{zupdatezypagemask} \lstinputlisting[language=sail]{sail_latex/sailupdatepagemask.tex}} + +\newcommand{\sailmodpagemask}{\label{zzymodzypagemask} \lstinputlisting[language=sail]{sail_latex/sailmodpagemask.tex}} + +\newcommand{\sailgetTLBEntryr}{\label{zzygetzyTLBEntryzyr} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntryr.tex}} + +\newcommand{\sailfngetTLBEntryr}{\label{zzygetzyTLBEntryzyr} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntryr.tex}} + +\newcommand{\sailsetTLBEntryr}{\label{zzysetzyTLBEntryzyr} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntryr.tex}} + +\newcommand{\sailfnsetTLBEntryr}{\label{zzysetzyTLBEntryzyr} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntryr.tex}} + +\newcommand{\sailupdateTLBEntryr}{\label{zzyupdatezyTLBEntryzyr} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntryr.tex}} + +\newcommand{\sailfnupdateTLBEntryr}{\label{zzyupdatezyTLBEntryzyr} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntryr.tex}} + +\newcommand{\sailupdater}{\label{zupdatezyr} \lstinputlisting[language=sail]{sail_latex/sailupdater.tex}} + +\newcommand{\sailmodr}{\label{zzymodzyr} \lstinputlisting[language=sail]{sail_latex/sailmodr.tex}} + +\newcommand{\sailgetTLBEntryvpntwo}{\label{zzygetzyTLBEntryzyvpntwo} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntryvpntwo.tex}} + +\newcommand{\sailfngetTLBEntryvpntwo}{\label{zzygetzyTLBEntryzyvpntwo} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntryvpntwo.tex}} + +\newcommand{\sailsetTLBEntryvpntwo}{\label{zzysetzyTLBEntryzyvpntwo} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntryvpntwo.tex}} + +\newcommand{\sailfnsetTLBEntryvpntwo}{\label{zzysetzyTLBEntryzyvpntwo} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntryvpntwo.tex}} + +\newcommand{\sailupdateTLBEntryvpntwo}{\label{zzyupdatezyTLBEntryzyvpntwo} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntryvpntwo.tex}} + +\newcommand{\sailfnupdateTLBEntryvpntwo}{\label{zzyupdatezyTLBEntryzyvpntwo} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntryvpntwo.tex}} + +\newcommand{\sailupdatevpntwo}{\label{zupdatezyvpntwo} \lstinputlisting[language=sail]{sail_latex/sailupdatevpntwo.tex}} + +\newcommand{\sailmodvpntwo}{\label{zzymodzyvpntwo} \lstinputlisting[language=sail]{sail_latex/sailmodvpntwo.tex}} + +\newcommand{\sailgetTLBEntryasid}{\label{zzygetzyTLBEntryzyasid} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntryasid.tex}} + +\newcommand{\sailfngetTLBEntryasid}{\label{zzygetzyTLBEntryzyasid} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntryasid.tex}} + +\newcommand{\sailsetTLBEntryasid}{\label{zzysetzyTLBEntryzyasid} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntryasid.tex}} + +\newcommand{\sailfnsetTLBEntryasid}{\label{zzysetzyTLBEntryzyasid} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntryasid.tex}} + +\newcommand{\sailupdateTLBEntryasid}{\label{zzyupdatezyTLBEntryzyasid} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntryasid.tex}} + +\newcommand{\sailfnupdateTLBEntryasid}{\label{zzyupdatezyTLBEntryzyasid} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntryasid.tex}} + +\newcommand{\sailupdateasid}{\label{zupdatezyasid} \lstinputlisting[language=sail]{sail_latex/sailupdateasid.tex}} + +\newcommand{\sailmodasid}{\label{zzymodzyasid} \lstinputlisting[language=sail]{sail_latex/sailmodasid.tex}} + +\newcommand{\sailgetTLBEntryg}{\label{zzygetzyTLBEntryzyg} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntryg.tex}} + +\newcommand{\sailfngetTLBEntryg}{\label{zzygetzyTLBEntryzyg} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntryg.tex}} + +\newcommand{\sailsetTLBEntryg}{\label{zzysetzyTLBEntryzyg} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntryg.tex}} + +\newcommand{\sailfnsetTLBEntryg}{\label{zzysetzyTLBEntryzyg} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntryg.tex}} + +\newcommand{\sailupdateTLBEntryg}{\label{zzyupdatezyTLBEntryzyg} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntryg.tex}} + +\newcommand{\sailfnupdateTLBEntryg}{\label{zzyupdatezyTLBEntryzyg} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntryg.tex}} + +\newcommand{\sailupdateg}{\label{zupdatezyg} \lstinputlisting[language=sail]{sail_latex/sailupdateg.tex}} + +\newcommand{\sailmodg}{\label{zzymodzyg} \lstinputlisting[language=sail]{sail_latex/sailmodg.tex}} + +\newcommand{\sailgetTLBEntryvalid}{\label{zzygetzyTLBEntryzyvalid} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntryvalid.tex}} + +\newcommand{\sailfngetTLBEntryvalid}{\label{zzygetzyTLBEntryzyvalid} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntryvalid.tex}} + +\newcommand{\sailsetTLBEntryvalid}{\label{zzysetzyTLBEntryzyvalid} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntryvalid.tex}} + +\newcommand{\sailfnsetTLBEntryvalid}{\label{zzysetzyTLBEntryzyvalid} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntryvalid.tex}} + +\newcommand{\sailupdateTLBEntryvalid}{\label{zzyupdatezyTLBEntryzyvalid} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntryvalid.tex}} + +\newcommand{\sailfnupdateTLBEntryvalid}{\label{zzyupdatezyTLBEntryzyvalid} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntryvalid.tex}} + +\newcommand{\sailupdatevalid}{\label{zupdatezyvalid} \lstinputlisting[language=sail]{sail_latex/sailupdatevalid.tex}} + +\newcommand{\sailmodvalid}{\label{zzymodzyvalid} \lstinputlisting[language=sail]{sail_latex/sailmodvalid.tex}} + +\newcommand{\sailgetTLBEntrycapsone}{\label{zzygetzyTLBEntryzycapsone} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntrycapsone.tex}} + +\newcommand{\sailfngetTLBEntrycapsone}{\label{zzygetzyTLBEntryzycapsone} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntrycapsone.tex}} + +\newcommand{\sailsetTLBEntrycapsone}{\label{zzysetzyTLBEntryzycapsone} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntrycapsone.tex}} + +\newcommand{\sailfnsetTLBEntrycapsone}{\label{zzysetzyTLBEntryzycapsone} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntrycapsone.tex}} + +\newcommand{\sailupdateTLBEntrycapsone}{\label{zzyupdatezyTLBEntryzycapsone} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntrycapsone.tex}} + +\newcommand{\sailfnupdateTLBEntrycapsone}{\label{zzyupdatezyTLBEntryzycapsone} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntrycapsone.tex}} + +\newcommand{\sailupdatecapsone}{\label{zupdatezycapsone} \lstinputlisting[language=sail]{sail_latex/sailupdatecapsone.tex}} + +\newcommand{\sailmodcapsone}{\label{zzymodzycapsone} \lstinputlisting[language=sail]{sail_latex/sailmodcapsone.tex}} + +\newcommand{\sailgetTLBEntrycaplone}{\label{zzygetzyTLBEntryzycaplone} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntrycaplone.tex}} + +\newcommand{\sailfngetTLBEntrycaplone}{\label{zzygetzyTLBEntryzycaplone} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntrycaplone.tex}} + +\newcommand{\sailsetTLBEntrycaplone}{\label{zzysetzyTLBEntryzycaplone} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntrycaplone.tex}} + +\newcommand{\sailfnsetTLBEntrycaplone}{\label{zzysetzyTLBEntryzycaplone} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntrycaplone.tex}} + +\newcommand{\sailupdateTLBEntrycaplone}{\label{zzyupdatezyTLBEntryzycaplone} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntrycaplone.tex}} + +\newcommand{\sailfnupdateTLBEntrycaplone}{\label{zzyupdatezyTLBEntryzycaplone} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntrycaplone.tex}} + +\newcommand{\sailupdatecaplone}{\label{zupdatezycaplone} \lstinputlisting[language=sail]{sail_latex/sailupdatecaplone.tex}} + +\newcommand{\sailmodcaplone}{\label{zzymodzycaplone} \lstinputlisting[language=sail]{sail_latex/sailmodcaplone.tex}} + +\newcommand{\sailgetTLBEntrypfnone}{\label{zzygetzyTLBEntryzypfnone} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntrypfnone.tex}} + +\newcommand{\sailfngetTLBEntrypfnone}{\label{zzygetzyTLBEntryzypfnone} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntrypfnone.tex}} + +\newcommand{\sailsetTLBEntrypfnone}{\label{zzysetzyTLBEntryzypfnone} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntrypfnone.tex}} + +\newcommand{\sailfnsetTLBEntrypfnone}{\label{zzysetzyTLBEntryzypfnone} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntrypfnone.tex}} + +\newcommand{\sailupdateTLBEntrypfnone}{\label{zzyupdatezyTLBEntryzypfnone} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntrypfnone.tex}} + +\newcommand{\sailfnupdateTLBEntrypfnone}{\label{zzyupdatezyTLBEntryzypfnone} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntrypfnone.tex}} + +\newcommand{\sailupdatepfnone}{\label{zupdatezypfnone} \lstinputlisting[language=sail]{sail_latex/sailupdatepfnone.tex}} + +\newcommand{\sailmodpfnone}{\label{zzymodzypfnone} \lstinputlisting[language=sail]{sail_latex/sailmodpfnone.tex}} + +\newcommand{\sailgetTLBEntrycone}{\label{zzygetzyTLBEntryzycone} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntrycone.tex}} + +\newcommand{\sailfngetTLBEntrycone}{\label{zzygetzyTLBEntryzycone} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntrycone.tex}} + +\newcommand{\sailsetTLBEntrycone}{\label{zzysetzyTLBEntryzycone} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntrycone.tex}} + +\newcommand{\sailfnsetTLBEntrycone}{\label{zzysetzyTLBEntryzycone} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntrycone.tex}} + +\newcommand{\sailupdateTLBEntrycone}{\label{zzyupdatezyTLBEntryzycone} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntrycone.tex}} + +\newcommand{\sailfnupdateTLBEntrycone}{\label{zzyupdatezyTLBEntryzycone} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntrycone.tex}} + +\newcommand{\sailupdatecone}{\label{zupdatezycone} \lstinputlisting[language=sail]{sail_latex/sailupdatecone.tex}} + +\newcommand{\sailmodcone}{\label{zzymodzycone} \lstinputlisting[language=sail]{sail_latex/sailmodcone.tex}} + +\newcommand{\sailgetTLBEntrydone}{\label{zzygetzyTLBEntryzydone} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntrydone.tex}} + +\newcommand{\sailfngetTLBEntrydone}{\label{zzygetzyTLBEntryzydone} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntrydone.tex}} + +\newcommand{\sailsetTLBEntrydone}{\label{zzysetzyTLBEntryzydone} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntrydone.tex}} + +\newcommand{\sailfnsetTLBEntrydone}{\label{zzysetzyTLBEntryzydone} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntrydone.tex}} + +\newcommand{\sailupdateTLBEntrydone}{\label{zzyupdatezyTLBEntryzydone} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntrydone.tex}} + +\newcommand{\sailfnupdateTLBEntrydone}{\label{zzyupdatezyTLBEntryzydone} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntrydone.tex}} + +\newcommand{\sailupdatedone}{\label{zupdatezydone} \lstinputlisting[language=sail]{sail_latex/sailupdatedone.tex}} + +\newcommand{\sailmoddone}{\label{zzymodzydone} \lstinputlisting[language=sail]{sail_latex/sailmoddone.tex}} + +\newcommand{\sailgetTLBEntryvone}{\label{zzygetzyTLBEntryzyvone} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntryvone.tex}} + +\newcommand{\sailfngetTLBEntryvone}{\label{zzygetzyTLBEntryzyvone} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntryvone.tex}} + +\newcommand{\sailsetTLBEntryvone}{\label{zzysetzyTLBEntryzyvone} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntryvone.tex}} + +\newcommand{\sailfnsetTLBEntryvone}{\label{zzysetzyTLBEntryzyvone} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntryvone.tex}} + +\newcommand{\sailupdateTLBEntryvone}{\label{zzyupdatezyTLBEntryzyvone} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntryvone.tex}} + +\newcommand{\sailfnupdateTLBEntryvone}{\label{zzyupdatezyTLBEntryzyvone} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntryvone.tex}} + +\newcommand{\sailupdatevone}{\label{zupdatezyvone} \lstinputlisting[language=sail]{sail_latex/sailupdatevone.tex}} + +\newcommand{\sailmodvone}{\label{zzymodzyvone} \lstinputlisting[language=sail]{sail_latex/sailmodvone.tex}} + +\newcommand{\sailgetTLBEntrycapszero}{\label{zzygetzyTLBEntryzycapszero} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntrycapszero.tex}} + +\newcommand{\sailfngetTLBEntrycapszero}{\label{zzygetzyTLBEntryzycapszero} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntrycapszero.tex}} + +\newcommand{\sailsetTLBEntrycapszero}{\label{zzysetzyTLBEntryzycapszero} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntrycapszero.tex}} + +\newcommand{\sailfnsetTLBEntrycapszero}{\label{zzysetzyTLBEntryzycapszero} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntrycapszero.tex}} + +\newcommand{\sailupdateTLBEntrycapszero}{\label{zzyupdatezyTLBEntryzycapszero} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntrycapszero.tex}} + +\newcommand{\sailfnupdateTLBEntrycapszero}{\label{zzyupdatezyTLBEntryzycapszero} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntrycapszero.tex}} + +\newcommand{\sailupdatecapszero}{\label{zupdatezycapszero} \lstinputlisting[language=sail]{sail_latex/sailupdatecapszero.tex}} + +\newcommand{\sailmodcapszero}{\label{zzymodzycapszero} \lstinputlisting[language=sail]{sail_latex/sailmodcapszero.tex}} + +\newcommand{\sailgetTLBEntrycaplzero}{\label{zzygetzyTLBEntryzycaplzero} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntrycaplzero.tex}} + +\newcommand{\sailfngetTLBEntrycaplzero}{\label{zzygetzyTLBEntryzycaplzero} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntrycaplzero.tex}} + +\newcommand{\sailsetTLBEntrycaplzero}{\label{zzysetzyTLBEntryzycaplzero} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntrycaplzero.tex}} + +\newcommand{\sailfnsetTLBEntrycaplzero}{\label{zzysetzyTLBEntryzycaplzero} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntrycaplzero.tex}} + +\newcommand{\sailupdateTLBEntrycaplzero}{\label{zzyupdatezyTLBEntryzycaplzero} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntrycaplzero.tex}} + +\newcommand{\sailfnupdateTLBEntrycaplzero}{\label{zzyupdatezyTLBEntryzycaplzero} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntrycaplzero.tex}} + +\newcommand{\sailupdatecaplzero}{\label{zupdatezycaplzero} \lstinputlisting[language=sail]{sail_latex/sailupdatecaplzero.tex}} + +\newcommand{\sailmodcaplzero}{\label{zzymodzycaplzero} \lstinputlisting[language=sail]{sail_latex/sailmodcaplzero.tex}} + +\newcommand{\sailgetTLBEntrypfnzero}{\label{zzygetzyTLBEntryzypfnzero} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntrypfnzero.tex}} + +\newcommand{\sailfngetTLBEntrypfnzero}{\label{zzygetzyTLBEntryzypfnzero} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntrypfnzero.tex}} + +\newcommand{\sailsetTLBEntrypfnzero}{\label{zzysetzyTLBEntryzypfnzero} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntrypfnzero.tex}} + +\newcommand{\sailfnsetTLBEntrypfnzero}{\label{zzysetzyTLBEntryzypfnzero} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntrypfnzero.tex}} + +\newcommand{\sailupdateTLBEntrypfnzero}{\label{zzyupdatezyTLBEntryzypfnzero} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntrypfnzero.tex}} + +\newcommand{\sailfnupdateTLBEntrypfnzero}{\label{zzyupdatezyTLBEntryzypfnzero} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntrypfnzero.tex}} + +\newcommand{\sailupdatepfnzero}{\label{zupdatezypfnzero} \lstinputlisting[language=sail]{sail_latex/sailupdatepfnzero.tex}} + +\newcommand{\sailmodpfnzero}{\label{zzymodzypfnzero} \lstinputlisting[language=sail]{sail_latex/sailmodpfnzero.tex}} + +\newcommand{\sailgetTLBEntryczero}{\label{zzygetzyTLBEntryzyczero} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntryczero.tex}} + +\newcommand{\sailfngetTLBEntryczero}{\label{zzygetzyTLBEntryzyczero} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntryczero.tex}} + +\newcommand{\sailsetTLBEntryczero}{\label{zzysetzyTLBEntryzyczero} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntryczero.tex}} + +\newcommand{\sailfnsetTLBEntryczero}{\label{zzysetzyTLBEntryzyczero} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntryczero.tex}} + +\newcommand{\sailupdateTLBEntryczero}{\label{zzyupdatezyTLBEntryzyczero} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntryczero.tex}} + +\newcommand{\sailfnupdateTLBEntryczero}{\label{zzyupdatezyTLBEntryzyczero} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntryczero.tex}} + +\newcommand{\sailupdateczero}{\label{zupdatezyczero} \lstinputlisting[language=sail]{sail_latex/sailupdateczero.tex}} + +\newcommand{\sailmodczero}{\label{zzymodzyczero} \lstinputlisting[language=sail]{sail_latex/sailmodczero.tex}} + +\newcommand{\sailgetTLBEntrydzero}{\label{zzygetzyTLBEntryzydzero} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntrydzero.tex}} + +\newcommand{\sailfngetTLBEntrydzero}{\label{zzygetzyTLBEntryzydzero} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntrydzero.tex}} + +\newcommand{\sailsetTLBEntrydzero}{\label{zzysetzyTLBEntryzydzero} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntrydzero.tex}} + +\newcommand{\sailfnsetTLBEntrydzero}{\label{zzysetzyTLBEntryzydzero} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntrydzero.tex}} + +\newcommand{\sailupdateTLBEntrydzero}{\label{zzyupdatezyTLBEntryzydzero} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntrydzero.tex}} + +\newcommand{\sailfnupdateTLBEntrydzero}{\label{zzyupdatezyTLBEntryzydzero} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntrydzero.tex}} + +\newcommand{\sailupdatedzero}{\label{zupdatezydzero} \lstinputlisting[language=sail]{sail_latex/sailupdatedzero.tex}} + +\newcommand{\sailmoddzero}{\label{zzymodzydzero} \lstinputlisting[language=sail]{sail_latex/sailmoddzero.tex}} + +\newcommand{\sailgetTLBEntryvzero}{\label{zzygetzyTLBEntryzyvzero} \lstinputlisting[language=sail]{sail_latex/sailgetTLBEntryvzero.tex}} + +\newcommand{\sailfngetTLBEntryvzero}{\label{zzygetzyTLBEntryzyvzero} \lstinputlisting[language=sail]{sail_latex/sailfngetTLBEntryvzero.tex}} + +\newcommand{\sailsetTLBEntryvzero}{\label{zzysetzyTLBEntryzyvzero} \lstinputlisting[language=sail]{sail_latex/sailsetTLBEntryvzero.tex}} + +\newcommand{\sailfnsetTLBEntryvzero}{\label{zzysetzyTLBEntryzyvzero} \lstinputlisting[language=sail]{sail_latex/sailfnsetTLBEntryvzero.tex}} + +\newcommand{\sailupdateTLBEntryvzero}{\label{zzyupdatezyTLBEntryzyvzero} \lstinputlisting[language=sail]{sail_latex/sailupdateTLBEntryvzero.tex}} + +\newcommand{\sailfnupdateTLBEntryvzero}{\label{zzyupdatezyTLBEntryzyvzero} \lstinputlisting[language=sail]{sail_latex/sailfnupdateTLBEntryvzero.tex}} + +\newcommand{\sailupdatevzero}{\label{zupdatezyvzero} \lstinputlisting[language=sail]{sail_latex/sailupdatevzero.tex}} + +\newcommand{\sailmodvzero}{\label{zzymodzyvzero} \lstinputlisting[language=sail]{sail_latex/sailmodvzero.tex}} + +\newcommand{\sailStatusReg}{\label{zStatusReg} \lstinputlisting[language=sail]{sail_latex/sailStatusReg.tex}} + +\newcommand{\sailMkStatusReg}{\label{zMkzyStatusReg} \lstinputlisting[language=sail]{sail_latex/sailMkStatusReg.tex}} + +\newcommand{\sailfnMkStatusReg}{\label{zMkzyStatusReg} \lstinputlisting[language=sail]{sail_latex/sailfnMkStatusReg.tex}} + +\newcommand{\sailgetStatusRegbits}{\label{zzygetzyStatusRegzybits} \lstinputlisting[language=sail]{sail_latex/sailgetStatusRegbits.tex}} + +\newcommand{\sailfngetStatusRegbits}{\label{zzygetzyStatusRegzybits} \lstinputlisting[language=sail]{sail_latex/sailfngetStatusRegbits.tex}} + +\newcommand{\sailsetStatusRegbits}{\label{zzysetzyStatusRegzybits} \lstinputlisting[language=sail]{sail_latex/sailsetStatusRegbits.tex}} + +\newcommand{\sailfnsetStatusRegbits}{\label{zzysetzyStatusRegzybits} \lstinputlisting[language=sail]{sail_latex/sailfnsetStatusRegbits.tex}} + +\newcommand{\sailupdateStatusRegbits}{\label{zzyupdatezyStatusRegzybits} \lstinputlisting[language=sail]{sail_latex/sailupdateStatusRegbits.tex}} + +\newcommand{\sailfnupdateStatusRegbits}{\label{zzyupdatezyStatusRegzybits} \lstinputlisting[language=sail]{sail_latex/sailfnupdateStatusRegbits.tex}} + +\newcommand{\sailsailupdatebitsv}{\label{zupdatezybits} \lstinputlisting[language=sail]{sail_latex/sailsailupdatebitsv.tex}} + +\newcommand{\sailsailmodbitsv}{\label{zzymodzybits} \lstinputlisting[language=sail]{sail_latex/sailsailmodbitsv.tex}} + +\newcommand{\sailgetStatusRegCU}{\label{zzygetzyStatusRegzyCU} \lstinputlisting[language=sail]{sail_latex/sailgetStatusRegCU.tex}} + +\newcommand{\sailfngetStatusRegCU}{\label{zzygetzyStatusRegzyCU} \lstinputlisting[language=sail]{sail_latex/sailfngetStatusRegCU.tex}} + +\newcommand{\sailsetStatusRegCU}{\label{zzysetzyStatusRegzyCU} \lstinputlisting[language=sail]{sail_latex/sailsetStatusRegCU.tex}} + +\newcommand{\sailfnsetStatusRegCU}{\label{zzysetzyStatusRegzyCU} \lstinputlisting[language=sail]{sail_latex/sailfnsetStatusRegCU.tex}} + +\newcommand{\sailupdateStatusRegCU}{\label{zzyupdatezyStatusRegzyCU} \lstinputlisting[language=sail]{sail_latex/sailupdateStatusRegCU.tex}} + +\newcommand{\sailfnupdateStatusRegCU}{\label{zzyupdatezyStatusRegzyCU} \lstinputlisting[language=sail]{sail_latex/sailfnupdateStatusRegCU.tex}} + +\newcommand{\sailupdateCU}{\label{zupdatezyCU} \lstinputlisting[language=sail]{sail_latex/sailupdateCU.tex}} + +\newcommand{\sailmodCU}{\label{zzymodzyCU} \lstinputlisting[language=sail]{sail_latex/sailmodCU.tex}} + +\newcommand{\sailgetStatusRegBEV}{\label{zzygetzyStatusRegzyBEV} \lstinputlisting[language=sail]{sail_latex/sailgetStatusRegBEV.tex}} + +\newcommand{\sailfngetStatusRegBEV}{\label{zzygetzyStatusRegzyBEV} \lstinputlisting[language=sail]{sail_latex/sailfngetStatusRegBEV.tex}} + +\newcommand{\sailsetStatusRegBEV}{\label{zzysetzyStatusRegzyBEV} \lstinputlisting[language=sail]{sail_latex/sailsetStatusRegBEV.tex}} + +\newcommand{\sailfnsetStatusRegBEV}{\label{zzysetzyStatusRegzyBEV} \lstinputlisting[language=sail]{sail_latex/sailfnsetStatusRegBEV.tex}} + +\newcommand{\sailupdateStatusRegBEV}{\label{zzyupdatezyStatusRegzyBEV} \lstinputlisting[language=sail]{sail_latex/sailupdateStatusRegBEV.tex}} + +\newcommand{\sailfnupdateStatusRegBEV}{\label{zzyupdatezyStatusRegzyBEV} \lstinputlisting[language=sail]{sail_latex/sailfnupdateStatusRegBEV.tex}} + +\newcommand{\sailupdateBEV}{\label{zupdatezyBEV} \lstinputlisting[language=sail]{sail_latex/sailupdateBEV.tex}} + +\newcommand{\sailmodBEV}{\label{zzymodzyBEV} \lstinputlisting[language=sail]{sail_latex/sailmodBEV.tex}} + +\newcommand{\sailgetStatusRegIM}{\label{zzygetzyStatusRegzyIM} \lstinputlisting[language=sail]{sail_latex/sailgetStatusRegIM.tex}} + +\newcommand{\sailfngetStatusRegIM}{\label{zzygetzyStatusRegzyIM} \lstinputlisting[language=sail]{sail_latex/sailfngetStatusRegIM.tex}} + +\newcommand{\sailsetStatusRegIM}{\label{zzysetzyStatusRegzyIM} \lstinputlisting[language=sail]{sail_latex/sailsetStatusRegIM.tex}} + +\newcommand{\sailfnsetStatusRegIM}{\label{zzysetzyStatusRegzyIM} \lstinputlisting[language=sail]{sail_latex/sailfnsetStatusRegIM.tex}} + +\newcommand{\sailupdateStatusRegIM}{\label{zzyupdatezyStatusRegzyIM} \lstinputlisting[language=sail]{sail_latex/sailupdateStatusRegIM.tex}} + +\newcommand{\sailfnupdateStatusRegIM}{\label{zzyupdatezyStatusRegzyIM} \lstinputlisting[language=sail]{sail_latex/sailfnupdateStatusRegIM.tex}} + +\newcommand{\sailupdateIM}{\label{zupdatezyIM} \lstinputlisting[language=sail]{sail_latex/sailupdateIM.tex}} + +\newcommand{\sailmodIM}{\label{zzymodzyIM} \lstinputlisting[language=sail]{sail_latex/sailmodIM.tex}} + +\newcommand{\sailgetStatusRegKX}{\label{zzygetzyStatusRegzyKX} \lstinputlisting[language=sail]{sail_latex/sailgetStatusRegKX.tex}} + +\newcommand{\sailfngetStatusRegKX}{\label{zzygetzyStatusRegzyKX} \lstinputlisting[language=sail]{sail_latex/sailfngetStatusRegKX.tex}} + +\newcommand{\sailsetStatusRegKX}{\label{zzysetzyStatusRegzyKX} \lstinputlisting[language=sail]{sail_latex/sailsetStatusRegKX.tex}} + +\newcommand{\sailfnsetStatusRegKX}{\label{zzysetzyStatusRegzyKX} \lstinputlisting[language=sail]{sail_latex/sailfnsetStatusRegKX.tex}} + +\newcommand{\sailupdateStatusRegKX}{\label{zzyupdatezyStatusRegzyKX} \lstinputlisting[language=sail]{sail_latex/sailupdateStatusRegKX.tex}} + +\newcommand{\sailfnupdateStatusRegKX}{\label{zzyupdatezyStatusRegzyKX} \lstinputlisting[language=sail]{sail_latex/sailfnupdateStatusRegKX.tex}} + +\newcommand{\sailupdateKX}{\label{zupdatezyKX} \lstinputlisting[language=sail]{sail_latex/sailupdateKX.tex}} + +\newcommand{\sailmodKX}{\label{zzymodzyKX} \lstinputlisting[language=sail]{sail_latex/sailmodKX.tex}} + +\newcommand{\sailgetStatusRegSX}{\label{zzygetzyStatusRegzySX} \lstinputlisting[language=sail]{sail_latex/sailgetStatusRegSX.tex}} + +\newcommand{\sailfngetStatusRegSX}{\label{zzygetzyStatusRegzySX} \lstinputlisting[language=sail]{sail_latex/sailfngetStatusRegSX.tex}} + +\newcommand{\sailsetStatusRegSX}{\label{zzysetzyStatusRegzySX} \lstinputlisting[language=sail]{sail_latex/sailsetStatusRegSX.tex}} + +\newcommand{\sailfnsetStatusRegSX}{\label{zzysetzyStatusRegzySX} \lstinputlisting[language=sail]{sail_latex/sailfnsetStatusRegSX.tex}} + +\newcommand{\sailupdateStatusRegSX}{\label{zzyupdatezyStatusRegzySX} \lstinputlisting[language=sail]{sail_latex/sailupdateStatusRegSX.tex}} + +\newcommand{\sailfnupdateStatusRegSX}{\label{zzyupdatezyStatusRegzySX} \lstinputlisting[language=sail]{sail_latex/sailfnupdateStatusRegSX.tex}} + +\newcommand{\sailupdateSX}{\label{zupdatezySX} \lstinputlisting[language=sail]{sail_latex/sailupdateSX.tex}} + +\newcommand{\sailmodSX}{\label{zzymodzySX} \lstinputlisting[language=sail]{sail_latex/sailmodSX.tex}} + +\newcommand{\sailgetStatusRegUX}{\label{zzygetzyStatusRegzyUX} \lstinputlisting[language=sail]{sail_latex/sailgetStatusRegUX.tex}} + +\newcommand{\sailfngetStatusRegUX}{\label{zzygetzyStatusRegzyUX} \lstinputlisting[language=sail]{sail_latex/sailfngetStatusRegUX.tex}} + +\newcommand{\sailsetStatusRegUX}{\label{zzysetzyStatusRegzyUX} \lstinputlisting[language=sail]{sail_latex/sailsetStatusRegUX.tex}} + +\newcommand{\sailfnsetStatusRegUX}{\label{zzysetzyStatusRegzyUX} \lstinputlisting[language=sail]{sail_latex/sailfnsetStatusRegUX.tex}} + +\newcommand{\sailupdateStatusRegUX}{\label{zzyupdatezyStatusRegzyUX} \lstinputlisting[language=sail]{sail_latex/sailupdateStatusRegUX.tex}} + +\newcommand{\sailfnupdateStatusRegUX}{\label{zzyupdatezyStatusRegzyUX} \lstinputlisting[language=sail]{sail_latex/sailfnupdateStatusRegUX.tex}} + +\newcommand{\sailupdateUX}{\label{zupdatezyUX} \lstinputlisting[language=sail]{sail_latex/sailupdateUX.tex}} + +\newcommand{\sailmodUX}{\label{zzymodzyUX} \lstinputlisting[language=sail]{sail_latex/sailmodUX.tex}} + +\newcommand{\sailgetStatusRegKSU}{\label{zzygetzyStatusRegzyKSU} \lstinputlisting[language=sail]{sail_latex/sailgetStatusRegKSU.tex}} + +\newcommand{\sailfngetStatusRegKSU}{\label{zzygetzyStatusRegzyKSU} \lstinputlisting[language=sail]{sail_latex/sailfngetStatusRegKSU.tex}} + +\newcommand{\sailsetStatusRegKSU}{\label{zzysetzyStatusRegzyKSU} \lstinputlisting[language=sail]{sail_latex/sailsetStatusRegKSU.tex}} + +\newcommand{\sailfnsetStatusRegKSU}{\label{zzysetzyStatusRegzyKSU} \lstinputlisting[language=sail]{sail_latex/sailfnsetStatusRegKSU.tex}} + +\newcommand{\sailupdateStatusRegKSU}{\label{zzyupdatezyStatusRegzyKSU} \lstinputlisting[language=sail]{sail_latex/sailupdateStatusRegKSU.tex}} + +\newcommand{\sailfnupdateStatusRegKSU}{\label{zzyupdatezyStatusRegzyKSU} \lstinputlisting[language=sail]{sail_latex/sailfnupdateStatusRegKSU.tex}} + +\newcommand{\sailupdateKSU}{\label{zupdatezyKSU} \lstinputlisting[language=sail]{sail_latex/sailupdateKSU.tex}} + +\newcommand{\sailmodKSU}{\label{zzymodzyKSU} \lstinputlisting[language=sail]{sail_latex/sailmodKSU.tex}} + +\newcommand{\sailgetStatusRegERL}{\label{zzygetzyStatusRegzyERL} \lstinputlisting[language=sail]{sail_latex/sailgetStatusRegERL.tex}} + +\newcommand{\sailfngetStatusRegERL}{\label{zzygetzyStatusRegzyERL} \lstinputlisting[language=sail]{sail_latex/sailfngetStatusRegERL.tex}} + +\newcommand{\sailsetStatusRegERL}{\label{zzysetzyStatusRegzyERL} \lstinputlisting[language=sail]{sail_latex/sailsetStatusRegERL.tex}} + +\newcommand{\sailfnsetStatusRegERL}{\label{zzysetzyStatusRegzyERL} \lstinputlisting[language=sail]{sail_latex/sailfnsetStatusRegERL.tex}} + +\newcommand{\sailupdateStatusRegERL}{\label{zzyupdatezyStatusRegzyERL} \lstinputlisting[language=sail]{sail_latex/sailupdateStatusRegERL.tex}} + +\newcommand{\sailfnupdateStatusRegERL}{\label{zzyupdatezyStatusRegzyERL} \lstinputlisting[language=sail]{sail_latex/sailfnupdateStatusRegERL.tex}} + +\newcommand{\sailupdateERL}{\label{zupdatezyERL} \lstinputlisting[language=sail]{sail_latex/sailupdateERL.tex}} + +\newcommand{\sailmodERL}{\label{zzymodzyERL} \lstinputlisting[language=sail]{sail_latex/sailmodERL.tex}} + +\newcommand{\sailgetStatusRegEXL}{\label{zzygetzyStatusRegzyEXL} \lstinputlisting[language=sail]{sail_latex/sailgetStatusRegEXL.tex}} + +\newcommand{\sailfngetStatusRegEXL}{\label{zzygetzyStatusRegzyEXL} \lstinputlisting[language=sail]{sail_latex/sailfngetStatusRegEXL.tex}} + +\newcommand{\sailsetStatusRegEXL}{\label{zzysetzyStatusRegzyEXL} \lstinputlisting[language=sail]{sail_latex/sailsetStatusRegEXL.tex}} + +\newcommand{\sailfnsetStatusRegEXL}{\label{zzysetzyStatusRegzyEXL} \lstinputlisting[language=sail]{sail_latex/sailfnsetStatusRegEXL.tex}} + +\newcommand{\sailupdateStatusRegEXL}{\label{zzyupdatezyStatusRegzyEXL} \lstinputlisting[language=sail]{sail_latex/sailupdateStatusRegEXL.tex}} + +\newcommand{\sailfnupdateStatusRegEXL}{\label{zzyupdatezyStatusRegzyEXL} \lstinputlisting[language=sail]{sail_latex/sailfnupdateStatusRegEXL.tex}} + +\newcommand{\sailupdateEXL}{\label{zupdatezyEXL} \lstinputlisting[language=sail]{sail_latex/sailupdateEXL.tex}} + +\newcommand{\sailmodEXL}{\label{zzymodzyEXL} \lstinputlisting[language=sail]{sail_latex/sailmodEXL.tex}} + +\newcommand{\sailgetStatusRegIE}{\label{zzygetzyStatusRegzyIE} \lstinputlisting[language=sail]{sail_latex/sailgetStatusRegIE.tex}} + +\newcommand{\sailfngetStatusRegIE}{\label{zzygetzyStatusRegzyIE} \lstinputlisting[language=sail]{sail_latex/sailfngetStatusRegIE.tex}} + +\newcommand{\sailsetStatusRegIE}{\label{zzysetzyStatusRegzyIE} \lstinputlisting[language=sail]{sail_latex/sailsetStatusRegIE.tex}} + +\newcommand{\sailfnsetStatusRegIE}{\label{zzysetzyStatusRegzyIE} \lstinputlisting[language=sail]{sail_latex/sailfnsetStatusRegIE.tex}} + +\newcommand{\sailupdateStatusRegIE}{\label{zzyupdatezyStatusRegzyIE} \lstinputlisting[language=sail]{sail_latex/sailupdateStatusRegIE.tex}} + +\newcommand{\sailfnupdateStatusRegIE}{\label{zzyupdatezyStatusRegzyIE} \lstinputlisting[language=sail]{sail_latex/sailfnupdateStatusRegIE.tex}} + +\newcommand{\sailupdateIE}{\label{zupdatezyIE} \lstinputlisting[language=sail]{sail_latex/sailupdateIE.tex}} + +\newcommand{\sailmodIE}{\label{zzymodzyIE} \lstinputlisting[language=sail]{sail_latex/sailmodIE.tex}} + +\newcommand{\sailexecutebranch}{\label{zexecutezybranch} \lstinputlisting[language=sail]{sail_latex/sailexecutebranch.tex}} + +\newcommand{\sailfnexecutebranch}{\label{zexecutezybranch} \lstinputlisting[language=sail]{sail_latex/sailfnexecutebranch.tex}} + +\newcommand{\sailNotWordVal}{\label{zNotWordVal} \lstinputlisting[language=sail]{sail_latex/sailNotWordVal.tex}} + +\newcommand{\sailfnNotWordVal}{\label{zNotWordVal} \lstinputlisting[language=sail]{sail_latex/sailfnNotWordVal.tex}} + +\newcommand{\sailrGPR}{\label{zrGPR} \lstinputlisting[language=sail]{sail_latex/sailrGPR.tex}} + +\newcommand{\sailfnrGPR}{\label{zrGPR} \lstinputlisting[language=sail]{sail_latex/sailfnrGPR.tex}} + +\newcommand{\sailwGPR}{\label{zwGPR} \lstinputlisting[language=sail]{sail_latex/sailwGPR.tex}} + +\newcommand{\sailfnwGPR}{\label{zwGPR} \lstinputlisting[language=sail]{sail_latex/sailfnwGPR.tex}} + +\newcommand{\sailMEMr}{\label{zMEMr} \lstinputlisting[language=sail]{sail_latex/sailMEMr.tex}} + +\newcommand{\sailMEMrreserve}{\label{zMEMrzyreserve} \lstinputlisting[language=sail]{sail_latex/sailMEMrreserve.tex}} + +\newcommand{\sailMEMsync}{\label{zMEMzysync} \lstinputlisting[language=sail]{sail_latex/sailMEMsync.tex}} + +\newcommand{\sailMEMea}{\label{zMEMea} \lstinputlisting[language=sail]{sail_latex/sailMEMea.tex}} + +\newcommand{\sailMEMeaconditional}{\label{zMEMeazyconditional} \lstinputlisting[language=sail]{sail_latex/sailMEMeaconditional.tex}} + +\newcommand{\sailMEMval}{\label{zMEMval} \lstinputlisting[language=sail]{sail_latex/sailMEMval.tex}} + +\newcommand{\sailMEMvalconditional}{\label{zMEMvalzyconditional} \lstinputlisting[language=sail]{sail_latex/sailMEMvalconditional.tex}} + +\newcommand{\sailskipeamem}{\label{zskipzyeamem} \lstinputlisting[language=sail]{sail_latex/sailskipeamem.tex}} + +\newcommand{\sailskipbarr}{\label{zskipzybarr} \lstinputlisting[language=sail]{sail_latex/sailskipbarr.tex}} + +\newcommand{\sailskipwreg}{\label{zskipzywreg} \lstinputlisting[language=sail]{sail_latex/sailskipwreg.tex}} + +\newcommand{\sailskiprreg}{\label{zskipzyrreg} \lstinputlisting[language=sail]{sail_latex/sailskiprreg.tex}} + +\newcommand{\sailskipwmvt}{\label{zskipzywmvt} \lstinputlisting[language=sail]{sail_latex/sailskipwmvt.tex}} + +\newcommand{\sailskiprmemt}{\label{zskipzyrmemt} \lstinputlisting[language=sail]{sail_latex/sailskiprmemt.tex}} + +\newcommand{\sailskipescape}{\label{zskipzyescape} \lstinputlisting[language=sail]{sail_latex/sailskipescape.tex}} + +\newcommand{\sailfnMEMr}{\label{zMEMr} \lstinputlisting[language=sail]{sail_latex/sailfnMEMr.tex}} + +\newcommand{\sailfnMEMrreserve}{\label{zMEMrzyreserve} \lstinputlisting[language=sail]{sail_latex/sailfnMEMrreserve.tex}} + +\newcommand{\sailfnMEMsync}{\label{zMEMzysync} \lstinputlisting[language=sail]{sail_latex/sailfnMEMsync.tex}} + +\newcommand{\sailfnMEMea}{\label{zMEMea} \lstinputlisting[language=sail]{sail_latex/sailfnMEMea.tex}} + +\newcommand{\sailfnMEMeaconditional}{\label{zMEMeazyconditional} \lstinputlisting[language=sail]{sail_latex/sailfnMEMeaconditional.tex}} + +\newcommand{\sailfnMEMval}{\label{zMEMval} \lstinputlisting[language=sail]{sail_latex/sailfnMEMval.tex}} + +\newcommand{\sailfnMEMvalconditional}{\label{zMEMvalzyconditional} \lstinputlisting[language=sail]{sail_latex/sailfnMEMvalconditional.tex}} + +\newcommand{\sailException}{\label{zException} \lstinputlisting[language=sail]{sail_latex/sailException.tex}} + +\newcommand{\sailExceptionofnum}{\label{zExceptionzyofzynum} \lstinputlisting[language=sail]{sail_latex/sailExceptionofnum.tex}} + +\newcommand{\sailfnExceptionofnum}{\label{zExceptionzyofzynum} \lstinputlisting[language=sail]{sail_latex/sailfnExceptionofnum.tex}} + +\newcommand{\sailnumofException}{\label{znumzyofzyException} \lstinputlisting[language=sail]{sail_latex/sailnumofException.tex}} + +\newcommand{\sailfnnumofException}{\label{znumzyofzyException} \lstinputlisting[language=sail]{sail_latex/sailfnnumofException.tex}} + +\newcommand{\sailExceptionCode}{\label{zExceptionCode} \lstinputlisting[language=sail]{sail_latex/sailExceptionCode.tex}} + +\newcommand{\sailfnExceptionCode}{\label{zExceptionCode} \lstinputlisting[language=sail]{sail_latex/sailfnExceptionCode.tex}} + +\newcommand{\sailSignalExceptionMIPS}{\label{zSignalExceptionMIPS} \lstinputlisting[language=sail]{sail_latex/sailSignalExceptionMIPS.tex}} + +\newcommand{\sailfnSignalExceptionMIPS}{\label{zSignalExceptionMIPS} \lstinputlisting[language=sail]{sail_latex/sailfnSignalExceptionMIPS.tex}} + +\newcommand{\sailSignalException}{\label{zSignalException} \lstinputlisting[language=sail]{sail_latex/sailSignalException.tex}} + +\newcommand{\sailSignalExceptionBadAddr}{\label{zSignalExceptionBadAddr} \lstinputlisting[language=sail]{sail_latex/sailSignalExceptionBadAddr.tex}} + +\newcommand{\sailfnSignalExceptionBadAddr}{\label{zSignalExceptionBadAddr} \lstinputlisting[language=sail]{sail_latex/sailfnSignalExceptionBadAddr.tex}} + +\newcommand{\sailSignalExceptionTLB}{\label{zSignalExceptionTLB} \lstinputlisting[language=sail]{sail_latex/sailSignalExceptionTLB.tex}} + +\newcommand{\sailfnSignalExceptionTLB}{\label{zSignalExceptionTLB} \lstinputlisting[language=sail]{sail_latex/sailfnSignalExceptionTLB.tex}} + +\newcommand{\sailMemAccessType}{\label{zMemAccessType} \lstinputlisting[language=sail]{sail_latex/sailMemAccessType.tex}} + +\newcommand{\sailMemAccessTypeofnum}{\label{zMemAccessTypezyofzynum} \lstinputlisting[language=sail]{sail_latex/sailMemAccessTypeofnum.tex}} + +\newcommand{\sailfnMemAccessTypeofnum}{\label{zMemAccessTypezyofzynum} \lstinputlisting[language=sail]{sail_latex/sailfnMemAccessTypeofnum.tex}} + +\newcommand{\sailnumofMemAccessType}{\label{znumzyofzyMemAccessType} \lstinputlisting[language=sail]{sail_latex/sailnumofMemAccessType.tex}} + +\newcommand{\sailfnnumofMemAccessType}{\label{znumzyofzyMemAccessType} \lstinputlisting[language=sail]{sail_latex/sailfnnumofMemAccessType.tex}} + +\newcommand{\sailAccessLevel}{\label{zAccessLevel} \lstinputlisting[language=sail]{sail_latex/sailAccessLevel.tex}} + +\newcommand{\sailAccessLevelofnum}{\label{zAccessLevelzyofzynum} \lstinputlisting[language=sail]{sail_latex/sailAccessLevelofnum.tex}} + +\newcommand{\sailfnAccessLevelofnum}{\label{zAccessLevelzyofzynum} \lstinputlisting[language=sail]{sail_latex/sailfnAccessLevelofnum.tex}} + +\newcommand{\sailnumofAccessLevel}{\label{znumzyofzyAccessLevel} \lstinputlisting[language=sail]{sail_latex/sailnumofAccessLevel.tex}} + +\newcommand{\sailfnnumofAccessLevel}{\label{znumzyofzyAccessLevel} \lstinputlisting[language=sail]{sail_latex/sailfnnumofAccessLevel.tex}} + +\newcommand{\sailintofAccessLevel}{\label{zintzyofzyAccessLevel} \lstinputlisting[language=sail]{sail_latex/sailintofAccessLevel.tex}} + +\newcommand{\sailfnintofAccessLevel}{\label{zintzyofzyAccessLevel} \lstinputlisting[language=sail]{sail_latex/sailfnintofAccessLevel.tex}} + +\newcommand{\sailgrantsAccess}{\label{zgrantsAccess} +Returns whether the first AccessLevel is sufficient to grant access at the second, required, access level. + \lstinputlisting[language=sail]{sail_latex/sailgrantsAccess.tex}} + +\newcommand{\sailfngrantsAccess}{\label{zgrantsAccess} \lstinputlisting[language=sail]{sail_latex/sailfngrantsAccess.tex}} + +\newcommand{\sailgetAccessLevel}{\label{zgetAccessLevel} +Returns the current effective access level determined by accessing the relevant parts of the MIPS status register. + \lstinputlisting[language=sail]{sail_latex/sailgetAccessLevel.tex}} + +\newcommand{\sailfngetAccessLevel}{\label{zgetAccessLevel} \lstinputlisting[language=sail]{sail_latex/sailfngetAccessLevel.tex}} + +\newcommand{\sailcheckCPzeroAccess}{\label{zcheckCPzeroAccess} \lstinputlisting[language=sail]{sail_latex/sailcheckCPzeroAccess.tex}} + +\newcommand{\sailfncheckCPzeroAccess}{\label{zcheckCPzeroAccess} \lstinputlisting[language=sail]{sail_latex/sailfncheckCPzeroAccess.tex}} + +\newcommand{\sailincrementCPzeroCount}{\label{zincrementCPzeroCount} \lstinputlisting[language=sail]{sail_latex/sailincrementCPzeroCount.tex}} + +\newcommand{\sailfnincrementCPzeroCount}{\label{zincrementCPzeroCount} \lstinputlisting[language=sail]{sail_latex/sailfnincrementCPzeroCount.tex}} + +\newcommand{\sailregno}{\label{zregno} \lstinputlisting[language=sail]{sail_latex/sailregno.tex}} + +\newcommand{\sailimmonesix}{\label{zimmonesix} \lstinputlisting[language=sail]{sail_latex/sailimmonesix.tex}} + +\newcommand{\sailregregreg}{\label{zregregreg} \lstinputlisting[language=sail]{sail_latex/sailregregreg.tex}} + +\newcommand{\sailregregimmonesix}{\label{zregregimmonesix} \lstinputlisting[language=sail]{sail_latex/sailregregimmonesix.tex}} + +\newcommand{\saildecodefailure}{\label{zdecodezyfailure} \lstinputlisting[language=sail]{sail_latex/saildecodefailure.tex}} + +\newcommand{\saildecodefailureofnum}{\label{zdecodezyfailurezyofzynum} \lstinputlisting[language=sail]{sail_latex/saildecodefailureofnum.tex}} + +\newcommand{\sailfndecodefailureofnum}{\label{zdecodezyfailurezyofzynum} \lstinputlisting[language=sail]{sail_latex/sailfndecodefailureofnum.tex}} + +\newcommand{\sailnumofdecodefailure}{\label{znumzyofzydecodezyfailure} \lstinputlisting[language=sail]{sail_latex/sailnumofdecodefailure.tex}} + +\newcommand{\sailfnnumofdecodefailure}{\label{znumzyofzydecodezyfailure} \lstinputlisting[language=sail]{sail_latex/sailfnnumofdecodefailure.tex}} + +\newcommand{\sailComparison}{\label{zComparison} \lstinputlisting[language=sail]{sail_latex/sailComparison.tex}} + +\newcommand{\sailComparisonofnum}{\label{zComparisonzyofzynum} \lstinputlisting[language=sail]{sail_latex/sailComparisonofnum.tex}} + +\newcommand{\sailfnComparisonofnum}{\label{zComparisonzyofzynum} \lstinputlisting[language=sail]{sail_latex/sailfnComparisonofnum.tex}} + +\newcommand{\sailnumofComparison}{\label{znumzyofzyComparison} \lstinputlisting[language=sail]{sail_latex/sailnumofComparison.tex}} + +\newcommand{\sailfnnumofComparison}{\label{znumzyofzyComparison} \lstinputlisting[language=sail]{sail_latex/sailfnnumofComparison.tex}} + +\newcommand{\sailcompare}{\label{zcompare} \lstinputlisting[language=sail]{sail_latex/sailcompare.tex}} + +\newcommand{\sailfncompare}{\label{zcompare} \lstinputlisting[language=sail]{sail_latex/sailfncompare.tex}} + +\newcommand{\sailWordType}{\label{zWordType} \lstinputlisting[language=sail]{sail_latex/sailWordType.tex}} + +\newcommand{\sailWordTypeofnum}{\label{zWordTypezyofzynum} \lstinputlisting[language=sail]{sail_latex/sailWordTypeofnum.tex}} + +\newcommand{\sailfnWordTypeofnum}{\label{zWordTypezyofzynum} \lstinputlisting[language=sail]{sail_latex/sailfnWordTypeofnum.tex}} + +\newcommand{\sailnumofWordType}{\label{znumzyofzyWordType} \lstinputlisting[language=sail]{sail_latex/sailnumofWordType.tex}} + +\newcommand{\sailfnnumofWordType}{\label{znumzyofzyWordType} \lstinputlisting[language=sail]{sail_latex/sailfnnumofWordType.tex}} + +\newcommand{\sailWordTypeUnaligned}{\label{zWordTypeUnaligned} \lstinputlisting[language=sail]{sail_latex/sailWordTypeUnaligned.tex}} + +\newcommand{\sailWordTypeUnalignedofnum}{\label{zWordTypeUnalignedzyofzynum} \lstinputlisting[language=sail]{sail_latex/sailWordTypeUnalignedofnum.tex}} + +\newcommand{\sailfnWordTypeUnalignedofnum}{\label{zWordTypeUnalignedzyofzynum} \lstinputlisting[language=sail]{sail_latex/sailfnWordTypeUnalignedofnum.tex}} + +\newcommand{\sailnumofWordTypeUnaligned}{\label{znumzyofzyWordTypeUnaligned} \lstinputlisting[language=sail]{sail_latex/sailnumofWordTypeUnaligned.tex}} + +\newcommand{\sailfnnumofWordTypeUnaligned}{\label{znumzyofzyWordTypeUnaligned} \lstinputlisting[language=sail]{sail_latex/sailfnnumofWordTypeUnaligned.tex}} + +\newcommand{\sailwordWidthBytes}{\label{zwordWidthBytes} \lstinputlisting[language=sail]{sail_latex/sailwordWidthBytes.tex}} + +\newcommand{\sailfnwordWidthBytes}{\label{zwordWidthBytes} \lstinputlisting[language=sail]{sail_latex/sailfnwordWidthBytes.tex}} + +\newcommand{\sailisAddressAligned}{\label{zisAddressAligned} \lstinputlisting[language=sail]{sail_latex/sailisAddressAligned.tex}} + +\newcommand{\sailfnisAddressAligned}{\label{zisAddressAligned} \lstinputlisting[language=sail]{sail_latex/sailfnisAddressAligned.tex}} + +\newcommand{\sailreverseendianness}{\label{zreversezyendianness} \lstinputlisting[language=sail]{sail_latex/sailreverseendianness.tex}} + +\newcommand{\sailMEMrwrapper}{\label{zMEMrzywrapper} \lstinputlisting[language=sail]{sail_latex/sailMEMrwrapper.tex}} + +\newcommand{\sailfnMEMrwrapper}{\label{zMEMrzywrapper} \lstinputlisting[language=sail]{sail_latex/sailfnMEMrwrapper.tex}} + +\newcommand{\sailMEMrreservewrapper}{\label{zMEMrzyreservezywrapper} \lstinputlisting[language=sail]{sail_latex/sailMEMrreservewrapper.tex}} + +\newcommand{\sailfnMEMrreservewrapper}{\label{zMEMrzyreservezywrapper} \lstinputlisting[language=sail]{sail_latex/sailfnMEMrreservewrapper.tex}} + +\newcommand{\sailinitcpzerostate}{\label{zinitzycpzerozystate} \lstinputlisting[language=sail]{sail_latex/sailinitcpzerostate.tex}} + +\newcommand{\sailfninitcpzerostate}{\label{zinitzycpzerozystate} \lstinputlisting[language=sail]{sail_latex/sailfninitcpzerostate.tex}} + +\newcommand{\sailinitcptwostate}{\label{zinitzycptwozystate} \lstinputlisting[language=sail]{sail_latex/sailinitcptwostate.tex}} + +\newcommand{\sailcptwonextpc}{\label{zcptwozynextzypc} \lstinputlisting[language=sail]{sail_latex/sailcptwonextpc.tex}} + +\newcommand{\saildumpcptwostate}{\label{zdumpzycptwozystate} \lstinputlisting[language=sail]{sail_latex/saildumpcptwostate.tex}} + +\newcommand{\sailtlbEntryMatch}{\label{ztlbEntryMatch} \lstinputlisting[language=sail]{sail_latex/sailtlbEntryMatch.tex}} + +\newcommand{\sailfntlbEntryMatch}{\label{ztlbEntryMatch} \lstinputlisting[language=sail]{sail_latex/sailfntlbEntryMatch.tex}} + +\newcommand{\sailtlbSearch}{\label{ztlbSearch} \lstinputlisting[language=sail]{sail_latex/sailtlbSearch.tex}} + +\newcommand{\sailfntlbSearch}{\label{ztlbSearch} \lstinputlisting[language=sail]{sail_latex/sailfntlbSearch.tex}} + +\newcommand{\sailTLBTranslatetwo}{\label{zTLBTranslatetwo} \lstinputlisting[language=sail]{sail_latex/sailTLBTranslatetwo.tex}} + +\newcommand{\sailfnTLBTranslatetwo}{\label{zTLBTranslatetwo} \lstinputlisting[language=sail]{sail_latex/sailfnTLBTranslatetwo.tex}} + +\newcommand{\sailTLBTranslateC}{\label{zTLBTranslateC} \lstinputlisting[language=sail]{sail_latex/sailTLBTranslateC.tex}} + +\newcommand{\sailfnTLBTranslateC}{\label{zTLBTranslateC} \lstinputlisting[language=sail]{sail_latex/sailfnTLBTranslateC.tex}} + +\newcommand{\sailTLBTranslate}{\label{zTLBTranslate} \lstinputlisting[language=sail]{sail_latex/sailTLBTranslate.tex}} + +\newcommand{\sailfnTLBTranslate}{\label{zTLBTranslate} \lstinputlisting[language=sail]{sail_latex/sailfnTLBTranslate.tex}} + +\newcommand{\sailCapLen}{\label{zCapLen} \lstinputlisting[language=sail]{sail_latex/sailCapLen.tex}} + +\newcommand{\sailuintsixfour}{\label{zuintsixfour} \lstinputlisting[language=sail]{sail_latex/sailuintsixfour.tex}} + +\newcommand{\sailCPtrCmpOp}{\label{zCPtrCmpOp} \lstinputlisting[language=sail]{sail_latex/sailCPtrCmpOp.tex}} + +\newcommand{\sailCPtrCmpOpofnum}{\label{zCPtrCmpOpzyofzynum} \lstinputlisting[language=sail]{sail_latex/sailCPtrCmpOpofnum.tex}} + +\newcommand{\sailfnCPtrCmpOpofnum}{\label{zCPtrCmpOpzyofzynum} \lstinputlisting[language=sail]{sail_latex/sailfnCPtrCmpOpofnum.tex}} + +\newcommand{\sailnumofCPtrCmpOp}{\label{znumzyofzyCPtrCmpOp} \lstinputlisting[language=sail]{sail_latex/sailnumofCPtrCmpOp.tex}} + +\newcommand{\sailfnnumofCPtrCmpOp}{\label{znumzyofzyCPtrCmpOp} \lstinputlisting[language=sail]{sail_latex/sailfnnumofCPtrCmpOp.tex}} + +\newcommand{\sailClearRegSet}{\label{zClearRegSet} \lstinputlisting[language=sail]{sail_latex/sailClearRegSet.tex}} + +\newcommand{\sailClearRegSetofnum}{\label{zClearRegSetzyofzynum} \lstinputlisting[language=sail]{sail_latex/sailClearRegSetofnum.tex}} + +\newcommand{\sailfnClearRegSetofnum}{\label{zClearRegSetzyofzynum} \lstinputlisting[language=sail]{sail_latex/sailfnClearRegSetofnum.tex}} + +\newcommand{\sailnumofClearRegSet}{\label{znumzyofzyClearRegSet} \lstinputlisting[language=sail]{sail_latex/sailnumofClearRegSet.tex}} + +\newcommand{\sailfnnumofClearRegSet}{\label{znumzyofzyClearRegSet} \lstinputlisting[language=sail]{sail_latex/sailfnnumofClearRegSet.tex}} + +\newcommand{\sailCapReg}{\label{zCapReg} \lstinputlisting[language=sail]{sail_latex/sailCapReg.tex}} + +\newcommand{\sailCapStruct}{\label{zCapStruct} \lstinputlisting[language=sail]{sail_latex/sailCapStruct.tex}} + +\newcommand{\sailcapRegToCapStruct}{\label{zcapRegToCapStruct} \lstinputlisting[language=sail]{sail_latex/sailcapRegToCapStruct.tex}} + +\newcommand{\sailfncapRegToCapStruct}{\label{zcapRegToCapStruct} \lstinputlisting[language=sail]{sail_latex/sailfncapRegToCapStruct.tex}} + +\newcommand{\sailgetCapPerms}{\label{zgetCapPerms} \lstinputlisting[language=sail]{sail_latex/sailgetCapPerms.tex}} + +\newcommand{\sailfngetCapPerms}{\label{zgetCapPerms} \lstinputlisting[language=sail]{sail_latex/sailfngetCapPerms.tex}} + +\newcommand{\sailcapStructToMemBitstwofivesix}{\label{zcapStructToMemBitstwofivesix} \lstinputlisting[language=sail]{sail_latex/sailcapStructToMemBitstwofivesix.tex}} + +\newcommand{\sailfncapStructToMemBitstwofivesix}{\label{zcapStructToMemBitstwofivesix} \lstinputlisting[language=sail]{sail_latex/sailfncapStructToMemBitstwofivesix.tex}} + +\newcommand{\sailcapStructToMemBits}{\label{zcapStructToMemBits} \lstinputlisting[language=sail]{sail_latex/sailcapStructToMemBits.tex}} + +\newcommand{\sailfncapStructToMemBits}{\label{zcapStructToMemBits} \lstinputlisting[language=sail]{sail_latex/sailfncapStructToMemBits.tex}} + +\newcommand{\sailmemBitsToCapBits}{\label{zmemBitsToCapBits} \lstinputlisting[language=sail]{sail_latex/sailmemBitsToCapBits.tex}} + +\newcommand{\sailfnmemBitsToCapBits}{\label{zmemBitsToCapBits} \lstinputlisting[language=sail]{sail_latex/sailfnmemBitsToCapBits.tex}} + +\newcommand{\sailcapStructToCapReg}{\label{zcapStructToCapReg} \lstinputlisting[language=sail]{sail_latex/sailcapStructToCapReg.tex}} + +\newcommand{\sailfncapStructToCapReg}{\label{zcapStructToCapReg} \lstinputlisting[language=sail]{sail_latex/sailfncapStructToCapReg.tex}} + +\newcommand{\sailsetCapPerms}{\label{zsetCapPerms} \lstinputlisting[language=sail]{sail_latex/sailsetCapPerms.tex}} + +\newcommand{\sailfnsetCapPerms}{\label{zsetCapPerms} \lstinputlisting[language=sail]{sail_latex/sailfnsetCapPerms.tex}} + +\newcommand{\sailsealCap}{\label{zsealCap} \lstinputlisting[language=sail]{sail_latex/sailsealCap.tex}} + +\newcommand{\sailfnsealCap}{\label{zsealCap} \lstinputlisting[language=sail]{sail_latex/sailfnsealCap.tex}} + +\newcommand{\sailgetCapBase}{\label{zgetCapBase} \lstinputlisting[language=sail]{sail_latex/sailgetCapBase.tex}} + +\newcommand{\sailfngetCapBase}{\label{zgetCapBase} \lstinputlisting[language=sail]{sail_latex/sailfngetCapBase.tex}} + +\newcommand{\sailgetCapTop}{\label{zgetCapTop} \lstinputlisting[language=sail]{sail_latex/sailgetCapTop.tex}} + +\newcommand{\sailfngetCapTop}{\label{zgetCapTop} \lstinputlisting[language=sail]{sail_latex/sailfngetCapTop.tex}} + +\newcommand{\sailgetCapOffset}{\label{zgetCapOffset} \lstinputlisting[language=sail]{sail_latex/sailgetCapOffset.tex}} + +\newcommand{\sailfngetCapOffset}{\label{zgetCapOffset} \lstinputlisting[language=sail]{sail_latex/sailfngetCapOffset.tex}} + +\newcommand{\sailgetCapLength}{\label{zgetCapLength} \lstinputlisting[language=sail]{sail_latex/sailgetCapLength.tex}} + +\newcommand{\sailfngetCapLength}{\label{zgetCapLength} \lstinputlisting[language=sail]{sail_latex/sailfngetCapLength.tex}} + +\newcommand{\sailgetCapCursor}{\label{zgetCapCursor} \lstinputlisting[language=sail]{sail_latex/sailgetCapCursor.tex}} + +\newcommand{\sailfngetCapCursor}{\label{zgetCapCursor} \lstinputlisting[language=sail]{sail_latex/sailfngetCapCursor.tex}} + +\newcommand{\sailsetCapOffset}{\label{zsetCapOffset} +Set the offset capability of the a capability to given value and return the result, along with a boolean indicating true if the operation preserved the existing bounds of the capability. When using compressed capabilities, setting the offset far outside the capability bounds can cause the result to become unrepresentable (XXX mention guarantees). Additionally in some implementations a fast representablity check may be used that could cause the operation to return failure even though the capability would be representable (XXX provide details). + \lstinputlisting[language=sail]{sail_latex/sailsetCapOffset.tex}} + +\newcommand{\sailfnsetCapOffset}{\label{zsetCapOffset} \lstinputlisting[language=sail]{sail_latex/sailfnsetCapOffset.tex}} + +\newcommand{\sailincCapOffset}{\label{zincCapOffset} +\function{incCapOffset} is the same as \function{setCapOffset} except that the 64-bit value is added to the current capability offset modulo $2^{64}$ (i.e. signed twos-complement arithemtic). + \lstinputlisting[language=sail]{sail_latex/sailincCapOffset.tex}} + +\newcommand{\sailfnincCapOffset}{\label{zincCapOffset} \lstinputlisting[language=sail]{sail_latex/sailfnincCapOffset.tex}} + +\newcommand{\sailsetCapBounds}{\label{zsetCapBounds} +Returns a capability derived from the given capability by setting the base and top to values provided. The offset of the resulting capability is zero. In case the requested bounds are not exactly representable the returned boolean is false and the returned capability has bounds at least including the region bounded by base and top but rounded to representable values. + \lstinputlisting[language=sail]{sail_latex/sailsetCapBounds.tex}} + +\newcommand{\sailfnsetCapBounds}{\label{zsetCapBounds} \lstinputlisting[language=sail]{sail_latex/sailfnsetCapBounds.tex}} + +\newcommand{\sailinttocap}{\label{zintzytozycap} \lstinputlisting[language=sail]{sail_latex/sailinttocap.tex}} + +\newcommand{\sailfninttocap}{\label{zintzytozycap} \lstinputlisting[language=sail]{sail_latex/sailfninttocap.tex}} + +\newcommand{\sailexecute}{\label{zexecute} \lstinputlisting[language=sail]{sail_latex/sailexecute.tex}} + +\newcommand{\saildecode}{\label{zdecode} \lstinputlisting[language=sail]{sail_latex/saildecode.tex}} + +\newcommand{\sailreadCapReg}{\label{zreadCapReg} +This function reads a given capability register and returns its contents converted to a CapStruct. +If the argument is zero then the null capability is returned. +\lstinputlisting[language=sail]{sail_latex/sailreadCapReg.tex}} + +\newcommand{\sailfnreadCapReg}{\label{zreadCapReg} \lstinputlisting[language=sail]{sail_latex/sailfnreadCapReg.tex}} + +\newcommand{\sailreadCapRegDDC}{\label{zreadCapRegDDC} +This is the same as readCapReg except that when the argument is zero the value of DDC is returned +instead of the null capability. This is used for instructions that expect an address, where using +null would always generate an exception. +\lstinputlisting[language=sail]{sail_latex/sailreadCapRegDDC.tex}} + +\newcommand{\sailfnreadCapRegDDC}{\label{zreadCapRegDDC} \lstinputlisting[language=sail]{sail_latex/sailfnreadCapRegDDC.tex}} + +\newcommand{\sailwriteCapReg}{\label{zwriteCapReg} \lstinputlisting[language=sail]{sail_latex/sailwriteCapReg.tex}} + +\newcommand{\sailfnwriteCapReg}{\label{zwriteCapReg} \lstinputlisting[language=sail]{sail_latex/sailfnwriteCapReg.tex}} + +\newcommand{\sailCapEx}{\label{zCapEx} \lstinputlisting[language=sail]{sail_latex/sailCapEx.tex}} + +\newcommand{\sailCapExofnum}{\label{zCapExzyofzynum} \lstinputlisting[language=sail]{sail_latex/sailCapExofnum.tex}} + +\newcommand{\sailfnCapExofnum}{\label{zCapExzyofzynum} \lstinputlisting[language=sail]{sail_latex/sailfnCapExofnum.tex}} + +\newcommand{\sailnumofCapEx}{\label{znumzyofzyCapEx} \lstinputlisting[language=sail]{sail_latex/sailnumofCapEx.tex}} + +\newcommand{\sailfnnumofCapEx}{\label{znumzyofzyCapEx} \lstinputlisting[language=sail]{sail_latex/sailfnnumofCapEx.tex}} + +\newcommand{\sailCapExCode}{\label{zCapExCode} \lstinputlisting[language=sail]{sail_latex/sailCapExCode.tex}} + +\newcommand{\sailfnCapExCode}{\label{zCapExCode} \lstinputlisting[language=sail]{sail_latex/sailfnCapExCode.tex}} + +\newcommand{\sailCapCauseReg}{\label{zCapCauseReg} \lstinputlisting[language=sail]{sail_latex/sailCapCauseReg.tex}} + +\newcommand{\sailMkCapCauseReg}{\label{zMkzyCapCauseReg} \lstinputlisting[language=sail]{sail_latex/sailMkCapCauseReg.tex}} + +\newcommand{\sailfnMkCapCauseReg}{\label{zMkzyCapCauseReg} \lstinputlisting[language=sail]{sail_latex/sailfnMkCapCauseReg.tex}} + +\newcommand{\sailgetCapCauseRegbits}{\label{zzygetzyCapCauseRegzybits} \lstinputlisting[language=sail]{sail_latex/sailgetCapCauseRegbits.tex}} + +\newcommand{\sailfngetCapCauseRegbits}{\label{zzygetzyCapCauseRegzybits} \lstinputlisting[language=sail]{sail_latex/sailfngetCapCauseRegbits.tex}} + +\newcommand{\sailsetCapCauseRegbits}{\label{zzysetzyCapCauseRegzybits} \lstinputlisting[language=sail]{sail_latex/sailsetCapCauseRegbits.tex}} + +\newcommand{\sailfnsetCapCauseRegbits}{\label{zzysetzyCapCauseRegzybits} \lstinputlisting[language=sail]{sail_latex/sailfnsetCapCauseRegbits.tex}} + +\newcommand{\sailupdateCapCauseRegbits}{\label{zzyupdatezyCapCauseRegzybits} \lstinputlisting[language=sail]{sail_latex/sailupdateCapCauseRegbits.tex}} + +\newcommand{\sailfnupdateCapCauseRegbits}{\label{zzyupdatezyCapCauseRegzybits} \lstinputlisting[language=sail]{sail_latex/sailfnupdateCapCauseRegbits.tex}} + +\newcommand{\sailupdatebits}{\label{zupdatezybits} \lstinputlisting[language=sail]{sail_latex/sailupdatebits.tex}} + +\newcommand{\sailmodbits}{\label{zzymodzybits} \lstinputlisting[language=sail]{sail_latex/sailmodbits.tex}} + +\newcommand{\sailgetCapCauseRegExcCode}{\label{zzygetzyCapCauseRegzyExcCode} \lstinputlisting[language=sail]{sail_latex/sailgetCapCauseRegExcCode.tex}} + +\newcommand{\sailfngetCapCauseRegExcCode}{\label{zzygetzyCapCauseRegzyExcCode} \lstinputlisting[language=sail]{sail_latex/sailfngetCapCauseRegExcCode.tex}} + +\newcommand{\sailsetCapCauseRegExcCode}{\label{zzysetzyCapCauseRegzyExcCode} \lstinputlisting[language=sail]{sail_latex/sailsetCapCauseRegExcCode.tex}} + +\newcommand{\sailfnsetCapCauseRegExcCode}{\label{zzysetzyCapCauseRegzyExcCode} \lstinputlisting[language=sail]{sail_latex/sailfnsetCapCauseRegExcCode.tex}} + +\newcommand{\sailupdateCapCauseRegExcCode}{\label{zzyupdatezyCapCauseRegzyExcCode} \lstinputlisting[language=sail]{sail_latex/sailupdateCapCauseRegExcCode.tex}} + +\newcommand{\sailfnupdateCapCauseRegExcCode}{\label{zzyupdatezyCapCauseRegzyExcCode} \lstinputlisting[language=sail]{sail_latex/sailfnupdateCapCauseRegExcCode.tex}} + +\newcommand{\sailupdateExcCode}{\label{zupdatezyExcCode} \lstinputlisting[language=sail]{sail_latex/sailupdateExcCode.tex}} + +\newcommand{\sailmodExcCode}{\label{zzymodzyExcCode} \lstinputlisting[language=sail]{sail_latex/sailmodExcCode.tex}} + +\newcommand{\sailgetCapCauseRegRegNum}{\label{zzygetzyCapCauseRegzyRegNum} \lstinputlisting[language=sail]{sail_latex/sailgetCapCauseRegRegNum.tex}} + +\newcommand{\sailfngetCapCauseRegRegNum}{\label{zzygetzyCapCauseRegzyRegNum} \lstinputlisting[language=sail]{sail_latex/sailfngetCapCauseRegRegNum.tex}} + +\newcommand{\sailsetCapCauseRegRegNum}{\label{zzysetzyCapCauseRegzyRegNum} \lstinputlisting[language=sail]{sail_latex/sailsetCapCauseRegRegNum.tex}} + +\newcommand{\sailfnsetCapCauseRegRegNum}{\label{zzysetzyCapCauseRegzyRegNum} \lstinputlisting[language=sail]{sail_latex/sailfnsetCapCauseRegRegNum.tex}} + +\newcommand{\sailupdateCapCauseRegRegNum}{\label{zzyupdatezyCapCauseRegzyRegNum} \lstinputlisting[language=sail]{sail_latex/sailupdateCapCauseRegRegNum.tex}} + +\newcommand{\sailfnupdateCapCauseRegRegNum}{\label{zzyupdatezyCapCauseRegzyRegNum} \lstinputlisting[language=sail]{sail_latex/sailfnupdateCapCauseRegRegNum.tex}} + +\newcommand{\sailupdateRegNum}{\label{zupdatezyRegNum} \lstinputlisting[language=sail]{sail_latex/sailupdateRegNum.tex}} + +\newcommand{\sailmodRegNum}{\label{zzymodzyRegNum} \lstinputlisting[language=sail]{sail_latex/sailmodRegNum.tex}} + +\newcommand{\sailexecutebranchpcc}{\label{zexecutezybranchzypcc} \lstinputlisting[language=sail]{sail_latex/sailexecutebranchpcc.tex}} + +\newcommand{\sailfnexecutebranchpcc}{\label{zexecutezybranchzypcc} \lstinputlisting[language=sail]{sail_latex/sailfnexecutebranchpcc.tex}} + +\newcommand{\sailfnSignalException}{\label{zSignalException} \lstinputlisting[language=sail]{sail_latex/sailfnSignalException.tex}} + +\newcommand{\sailERETHook}{\label{zERETHook} \lstinputlisting[language=sail]{sail_latex/sailERETHook.tex}} + +\newcommand{\sailfnERETHook}{\label{zERETHook} \lstinputlisting[language=sail]{sail_latex/sailfnERETHook.tex}} + +\newcommand{\sailraisectwoexceptioneight}{\label{zraisezyctwozyexceptioneight} \lstinputlisting[language=sail]{sail_latex/sailraisectwoexceptioneight.tex}} + +\newcommand{\sailfnraisectwoexceptioneight}{\label{zraisezyctwozyexceptioneight} \lstinputlisting[language=sail]{sail_latex/sailfnraisectwoexceptioneight.tex}} + +\newcommand{\sailraisectwoexception}{\label{zraisezyctwozyexception} \lstinputlisting[language=sail]{sail_latex/sailraisectwoexception.tex}} + +\newcommand{\sailfnraisectwoexception}{\label{zraisezyctwozyexception} \lstinputlisting[language=sail]{sail_latex/sailfnraisectwoexception.tex}} + +\newcommand{\sailraisectwoexceptionnoreg}{\label{zraisezyctwozyexceptionzynoreg} \lstinputlisting[language=sail]{sail_latex/sailraisectwoexceptionnoreg.tex}} + +\newcommand{\sailfnraisectwoexceptionnoreg}{\label{zraisezyctwozyexceptionzynoreg} \lstinputlisting[language=sail]{sail_latex/sailfnraisectwoexceptionnoreg.tex}} + +\newcommand{\sailpccaccesssystemregs}{\label{zpcczyaccesszysystemzyregs} \lstinputlisting[language=sail]{sail_latex/sailpccaccesssystemregs.tex}} + +\newcommand{\sailfnpccaccesssystemregs}{\label{zpcczyaccesszysystemzyregs} \lstinputlisting[language=sail]{sail_latex/sailfnpccaccesssystemregs.tex}} + +\newcommand{\sailregisterinaccessible}{\label{zregisterzyinaccessible} +The following function should be called before reading or writing any capability register to check whether it is one of the protected system capabilities. Although it is usually a general purpose capabilty the invoked data capabiltiy (IDC) is restricted in the branch delay slot of the CCall (selector one) instruction to protect the confidentiality and integrity of the invoked sandbox. + \lstinputlisting[language=sail]{sail_latex/sailregisterinaccessible.tex}} + +\newcommand{\sailfnregisterinaccessible}{\label{zregisterzyinaccessible} \lstinputlisting[language=sail]{sail_latex/sailfnregisterinaccessible.tex}} + +\newcommand{\sailMEMrtag}{\label{zMEMrzytag} \lstinputlisting[language=sail]{sail_latex/sailMEMrtag.tex}} + +\newcommand{\sailMEMwtag}{\label{zMEMwzytag} \lstinputlisting[language=sail]{sail_latex/sailMEMwtag.tex}} + +\newcommand{\sailMEMrtagged}{\label{zMEMrzytagged} \lstinputlisting[language=sail]{sail_latex/sailMEMrtagged.tex}} + +\newcommand{\sailfnMEMrtagged}{\label{zMEMrzytagged} \lstinputlisting[language=sail]{sail_latex/sailfnMEMrtagged.tex}} + +\newcommand{\sailMEMrtaggedreserve}{\label{zMEMrzytaggedzyreserve} \lstinputlisting[language=sail]{sail_latex/sailMEMrtaggedreserve.tex}} + +\newcommand{\sailfnMEMrtaggedreserve}{\label{zMEMrzytaggedzyreserve} \lstinputlisting[language=sail]{sail_latex/sailfnMEMrtaggedreserve.tex}} + +\newcommand{\sailMEMwtagged}{\label{zMEMwzytagged} \lstinputlisting[language=sail]{sail_latex/sailMEMwtagged.tex}} + +\newcommand{\sailfnMEMwtagged}{\label{zMEMwzytagged} \lstinputlisting[language=sail]{sail_latex/sailfnMEMwtagged.tex}} + +\newcommand{\sailMEMwtaggedconditional}{\label{zMEMwzytaggedzyconditional} \lstinputlisting[language=sail]{sail_latex/sailMEMwtaggedconditional.tex}} + +\newcommand{\sailfnMEMwtaggedconditional}{\label{zMEMwzytaggedzyconditional} \lstinputlisting[language=sail]{sail_latex/sailfnMEMwtaggedconditional.tex}} + +\newcommand{\sailMEMwwrapper}{\label{zMEMwzywrapper} \lstinputlisting[language=sail]{sail_latex/sailMEMwwrapper.tex}} + +\newcommand{\sailfnMEMwwrapper}{\label{zMEMwzywrapper} \lstinputlisting[language=sail]{sail_latex/sailfnMEMwwrapper.tex}} + +\newcommand{\sailMEMwconditionalwrapper}{\label{zMEMwzyconditionalzywrapper} \lstinputlisting[language=sail]{sail_latex/sailMEMwconditionalwrapper.tex}} + +\newcommand{\sailfnMEMwconditionalwrapper}{\label{zMEMwzyconditionalzywrapper} \lstinputlisting[language=sail]{sail_latex/sailfnMEMwconditionalwrapper.tex}} + +\newcommand{\sailcheckDDCPerms}{\label{zcheckDDCPerms} \lstinputlisting[language=sail]{sail_latex/sailcheckDDCPerms.tex}} + +\newcommand{\sailfncheckDDCPerms}{\label{zcheckDDCPerms} \lstinputlisting[language=sail]{sail_latex/sailfncheckDDCPerms.tex}} + +\newcommand{\sailaddrWrapper}{\label{zaddrWrapper} \lstinputlisting[language=sail]{sail_latex/sailaddrWrapper.tex}} + +\newcommand{\sailfnaddrWrapper}{\label{zaddrWrapper} \lstinputlisting[language=sail]{sail_latex/sailfnaddrWrapper.tex}} + +\newcommand{\sailaddrWrapperUnaligned}{\label{zaddrWrapperUnaligned} \lstinputlisting[language=sail]{sail_latex/sailaddrWrapperUnaligned.tex}} + +\newcommand{\sailfnaddrWrapperUnaligned}{\label{zaddrWrapperUnaligned} \lstinputlisting[language=sail]{sail_latex/sailfnaddrWrapperUnaligned.tex}} + +\newcommand{\sailTranslatePC}{\label{zTranslatePC} \lstinputlisting[language=sail]{sail_latex/sailTranslatePC.tex}} + +\newcommand{\sailfnTranslatePC}{\label{zTranslatePC} \lstinputlisting[language=sail]{sail_latex/sailfnTranslatePC.tex}} + +\newcommand{\sailcheckCPtwousable}{\label{zcheckCPtwousable} +All capability instrucitons must first check that the capability +co-processor is enabled using the following function that raises a +co-processor unusable exception if a CP0Status.CU2 is not set. This +allows the operating system to only save and restore the full +capability context for processes that use capabilities. +\lstinputlisting[language=sail]{sail_latex/sailcheckCPtwousable.tex}} + +\newcommand{\sailfncheckCPtwousable}{\label{zcheckCPtwousable} \lstinputlisting[language=sail]{sail_latex/sailfncheckCPtwousable.tex}} + +\newcommand{\sailfninitcptwostate}{\label{zinitzycptwozystate} \lstinputlisting[language=sail]{sail_latex/sailfninitcptwostate.tex}} + +\newcommand{\sailfncptwonextpc}{\label{zcptwozynextzypc} \lstinputlisting[language=sail]{sail_latex/sailfncptwonextpc.tex}} + +\newcommand{\sailcapToString}{\label{zcapToString} \lstinputlisting[language=sail]{sail_latex/sailcapToString.tex}} + +\newcommand{\sailfncapToString}{\label{zcapToString} \lstinputlisting[language=sail]{sail_latex/sailfncapToString.tex}} + +\newcommand{\sailfndumpcptwostate}{\label{zdumpzycptwozystate} \lstinputlisting[language=sail]{sail_latex/sailfndumpcptwostate.tex}} + +\newcommand{\sailextendLoad}{\label{zextendLoad} \lstinputlisting[language=sail]{sail_latex/sailextendLoad.tex}} + +\newcommand{\sailfnextendLoad}{\label{zextendLoad} \lstinputlisting[language=sail]{sail_latex/sailfnextendLoad.tex}} + +\newcommand{\sailTLBWriteEntry}{\label{zTLBWriteEntry} \lstinputlisting[language=sail]{sail_latex/sailTLBWriteEntry.tex}} + +\newcommand{\sailfnTLBWriteEntry}{\label{zTLBWriteEntry} \lstinputlisting[language=sail]{sail_latex/sailfnTLBWriteEntry.tex}} + +\newcommand{\sailfndecodeSomeDADDIU}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeDADDIU.tex}} + +\newcommand{\sailfndecodeSomeDADDU}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeDADDU.tex}} + +\newcommand{\sailfndecodeSomeDADDI}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeDADDI.tex}} + +\newcommand{\sailfndecodeSomeDADD}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeDADD.tex}} + +\newcommand{\sailfndecodeSomeADD}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeADD.tex}} + +\newcommand{\sailfndecodeSomeADDI}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeADDI.tex}} + +\newcommand{\sailfndecodeSomeADDU}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeADDU.tex}} + +\newcommand{\sailfndecodeSomeADDIU}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeADDIU.tex}} + +\newcommand{\sailfndecodeSomeDSUBU}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeDSUBU.tex}} + +\newcommand{\sailfndecodeSomeDSUB}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeDSUB.tex}} + +\newcommand{\sailfndecodeSomeSUB}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeSUB.tex}} + +\newcommand{\sailfndecodeSomeSUBU}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeSUBU.tex}} + +\newcommand{\sailfndecodeSomeAND}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeAND.tex}} + +\newcommand{\sailfndecodeSomeANDI}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeANDI.tex}} + +\newcommand{\sailfndecodeSomeOR}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeOR.tex}} + +\newcommand{\sailfndecodeSomeORI}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeORI.tex}} + +\newcommand{\sailfndecodeSomeNOR}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeNOR.tex}} + +\newcommand{\sailfndecodeSomeXOR}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeXOR.tex}} + +\newcommand{\sailfndecodeSomeXORI}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeXORI.tex}} + +\newcommand{\sailfndecodeSomeLUI}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeLUI.tex}} + +\newcommand{\sailfndecodeSomeDSLL}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeDSLL.tex}} + +\newcommand{\sailfndecodeSomeDSLLthreetwo}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeDSLLthreetwo.tex}} + +\newcommand{\sailfndecodeSomeDSLLV}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeDSLLV.tex}} + +\newcommand{\sailfndecodeSomeDSRA}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeDSRA.tex}} + +\newcommand{\sailfndecodeSomeDSRAthreetwo}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeDSRAthreetwo.tex}} + +\newcommand{\sailfndecodeSomeDSRAV}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeDSRAV.tex}} + +\newcommand{\sailfndecodeSomeDSRL}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeDSRL.tex}} + +\newcommand{\sailfndecodeSomeDSRLthreetwo}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeDSRLthreetwo.tex}} + +\newcommand{\sailfndecodeSomeDSRLV}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeDSRLV.tex}} + +\newcommand{\sailfndecodeSomeSLL}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeSLL.tex}} + +\newcommand{\sailfndecodeSomeSLLV}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeSLLV.tex}} + +\newcommand{\sailfndecodeSomeSRA}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeSRA.tex}} + +\newcommand{\sailfndecodeSomeSRAV}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeSRAV.tex}} + +\newcommand{\sailfndecodeSomeSRL}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeSRL.tex}} + +\newcommand{\sailfndecodeSomeSRLV}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeSRLV.tex}} + +\newcommand{\sailfndecodeSomeSLT}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeSLT.tex}} + +\newcommand{\sailfndecodeSomeSLTI}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeSLTI.tex}} + +\newcommand{\sailfndecodeSomeSLTU}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeSLTU.tex}} + +\newcommand{\sailfndecodeSomeSLTIU}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeSLTIU.tex}} + +\newcommand{\sailfndecodeSomeMOVN}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeMOVN.tex}} + +\newcommand{\sailfndecodeSomeMOVZ}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeMOVZ.tex}} + +\newcommand{\sailfndecodeSomeMFHIrd}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeMFHIrd.tex}} + +\newcommand{\sailfndecodeSomeMFLOrd}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeMFLOrd.tex}} + +\newcommand{\sailfndecodeSomeMTHIrs}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeMTHIrs.tex}} + +\newcommand{\sailfndecodeSomeMTLOrs}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeMTLOrs.tex}} + +\newcommand{\sailfndecodeSomeMUL}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeMUL.tex}} + +\newcommand{\sailfndecodeSomeMULT}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeMULT.tex}} + +\newcommand{\sailfndecodeSomeMULTU}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeMULTU.tex}} + +\newcommand{\sailfndecodeSomeDMULT}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeDMULT.tex}} + +\newcommand{\sailfndecodeSomeDMULTU}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeDMULTU.tex}} + +\newcommand{\sailfndecodeSomeMADD}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeMADD.tex}} + +\newcommand{\sailfndecodeSomeMADDU}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeMADDU.tex}} + +\newcommand{\sailfndecodeSomeMSUB}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeMSUB.tex}} + +\newcommand{\sailfndecodeSomeMSUBU}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeMSUBU.tex}} + +\newcommand{\sailfndecodeSomeDIV}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeDIV.tex}} + +\newcommand{\sailfndecodeSomeDIVU}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeDIVU.tex}} + +\newcommand{\sailfndecodeSomeDDIV}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeDDIV.tex}} + +\newcommand{\sailfndecodeSomeDDIVU}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeDDIVU.tex}} + +\newcommand{\sailfndecodeSomeJoffset}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeJoffset.tex}} + +\newcommand{\sailfndecodeSomeJALoffset}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeJALoffset.tex}} + +\newcommand{\sailfndecodeSomeJRrs}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeJRrs.tex}} + +\newcommand{\sailfndecodeSomeJALR}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeJALR.tex}} + +\newcommand{\sailfndecodeSomeBEQ}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeBEQ.tex}} + +\newcommand{\sailsailfndecodeSomeBEQv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeBEQv.tex}} + +\newcommand{\sailsailsailfndecodeSomeBEQvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailfndecodeSomeBEQvv.tex}} + +\newcommand{\sailsailsailsailfndecodeSomeBEQvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailfndecodeSomeBEQvvv.tex}} + +\newcommand{\sailfndecodeSomeBCMPZ}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeBCMPZ.tex}} + +\newcommand{\sailsailfndecodeSomeBCMPZv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeBCMPZv.tex}} + +\newcommand{\sailsailsailfndecodeSomeBCMPZvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailfndecodeSomeBCMPZvv.tex}} + +\newcommand{\sailsailsailsailfndecodeSomeBCMPZvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailfndecodeSomeBCMPZvvv.tex}} + +\newcommand{\sailsailsailsailsailfndecodeSomeBCMPZvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailfndecodeSomeBCMPZvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailfndecodeSomeBCMPZvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailfndecodeSomeBCMPZvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvvvvvvv.tex}} + +\newcommand{\sailfndecodeSomeSYSCALL}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeSYSCALL.tex}} + +\newcommand{\sailfndecodeSomeBREAK}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeBREAK.tex}} + +\newcommand{\sailfndecodeSomeWAIT}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeWAIT.tex}} + +\newcommand{\sailfndecodeSomeTRAPREG}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeTRAPREG.tex}} + +\newcommand{\sailsailfndecodeSomeTRAPREGv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeTRAPREGv.tex}} + +\newcommand{\sailsailsailfndecodeSomeTRAPREGvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailfndecodeSomeTRAPREGvv.tex}} + +\newcommand{\sailsailsailsailfndecodeSomeTRAPREGvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailfndecodeSomeTRAPREGvvv.tex}} + +\newcommand{\sailsailsailsailsailfndecodeSomeTRAPREGvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailfndecodeSomeTRAPREGvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailfndecodeSomeTRAPREGvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailfndecodeSomeTRAPREGvvvvv.tex}} + +\newcommand{\sailfndecodeSomeTRAPIMM}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeTRAPIMM.tex}} + +\newcommand{\sailsailfndecodeSomeTRAPIMMv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeTRAPIMMv.tex}} + +\newcommand{\sailsailsailfndecodeSomeTRAPIMMvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailfndecodeSomeTRAPIMMvv.tex}} + +\newcommand{\sailsailsailsailfndecodeSomeTRAPIMMvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailfndecodeSomeTRAPIMMvvv.tex}} + +\newcommand{\sailsailsailsailsailfndecodeSomeTRAPIMMvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailfndecodeSomeTRAPIMMvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailfndecodeSomeTRAPIMMvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailfndecodeSomeTRAPIMMvvvvv.tex}} + +\newcommand{\sailfndecodeSomeLoad}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeLoad.tex}} + +\newcommand{\sailsailfndecodeSomeLoadv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeLoadv.tex}} + +\newcommand{\sailsailsailfndecodeSomeLoadvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailfndecodeSomeLoadvv.tex}} + +\newcommand{\sailsailsailsailfndecodeSomeLoadvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailfndecodeSomeLoadvvv.tex}} + +\newcommand{\sailsailsailsailsailfndecodeSomeLoadvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailfndecodeSomeLoadvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailfndecodeSomeLoadvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailfndecodeSomeLoadvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailfndecodeSomeLoadvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailfndecodeSomeLoadvvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailfndecodeSomeLoadvvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailfndecodeSomeLoadvvvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailsailfndecodeSomeLoadvvvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailsailfndecodeSomeLoadvvvvvvvv.tex}} + +\newcommand{\sailfndecodeSomeStore}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeStore.tex}} + +\newcommand{\sailsailfndecodeSomeStorev}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeStorev.tex}} + +\newcommand{\sailsailsailfndecodeSomeStorevv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailfndecodeSomeStorevv.tex}} + +\newcommand{\sailsailsailsailfndecodeSomeStorevvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailfndecodeSomeStorevvv.tex}} + +\newcommand{\sailsailsailsailsailfndecodeSomeStorevvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailfndecodeSomeStorevvvv.tex}} + +\newcommand{\sailsailsailsailsailsailfndecodeSomeStorevvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailfndecodeSomeStorevvvvv.tex}} + +\newcommand{\sailfndecodeSomeLWL}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeLWL.tex}} + +\newcommand{\sailfndecodeSomeLWR}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeLWR.tex}} + +\newcommand{\sailfndecodeSomeSWL}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeSWL.tex}} + +\newcommand{\sailfndecodeSomeSWR}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeSWR.tex}} + +\newcommand{\sailfndecodeSomeLDL}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeLDL.tex}} + +\newcommand{\sailfndecodeSomeLDR}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeLDR.tex}} + +\newcommand{\sailfndecodeSomeSDL}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeSDL.tex}} + +\newcommand{\sailfndecodeSomeSDR}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeSDR.tex}} + +\newcommand{\sailfndecodeSomeCACHE}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCACHE.tex}} + +\newcommand{\sailfndecodeSomeSYNC}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeSYNC.tex}} + +\newcommand{\sailfndecodeSomeMFCzero}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeMFCzero.tex}} + +\newcommand{\sailsailfndecodeSomeMFCzerov}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeMFCzerov.tex}} + +\newcommand{\sailfndecodeSomeHCF}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeHCF.tex}} + +\newcommand{\sailsailfndecodeSomeHCFv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeHCFv.tex}} + +\newcommand{\sailfndecodeSomeMTCzero}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeMTCzero.tex}} + +\newcommand{\sailsailfndecodeSomeMTCzerov}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeMTCzerov.tex}} + +\newcommand{\sailfndecodeSome}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSome.tex}} + +\newcommand{\sailsailfndecodeSomev}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomev.tex}} + +\newcommand{\sailsailsailfndecodeSomevv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailfndecodeSomevv.tex}} + +\newcommand{\sailsailsailsailfndecodeSomevvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailfndecodeSomevvv.tex}} + +\newcommand{\sailfndecodeSomeRDHWR}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeRDHWR.tex}} + +\newcommand{\sailfndecodeSomeERET}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeERET.tex}} + +\newcommand{\sailfndecodeSomeCGetPerm}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCGetPerm.tex}} + +\newcommand{\sailfndecodeSomeCGetType}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCGetType.tex}} + +\newcommand{\sailfndecodeSomeCGetBase}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCGetBase.tex}} + +\newcommand{\sailfndecodeSomeCGetLen}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCGetLen.tex}} + +\newcommand{\sailfndecodeSomeCGetTag}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCGetTag.tex}} + +\newcommand{\sailfndecodeSomeCGetSealed}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCGetSealed.tex}} + +\newcommand{\sailfndecodeSomeCGetCauserd}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCGetCauserd.tex}} + +\newcommand{\sailfndecodeSomeCReturn}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCReturn.tex}} + +\newcommand{\sailfndecodeSomeCGetOffset}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCGetOffset.tex}} + +\newcommand{\sailfndecodeSomeCSetCausert}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCSetCausert.tex}} + +\newcommand{\sailfndecodeSomeCAndPerm}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCAndPerm.tex}} + +\newcommand{\sailfndecodeSomeCToPtr}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCToPtr.tex}} + +\newcommand{\sailfndecodeSomeCPtrCmp}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCPtrCmp.tex}} + +\newcommand{\sailsailfndecodeSomeCPtrCmpv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCPtrCmpv.tex}} + +\newcommand{\sailsailsailfndecodeSomeCPtrCmpvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailfndecodeSomeCPtrCmpvv.tex}} + +\newcommand{\sailsailsailsailfndecodeSomeCPtrCmpvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailfndecodeSomeCPtrCmpvvv.tex}} + +\newcommand{\sailsailsailsailsailfndecodeSomeCPtrCmpvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailfndecodeSomeCPtrCmpvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvv.tex}} + +\newcommand{\sailfndecodeSomeCIncOffset}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCIncOffset.tex}} + +\newcommand{\sailfndecodeSomeCSetOffset}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCSetOffset.tex}} + +\newcommand{\sailfndecodeSomeCSetBounds}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCSetBounds.tex}} + +\newcommand{\sailfndecodeSomeCClearTag}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCClearTag.tex}} + +\newcommand{\sailfndecodeSomeCFromPtr}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCFromPtr.tex}} + +\newcommand{\sailfndecodeSomeCCheckPerm}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCCheckPerm.tex}} + +\newcommand{\sailfndecodeSomeCCheckType}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCCheckType.tex}} + +\newcommand{\sailfndecodeSomeCSeal}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCSeal.tex}} + +\newcommand{\sailfndecodeSomeCUnseal}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCUnseal.tex}} + +\newcommand{\sailfndecodeSomeCJALR}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCJALR.tex}} + +\newcommand{\sailsailfndecodeSomeCJALRv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCJALRv.tex}} + +\newcommand{\sailsailfndecodeSomeCGetCauserdv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCGetCauserdv.tex}} + +\newcommand{\sailfndecodeSomeCSetCausers}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCSetCausers.tex}} + +\newcommand{\sailfndecodeSomeCGetPCCcd}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCGetPCCcd.tex}} + +\newcommand{\sailsailsailfndecodeSomeCJALRvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailfndecodeSomeCJALRvv.tex}} + +\newcommand{\sailsailfndecodeSomeCCheckPermv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCCheckPermv.tex}} + +\newcommand{\sailsailfndecodeSomeCCheckTypev}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCCheckTypev.tex}} + +\newcommand{\sailsailfndecodeSomeCClearTagv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCClearTagv.tex}} + +\newcommand{\sailfndecodeSomeCMOVX}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCMOVX.tex}} + +\newcommand{\sailsailsailsailfndecodeSomeCJALRvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailfndecodeSomeCJALRvvv.tex}} + +\newcommand{\sailsailfndecodeSomeCGetPermv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCGetPermv.tex}} + +\newcommand{\sailsailfndecodeSomeCGetTypev}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCGetTypev.tex}} + +\newcommand{\sailsailfndecodeSomeCGetBasev}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCGetBasev.tex}} + +\newcommand{\sailsailfndecodeSomeCGetLenv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCGetLenv.tex}} + +\newcommand{\sailsailfndecodeSomeCGetTagv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCGetTagv.tex}} + +\newcommand{\sailsailfndecodeSomeCGetSealedv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCGetSealedv.tex}} + +\newcommand{\sailsailfndecodeSomeCGetOffsetv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCGetOffsetv.tex}} + +\newcommand{\sailfndecodeSomeCGetPCCSetOffset}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCGetPCCSetOffset.tex}} + +\newcommand{\sailfndecodeSomeCReadHwr}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCReadHwr.tex}} + +\newcommand{\sailfndecodeSomeCWriteHwr}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCWriteHwr.tex}} + +\newcommand{\sailfndecodeSomeCGetAddr}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCGetAddr.tex}} + +\newcommand{\sailsailfndecodeSomeCSealv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCSealv.tex}} + +\newcommand{\sailsailfndecodeSomeCUnsealv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCUnsealv.tex}} + +\newcommand{\sailsailfndecodeSomeCAndPermv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCAndPermv.tex}} + +\newcommand{\sailsailfndecodeSomeCSetOffsetv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCSetOffsetv.tex}} + +\newcommand{\sailsailfndecodeSomeCSetBoundsv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCSetBoundsv.tex}} + +\newcommand{\sailfndecodeSomeCSetBoundsExact}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCSetBoundsExact.tex}} + +\newcommand{\sailsailfndecodeSomeCIncOffsetv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCIncOffsetv.tex}} + +\newcommand{\sailfndecodeSomeCBuildCap}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCBuildCap.tex}} + +\newcommand{\sailfndecodeSomeCCopyType}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCCopyType.tex}} + +\newcommand{\sailfndecodeSomeCCSeal}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCCSeal.tex}} + +\newcommand{\sailsailfndecodeSomeCToPtrv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCToPtrv.tex}} + +\newcommand{\sailsailfndecodeSomeCFromPtrv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCFromPtrv.tex}} + +\newcommand{\sailfndecodeSomeCSub}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCSub.tex}} + +\newcommand{\sailsailfndecodeSomeCMOVXv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCMOVXv.tex}} + +\newcommand{\sailsailsailfndecodeSomeCMOVXvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailfndecodeSomeCMOVXvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvvvvvvv.tex}} + +\newcommand{\sailfndecodeSomeCTestSubset}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCTestSubset.tex}} + +\newcommand{\sailfndecodeSomeCBX}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCBX.tex}} + +\newcommand{\sailsailfndecodeSomeCBXv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCBXv.tex}} + +\newcommand{\sailfndecodeSomeCBZ}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCBZ.tex}} + +\newcommand{\sailsailfndecodeSomeCBZv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCBZv.tex}} + +\newcommand{\sailsailfndecodeSomeCReturnv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCReturnv.tex}} + +\newcommand{\sailfndecodeSomeCCall}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCCall.tex}} + +\newcommand{\sailfndecodeSomeClearRegs}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeClearRegs.tex}} + +\newcommand{\sailsailfndecodeSomeClearRegsv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeClearRegsv.tex}} + +\newcommand{\sailsailsailfndecodeSomeClearRegsvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailfndecodeSomeClearRegsvv.tex}} + +\newcommand{\sailsailsailsailfndecodeSomeClearRegsvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailfndecodeSomeClearRegsvvv.tex}} + +\newcommand{\sailfndecodeSomeCIncOffsetImmediate}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCIncOffsetImmediate.tex}} + +\newcommand{\sailfndecodeSomeCSetBoundsImmediate}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCSetBoundsImmediate.tex}} + +\newcommand{\sailfndecodeSomeCLoad}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCLoad.tex}} + +\newcommand{\sailsailfndecodeSomeCLoadv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCLoadv.tex}} + +\newcommand{\sailsailsailfndecodeSomeCLoadvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailfndecodeSomeCLoadvv.tex}} + +\newcommand{\sailsailsailsailfndecodeSomeCLoadvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailfndecodeSomeCLoadvvv.tex}} + +\newcommand{\sailsailsailsailsailfndecodeSomeCLoadvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailfndecodeSomeCLoadvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailfndecodeSomeCLoadvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailfndecodeSomeCLoadvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvvvvvvv.tex}} + +\newcommand{\sailfndecodeSomeCStore}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCStore.tex}} + +\newcommand{\sailsailfndecodeSomeCStorev}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCStorev.tex}} + +\newcommand{\sailsailsailfndecodeSomeCStorevv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailfndecodeSomeCStorevv.tex}} + +\newcommand{\sailsailsailsailfndecodeSomeCStorevvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailfndecodeSomeCStorevvv.tex}} + +\newcommand{\sailsailsailsailsailfndecodeSomeCStorevvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailfndecodeSomeCStorevvvv.tex}} + +\newcommand{\sailsailsailsailsailsailfndecodeSomeCStorevvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailfndecodeSomeCStorevvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailfndecodeSomeCStorevvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailfndecodeSomeCStorevvvvvv.tex}} + +\newcommand{\sailsailsailsailsailsailsailsailfndecodeSomeCStorevvvvvvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailsailsailsailsailsailfndecodeSomeCStorevvvvvvv.tex}} + +\newcommand{\sailfndecodeSomeCSC}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCSC.tex}} + +\newcommand{\sailsailfndecodeSomeCSCv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCSCv.tex}} + +\newcommand{\sailfndecodeSomeCLC}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCLC.tex}} + +\newcommand{\sailsailfndecodeSomeCLCv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfndecodeSomeCLCv.tex}} + +\newcommand{\sailsailsailfndecodeSomeCLCvv}{ \lstinputlisting[language=sail]{sail_latex/sailsailsailfndecodeSomeCLCvv.tex}} + +\newcommand{\sailfndecodeSomeCtwoDumprt}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeCtwoDumprt.tex}} + +\newcommand{\sailfndecodeSomeRI}{ \lstinputlisting[language=sail]{sail_latex/sailfndecodeSomeRI.tex}} + + + +\newcommand{\sailfnexecuteDADDIU}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteDADDIU.tex}} + +\newcommand{\sailfnexecuteDADDU}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteDADDU.tex}} + +\newcommand{\sailfnexecuteDADDI}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteDADDI.tex}} + +\newcommand{\sailfnexecuteDADD}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteDADD.tex}} + +\newcommand{\sailfnexecuteADD}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteADD.tex}} + +\newcommand{\sailfnexecuteADDI}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteADDI.tex}} + +\newcommand{\sailfnexecuteADDU}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteADDU.tex}} + +\newcommand{\sailfnexecuteADDIU}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteADDIU.tex}} + +\newcommand{\sailfnexecuteDSUBU}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteDSUBU.tex}} + +\newcommand{\sailfnexecuteDSUB}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteDSUB.tex}} + +\newcommand{\sailfnexecuteSUB}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteSUB.tex}} + +\newcommand{\sailfnexecuteSUBU}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteSUBU.tex}} + +\newcommand{\sailfnexecuteAND}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteAND.tex}} + +\newcommand{\sailfnexecuteANDI}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteANDI.tex}} + +\newcommand{\sailfnexecuteOR}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteOR.tex}} + +\newcommand{\sailfnexecuteORI}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteORI.tex}} + +\newcommand{\sailfnexecuteNOR}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteNOR.tex}} + +\newcommand{\sailfnexecuteXOR}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteXOR.tex}} + +\newcommand{\sailfnexecuteXORI}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteXORI.tex}} + +\newcommand{\sailfnexecuteLUI}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteLUI.tex}} + +\newcommand{\sailfnexecuteDSLL}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteDSLL.tex}} + +\newcommand{\sailfnexecuteDSLLthreetwo}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteDSLLthreetwo.tex}} + +\newcommand{\sailfnexecuteDSLLV}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteDSLLV.tex}} + +\newcommand{\sailfnexecuteDSRA}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteDSRA.tex}} + +\newcommand{\sailfnexecuteDSRAthreetwo}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteDSRAthreetwo.tex}} + +\newcommand{\sailfnexecuteDSRAV}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteDSRAV.tex}} + +\newcommand{\sailfnexecuteDSRL}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteDSRL.tex}} + +\newcommand{\sailfnexecuteDSRLthreetwo}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteDSRLthreetwo.tex}} + +\newcommand{\sailfnexecuteDSRLV}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteDSRLV.tex}} + +\newcommand{\sailfnexecuteSLL}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteSLL.tex}} + +\newcommand{\sailfnexecuteSLLV}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteSLLV.tex}} + +\newcommand{\sailfnexecuteSRA}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteSRA.tex}} + +\newcommand{\sailfnexecuteSRAV}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteSRAV.tex}} + +\newcommand{\sailfnexecuteSRL}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteSRL.tex}} + +\newcommand{\sailfnexecuteSRLV}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteSRLV.tex}} + +\newcommand{\sailfnexecuteSLT}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteSLT.tex}} + +\newcommand{\sailfnexecuteSLTI}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteSLTI.tex}} + +\newcommand{\sailfnexecuteSLTU}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteSLTU.tex}} + +\newcommand{\sailfnexecuteSLTIU}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteSLTIU.tex}} + +\newcommand{\sailfnexecuteMOVN}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteMOVN.tex}} + +\newcommand{\sailfnexecuteMOVZ}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteMOVZ.tex}} + +\newcommand{\sailfnexecuteMFHI}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteMFHI.tex}} + +\newcommand{\sailfnexecuteMFLO}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteMFLO.tex}} + +\newcommand{\sailfnexecuteMTHI}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteMTHI.tex}} + +\newcommand{\sailfnexecuteMTLO}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteMTLO.tex}} + +\newcommand{\sailfnexecuteMUL}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteMUL.tex}} + +\newcommand{\sailfnexecuteMULT}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteMULT.tex}} + +\newcommand{\sailfnexecuteMULTU}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteMULTU.tex}} + +\newcommand{\sailfnexecuteDMULT}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteDMULT.tex}} + +\newcommand{\sailfnexecuteDMULTU}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteDMULTU.tex}} + +\newcommand{\sailfnexecuteMADD}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteMADD.tex}} + +\newcommand{\sailfnexecuteMADDU}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteMADDU.tex}} + +\newcommand{\sailfnexecuteMSUB}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteMSUB.tex}} + +\newcommand{\sailfnexecuteMSUBU}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteMSUBU.tex}} + +\newcommand{\sailfnexecuteDIV}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteDIV.tex}} + +\newcommand{\sailfnexecuteDIVU}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteDIVU.tex}} + +\newcommand{\sailfnexecuteDDIV}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteDDIV.tex}} + +\newcommand{\sailfnexecuteDDIVU}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteDDIVU.tex}} + +\newcommand{\sailfnexecuteJ}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteJ.tex}} + +\newcommand{\sailfnexecuteJAL}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteJAL.tex}} + +\newcommand{\sailfnexecuteJR}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteJR.tex}} + +\newcommand{\sailfnexecuteJALR}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteJALR.tex}} + +\newcommand{\sailfnexecuteBEQ}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteBEQ.tex}} + +\newcommand{\sailfnexecuteBCMPZ}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteBCMPZ.tex}} + +\newcommand{\sailfnexecuteSYSCALL}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteSYSCALL.tex}} + +\newcommand{\sailfnexecuteBREAK}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteBREAK.tex}} + +\newcommand{\sailfnexecuteWAIT}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteWAIT.tex}} + +\newcommand{\sailfnexecuteTRAPREG}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteTRAPREG.tex}} + +\newcommand{\sailfnexecuteTRAPIMM}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteTRAPIMM.tex}} + +\newcommand{\sailfnexecuteLoad}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteLoad.tex}} + +\newcommand{\sailfnexecuteStore}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteStore.tex}} + +\newcommand{\sailfnexecuteLWL}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteLWL.tex}} + +\newcommand{\sailfnexecuteLWR}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteLWR.tex}} + +\newcommand{\sailfnexecuteSWL}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteSWL.tex}} + +\newcommand{\sailfnexecuteSWR}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteSWR.tex}} + +\newcommand{\sailfnexecuteLDL}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteLDL.tex}} + +\newcommand{\sailfnexecuteLDR}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteLDR.tex}} + +\newcommand{\sailfnexecuteSDL}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteSDL.tex}} + +\newcommand{\sailfnexecuteSDR}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteSDR.tex}} + +\newcommand{\sailfnexecuteCACHE}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCACHE.tex}} + +\newcommand{\sailfnexecuteSYNC}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteSYNC.tex}} + +\newcommand{\sailfnexecuteMFCzero}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteMFCzero.tex}} + +\newcommand{\sailfnexecuteHCF}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteHCF.tex}} + +\newcommand{\sailfnexecuteMTCzero}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteMTCzero.tex}} + +\newcommand{\sailfnexecuteTLBWI}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteTLBWI.tex}} + +\newcommand{\sailfnexecuteTLBWR}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteTLBWR.tex}} + +\newcommand{\sailfnexecuteTLBR}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteTLBR.tex}} + +\newcommand{\sailfnexecuteTLBP}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteTLBP.tex}} + +\newcommand{\sailfnexecuteRDHWR}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteRDHWR.tex}} + +\newcommand{\sailfnexecuteERET}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteERET.tex}} + +\newcommand{\sailfnexecuteCGetPerm}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCGetPerm.tex}} + +\newcommand{\sailfnexecuteCGetType}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCGetType.tex}} + +\newcommand{\sailfnexecuteCGetBase}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCGetBase.tex}} + +\newcommand{\sailfnexecuteCGetOffset}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCGetOffset.tex}} + +\newcommand{\sailfnexecuteCGetLen}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCGetLen.tex}} + +\newcommand{\sailfnexecuteCGetTag}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCGetTag.tex}} + +\newcommand{\sailfnexecuteCGetSealed}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCGetSealed.tex}} + +\newcommand{\sailfnexecuteCGetAddr}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCGetAddr.tex}} + +\newcommand{\sailfnexecuteCGetPCC}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCGetPCC.tex}} + +\newcommand{\sailfnexecuteCGetPCCSetOffset}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCGetPCCSetOffset.tex}} + +\newcommand{\sailfnexecuteCGetCause}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCGetCause.tex}} + +\newcommand{\sailfnexecuteCSetCause}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCSetCause.tex}} + +\newcommand{\sailfnexecuteCReadHwr}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCReadHwr.tex}} + +\newcommand{\sailfnexecuteCWriteHwr}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCWriteHwr.tex}} + +\newcommand{\sailfnexecuteCAndPerm}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCAndPerm.tex}} + +\newcommand{\sailfnexecuteCToPtr}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCToPtr.tex}} + +\newcommand{\sailfnexecuteCSub}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCSub.tex}} + +\newcommand{\sailfnexecuteCPtrCmp}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCPtrCmp.tex}} + +\newcommand{\sailfnexecuteCIncOffset}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCIncOffset.tex}} + +\newcommand{\sailfnexecuteCIncOffsetImmediate}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCIncOffsetImmediate.tex}} + +\newcommand{\sailfnexecuteCSetOffset}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCSetOffset.tex}} + +\newcommand{\sailfnexecuteCSetBounds}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCSetBounds.tex}} + +\newcommand{\sailfnexecuteCSetBoundsImmediate}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCSetBoundsImmediate.tex}} + +\newcommand{\sailfnexecuteCSetBoundsExact}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCSetBoundsExact.tex}} + +\newcommand{\sailfnexecuteCClearTag}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCClearTag.tex}} + +\newcommand{\sailfnexecuteCMOVX}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCMOVX.tex}} + +\newcommand{\sailfnexecuteClearRegs}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteClearRegs.tex}} + +\newcommand{\sailfnexecuteCFromPtr}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCFromPtr.tex}} + +\newcommand{\sailfnexecuteCBuildCap}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCBuildCap.tex}} + +\newcommand{\sailfnexecuteCCopyType}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCCopyType.tex}} + +\newcommand{\sailfnexecuteCCheckPerm}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCCheckPerm.tex}} + +\newcommand{\sailfnexecuteCCheckType}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCCheckType.tex}} + +\newcommand{\sailfnexecuteCTestSubset}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCTestSubset.tex}} + +\newcommand{\sailfnexecuteCSeal}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCSeal.tex}} + +\newcommand{\sailfnexecuteCCSeal}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCCSeal.tex}} + +\newcommand{\sailfnexecuteCUnseal}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCUnseal.tex}} + +\newcommand{\sailfnexecuteCCall}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCCall.tex}} + +\newcommand{\sailsailfnexecuteCCallv}{ \lstinputlisting[language=sail]{sail_latex/sailsailfnexecuteCCallv.tex}} + +\newcommand{\sailfnexecuteCReturn}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCReturn.tex}} + +\newcommand{\sailfnexecuteCBX}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCBX.tex}} + +\newcommand{\sailfnexecuteCBZ}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCBZ.tex}} + +\newcommand{\sailfnexecuteCJALR}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCJALR.tex}} + +\newcommand{\sailfnexecuteCLoad}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCLoad.tex}} + +\newcommand{\sailfnexecuteCStore}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCStore.tex}} + +\newcommand{\sailfnexecuteCSC}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCSC.tex}} + +\newcommand{\sailfnexecuteCLC}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCLC.tex}} + +\newcommand{\sailfnexecuteCtwoDump}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteCtwoDump.tex}} + +\newcommand{\sailfnexecuteRI}{ \lstinputlisting[language=sail]{sail_latex/sailfnexecuteRI.tex}} + + + +\newcommand{\sailsupportedinstructions}{\label{zsupportedzyinstructions} \lstinputlisting[language=sail]{sail_latex/sailsupportedinstructions.tex}} + +\newcommand{\sailfnsupportedinstructions}{\label{zsupportedzyinstructions} \lstinputlisting[language=sail]{sail_latex/sailfnsupportedinstructions.tex}} + diff --git a/cheri/sail_latex/sailAccessLevel.tex b/cheri/sail_latex/sailAccessLevel.tex new file mode 100644 index 00000000..9e7ad495 --- /dev/null +++ b/cheri/sail_latex/sailAccessLevel.tex @@ -0,0 +1 @@ +enum AccessLevel = {User, Supervisor, Kernel} diff --git a/cheri/sail_latex/sailAccessLevelofnum.tex b/cheri/sail_latex/sailAccessLevelofnum.tex new file mode 100644 index 00000000..d958c3e0 --- /dev/null +++ b/cheri/sail_latex/sailAccessLevelofnum.tex @@ -0,0 +1 @@ +val AccessLevel_of_num : forall ('e : Int), 0 <= 'e & 'e <= 2. atom('e) -> AccessLevel diff --git a/cheri/sail_latex/sailBitStr.tex b/cheri/sail_latex/sailBitStr.tex new file mode 100644 index 00000000..a0d408ab --- /dev/null +++ b/cheri/sail_latex/sailBitStr.tex @@ -0,0 +1 @@ +val BitStr = "string_of_bits" : forall 'n. #\hyperref[zbits]{bits}#('n) -> string diff --git a/cheri/sail_latex/sailCPtrCmpOp.tex b/cheri/sail_latex/sailCPtrCmpOp.tex new file mode 100644 index 00000000..cb0a73ae --- /dev/null +++ b/cheri/sail_latex/sailCPtrCmpOp.tex @@ -0,0 +1,10 @@ +enum CPtrCmpOp = { + CEQ, + CNE, + CLT, + CLE, + CLTU, + CLEU, + CEXEQ, + CNEXEQ +} diff --git a/cheri/sail_latex/sailCPtrCmpOpofnum.tex b/cheri/sail_latex/sailCPtrCmpOpofnum.tex new file mode 100644 index 00000000..bd6ca31c --- /dev/null +++ b/cheri/sail_latex/sailCPtrCmpOpofnum.tex @@ -0,0 +1 @@ +val CPtrCmpOp_of_num : forall ('e : Int), 0 <= 'e & 'e <= 7. atom('e) -> CPtrCmpOp diff --git a/cheri/sail_latex/sailCapCauseReg.tex b/cheri/sail_latex/sailCapCauseReg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailCapCauseReg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailCapEx.tex b/cheri/sail_latex/sailCapEx.tex new file mode 100644 index 00000000..636c85c9 --- /dev/null +++ b/cheri/sail_latex/sailCapEx.tex @@ -0,0 +1,25 @@ +enum CapEx = { + CapEx_None, + CapEx_LengthViolation, + CapEx_TagViolation, + CapEx_SealViolation, + CapEx_TypeViolation, + CapEx_CallTrap, + CapEx_ReturnTrap, + CapEx_TSSUnderFlow, + CapEx_UserDefViolation, + CapEx_TLBNoStoreCap, + CapEx_InexactBounds, + CapEx_GlobalViolation, + CapEx_PermitExecuteViolation, + CapEx_PermitLoadViolation, + CapEx_PermitStoreViolation, + CapEx_PermitLoadCapViolation, + CapEx_PermitStoreCapViolation, + CapEx_PermitStoreLocalCapViolation, + CapEx_PermitSealViolation, + CapEx_AccessSystemRegsViolation, + CapEx_PermitCCallViolation, + CapEx_AccessCCallIDCViolation, + CapEx_PermitUnsealViolation +} diff --git a/cheri/sail_latex/sailCapExCode.tex b/cheri/sail_latex/sailCapExCode.tex new file mode 100644 index 00000000..3611e1b8 --- /dev/null +++ b/cheri/sail_latex/sailCapExCode.tex @@ -0,0 +1 @@ +val CapExCode : CapEx -> bits(8) diff --git a/cheri/sail_latex/sailCapExofnum.tex b/cheri/sail_latex/sailCapExofnum.tex new file mode 100644 index 00000000..dec981a6 --- /dev/null +++ b/cheri/sail_latex/sailCapExofnum.tex @@ -0,0 +1 @@ +val CapEx_of_num : forall ('e : Int), 0 <= 'e & 'e <= 22. atom('e) -> CapEx diff --git a/cheri/sail_latex/sailCapLen.tex b/cheri/sail_latex/sailCapLen.tex new file mode 100644 index 00000000..812f45ff --- /dev/null +++ b/cheri/sail_latex/sailCapLen.tex @@ -0,0 +1 @@ +type CapLen = range(0, 2 ^ 65) diff --git a/cheri/sail_latex/sailCapReg.tex b/cheri/sail_latex/sailCapReg.tex new file mode 100644 index 00000000..f217492a --- /dev/null +++ b/cheri/sail_latex/sailCapReg.tex @@ -0,0 +1 @@ +type CapReg = #\hyperref[zbits]{bits}#(257) diff --git a/cheri/sail_latex/sailCapStruct.tex b/cheri/sail_latex/sailCapStruct.tex new file mode 100644 index 00000000..4b9a3386 --- /dev/null +++ b/cheri/sail_latex/sailCapStruct.tex @@ -0,0 +1,22 @@ +struct CapStruct = { + tag : bool , + padding : #\hyperref[zbits]{bits}#(8) , + otype : #\hyperref[zbits]{bits}#(24), + uperms : #\hyperref[zbits]{bits}#(16), + perm_reserved11_14 : #\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 , + sealed : bool , + address : #\hyperref[zbits]{bits}#(64), + base : #\hyperref[zbits]{bits}#(64), + length : #\hyperref[zbits]{bits}#(64), +} diff --git a/cheri/sail_latex/sailCauseReg.tex b/cheri/sail_latex/sailCauseReg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailCauseReg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailClearRegSet.tex b/cheri/sail_latex/sailClearRegSet.tex new file mode 100644 index 00000000..c04ea7d4 --- /dev/null +++ b/cheri/sail_latex/sailClearRegSet.tex @@ -0,0 +1,6 @@ +enum ClearRegSet = { +GPLo, +GPHi, +CLo, +CHi +} diff --git a/cheri/sail_latex/sailClearRegSetofnum.tex b/cheri/sail_latex/sailClearRegSetofnum.tex new file mode 100644 index 00000000..c73d36d9 --- /dev/null +++ b/cheri/sail_latex/sailClearRegSetofnum.tex @@ -0,0 +1 @@ +val ClearRegSet_of_num : forall ('e : Int), 0 <= 'e & 'e <= 3. atom('e) -> ClearRegSet diff --git a/cheri/sail_latex/sailComparison.tex b/cheri/sail_latex/sailComparison.tex new file mode 100644 index 00000000..083fc498 --- /dev/null +++ b/cheri/sail_latex/sailComparison.tex @@ -0,0 +1,10 @@ +enum Comparison = { + EQ, /* equal */ + NE, /* not equal */ + GE, /* signed greater than or equal */ + GEU,/* unsigned greater than or equal */ + GT, /* signed strictly greater than */ + LE, /* signed less than or equal */ + LT, /* signed strictly less than */ + LTU /* unsigned less than or qual */ +} diff --git a/cheri/sail_latex/sailComparisonofnum.tex b/cheri/sail_latex/sailComparisonofnum.tex new file mode 100644 index 00000000..02c9c48e --- /dev/null +++ b/cheri/sail_latex/sailComparisonofnum.tex @@ -0,0 +1 @@ +val Comparison_of_num : forall ('e : Int), 0 <= 'e & 'e <= 7. atom('e) -> Comparison diff --git a/cheri/sail_latex/sailContextReg.tex b/cheri/sail_latex/sailContextReg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailContextReg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailERETHook.tex b/cheri/sail_latex/sailERETHook.tex new file mode 100644 index 00000000..8eadde7b --- /dev/null +++ b/cheri/sail_latex/sailERETHook.tex @@ -0,0 +1 @@ +val ERETHook : unit -> unit effect {rreg, wreg} diff --git a/cheri/sail_latex/sailException.tex b/cheri/sail_latex/sailException.tex new file mode 100644 index 00000000..800328ec --- /dev/null +++ b/cheri/sail_latex/sailException.tex @@ -0,0 +1,5 @@ +enum Exception = +{ + Interrupt, TLBMod, TLBL, TLBS, AdEL, AdES, Sys, Bp, ResI, CpU, Ov, Tr, C2E, C2Trap, + XTLBRefillL, XTLBRefillS, XTLBInvL, XTLBInvS, MCheck +} diff --git a/cheri/sail_latex/sailExceptionCode.tex b/cheri/sail_latex/sailExceptionCode.tex new file mode 100644 index 00000000..395b9670 --- /dev/null +++ b/cheri/sail_latex/sailExceptionCode.tex @@ -0,0 +1 @@ +val ExceptionCode : Exception -> bits(5) diff --git a/cheri/sail_latex/sailExceptionofnum.tex b/cheri/sail_latex/sailExceptionofnum.tex new file mode 100644 index 00000000..394ae4e1 --- /dev/null +++ b/cheri/sail_latex/sailExceptionofnum.tex @@ -0,0 +1 @@ +val Exception_of_num : forall ('e : Int), 0 <= 'e & 'e <= 18. atom('e) -> Exception diff --git a/cheri/sail_latex/sailMAX.tex b/cheri/sail_latex/sailMAX.tex new file mode 100644 index 00000000..07bace3b --- /dev/null +++ b/cheri/sail_latex/sailMAX.tex @@ -0,0 +1 @@ +val MAX : forall 'n. atom('n) -> atom(2 ^ 'n - 1) effect pure diff --git a/cheri/sail_latex/sailMEMea.tex b/cheri/sail_latex/sailMEMea.tex new file mode 100644 index 00000000..c5225019 --- /dev/null +++ b/cheri/sail_latex/sailMEMea.tex @@ -0,0 +1,2 @@ +val MEMea = {lem: "MEMea"} : forall 'n. + ( #\hyperref[zbits]{bits}#(64) , atom('n)) -> unit effect { eamem } diff --git a/cheri/sail_latex/sailMEMeaconditional.tex b/cheri/sail_latex/sailMEMeaconditional.tex new file mode 100644 index 00000000..d966b986 --- /dev/null +++ b/cheri/sail_latex/sailMEMeaconditional.tex @@ -0,0 +1,2 @@ +val MEMea_conditional = {lem: "MEMea_conditional"} : forall 'n. + ( #\hyperref[zbits]{bits}#(64) , atom('n)) -> unit effect { eamem } diff --git a/cheri/sail_latex/sailMEMr.tex b/cheri/sail_latex/sailMEMr.tex new file mode 100644 index 00000000..75ddc94c --- /dev/null +++ b/cheri/sail_latex/sailMEMr.tex @@ -0,0 +1,2 @@ +val MEMr = {lem: "MEMr"} : forall 'n, 'n >= 0. + ( #\hyperref[zbits]{bits}#(64) , atom('n) ) -> (#\hyperref[zbits]{bits}#(8 * 'n)) effect { rmem } diff --git a/cheri/sail_latex/sailMEMrreserve.tex b/cheri/sail_latex/sailMEMrreserve.tex new file mode 100644 index 00000000..11b4f3db --- /dev/null +++ b/cheri/sail_latex/sailMEMrreserve.tex @@ -0,0 +1,2 @@ +val MEMr_reserve = {lem: "MEMr_reserve"} : forall 'n, 'n >= 0. + ( #\hyperref[zbits]{bits}#(64) , atom('n) ) -> (#\hyperref[zbits]{bits}#(8 * 'n)) effect { rmem } diff --git a/cheri/sail_latex/sailMEMrreservewrapper.tex b/cheri/sail_latex/sailMEMrreservewrapper.tex new file mode 100644 index 00000000..b12713a2 --- /dev/null +++ b/cheri/sail_latex/sailMEMrreservewrapper.tex @@ -0,0 +1 @@ +val MEMr_reserve_wrapper : forall 'n, 1 <= 'n <= 8 . ( #\hyperref[zbits]{bits}#(64) , atom('n) ) -> (#\hyperref[zbits]{bits}#(8 * 'n)) effect { rmem } diff --git a/cheri/sail_latex/sailMEMrtag.tex b/cheri/sail_latex/sailMEMrtag.tex new file mode 100644 index 00000000..9bcda0f4 --- /dev/null +++ b/cheri/sail_latex/sailMEMrtag.tex @@ -0,0 +1 @@ +val MEMr_tag = "read_tag_bool" : #\hyperref[zbits]{bits}#(64) -> bool effect { rmemt } diff --git a/cheri/sail_latex/sailMEMrtagged.tex b/cheri/sail_latex/sailMEMrtagged.tex new file mode 100644 index 00000000..92c90c7b --- /dev/null +++ b/cheri/sail_latex/sailMEMrtagged.tex @@ -0,0 +1 @@ +val MEMr_tagged : #\hyperref[zbits]{bits}#(64) -> (bool, #\hyperref[zbits]{bits}#('cap_size * 8)) effect { escape, rmem, rmemt } diff --git a/cheri/sail_latex/sailMEMrtaggedreserve.tex b/cheri/sail_latex/sailMEMrtaggedreserve.tex new file mode 100644 index 00000000..fb080251 --- /dev/null +++ b/cheri/sail_latex/sailMEMrtaggedreserve.tex @@ -0,0 +1 @@ +val MEMr_tagged_reserve : #\hyperref[zbits]{bits}#(64) -> (bool, #\hyperref[zbits]{bits}#('cap_size * 8)) effect { escape, rmem, rmemt } diff --git a/cheri/sail_latex/sailMEMrwrapper.tex b/cheri/sail_latex/sailMEMrwrapper.tex new file mode 100644 index 00000000..7c8ce2fd --- /dev/null +++ b/cheri/sail_latex/sailMEMrwrapper.tex @@ -0,0 +1 @@ +val MEMr_wrapper : forall 'n, 1 <= 'n <= 8 . (#\hyperref[zbits]{bits}#(64), atom('n)) -> #\hyperref[zbits]{bits}#(8*'n) effect {rmem, rreg, wreg} diff --git a/cheri/sail_latex/sailMEMsync.tex b/cheri/sail_latex/sailMEMsync.tex new file mode 100644 index 00000000..5a66f5db --- /dev/null +++ b/cheri/sail_latex/sailMEMsync.tex @@ -0,0 +1,2 @@ +val MEM_sync = {lem: "MEM_sync"} : + unit -> unit effect { barr } diff --git a/cheri/sail_latex/sailMEMval.tex b/cheri/sail_latex/sailMEMval.tex new file mode 100644 index 00000000..67c34697 --- /dev/null +++ b/cheri/sail_latex/sailMEMval.tex @@ -0,0 +1,2 @@ +val MEMval = {lem: "MEMval"} : forall 'n. + ( #\hyperref[zbits]{bits}#(64) , atom('n), #\hyperref[zbits]{bits}#(8*'n)) -> unit effect { wmv } diff --git a/cheri/sail_latex/sailMEMvalconditional.tex b/cheri/sail_latex/sailMEMvalconditional.tex new file mode 100644 index 00000000..9e0029e5 --- /dev/null +++ b/cheri/sail_latex/sailMEMvalconditional.tex @@ -0,0 +1,2 @@ +val MEMval_conditional = {lem: "MEMval_conditional"} : forall 'n. + ( #\hyperref[zbits]{bits}#(64) , atom('n), #\hyperref[zbits]{bits}#(8*'n)) -> bool effect { wmv } diff --git a/cheri/sail_latex/sailMEMwconditionalwrapper.tex b/cheri/sail_latex/sailMEMwconditionalwrapper.tex new file mode 100644 index 00000000..1d7cb3e8 --- /dev/null +++ b/cheri/sail_latex/sailMEMwconditionalwrapper.tex @@ -0,0 +1 @@ +val MEMw_conditional_wrapper : forall 'n, 'n >= 1. (#\hyperref[zbits]{bits}#(64), atom('n), #\hyperref[zbits]{bits}#(8 * 'n)) -> bool effect {escape, wmv, wmvt, eamem} diff --git a/cheri/sail_latex/sailMEMwtag.tex b/cheri/sail_latex/sailMEMwtag.tex new file mode 100644 index 00000000..1319a340 --- /dev/null +++ b/cheri/sail_latex/sailMEMwtag.tex @@ -0,0 +1 @@ +val MEMw_tag = "write_tag_bool" : (#\hyperref[zbits]{bits}#(64) , bool) -> unit effect { wmvt } diff --git a/cheri/sail_latex/sailMEMwtagged.tex b/cheri/sail_latex/sailMEMwtagged.tex new file mode 100644 index 00000000..4f8fd683 --- /dev/null +++ b/cheri/sail_latex/sailMEMwtagged.tex @@ -0,0 +1 @@ +val MEMw_tagged : (#\hyperref[zbits]{bits}#(64), bool, #\hyperref[zbits]{bits}#('cap_size * 8)) -> unit effect { escape, eamem, wmv, wmvt } diff --git a/cheri/sail_latex/sailMEMwtaggedconditional.tex b/cheri/sail_latex/sailMEMwtaggedconditional.tex new file mode 100644 index 00000000..f5ef7e17 --- /dev/null +++ b/cheri/sail_latex/sailMEMwtaggedconditional.tex @@ -0,0 +1 @@ +val MEMw_tagged_conditional : (#\hyperref[zbits]{bits}#(64), bool, #\hyperref[zbits]{bits}#('cap_size * 8)) -> bool effect { escape, eamem, wmv, wmvt } diff --git a/cheri/sail_latex/sailMEMwwrapper.tex b/cheri/sail_latex/sailMEMwwrapper.tex new file mode 100644 index 00000000..db438818 --- /dev/null +++ b/cheri/sail_latex/sailMEMwwrapper.tex @@ -0,0 +1 @@ +val MEMw_wrapper : forall 'n, 'n >= 1. (#\hyperref[zbits]{bits}#(64), atom('n), #\hyperref[zbits]{bits}#(8 * 'n)) -> unit effect {escape, wmv, wmvt, wreg, eamem} diff --git a/cheri/sail_latex/sailMIPSread.tex b/cheri/sail_latex/sailMIPSread.tex new file mode 100644 index 00000000..92ca59cc --- /dev/null +++ b/cheri/sail_latex/sailMIPSread.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_latex/sailMIPSwrite.tex b/cheri/sail_latex/sailMIPSwrite.tex new file mode 100644 index 00000000..cc67fa20 --- /dev/null +++ b/cheri/sail_latex/sailMIPSwrite.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_latex/sailMemAccessType.tex b/cheri/sail_latex/sailMemAccessType.tex new file mode 100644 index 00000000..436b40bc --- /dev/null +++ b/cheri/sail_latex/sailMemAccessType.tex @@ -0,0 +1 @@ +enum MemAccessType = {Instruction, LoadData, StoreData} diff --git a/cheri/sail_latex/sailMemAccessTypeofnum.tex b/cheri/sail_latex/sailMemAccessTypeofnum.tex new file mode 100644 index 00000000..9147f6e3 --- /dev/null +++ b/cheri/sail_latex/sailMemAccessTypeofnum.tex @@ -0,0 +1 @@ +val MemAccessType_of_num : forall ('e : Int), 0 <= 'e & 'e <= 2. atom('e) -> MemAccessType diff --git a/cheri/sail_latex/sailMkCapCauseReg.tex b/cheri/sail_latex/sailMkCapCauseReg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailMkCapCauseReg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailMkCauseReg.tex b/cheri/sail_latex/sailMkCauseReg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailMkCauseReg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailMkContextReg.tex b/cheri/sail_latex/sailMkContextReg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailMkContextReg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailMkStatusReg.tex b/cheri/sail_latex/sailMkStatusReg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailMkStatusReg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailMkTLBEntry.tex b/cheri/sail_latex/sailMkTLBEntry.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailMkTLBEntry.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailMkTLBEntryHiReg.tex b/cheri/sail_latex/sailMkTLBEntryHiReg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailMkTLBEntryHiReg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailMkTLBEntryLoReg.tex b/cheri/sail_latex/sailMkTLBEntryLoReg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailMkTLBEntryLoReg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailMkXContextReg.tex b/cheri/sail_latex/sailMkXContextReg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailMkXContextReg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailNotWordVal.tex b/cheri/sail_latex/sailNotWordVal.tex new file mode 100644 index 00000000..e6689c14 --- /dev/null +++ b/cheri/sail_latex/sailNotWordVal.tex @@ -0,0 +1 @@ +val NotWordVal : #\hyperref[zbits]{bits}#(64) -> bool effect pure diff --git a/cheri/sail_latex/sailReadRAM.tex b/cheri/sail_latex/sailReadRAM.tex new file mode 100644 index 00000000..68d629a6 --- /dev/null +++ b/cheri/sail_latex/sailReadRAM.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_latex/sailSignalException.tex b/cheri/sail_latex/sailSignalException.tex new file mode 100644 index 00000000..44205587 --- /dev/null +++ b/cheri/sail_latex/sailSignalException.tex @@ -0,0 +1 @@ +val SignalException : forall ('o : Type) . Exception -> 'o effect {escape, rreg, wreg} diff --git a/cheri/sail_latex/sailSignalExceptionBadAddr.tex b/cheri/sail_latex/sailSignalExceptionBadAddr.tex new file mode 100644 index 00000000..f54e77e7 --- /dev/null +++ b/cheri/sail_latex/sailSignalExceptionBadAddr.tex @@ -0,0 +1 @@ +val SignalExceptionBadAddr : forall ('o : Type) . (Exception, #\hyperref[zbits]{bits}#(64)) -> 'o effect {escape, rreg, wreg} diff --git a/cheri/sail_latex/sailSignalExceptionMIPS.tex b/cheri/sail_latex/sailSignalExceptionMIPS.tex new file mode 100644 index 00000000..ce88e5d6 --- /dev/null +++ b/cheri/sail_latex/sailSignalExceptionMIPS.tex @@ -0,0 +1 @@ +val SignalExceptionMIPS : forall ('o : Type) . (Exception, #\hyperref[zbits]{bits}#(64)) -> 'o effect {escape, rreg, wreg} diff --git a/cheri/sail_latex/sailSignalExceptionTLB.tex b/cheri/sail_latex/sailSignalExceptionTLB.tex new file mode 100644 index 00000000..08036f99 --- /dev/null +++ b/cheri/sail_latex/sailSignalExceptionTLB.tex @@ -0,0 +1 @@ +val SignalExceptionTLB : forall ('o : Type) . (Exception, #\hyperref[zbits]{bits}#(64)) -> 'o effect {escape, rreg, wreg} diff --git a/cheri/sail_latex/sailStatusReg.tex b/cheri/sail_latex/sailStatusReg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailStatusReg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailTLBEntry.tex b/cheri/sail_latex/sailTLBEntry.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailTLBEntry.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailTLBEntryHiReg.tex b/cheri/sail_latex/sailTLBEntryHiReg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailTLBEntryHiReg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailTLBEntryLoReg.tex b/cheri/sail_latex/sailTLBEntryLoReg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailTLBEntryLoReg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailTLBIndexT.tex b/cheri/sail_latex/sailTLBIndexT.tex new file mode 100644 index 00000000..c51bd6bb --- /dev/null +++ b/cheri/sail_latex/sailTLBIndexT.tex @@ -0,0 +1 @@ +type TLBIndexT = (#\hyperref[zbits]{bits}#(6)) diff --git a/cheri/sail_latex/sailTLBTranslate.tex b/cheri/sail_latex/sailTLBTranslate.tex new file mode 100644 index 00000000..d09725f9 --- /dev/null +++ b/cheri/sail_latex/sailTLBTranslate.tex @@ -0,0 +1 @@ +val TLBTranslate : (#\hyperref[zbits]{bits}#(64), MemAccessType) -> #\hyperref[zbits]{bits}#(64) effect {rreg, wreg, escape, undef} diff --git a/cheri/sail_latex/sailTLBTranslateC.tex b/cheri/sail_latex/sailTLBTranslateC.tex new file mode 100644 index 00000000..0d99ab7e --- /dev/null +++ b/cheri/sail_latex/sailTLBTranslateC.tex @@ -0,0 +1 @@ +val TLBTranslateC : (#\hyperref[zbits]{bits}#(64), MemAccessType) -> (#\hyperref[zbits]{bits}#(64), bool) effect {escape, rreg, undef, wreg} diff --git a/cheri/sail_latex/sailTLBTranslatetwo.tex b/cheri/sail_latex/sailTLBTranslatetwo.tex new file mode 100644 index 00000000..310675f4 --- /dev/null +++ b/cheri/sail_latex/sailTLBTranslatetwo.tex @@ -0,0 +1 @@ +val TLBTranslate2 : (#\hyperref[zbits]{bits}#(64), MemAccessType) -> (#\hyperref[zbits]{bits}#(64), bool) effect {rreg, wreg, undef, escape} diff --git a/cheri/sail_latex/sailTLBWriteEntry.tex b/cheri/sail_latex/sailTLBWriteEntry.tex new file mode 100644 index 00000000..84d4fa70 --- /dev/null +++ b/cheri/sail_latex/sailTLBWriteEntry.tex @@ -0,0 +1 @@ +val TLBWriteEntry : TLBIndexT -> unit effect {rreg, wreg, escape} diff --git a/cheri/sail_latex/sailTranslatePC.tex b/cheri/sail_latex/sailTranslatePC.tex new file mode 100644 index 00000000..c962c7e1 --- /dev/null +++ b/cheri/sail_latex/sailTranslatePC.tex @@ -0,0 +1 @@ +val TranslatePC : #\hyperref[zbits]{bits}#(64) -> #\hyperref[zbits]{bits}#(64) effect {rreg, wreg, escape, undef} diff --git a/cheri/sail_latex/sailWordType.tex b/cheri/sail_latex/sailWordType.tex new file mode 100644 index 00000000..632efe95 --- /dev/null +++ b/cheri/sail_latex/sailWordType.tex @@ -0,0 +1 @@ +enum WordType = { B, H, W, D} diff --git a/cheri/sail_latex/sailWordTypeUnaligned.tex b/cheri/sail_latex/sailWordTypeUnaligned.tex new file mode 100644 index 00000000..3724733e --- /dev/null +++ b/cheri/sail_latex/sailWordTypeUnaligned.tex @@ -0,0 +1 @@ +enum WordTypeUnaligned = { WL, WR, DL, DR } diff --git a/cheri/sail_latex/sailWordTypeUnalignedofnum.tex b/cheri/sail_latex/sailWordTypeUnalignedofnum.tex new file mode 100644 index 00000000..a36d9748 --- /dev/null +++ b/cheri/sail_latex/sailWordTypeUnalignedofnum.tex @@ -0,0 +1 @@ +val WordTypeUnaligned_of_num : forall ('e : Int), 0 <= 'e & 'e <= 3. atom('e) -> WordTypeUnaligned diff --git a/cheri/sail_latex/sailWordTypeofnum.tex b/cheri/sail_latex/sailWordTypeofnum.tex new file mode 100644 index 00000000..85872610 --- /dev/null +++ b/cheri/sail_latex/sailWordTypeofnum.tex @@ -0,0 +1 @@ +val WordType_of_num : forall ('e : Int), 0 <= 'e & 'e <= 3. atom('e) -> WordType diff --git a/cheri/sail_latex/sailWriteRAM.tex b/cheri/sail_latex/sailWriteRAM.tex new file mode 100644 index 00000000..2ed4aca2 --- /dev/null +++ b/cheri/sail_latex/sailWriteRAM.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_latex/sailXContextReg.tex b/cheri/sail_latex/sailXContextReg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailXContextReg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailabsatom.tex b/cheri/sail_latex/sailabsatom.tex new file mode 100644 index 00000000..5164ef32 --- /dev/null +++ b/cheri/sail_latex/sailabsatom.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_latex/sailabsint.tex b/cheri/sail_latex/sailabsint.tex new file mode 100644 index 00000000..d3b67cfb --- /dev/null +++ b/cheri/sail_latex/sailabsint.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_latex/sailaddatom.tex b/cheri/sail_latex/sailaddatom.tex new file mode 100644 index 00000000..8b6ac810 --- /dev/null +++ b/cheri/sail_latex/sailaddatom.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_latex/sailaddbits.tex b/cheri/sail_latex/sailaddbits.tex new file mode 100644 index 00000000..95f653d1 --- /dev/null +++ b/cheri/sail_latex/sailaddbits.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_latex/sailaddbitsint.tex b/cheri/sail_latex/sailaddbitsint.tex new file mode 100644 index 00000000..ee9a8aa2 --- /dev/null +++ b/cheri/sail_latex/sailaddbitsint.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_latex/sailaddint.tex b/cheri/sail_latex/sailaddint.tex new file mode 100644 index 00000000..9fe5b078 --- /dev/null +++ b/cheri/sail_latex/sailaddint.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_latex/sailaddrWrapper.tex b/cheri/sail_latex/sailaddrWrapper.tex new file mode 100644 index 00000000..506f9f99 --- /dev/null +++ b/cheri/sail_latex/sailaddrWrapper.tex @@ -0,0 +1 @@ +val addrWrapper : (#\hyperref[zbits]{bits}#(64), MemAccessType, WordType) -> #\hyperref[zbits]{bits}#(64) effect {rreg, wreg, escape} diff --git a/cheri/sail_latex/sailaddrWrapperUnaligned.tex b/cheri/sail_latex/sailaddrWrapperUnaligned.tex new file mode 100644 index 00000000..bb266a52 --- /dev/null +++ b/cheri/sail_latex/sailaddrWrapperUnaligned.tex @@ -0,0 +1 @@ +val addrWrapperUnaligned : (#\hyperref[zbits]{bits}#(64), MemAccessType, WordTypeUnaligned) -> #\hyperref[zbits]{bits}#(64) effect {rreg, wreg, escape} diff --git a/cheri/sail_latex/sailaddrange.tex b/cheri/sail_latex/sailaddrange.tex new file mode 100644 index 00000000..fbf498b1 --- /dev/null +++ b/cheri/sail_latex/sailaddrange.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_latex/sailaddvec.tex b/cheri/sail_latex/sailaddvec.tex new file mode 100644 index 00000000..bb625afe --- /dev/null +++ b/cheri/sail_latex/sailaddvec.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_latex/sailaddvecint.tex b/cheri/sail_latex/sailaddvecint.tex new file mode 100644 index 00000000..189ad4aa --- /dev/null +++ b/cheri/sail_latex/sailaddvecint.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_latex/sailandbits.tex b/cheri/sail_latex/sailandbits.tex new file mode 100644 index 00000000..8e35bd5b --- /dev/null +++ b/cheri/sail_latex/sailandbits.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_latex/sailandbool.tex b/cheri/sail_latex/sailandbool.tex new file mode 100644 index 00000000..926dce9f --- /dev/null +++ b/cheri/sail_latex/sailandbool.tex @@ -0,0 +1 @@ +val and_bool = {coq: "andb", _: "and_bool"} : (bool, bool) -> bool diff --git a/cheri/sail_latex/sailappend.tex b/cheri/sail_latex/sailappend.tex new file mode 100644 index 00000000..56c12116 --- /dev/null +++ b/cheri/sail_latex/sailappend.tex @@ -0,0 +1 @@ +overload append = {bitvector_concat}
\ No newline at end of file diff --git a/cheri/sail_latex/sailappendsixfour.tex b/cheri/sail_latex/sailappendsixfour.tex new file mode 100644 index 00000000..633593b3 --- /dev/null +++ b/cheri/sail_latex/sailappendsixfour.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_latex/sailbits.tex b/cheri/sail_latex/sailbits.tex new file mode 100644 index 00000000..88255b5a --- /dev/null +++ b/cheri/sail_latex/sailbits.tex @@ -0,0 +1 @@ +type #\hyperref[zbits]{bits}# ('n : Int) = vector('n, dec, bit) diff --git a/cheri/sail_latex/sailbitstobool.tex b/cheri/sail_latex/sailbitstobool.tex new file mode 100644 index 00000000..17cb3483 --- /dev/null +++ b/cheri/sail_latex/sailbitstobool.tex @@ -0,0 +1 @@ +val cast bits_to_bool : #\hyperref[zbits]{bits}#(1) -> bool diff --git a/cheri/sail_latex/sailbittobool.tex b/cheri/sail_latex/sailbittobool.tex new file mode 100644 index 00000000..13a2dfb8 --- /dev/null +++ b/cheri/sail_latex/sailbittobool.tex @@ -0,0 +1 @@ +val cast bit_to_bool : bit -> bool diff --git a/cheri/sail_latex/sailbitvectoraccess.tex b/cheri/sail_latex/sailbitvectoraccess.tex new file mode 100644 index 00000000..4bb98eb8 --- /dev/null +++ b/cheri/sail_latex/sailbitvectoraccess.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_latex/sailbitvectorconcat.tex b/cheri/sail_latex/sailbitvectorconcat.tex new file mode 100644 index 00000000..afc03901 --- /dev/null +++ b/cheri/sail_latex/sailbitvectorconcat.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_latex/sailbitvectorlength.tex b/cheri/sail_latex/sailbitvectorlength.tex new file mode 100644 index 00000000..ac601acd --- /dev/null +++ b/cheri/sail_latex/sailbitvectorlength.tex @@ -0,0 +1 @@ +val bitvector_length = {coq: "length_mword", _:"length"} : forall 'n. #\hyperref[zbits]{bits}#('n) -> atom('n) diff --git a/cheri/sail_latex/sailbitvectorupdate.tex b/cheri/sail_latex/sailbitvectorupdate.tex new file mode 100644 index 00000000..6524146e --- /dev/null +++ b/cheri/sail_latex/sailbitvectorupdate.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_latex/sailbooltobits.tex b/cheri/sail_latex/sailbooltobits.tex new file mode 100644 index 00000000..711ab763 --- /dev/null +++ b/cheri/sail_latex/sailbooltobits.tex @@ -0,0 +1 @@ +val cast bool_to_bits : bool -> #\hyperref[zbits]{bits}#(1) diff --git a/cheri/sail_latex/sailcapRegToCapStruct.tex b/cheri/sail_latex/sailcapRegToCapStruct.tex new file mode 100644 index 00000000..bd64d554 --- /dev/null +++ b/cheri/sail_latex/sailcapRegToCapStruct.tex @@ -0,0 +1 @@ +val capRegToCapStruct : CapReg -> CapStruct diff --git a/cheri/sail_latex/sailcapStructToCapReg.tex b/cheri/sail_latex/sailcapStructToCapReg.tex new file mode 100644 index 00000000..b5409845 --- /dev/null +++ b/cheri/sail_latex/sailcapStructToCapReg.tex @@ -0,0 +1 @@ +val capStructToCapReg : CapStruct -> CapReg diff --git a/cheri/sail_latex/sailcapStructToMemBits.tex b/cheri/sail_latex/sailcapStructToMemBits.tex new file mode 100644 index 00000000..36f3a22b --- /dev/null +++ b/cheri/sail_latex/sailcapStructToMemBits.tex @@ -0,0 +1 @@ +val capStructToMemBits : CapStruct -> bits(256) diff --git a/cheri/sail_latex/sailcapStructToMemBitstwofivesix.tex b/cheri/sail_latex/sailcapStructToMemBitstwofivesix.tex new file mode 100644 index 00000000..dacd98f8 --- /dev/null +++ b/cheri/sail_latex/sailcapStructToMemBitstwofivesix.tex @@ -0,0 +1 @@ +val capStructToMemBits256 : CapStruct -> bits(256) diff --git a/cheri/sail_latex/sailcapToString.tex b/cheri/sail_latex/sailcapToString.tex new file mode 100644 index 00000000..554d4320 --- /dev/null +++ b/cheri/sail_latex/sailcapToString.tex @@ -0,0 +1 @@ +val capToString : CapStruct -> string effect {escape} diff --git a/cheri/sail_latex/sailcastunitvec.tex b/cheri/sail_latex/sailcastunitvec.tex new file mode 100644 index 00000000..e0391ded --- /dev/null +++ b/cheri/sail_latex/sailcastunitvec.tex @@ -0,0 +1 @@ +val cast cast_unit_vec : bit -> #\hyperref[zbits]{bits}#(1) diff --git a/cheri/sail_latex/sailcheckCPtwousable.tex b/cheri/sail_latex/sailcheckCPtwousable.tex new file mode 100644 index 00000000..bfdca829 --- /dev/null +++ b/cheri/sail_latex/sailcheckCPtwousable.tex @@ -0,0 +1 @@ +val checkCP2usable : unit -> unit effect {rreg, wreg, escape} diff --git a/cheri/sail_latex/sailcheckCPzeroAccess.tex b/cheri/sail_latex/sailcheckCPzeroAccess.tex new file mode 100644 index 00000000..facf1a49 --- /dev/null +++ b/cheri/sail_latex/sailcheckCPzeroAccess.tex @@ -0,0 +1 @@ +val checkCP0Access : unit->unit effect{escape, rreg, wreg} diff --git a/cheri/sail_latex/sailcheckDDCPerms.tex b/cheri/sail_latex/sailcheckDDCPerms.tex new file mode 100644 index 00000000..f8598091 --- /dev/null +++ b/cheri/sail_latex/sailcheckDDCPerms.tex @@ -0,0 +1 @@ +val checkDDCPerms : (CapStruct, MemAccessType) -> unit effect {escape, rreg, wreg} diff --git a/cheri/sail_latex/sailcompare.tex b/cheri/sail_latex/sailcompare.tex new file mode 100644 index 00000000..487ee094 --- /dev/null +++ b/cheri/sail_latex/sailcompare.tex @@ -0,0 +1 @@ +val compare : (Comparison, #\hyperref[zbits]{bits}#(64), #\hyperref[zbits]{bits}#(64)) -> bool diff --git a/cheri/sail_latex/sailconcatstr.tex b/cheri/sail_latex/sailconcatstr.tex new file mode 100644 index 00000000..07556728 --- /dev/null +++ b/cheri/sail_latex/sailconcatstr.tex @@ -0,0 +1 @@ +val concat_str = {lem: "stringAppend", coq: "String.append", _: "concat_str"} : (string, string) -> string diff --git a/cheri/sail_latex/sailcptwonextpc.tex b/cheri/sail_latex/sailcptwonextpc.tex new file mode 100644 index 00000000..dca02a22 --- /dev/null +++ b/cheri/sail_latex/sailcptwonextpc.tex @@ -0,0 +1 @@ +val cp2_next_pc: unit -> unit effect {rreg, wreg} diff --git a/cheri/sail_latex/saildecode.tex b/cheri/sail_latex/saildecode.tex new file mode 100644 index 00000000..0dc95714 --- /dev/null +++ b/cheri/sail_latex/saildecode.tex @@ -0,0 +1 @@ +val decode : #\hyperref[zbits]{bits}#(32) -> #\hyperref[zoption]{option}#(ast) effect pure diff --git a/cheri/sail_latex/saildecodefailure.tex b/cheri/sail_latex/saildecodefailure.tex new file mode 100644 index 00000000..454da4c5 --- /dev/null +++ b/cheri/sail_latex/saildecodefailure.tex @@ -0,0 +1,6 @@ +enum decode_failure = { + no_matching_pattern, + unsupported_instruction, + illegal_instruction, + internal_error +} diff --git a/cheri/sail_latex/saildecodefailureofnum.tex b/cheri/sail_latex/saildecodefailureofnum.tex new file mode 100644 index 00000000..318b7b9d --- /dev/null +++ b/cheri/sail_latex/saildecodefailureofnum.tex @@ -0,0 +1 @@ +val decode_failure_of_num : forall ('e : Int), 0 <= 'e & 'e <= 3. atom('e) -> decode_failure diff --git a/cheri/sail_latex/saildiv.tex b/cheri/sail_latex/saildiv.tex new file mode 100644 index 00000000..58318fe9 --- /dev/null +++ b/cheri/sail_latex/saildiv.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_latex/saildivint.tex b/cheri/sail_latex/saildivint.tex new file mode 100644 index 00000000..34ae6121 --- /dev/null +++ b/cheri/sail_latex/saildivint.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_latex/saildumpcptwostate.tex b/cheri/sail_latex/saildumpcptwostate.tex new file mode 100644 index 00000000..46ee6818 --- /dev/null +++ b/cheri/sail_latex/saildumpcptwostate.tex @@ -0,0 +1 @@ +val dump_cp2_state : unit -> unit effect {rreg, escape} diff --git a/cheri/sail_latex/saileqanything.tex b/cheri/sail_latex/saileqanything.tex new file mode 100644 index 00000000..9b5d3c92 --- /dev/null +++ b/cheri/sail_latex/saileqanything.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_latex/saileqatom.tex b/cheri/sail_latex/saileqatom.tex new file mode 100644 index 00000000..0325ab15 --- /dev/null +++ b/cheri/sail_latex/saileqatom.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_latex/saileqbit.tex b/cheri/sail_latex/saileqbit.tex new file mode 100644 index 00000000..205d3436 --- /dev/null +++ b/cheri/sail_latex/saileqbit.tex @@ -0,0 +1 @@ +val eq_bit = { lem : "eq", _ : "eq_bit" } : (bit, bit) -> bool diff --git a/cheri/sail_latex/saileqbits.tex b/cheri/sail_latex/saileqbits.tex new file mode 100644 index 00000000..e78ed19a --- /dev/null +++ b/cheri/sail_latex/saileqbits.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_latex/saileqbittwo.tex b/cheri/sail_latex/saileqbittwo.tex new file mode 100644 index 00000000..59353940 --- /dev/null +++ b/cheri/sail_latex/saileqbittwo.tex @@ -0,0 +1 @@ +val eq_bit2 = "eq_bit" : (bit, bit) -> bool diff --git a/cheri/sail_latex/saileqbool.tex b/cheri/sail_latex/saileqbool.tex new file mode 100644 index 00000000..4d2c346b --- /dev/null +++ b/cheri/sail_latex/saileqbool.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_latex/saileqint.tex b/cheri/sail_latex/saileqint.tex new file mode 100644 index 00000000..4c0462c1 --- /dev/null +++ b/cheri/sail_latex/saileqint.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_latex/saileqrange.tex b/cheri/sail_latex/saileqrange.tex new file mode 100644 index 00000000..7f1cd5f2 --- /dev/null +++ b/cheri/sail_latex/saileqrange.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_latex/sailexecute.tex b/cheri/sail_latex/sailexecute.tex new file mode 100644 index 00000000..69282932 --- /dev/null +++ b/cheri/sail_latex/sailexecute.tex @@ -0,0 +1 @@ +val execute : ast -> unit effect {barr, eamem, escape, rmem, rmemt, rreg, undef, wmv, wmvt, wreg} diff --git a/cheri/sail_latex/sailexecutebranch.tex b/cheri/sail_latex/sailexecutebranch.tex new file mode 100644 index 00000000..a4582e82 --- /dev/null +++ b/cheri/sail_latex/sailexecutebranch.tex @@ -0,0 +1 @@ +val execute_branch : #\hyperref[zbits]{bits}#(64) -> unit effect {wreg} diff --git a/cheri/sail_latex/sailexecutebranchpcc.tex b/cheri/sail_latex/sailexecutebranchpcc.tex new file mode 100644 index 00000000..f94d4e7d --- /dev/null +++ b/cheri/sail_latex/sailexecutebranchpcc.tex @@ -0,0 +1 @@ +val execute_branch_pcc : CapStruct -> unit effect {wreg} diff --git a/cheri/sail_latex/sailextendLoad.tex b/cheri/sail_latex/sailextendLoad.tex new file mode 100644 index 00000000..d403c83c --- /dev/null +++ b/cheri/sail_latex/sailextendLoad.tex @@ -0,0 +1 @@ +val extendLoad : forall 'sz, 'sz <= 64 . (#\hyperref[zbits]{bits}#('sz), bool) -> #\hyperref[zbits]{bits}#(64) effect pure diff --git a/cheri/sail_latex/sailfnAccessLevelofnum.tex b/cheri/sail_latex/sailfnAccessLevelofnum.tex new file mode 100644 index 00000000..a8446000 --- /dev/null +++ b/cheri/sail_latex/sailfnAccessLevelofnum.tex @@ -0,0 +1,5 @@ +function AccessLevel_of_num arg# = match arg# { + 0 => User, + 1 => Supervisor, + _ => Kernel +} diff --git a/cheri/sail_latex/sailfnCPtrCmpOpofnum.tex b/cheri/sail_latex/sailfnCPtrCmpOpofnum.tex new file mode 100644 index 00000000..6ab563f3 --- /dev/null +++ b/cheri/sail_latex/sailfnCPtrCmpOpofnum.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_latex/sailfnCapExCode.tex b/cheri/sail_latex/sailfnCapExCode.tex new file mode 100644 index 00000000..324612a0 --- /dev/null +++ b/cheri/sail_latex/sailfnCapExCode.tex @@ -0,0 +1,26 @@ +function #\hyperref[zCapExCode]{CapExCode}#(ex) : CapEx -> #\hyperref[zbits]{bits}#(8)= + match ex { + CapEx_None => 0x00, + CapEx_LengthViolation => 0x01, + CapEx_TagViolation => 0x02, + CapEx_SealViolation => 0x03, + CapEx_TypeViolation => 0x04, + CapEx_CallTrap => 0x05, + CapEx_ReturnTrap => 0x06, + CapEx_TSSUnderFlow => 0x07, + CapEx_UserDefViolation => 0x08, + CapEx_TLBNoStoreCap => 0x09, + CapEx_InexactBounds => 0x0a, + CapEx_GlobalViolation => 0x10, + CapEx_PermitExecuteViolation => 0x11, + CapEx_PermitLoadViolation => 0x12, + CapEx_PermitStoreViolation => 0x13, + CapEx_PermitLoadCapViolation => 0x14, + CapEx_PermitStoreCapViolation => 0x15, + CapEx_PermitStoreLocalCapViolation => 0x16, + CapEx_PermitSealViolation => 0x17, + CapEx_AccessSystemRegsViolation => 0x18, + CapEx_PermitCCallViolation => 0x19, + CapEx_AccessCCallIDCViolation => 0x1a, + CapEx_PermitUnsealViolation => 0x1b + } diff --git a/cheri/sail_latex/sailfnCapExofnum.tex b/cheri/sail_latex/sailfnCapExofnum.tex new file mode 100644 index 00000000..1bb6f2d1 --- /dev/null +++ b/cheri/sail_latex/sailfnCapExofnum.tex @@ -0,0 +1,25 @@ +function CapEx_of_num arg# = match arg# { + 0 => CapEx_None, + 1 => CapEx_LengthViolation, + 2 => CapEx_TagViolation, + 3 => CapEx_SealViolation, + 4 => CapEx_TypeViolation, + 5 => CapEx_CallTrap, + 6 => CapEx_ReturnTrap, + 7 => CapEx_TSSUnderFlow, + 8 => CapEx_UserDefViolation, + 9 => CapEx_TLBNoStoreCap, + 10 => CapEx_InexactBounds, + 11 => CapEx_GlobalViolation, + 12 => CapEx_PermitExecuteViolation, + 13 => CapEx_PermitLoadViolation, + 14 => CapEx_PermitStoreViolation, + 15 => CapEx_PermitLoadCapViolation, + 16 => CapEx_PermitStoreCapViolation, + 17 => CapEx_PermitStoreLocalCapViolation, + 18 => CapEx_PermitSealViolation, + 19 => CapEx_AccessSystemRegsViolation, + 20 => CapEx_PermitCCallViolation, + 21 => CapEx_AccessCCallIDCViolation, + _ => CapEx_PermitUnsealViolation +} diff --git a/cheri/sail_latex/sailfnClearRegSetofnum.tex b/cheri/sail_latex/sailfnClearRegSetofnum.tex new file mode 100644 index 00000000..edfe64e3 --- /dev/null +++ b/cheri/sail_latex/sailfnClearRegSetofnum.tex @@ -0,0 +1,6 @@ +function ClearRegSet_of_num arg# = match arg# { + 0 => GPLo, + 1 => GPHi, + 2 => CLo, + _ => CHi +} diff --git a/cheri/sail_latex/sailfnComparisonofnum.tex b/cheri/sail_latex/sailfnComparisonofnum.tex new file mode 100644 index 00000000..8ff4bfc1 --- /dev/null +++ b/cheri/sail_latex/sailfnComparisonofnum.tex @@ -0,0 +1,10 @@ +function Comparison_of_num arg# = match arg# { + 0 => EQ, + 1 => NE, + 2 => GE, + 3 => GEU, + 4 => GT, + 5 => LE, + 6 => LT, + _ => LTU +} diff --git a/cheri/sail_latex/sailfnERETHook.tex b/cheri/sail_latex/sailfnERETHook.tex new file mode 100644 index 00000000..bac1f738 --- /dev/null +++ b/cheri/sail_latex/sailfnERETHook.tex @@ -0,0 +1,6 @@ +function #\hyperref[zERETHook]{ERETHook}#() : unit -> unit = + { + nextPCC = EPCC; + delayedPCC = EPCC; /* always write delayedPCC together with nextPCC so + that non-capability branches don't override PCC */ + } diff --git a/cheri/sail_latex/sailfnExceptionCode.tex b/cheri/sail_latex/sailfnExceptionCode.tex new file mode 100644 index 00000000..b34ab2ab --- /dev/null +++ b/cheri/sail_latex/sailfnExceptionCode.tex @@ -0,0 +1,23 @@ +function #\hyperref[zExceptionCode]{ExceptionCode}# (ex) : Exception -> #\hyperref[zbits]{bits}#(5)= + let x : #\hyperref[zbits]{bits}#(8) = match ex + { + Interrupt => 0x00, /* Interrupt */ + TLBMod => 0x01, /* TLB modification exception */ + TLBL => 0x02, /* TLB #\hyperref[zexception]{exception}# (load or fetch) */ + TLBS => 0x03, /* TLB #\hyperref[zexception]{exception}# (store) */ + AdEL => 0x04, /* Address #\hyperref[zerror]{error}# (load or fetch) */ + AdES => 0x05, /* Address #\hyperref[zerror]{error}# (store) */ + Sys => 0x08, /* Syscall */ + Bp => 0x09, /* Breakpoint */ + ResI => 0x0a, /* Reserved instruction */ + CpU => 0x0b, /* Coprocessor Unusable */ + Ov => 0x0c, /* Arithmetic overflow */ + Tr => 0x0d, /* Trap */ + C2E => 0x12, /* C2E coprocessor 2 exception */ + C2Trap => 0x12, /* C2Trap maps to same exception code, different vector */ + XTLBRefillL => 0x02, + XTLBRefillS => 0x03, + XTLBInvL => 0x02, + XTLBInvS => 0x03, + MCheck => 0x18 + } in x[4..0] diff --git a/cheri/sail_latex/sailfnExceptionofnum.tex b/cheri/sail_latex/sailfnExceptionofnum.tex new file mode 100644 index 00000000..0ffd2ef1 --- /dev/null +++ b/cheri/sail_latex/sailfnExceptionofnum.tex @@ -0,0 +1,21 @@ +function Exception_of_num arg# = match arg# { + 0 => Interrupt, + 1 => TLBMod, + 2 => TLBL, + 3 => TLBS, + 4 => AdEL, + 5 => AdES, + 6 => Sys, + 7 => Bp, + 8 => ResI, + 9 => CpU, + 10 => Ov, + 11 => Tr, + 12 => C2E, + 13 => C2Trap, + 14 => XTLBRefillL, + 15 => XTLBRefillS, + 16 => XTLBInvL, + 17 => XTLBInvS, + _ => MCheck +} diff --git a/cheri/sail_latex/sailfnMAX.tex b/cheri/sail_latex/sailfnMAX.tex new file mode 100644 index 00000000..e9a6a650 --- /dev/null +++ b/cheri/sail_latex/sailfnMAX.tex @@ -0,0 +1 @@ +function #\hyperref[zMAX]{MAX}#(n) = #\hyperref[zpowtwo]{pow2}#(n) - 1 diff --git a/cheri/sail_latex/sailfnMEMea.tex b/cheri/sail_latex/sailfnMEMea.tex new file mode 100644 index 00000000..1bd08739 --- /dev/null +++ b/cheri/sail_latex/sailfnMEMea.tex @@ -0,0 +1 @@ +function #\hyperref[zMEMea]{MEMea}# (addr, size) = #\hyperref[zskipzyeamem]{skip\_eamem}#() diff --git a/cheri/sail_latex/sailfnMEMeaconditional.tex b/cheri/sail_latex/sailfnMEMeaconditional.tex new file mode 100644 index 00000000..65930634 --- /dev/null +++ b/cheri/sail_latex/sailfnMEMeaconditional.tex @@ -0,0 +1 @@ +function #\hyperref[zMEMeazyconditional]{MEMea\_conditional}# (addr, size) = #\hyperref[zskipzyeamem]{skip\_eamem}#() diff --git a/cheri/sail_latex/sailfnMEMr.tex b/cheri/sail_latex/sailfnMEMr.tex new file mode 100644 index 00000000..bae85b70 --- /dev/null +++ b/cheri/sail_latex/sailfnMEMr.tex @@ -0,0 +1 @@ +function #\hyperref[zMEMr]{MEMr}# (addr, size) = #\hyperref[zzyzyMIPSzyread]{\_\_MIPS\_read}#(addr, size) diff --git a/cheri/sail_latex/sailfnMEMrreserve.tex b/cheri/sail_latex/sailfnMEMrreserve.tex new file mode 100644 index 00000000..9339f02b --- /dev/null +++ b/cheri/sail_latex/sailfnMEMrreserve.tex @@ -0,0 +1 @@ +function #\hyperref[zMEMrzyreserve]{MEMr\_reserve}# (addr, size) = #\hyperref[zzyzyMIPSzyread]{\_\_MIPS\_read}#(addr, size) diff --git a/cheri/sail_latex/sailfnMEMrreservewrapper.tex b/cheri/sail_latex/sailfnMEMrreservewrapper.tex new file mode 100644 index 00000000..fc8ea6c7 --- /dev/null +++ b/cheri/sail_latex/sailfnMEMrreservewrapper.tex @@ -0,0 +1,2 @@ +function #\hyperref[zMEMrzyreservezywrapper]{MEMr\_reserve\_wrapper}# (addr , size) = + #\hyperref[zreversezyendianness]{reverse\_endianness}#(#\hyperref[zMEMrzyreserve]{MEMr\_reserve}#(addr, size)) diff --git a/cheri/sail_latex/sailfnMEMrtagged.tex b/cheri/sail_latex/sailfnMEMrtagged.tex new file mode 100644 index 00000000..8c338860 --- /dev/null +++ b/cheri/sail_latex/sailfnMEMrtagged.tex @@ -0,0 +1,8 @@ +function #\hyperref[zMEMrzytagged]{MEMr\_tagged}# (addr) = +{ + /* assumes addr is cap. aligned */ + assert(#\hyperref[zunsigned]{unsigned}#(addr) % cap_size == 0); + let tag = #\hyperref[zMEMrzytag]{MEMr\_tag}#(addr) in + let data = #\hyperref[zMEMr]{MEMr}#(addr, cap_size) in + (tag, #\hyperref[zreversezyendianness]{reverse\_endianness}#(data)) +} diff --git a/cheri/sail_latex/sailfnMEMrtaggedreserve.tex b/cheri/sail_latex/sailfnMEMrtaggedreserve.tex new file mode 100644 index 00000000..2605592a --- /dev/null +++ b/cheri/sail_latex/sailfnMEMrtaggedreserve.tex @@ -0,0 +1,8 @@ +function #\hyperref[zMEMrzytaggedzyreserve]{MEMr\_tagged\_reserve}# (addr) = +{ + /* assumes addr is cap. aligned */ + assert(#\hyperref[zunsigned]{unsigned}#(addr) % cap_size == 0); + let tag = #\hyperref[zMEMrzytag]{MEMr\_tag}#(addr) in + let data = #\hyperref[zMEMrzyreserve]{MEMr\_reserve}#(addr, cap_size) in + (tag, #\hyperref[zreversezyendianness]{reverse\_endianness}#(data)) +} diff --git a/cheri/sail_latex/sailfnMEMrwrapper.tex b/cheri/sail_latex/sailfnMEMrwrapper.tex new file mode 100644 index 00000000..68576849 --- /dev/null +++ b/cheri/sail_latex/sailfnMEMrwrapper.tex @@ -0,0 +1,13 @@ +function #\hyperref[zMEMrzywrapper]{MEMr\_wrapper}# (addr, size) = + if (addr == 0x000000007f000000) then + { + let rvalid = UART_RVALID in + { + UART_RVALID = [bitzero]; + #\hyperref[zmask]{mask}#(0x00000000 @ UART_RDATA @ rvalid @ 0b0000000 @ 0x0000) + } + } + else if (addr == 0x000000007f000004) then + #\hyperref[zmask]{mask}#(0x000000000004ffff) /* Always plenty of write space available and jtag activity */ + else + #\hyperref[zreversezyendianness]{reverse\_endianness}#(#\hyperref[zMEMr]{MEMr}#(addr, size)) /* MEMr assumes little endian */ diff --git a/cheri/sail_latex/sailfnMEMsync.tex b/cheri/sail_latex/sailfnMEMsync.tex new file mode 100644 index 00000000..5a0bc91c --- /dev/null +++ b/cheri/sail_latex/sailfnMEMsync.tex @@ -0,0 +1 @@ +function #\hyperref[zMEMzysync]{MEM\_sync}# () = #\hyperref[zskipzybarr]{skip\_barr}#() diff --git a/cheri/sail_latex/sailfnMEMval.tex b/cheri/sail_latex/sailfnMEMval.tex new file mode 100644 index 00000000..73795344 --- /dev/null +++ b/cheri/sail_latex/sailfnMEMval.tex @@ -0,0 +1 @@ +function #\hyperref[zMEMval]{MEMval}# (addr, size, data) = #\hyperref[zzyzyMIPSzywrite]{\_\_MIPS\_write}#(addr, size, data) diff --git a/cheri/sail_latex/sailfnMEMvalconditional.tex b/cheri/sail_latex/sailfnMEMvalconditional.tex new file mode 100644 index 00000000..906bbd68 --- /dev/null +++ b/cheri/sail_latex/sailfnMEMvalconditional.tex @@ -0,0 +1 @@ +function #\hyperref[zMEMvalzyconditional]{MEMval\_conditional}# (addr, size, data) = { #\hyperref[zzyzyMIPSzywrite]{\_\_MIPS\_write}#(addr, size, data); true } diff --git a/cheri/sail_latex/sailfnMEMwconditionalwrapper.tex b/cheri/sail_latex/sailfnMEMwconditionalwrapper.tex new file mode 100644 index 00000000..04ce8389 --- /dev/null +++ b/cheri/sail_latex/sailfnMEMwconditionalwrapper.tex @@ -0,0 +1,11 @@ +function #\hyperref[zMEMwzyconditionalzywrapper]{MEMw\_conditional\_wrapper}#(addr, size, data) = + { + /* require that writes don't cross capability #\hyperref[zboundaries]{boundaries}# (should be true due to mips alignment requirements) */ + assert((addr & cap_addr_mask) == ((addr + #\hyperref[ztozybits]{to\_bits}#(64, size - 1)) & cap_addr_mask)); + #\hyperref[zMEMeazyconditional]{MEMea\_conditional}#(addr, size); + success = #\hyperref[zMEMvalzyconditional]{MEMval\_conditional}#(addr,size,#\hyperref[zreversezyendianness]{reverse\_endianness}#(data)); + if success then + /* On cheri non-capability writes must clear the corresponding tag */ + #\hyperref[zMEMwzytag]{MEMw\_tag}#(addr & cap_addr_mask, false); + success; + } diff --git a/cheri/sail_latex/sailfnMEMwtagged.tex b/cheri/sail_latex/sailfnMEMwtagged.tex new file mode 100644 index 00000000..3b7aab53 --- /dev/null +++ b/cheri/sail_latex/sailfnMEMwtagged.tex @@ -0,0 +1,8 @@ +function #\hyperref[zMEMwzytagged]{MEMw\_tagged}#(addr, tag, data) = +{ + /* assumes addr is cap. aligned */ + assert(#\hyperref[zunsigned]{unsigned}#(addr) % cap_size == 0); + #\hyperref[zMEMea]{MEMea}#(addr, cap_size); + #\hyperref[zMEMval]{MEMval}#(addr, cap_size, #\hyperref[zreversezyendianness]{reverse\_endianness}#(data)); + #\hyperref[zMEMwzytag]{MEMw\_tag}#(addr, tag); +} diff --git a/cheri/sail_latex/sailfnMEMwtaggedconditional.tex b/cheri/sail_latex/sailfnMEMwtaggedconditional.tex new file mode 100644 index 00000000..75d9efb3 --- /dev/null +++ b/cheri/sail_latex/sailfnMEMwtaggedconditional.tex @@ -0,0 +1,10 @@ +function #\hyperref[zMEMwzytaggedzyconditional]{MEMw\_tagged\_conditional}#(addr, tag, data) = +{ + /* assumes addr is cap. aligned */ + assert(#\hyperref[zunsigned]{unsigned}#(addr) % cap_size == 0); + #\hyperref[zMEMeazyconditional]{MEMea\_conditional}#(addr, cap_size); + success = #\hyperref[zMEMvalzyconditional]{MEMval\_conditional}#(addr, cap_size, #\hyperref[zreversezyendianness]{reverse\_endianness}#(data)); + if success then + #\hyperref[zMEMwzytag]{MEMw\_tag}#(addr, tag); + success; +} diff --git a/cheri/sail_latex/sailfnMEMwwrapper.tex b/cheri/sail_latex/sailfnMEMwwrapper.tex new file mode 100644 index 00000000..6f83825c --- /dev/null +++ b/cheri/sail_latex/sailfnMEMwwrapper.tex @@ -0,0 +1,16 @@ +function #\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(addr, size, data) = + let ledata = #\hyperref[zreversezyendianness]{reverse\_endianness}#(data) in + if (addr == 0x000000007f000000) then + { + UART_WDATA = ledata[7..0]; + UART_WRITTEN = 0b1; + } + else + { + /* require that writes don't cross capability #\hyperref[zboundaries]{boundaries}# (should be true due to mips alignment requirements) */ + assert((addr & cap_addr_mask) == ((addr + #\hyperref[ztozybits]{to\_bits}#(64, size - 1)) & cap_addr_mask)); + #\hyperref[zMEMea]{MEMea}#(addr, size); + #\hyperref[zMEMval]{MEMval}#(addr, size, ledata); + /* On cheri non-capability writes must clear the corresponding tag*/ + #\hyperref[zMEMwzytag]{MEMw\_tag}#(addr & cap_addr_mask, false); + } diff --git a/cheri/sail_latex/sailfnMIPSread.tex b/cheri/sail_latex/sailfnMIPSread.tex new file mode 100644 index 00000000..ee937856 --- /dev/null +++ b/cheri/sail_latex/sailfnMIPSread.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_latex/sailfnMIPSwrite.tex b/cheri/sail_latex/sailfnMIPSwrite.tex new file mode 100644 index 00000000..5e81f335 --- /dev/null +++ b/cheri/sail_latex/sailfnMIPSwrite.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_latex/sailfnMemAccessTypeofnum.tex b/cheri/sail_latex/sailfnMemAccessTypeofnum.tex new file mode 100644 index 00000000..a16af4e9 --- /dev/null +++ b/cheri/sail_latex/sailfnMemAccessTypeofnum.tex @@ -0,0 +1,5 @@ +function MemAccessType_of_num arg# = match arg# { + 0 => Instruction, + 1 => LoadData, + _ => StoreData +} diff --git a/cheri/sail_latex/sailfnMkCapCauseReg.tex b/cheri/sail_latex/sailfnMkCapCauseReg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnMkCapCauseReg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnMkCauseReg.tex b/cheri/sail_latex/sailfnMkCauseReg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnMkCauseReg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnMkContextReg.tex b/cheri/sail_latex/sailfnMkContextReg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnMkContextReg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnMkStatusReg.tex b/cheri/sail_latex/sailfnMkStatusReg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnMkStatusReg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnMkTLBEntry.tex b/cheri/sail_latex/sailfnMkTLBEntry.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnMkTLBEntry.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnMkTLBEntryHiReg.tex b/cheri/sail_latex/sailfnMkTLBEntryHiReg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnMkTLBEntryHiReg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnMkTLBEntryLoReg.tex b/cheri/sail_latex/sailfnMkTLBEntryLoReg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnMkTLBEntryLoReg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnMkXContextReg.tex b/cheri/sail_latex/sailfnMkXContextReg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnMkXContextReg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnNotWordVal.tex b/cheri/sail_latex/sailfnNotWordVal.tex new file mode 100644 index 00000000..b6222084 --- /dev/null +++ b/cheri/sail_latex/sailfnNotWordVal.tex @@ -0,0 +1,2 @@ +function #\hyperref[zNotWordVal]{NotWordVal}# (word) = + (word[31] ^^ 32) != word[63..32] diff --git a/cheri/sail_latex/sailfnSignalException.tex b/cheri/sail_latex/sailfnSignalException.tex new file mode 100644 index 00000000..a91f582e --- /dev/null +++ b/cheri/sail_latex/sailfnSignalException.tex @@ -0,0 +1,18 @@ +function #\hyperref[zSignalException]{SignalException}# (ex) = + { + if (#\hyperref[znot]{not}# (CP0Status.#\hyperref[zEXL]{EXL}#())) then { + let pc = PC in + let pcc = #\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(PCC) in + let (success, epcc) = #\hyperref[zsetCapOffset]{setCapOffset}#(pcc, pc) in + if (success) then + EPCC = #\hyperref[zcapStructToCapReg]{capStructToCapReg}#(epcc) + else + EPCC = #\hyperref[zcapStructToCapReg]{capStructToCapReg}#(#\hyperref[zintzytozycap]{int\_to\_cap}#(#\hyperref[ztozybits]{to\_bits}#(64, #\hyperref[zgetCapBase]{getCapBase}#(pcc)) + #\hyperref[zunsigned]{unsigned}#(pc))); + }; + + nextPCC = KCC; + delayedPCC = KCC; /* always write delayedPCC together with nextPCC so + that non-capability branches don't override PCC */ + let base = #\hyperref[zgetCapBase]{getCapBase}#(#\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(KCC)) in + #\hyperref[zSignalExceptionMIPS]{SignalExceptionMIPS}#(ex, #\hyperref[ztozybits]{to\_bits}#(64, base)); + } diff --git a/cheri/sail_latex/sailfnSignalExceptionBadAddr.tex b/cheri/sail_latex/sailfnSignalExceptionBadAddr.tex new file mode 100644 index 00000000..d35ed9e8 --- /dev/null +++ b/cheri/sail_latex/sailfnSignalExceptionBadAddr.tex @@ -0,0 +1,5 @@ +function #\hyperref[zSignalExceptionBadAddr]{SignalExceptionBadAddr}#(ex, badAddr) = + { + CP0BadVAddr = badAddr; + #\hyperref[zSignalException]{SignalException}#(ex); + } diff --git a/cheri/sail_latex/sailfnSignalExceptionMIPS.tex b/cheri/sail_latex/sailfnSignalExceptionMIPS.tex new file mode 100644 index 00000000..8d3f762a --- /dev/null +++ b/cheri/sail_latex/sailfnSignalExceptionMIPS.tex @@ -0,0 +1,39 @@ +function #\hyperref[zSignalExceptionMIPS]{SignalExceptionMIPS}# (ex, kccBase) = + { + /* Only update EPC and BD if not already in EXL mode */ + if (~ (CP0Status.#\hyperref[zEXL]{EXL}#())) then + { + if (inBranchDelay[0]) then + { + CP0EPC = PC - 4; + CP0Cause->#\hyperref[zBD]{BD}#() = 0b1; + } + else + { + CP0EPC = PC; + CP0Cause->#\hyperref[zBD]{BD}#() = 0b0; + } + }; + + /* choose an exception vector to branch to. Some are not supported + e.g. Reset */ + vectorOffset = + if (CP0Status.#\hyperref[zEXL]{EXL}#()) then + 0x180 /* Always use common vector if in exception mode already */ + else if ((ex == XTLBRefillL) | (ex == XTLBRefillS)) then + 0x080 + else if (ex == C2Trap) then + 0x280 /* Special vector for CHERI traps */ + else + 0x180; /* Common vector */ + vectorBase : #\hyperref[zbits]{bits}#(64) = if CP0Status.#\hyperref[zBEV]{BEV}#() then + 0xFFFFFFFFBFC00200 + else + 0xFFFFFFFF80000000; + /* On CHERI we have to subtract KCC.base so that we end up at the + right absolute vector address after indirecting via new PCC */ + nextPC = vectorBase + #\hyperref[zsignzyextend]{sign\_extend}#(vectorOffset) - kccBase; + CP0Cause->#\hyperref[zExcCode]{ExcCode}#() = #\hyperref[zExceptionCode]{ExceptionCode}#(ex); + CP0Status->#\hyperref[zEXL]{EXL}#() = 0b1; + throw (#\hyperref[zISAException]{ISAException}#()); + } diff --git a/cheri/sail_latex/sailfnSignalExceptionTLB.tex b/cheri/sail_latex/sailfnSignalExceptionTLB.tex new file mode 100644 index 00000000..a523d7b6 --- /dev/null +++ b/cheri/sail_latex/sailfnSignalExceptionTLB.tex @@ -0,0 +1,9 @@ +function #\hyperref[zSignalExceptionTLB]{SignalExceptionTLB}#(ex, badAddr) = { + CP0BadVAddr = badAddr; + TLBContext->#\hyperref[zBadVPNtwo]{BadVPN2}#() = (badAddr[31..13]); + TLBXContext->#\hyperref[zXBadVPNtwo]{XBadVPN2}#()= (badAddr[39..13]); + TLBXContext->#\hyperref[zXR]{XR}#() = (badAddr[63..62]); + TLBEntryHi->#\hyperref[zR]{R}#() = (badAddr[63..62]); + TLBEntryHi->#\hyperref[zVPNtwo]{VPN2}#() = (badAddr[39..13]); + #\hyperref[zSignalException]{SignalException}#(ex); +} diff --git a/cheri/sail_latex/sailfnTLBTranslate.tex b/cheri/sail_latex/sailfnTLBTranslate.tex new file mode 100644 index 00000000..e40518c3 --- /dev/null +++ b/cheri/sail_latex/sailfnTLBTranslate.tex @@ -0,0 +1,2 @@ +function #\hyperref[zTLBTranslate]{TLBTranslate}# (vAddr, accessType) = + let (addr, c) = #\hyperref[zTLBTranslateC]{TLBTranslateC}#(vAddr, accessType) in addr diff --git a/cheri/sail_latex/sailfnTLBTranslateC.tex b/cheri/sail_latex/sailfnTLBTranslateC.tex new file mode 100644 index 00000000..d71c0841 --- /dev/null +++ b/cheri/sail_latex/sailfnTLBTranslateC.tex @@ -0,0 +1,31 @@ +function #\hyperref[zTLBTranslateC]{TLBTranslateC}# (vAddr, accessType) = + { + let currentAccessLevel = #\hyperref[zgetAccessLevel]{getAccessLevel}#() in + let compat32 = (vAddr[61..31] == 0b1111111111111111111111111111111) in + let (requiredLevel, addr) : (AccessLevel, #\hyperref[zoption]{option}#(#\hyperref[zbits]{bits}#(64))) = match (vAddr[63..62]) { + 0b11 => match (compat32, vAddr[30..29]) { /* xkseg */ + (true, 0b11) => (Kernel, #\hyperref[zNone]{None}#() : #\hyperref[zoption]{option}#(#\hyperref[zbits]{bits}#(64))), /* kseg3 mapped 32-bit compat */ + (true, 0b10) => (Supervisor, #\hyperref[zNone]{None}#() : #\hyperref[zoption]{option}#(#\hyperref[zbits]{bits}#(64))), /* sseg mapped 32-bit compat */ + (true, 0b01) => (Kernel, #\hyperref[zSome]{Some}#(0x00000000 @ 0b000 @ vAddr[28..0])), /* kseg1 unmapped uncached 32-bit compat */ + (true, 0b00) => (Kernel, #\hyperref[zSome]{Some}#(0x00000000 @ 0b000 @ vAddr[28..0])), /* kseg0 unmapped cached 32-bit compat */ + (_, _) => (Kernel, #\hyperref[zNone]{None}#() : #\hyperref[zoption]{option}#(#\hyperref[zbits]{bits}#(64))) /* xkseg mapped */ + }, + 0b10 => (Kernel, #\hyperref[zSome]{Some}#(0b00000 @ vAddr[58..0])), /* xkphys bits 61-59 are cache #\hyperref[zmode]{mode}# (ignored) */ + 0b01 => (Supervisor, #\hyperref[zNone]{None}#() : #\hyperref[zoption]{option}#(#\hyperref[zbits]{bits}#(64))), /* xsseg - supervisor mapped */ + 0b00 => (User, #\hyperref[zNone]{None}#() : #\hyperref[zoption]{option}#(#\hyperref[zbits]{bits}#(64))) /* xuseg - user mapped */ + } in + if #\hyperref[znot]{not}#(#\hyperref[zgrantsAccess]{grantsAccess}#(currentAccessLevel, requiredLevel)) then + #\hyperref[zSignalExceptionBadAddr]{SignalExceptionBadAddr}#(if (accessType == StoreData) then AdES else AdEL, vAddr) + else + let (pa, c) : (#\hyperref[zbits]{bits}#(64), bool) = match addr { + #\hyperref[zSome]{Some}#(a) => (a, false), + #\hyperref[zNone]{None}#() => if ((~(compat32)) & (#\hyperref[zunsigned]{unsigned}#(vAddr[61..0]) > MAX_VA)) then + #\hyperref[zSignalExceptionBadAddr]{SignalExceptionBadAddr}#(if (accessType == StoreData) then AdES else AdEL, vAddr) + else + #\hyperref[zTLBTranslatetwo]{TLBTranslate2}#(vAddr, accessType) + } + in if (#\hyperref[zunsigned]{unsigned}#(pa) > MAX_PA) then + #\hyperref[zSignalExceptionBadAddr]{SignalExceptionBadAddr}#(if (accessType == StoreData) then AdES else AdEL, vAddr) + else + (pa, c) + } diff --git a/cheri/sail_latex/sailfnTLBTranslatetwo.tex b/cheri/sail_latex/sailfnTLBTranslatetwo.tex new file mode 100644 index 00000000..126159f7 --- /dev/null +++ b/cheri/sail_latex/sailfnTLBTranslatetwo.tex @@ -0,0 +1,36 @@ +function #\hyperref[zTLBTranslatetwo]{TLBTranslate2}# (vAddr, accessType) = { + let idx = #\hyperref[ztlbSearch]{tlbSearch}#(vAddr) in + match idx { + #\hyperref[zSome]{Some}#(idx) => + let i as atom(_) = #\hyperref[zunsigned]{unsigned}#(idx) in + let entry = #\hyperref[zregzyderef]{reg\_deref}#(TLBEntries[i]) in + let entryMask = entry.#\hyperref[zpagemask]{pagemask}#() in + let 'evenOddBit : range(12,28) = match (entryMask) { + 0x0000 => 12, + 0x0003 => 14, + 0x000f => 16, + 0x003f => 18, + 0x00ff => 20, + 0x03ff => 22, + 0x0fff => 24, + 0x3fff => 26, + 0xffff => 28, + _ => undefined + } in + let isOdd = (vAddr[evenOddBit]) in + let (caps : #\hyperref[zbits]{bits}#(1), capl : #\hyperref[zbits]{bits}#(1), pfn : #\hyperref[zbits]{bits}#(24), d : #\hyperref[zbits]{bits}#(1), v : #\hyperref[zbits]{bits}#(1)) = + if (isOdd) then + (entry.#\hyperref[zcapsone]{caps1}#(), entry.#\hyperref[zcaplone]{capl1}#(), entry.#\hyperref[zpfnone]{pfn1}#(), entry.#\hyperref[zdone]{d1}#(), entry.#\hyperref[zvone]{v1}#()) + else + (entry.#\hyperref[zcapszero]{caps0}#(), entry.#\hyperref[zcaplzero]{capl0}#(), entry.#\hyperref[zpfnzero]{pfn0}#(), entry.#\hyperref[zdzero]{d0}#(), entry.#\hyperref[zvzero]{v0}#()) in + if (~(v)) then + #\hyperref[zSignalExceptionTLB]{SignalExceptionTLB}#(if (accessType == StoreData) then XTLBInvS else XTLBInvL, vAddr) + else if ((accessType == StoreData) & ~(d)) then + #\hyperref[zSignalExceptionTLB]{SignalExceptionTLB}#(TLBMod, vAddr) + else + let res : #\hyperref[zbits]{bits}#(64) = #\hyperref[zzzerozyextend]{zero\_extend}#(pfn[23..(evenOddBit - 12)] @ vAddr[(evenOddBit - 1) .. 0]) in + (res, #\hyperref[zbitszytozybool]{bits\_to\_bool}#(if (accessType == StoreData) then caps else capl)), + #\hyperref[zNone]{None}#() => #\hyperref[zSignalExceptionTLB]{SignalExceptionTLB}#( + if (accessType == StoreData) then XTLBRefillS else XTLBRefillL, vAddr) + } +} diff --git a/cheri/sail_latex/sailfnTLBWriteEntry.tex b/cheri/sail_latex/sailfnTLBWriteEntry.tex new file mode 100644 index 00000000..ba2762ea --- /dev/null +++ b/cheri/sail_latex/sailfnTLBWriteEntry.tex @@ -0,0 +1,36 @@ +function #\hyperref[zTLBWriteEntry]{TLBWriteEntry}#(idx) = { + pagemask = TLBPageMask; + match pagemask { + 0x0000 => (), + 0x0003 => (), + 0x000f => (), + 0x003f => (), + 0x00ff => (), + 0x03ff => (), + 0x0fff => (), + 0x3fff => (), + 0xffff => (), + _ => (#\hyperref[zSignalException]{SignalException}#(MCheck)) + }; + let i as atom(_) = #\hyperref[zunsigned]{unsigned}#(idx) in + let entry = TLBEntries[i] in { + entry.#\hyperref[zpagemask]{pagemask}#() = pagemask; + entry.#\hyperref[zr]{r}#() = TLBEntryHi.#\hyperref[zR]{R}#(); + entry.#\hyperref[zvpntwo]{vpn2}#() = TLBEntryHi.#\hyperref[zVPNtwo]{VPN2}#(); + entry.#\hyperref[zasid]{asid}#() = TLBEntryHi.#\hyperref[zASID]{ASID}#(); + entry.#\hyperref[zg]{g}#() = ((TLBEntryLo0.#\hyperref[zG]{G}#()) & (TLBEntryLo1.#\hyperref[zG]{G}#())); + entry.#\hyperref[zvalid]{valid}#() = bitone; + entry.#\hyperref[zcapszero]{caps0}#() = TLBEntryLo0.#\hyperref[zCapS]{CapS}#(); + entry.#\hyperref[zcaplzero]{capl0}#() = TLBEntryLo0.#\hyperref[zCapL]{CapL}#(); + entry.#\hyperref[zpfnzero]{pfn0}#() = TLBEntryLo0.#\hyperref[zPFN]{PFN}#(); + entry.#\hyperref[zczero]{c0}#() = TLBEntryLo0.#\hyperref[zC]{C}#(); + entry.#\hyperref[zdzero]{d0}#() = TLBEntryLo0.#\hyperref[zD]{D}#(); + entry.#\hyperref[zvzero]{v0}#() = TLBEntryLo0.#\hyperref[zV]{V}#(); + entry.#\hyperref[zcapsone]{caps1}#() = TLBEntryLo1.#\hyperref[zCapS]{CapS}#(); + entry.#\hyperref[zcaplone]{capl1}#() = TLBEntryLo1.#\hyperref[zCapL]{CapL}#(); + entry.#\hyperref[zpfnone]{pfn1}#() = TLBEntryLo1.#\hyperref[zPFN]{PFN}#(); + entry.#\hyperref[zcone]{c1}#() = TLBEntryLo1.#\hyperref[zC]{C}#(); + entry.#\hyperref[zdone]{d1}#() = TLBEntryLo1.#\hyperref[zD]{D}#(); + entry.#\hyperref[zvone]{v1}#() = TLBEntryLo1.#\hyperref[zV]{V}#(); + } +} diff --git a/cheri/sail_latex/sailfnTranslatePC.tex b/cheri/sail_latex/sailfnTranslatePC.tex new file mode 100644 index 00000000..5e43ffb4 --- /dev/null +++ b/cheri/sail_latex/sailfnTranslatePC.tex @@ -0,0 +1,15 @@ +function #\hyperref[zTranslatePC]{TranslatePC}# (vAddr) = { + #\hyperref[zincrementCPzeroCount]{incrementCP0Count}#(); + let pcc = #\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(PCC); + let base = #\hyperref[zgetCapBase]{getCapBase}#(pcc); + let top = #\hyperref[zgetCapTop]{getCapTop}#(pcc); + let absPC = base + #\hyperref[zunsigned]{unsigned}#(vAddr); + if ((absPC % 4) != 0) then /* bad PC alignment */ + (#\hyperref[zSignalExceptionBadAddr]{SignalExceptionBadAddr}#(AdEL, #\hyperref[ztozybits]{to\_bits}#(64, absPC))) /* XXX absPC may be truncated */ + else if #\hyperref[znot]{not}# (pcc.tag) then + (#\hyperref[zraisezyctwozyexceptionzynoreg]{raise\_c2\_exception\_noreg}#(CapEx_TagViolation)) + else if ((absPC + 4) > top) then + (#\hyperref[zraisezyctwozyexceptionzynoreg]{raise\_c2\_exception\_noreg}#(CapEx_LengthViolation)) + else + #\hyperref[zTLBTranslate]{TLBTranslate}#(#\hyperref[ztozybits]{to\_bits}#(64, absPC), Instruction) /* XXX assert absPC never gets truncated due to above check and top <= 2^64 for valid caps */ +} diff --git a/cheri/sail_latex/sailfnWordTypeUnalignedofnum.tex b/cheri/sail_latex/sailfnWordTypeUnalignedofnum.tex new file mode 100644 index 00000000..7b690587 --- /dev/null +++ b/cheri/sail_latex/sailfnWordTypeUnalignedofnum.tex @@ -0,0 +1,6 @@ +function WordTypeUnaligned_of_num arg# = match arg# { + 0 => WL, + 1 => WR, + 2 => DL, + _ => DR +} diff --git a/cheri/sail_latex/sailfnWordTypeofnum.tex b/cheri/sail_latex/sailfnWordTypeofnum.tex new file mode 100644 index 00000000..f431606a --- /dev/null +++ b/cheri/sail_latex/sailfnWordTypeofnum.tex @@ -0,0 +1,6 @@ +function WordType_of_num arg# = match arg# { + 0 => B, + 1 => H, + 2 => W, + _ => D +} diff --git a/cheri/sail_latex/sailfnaddrWrapper.tex b/cheri/sail_latex/sailfnaddrWrapper.tex new file mode 100644 index 00000000..6f1dd662 --- /dev/null +++ b/cheri/sail_latex/sailfnaddrWrapper.tex @@ -0,0 +1,16 @@ +function #\hyperref[zaddrWrapper]{addrWrapper}#(addr, accessType, width) = + { + ddc = #\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(DDC); + #\hyperref[zcheckDDCPerms]{checkDDCPerms}#(ddc, accessType); + cursor = #\hyperref[zgetCapCursor]{getCapCursor}#(ddc); + vAddr = (cursor + #\hyperref[zunsigned]{unsigned}#(addr)) % #\hyperref[zpowtwo]{pow2}#(64); + size = #\hyperref[zwordWidthBytes]{wordWidthBytes}#(width); + base = #\hyperref[zgetCapBase]{getCapBase}#(ddc); + top = #\hyperref[zgetCapTop]{getCapTop}#(ddc); + if ((vAddr + size) > top) then + (#\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, 0b00000)) + else if (vAddr < base) then + (#\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, 0b00000)) + else + #\hyperref[ztozybits]{to\_bits}#(64, vAddr); + } diff --git a/cheri/sail_latex/sailfnaddrWrapperUnaligned.tex b/cheri/sail_latex/sailfnaddrWrapperUnaligned.tex new file mode 100644 index 00000000..47567f7e --- /dev/null +++ b/cheri/sail_latex/sailfnaddrWrapperUnaligned.tex @@ -0,0 +1,24 @@ +function #\hyperref[zaddrWrapperUnaligned]{addrWrapperUnaligned}#(addr, accessType, width) = + { + ddc = #\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(DDC); + #\hyperref[zcheckDDCPerms]{checkDDCPerms}#(ddc, accessType); + cursor = #\hyperref[zgetCapCursor]{getCapCursor}#(ddc); + vAddr = (cursor + #\hyperref[zunsigned]{unsigned}#(addr)) % #\hyperref[zpowtwo]{pow2}#(64); + woffset = vAddr % 4; + doffset = vAddr % 8; + /* Compute the address and size of the bytes touched -- this depends on alignment. */ + let (waddr, size) : (int, int) = match width { + WL => (vAddr, 4 - woffset), + WR => (vAddr - woffset, woffset + 1), + DL => (vAddr, 8 - doffset), + DR => (vAddr - doffset, doffset + 1) + }; + base = #\hyperref[zgetCapBase]{getCapBase}#(ddc); + top = #\hyperref[zgetCapTop]{getCapTop}#(ddc); + if ((waddr + size) > top) then + (#\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, 0b00000)) + else if (waddr < base) then + (#\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, 0b00000)) + else + #\hyperref[ztozybits]{to\_bits}#(64, vAddr); + } diff --git a/cheri/sail_latex/sailfnbitstobool.tex b/cheri/sail_latex/sailfnbitstobool.tex new file mode 100644 index 00000000..1cb33076 --- /dev/null +++ b/cheri/sail_latex/sailfnbitstobool.tex @@ -0,0 +1 @@ +function bits_to_bool x = #\hyperref[zbitzytozybool]{bit\_to\_bool}#(x[0]) diff --git a/cheri/sail_latex/sailfnbittobool.tex b/cheri/sail_latex/sailfnbittobool.tex new file mode 100644 index 00000000..a5eea578 --- /dev/null +++ b/cheri/sail_latex/sailfnbittobool.tex @@ -0,0 +1,4 @@ +function bit_to_bool b = match b { + bitone => true, + _ => false +} diff --git a/cheri/sail_latex/sailfnbooltobits.tex b/cheri/sail_latex/sailfnbooltobits.tex new file mode 100644 index 00000000..99075369 --- /dev/null +++ b/cheri/sail_latex/sailfnbooltobits.tex @@ -0,0 +1 @@ +function bool_to_bits x = if x then 0b1 else 0b0 diff --git a/cheri/sail_latex/sailfncapRegToCapStruct.tex b/cheri/sail_latex/sailfncapRegToCapStruct.tex new file mode 100644 index 00000000..5209e9f9 --- /dev/null +++ b/cheri/sail_latex/sailfncapRegToCapStruct.tex @@ -0,0 +1,23 @@ +function #\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(capReg) : CapReg -> CapStruct = + struct { + tag = capReg[256], + padding = capReg[255..248], + otype = capReg[247..224], + uperms = capReg[223..208], + perm_reserved11_14 = capReg[207..204], + access_system_regs = capReg[203], + permit_unseal = capReg[202], + permit_ccall = capReg[201], + permit_seal = capReg[200], + permit_store_local_cap = capReg[199], + permit_store_cap = capReg[198], + permit_load_cap = capReg[197], + permit_store = capReg[196], + permit_load = capReg[195], + permit_execute = capReg[194], + global = capReg[193], + sealed = capReg[192], + address = capReg[191..128], + base = capReg[127..64], + length = capReg[63..0] + } diff --git a/cheri/sail_latex/sailfncapStructToCapReg.tex b/cheri/sail_latex/sailfncapStructToCapReg.tex new file mode 100644 index 00000000..d0828429 --- /dev/null +++ b/cheri/sail_latex/sailfncapStructToCapReg.tex @@ -0,0 +1 @@ +function #\hyperref[zcapStructToCapReg]{capStructToCapReg}#(cap) : CapStruct -> CapReg = cap.tag @ #\hyperref[zcapStructToMemBitstwofivesix]{capStructToMemBits256}#(cap) diff --git a/cheri/sail_latex/sailfncapStructToMemBits.tex b/cheri/sail_latex/sailfncapStructToMemBits.tex new file mode 100644 index 00000000..b85816b3 --- /dev/null +++ b/cheri/sail_latex/sailfncapStructToMemBits.tex @@ -0,0 +1,2 @@ +function #\hyperref[zcapStructToMemBits]{capStructToMemBits}#(cap) : CapStruct -> #\hyperref[zbits]{bits}#(256)= + #\hyperref[zcapStructToMemBitstwofivesix]{capStructToMemBits256}#(cap) ^ null_cap_bits diff --git a/cheri/sail_latex/sailfncapStructToMemBitstwofivesix.tex b/cheri/sail_latex/sailfncapStructToMemBitstwofivesix.tex new file mode 100644 index 00000000..0c775ae4 --- /dev/null +++ b/cheri/sail_latex/sailfncapStructToMemBitstwofivesix.tex @@ -0,0 +1,10 @@ +function #\hyperref[zcapStructToMemBitstwofivesix]{capStructToMemBits256}#(cap) : CapStruct -> #\hyperref[zbits]{bits}#(256) = + ( + cap.padding + @ cap.otype + @ #\hyperref[zgetCapPerms]{getCapPerms}#(cap) + @ cap.sealed + @ cap.address + @ cap.base + @ cap.length + ) diff --git a/cheri/sail_latex/sailfncapToString.tex b/cheri/sail_latex/sailfncapToString.tex new file mode 100644 index 00000000..2ad25883 --- /dev/null +++ b/cheri/sail_latex/sailfncapToString.tex @@ -0,0 +1,16 @@ +function capToString cap = { + #\hyperref[zskipzyescape]{skip\_escape}#(); /* because cheri128 getCapX functions contain asserts but cheri256 ones do not */ + #\hyperref[zconcatzystr]{concat\_str}#(" t:", + #\hyperref[zconcatzystr]{concat\_str}#(if cap.tag then "1" else "0", + #\hyperref[zconcatzystr]{concat\_str}#(" s:", + #\hyperref[zconcatzystr]{concat\_str}#(if cap.sealed then "1" else "0", + #\hyperref[zconcatzystr]{concat\_str}#(" perms:", + #\hyperref[zconcatzystr]{concat\_str}#(#\hyperref[zBitStr]{BitStr}#(0b0 @ #\hyperref[zgetCapPerms]{getCapPerms}#(cap)), + #\hyperref[zconcatzystr]{concat\_str}#(" type:", + #\hyperref[zconcatzystr]{concat\_str}#(#\hyperref[zBitStr]{BitStr}#(cap.otype), + #\hyperref[zconcatzystr]{concat\_str}#(" offset:", + #\hyperref[zconcatzystr]{concat\_str}#(#\hyperref[zBitStr]{BitStr}#(#\hyperref[ztozybits]{to\_bits}#(64, #\hyperref[zgetCapOffset]{getCapOffset}#(cap))), + #\hyperref[zconcatzystr]{concat\_str}#(" base:", + #\hyperref[zconcatzystr]{concat\_str}#(#\hyperref[zBitStr]{BitStr}#(#\hyperref[ztozybits]{to\_bits}#(64, #\hyperref[zgetCapBase]{getCapBase}#(cap))), + #\hyperref[zconcatzystr]{concat\_str}#(" length:", #\hyperref[zBitStr]{BitStr}#(#\hyperref[ztozybits]{to\_bits}#(64, #\hyperref[zmin]{min}#(#\hyperref[zgetCapLength]{getCapLength}#(cap), #\hyperref[zMAX]{MAX}#(64))))))))))))))))) + } diff --git a/cheri/sail_latex/sailfncastunitvec.tex b/cheri/sail_latex/sailfncastunitvec.tex new file mode 100644 index 00000000..1bb7a9e0 --- /dev/null +++ b/cheri/sail_latex/sailfncastunitvec.tex @@ -0,0 +1,4 @@ +function cast_unit_vec b = match b { + bitzero => 0b0, + _ => 0b1 +} diff --git a/cheri/sail_latex/sailfncheckCPtwousable.tex b/cheri/sail_latex/sailfncheckCPtwousable.tex new file mode 100644 index 00000000..8e7c29d7 --- /dev/null +++ b/cheri/sail_latex/sailfncheckCPtwousable.tex @@ -0,0 +1,5 @@ +function #\hyperref[zcheckCPtwousable]{checkCP2usable}# () = + if #\hyperref[znot]{not}# (CP0Status.#\hyperref[zCU]{CU}#()[2]) then { + CP0Cause->#\hyperref[zCE]{CE}#() = 0b10; + #\hyperref[zSignalException]{SignalException}#(CpU); + } diff --git a/cheri/sail_latex/sailfncheckCPzeroAccess.tex b/cheri/sail_latex/sailfncheckCPzeroAccess.tex new file mode 100644 index 00000000..d63f00cf --- /dev/null +++ b/cheri/sail_latex/sailfncheckCPzeroAccess.tex @@ -0,0 +1,9 @@ +function #\hyperref[zcheckCPzeroAccess]{checkCP0Access}# () = + { + let accessLevel = #\hyperref[zgetAccessLevel]{getAccessLevel}#() in + if ((accessLevel != Kernel) & (~(CP0Status.#\hyperref[zCU]{CU}#()[0]))) then + { + CP0Cause->#\hyperref[zCE]{CE}#() = 0b00; + #\hyperref[zSignalException]{SignalException}#(CpU); + } + } diff --git a/cheri/sail_latex/sailfncheckDDCPerms.tex b/cheri/sail_latex/sailfncheckDDCPerms.tex new file mode 100644 index 00000000..1675c666 --- /dev/null +++ b/cheri/sail_latex/sailfncheckDDCPerms.tex @@ -0,0 +1,12 @@ +function #\hyperref[zcheckDDCPerms]{checkDDCPerms}#(ddc : CapStruct, accessType: MemAccessType) = + { + if (#\hyperref[znot]{not}# (ddc.tag)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, 0b00000) + else if (ddc.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, 0b00000); + match accessType { + Instruction => assert(false), /* Only data accesses use DDC */ + LoadData => if (~(ddc.permit_load)) then (#\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_PermitLoadViolation, 0b00000)), + StoreData => if (~(ddc.permit_store)) then (#\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_PermitStoreViolation, 0b00000)) + }; + } diff --git a/cheri/sail_latex/sailfncompare.tex b/cheri/sail_latex/sailfncompare.tex new file mode 100644 index 00000000..f4378ba7 --- /dev/null +++ b/cheri/sail_latex/sailfncompare.tex @@ -0,0 +1,11 @@ +function #\hyperref[zcompare]{compare}# (cmp, valA, valB) = + match cmp { + EQ => valA == valB, + NE => valA != valB, + GE => valA >=_s valB, + GEU => valA >=_u valB, + GT => valB <_s valA, + LE => valB >=_s valA, + LT => valA <_s valB, + LTU => valA <_u valB + } diff --git a/cheri/sail_latex/sailfncptwonextpc.tex b/cheri/sail_latex/sailfncptwonextpc.tex new file mode 100644 index 00000000..c2a9c944 --- /dev/null +++ b/cheri/sail_latex/sailfncptwonextpc.tex @@ -0,0 +1,8 @@ +function #\hyperref[zcptwozynextzypc]{cp2\_next\_pc}# () = { + PCC = nextPCC; + if inBranchDelay then { + nextPCC = delayedPCC; + } else { + inCCallDelay = 0b0; + }; +} diff --git a/cheri/sail_latex/sailfndecodeSome.tex b/cheri/sail_latex/sailfndecodeSome.tex new file mode 100644 index 00000000..00a53489 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSome.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010000 @ 0b10000000000000000000 @ 0b000010) = #\hyperref[zSome]{Some}#(#\hyperref[zTLBWI]{TLBWI}#() : ast) diff --git a/cheri/sail_latex/sailfndecodeSomeADD.tex b/cheri/sail_latex/sailfndecodeSomeADD.tex new file mode 100644 index 00000000..4b01b543 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeADD.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ rd : regno @ 0b00000 @ 0b100000) = + #\hyperref[zSome]{Some}#(#\hyperref[zADD]{ADD}#(rs, rt, rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeADDI.tex b/cheri/sail_latex/sailfndecodeSomeADDI.tex new file mode 100644 index 00000000..7706322f --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeADDI.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b001000 @ rs : regno @ rt : regno @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zADDI]{ADDI}#(rs, rt, imm)) diff --git a/cheri/sail_latex/sailfndecodeSomeADDIU.tex b/cheri/sail_latex/sailfndecodeSomeADDIU.tex new file mode 100644 index 00000000..27972a96 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeADDIU.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b001001 @ rs : regno @ rt : regno @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zADDIU]{ADDIU}#(rs, rt, imm)) diff --git a/cheri/sail_latex/sailfndecodeSomeADDU.tex b/cheri/sail_latex/sailfndecodeSomeADDU.tex new file mode 100644 index 00000000..259cdfc9 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeADDU.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ rd : regno @ 0b00000 @ 0b100001) = + #\hyperref[zSome]{Some}#(#\hyperref[zADDU]{ADDU}#(rs, rt, rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeAND.tex b/cheri/sail_latex/sailfndecodeSomeAND.tex new file mode 100644 index 00000000..ecc6f7cb --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeAND.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ rd : regno @ 0b00000 @ 0b100100) = + #\hyperref[zSome]{Some}#(#\hyperref[zAND]{AND}#(rs, rt, rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeANDI.tex b/cheri/sail_latex/sailfndecodeSomeANDI.tex new file mode 100644 index 00000000..fea6a112 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeANDI.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b001100 @ rs : regno @ rt : regno @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zANDI]{ANDI}#(rs, rt, imm)) diff --git a/cheri/sail_latex/sailfndecodeSomeBCMPZ.tex b/cheri/sail_latex/sailfndecodeSomeBCMPZ.tex new file mode 100644 index 00000000..3221c8a3 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeBCMPZ.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000001 @ rs : regno @ 0b00000 @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zBCMPZ]{BCMPZ}#(rs, imm, LT, false, false)) /* BLTZ */ diff --git a/cheri/sail_latex/sailfndecodeSomeBEQ.tex b/cheri/sail_latex/sailfndecodeSomeBEQ.tex new file mode 100644 index 00000000..e520223e --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeBEQ.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000100 @ rs : regno @ rt : regno @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zBEQ]{BEQ}#(rs, rt, imm, false, false)) /* BEQ */ diff --git a/cheri/sail_latex/sailfndecodeSomeBREAK.tex b/cheri/sail_latex/sailfndecodeSomeBREAK.tex new file mode 100644 index 00000000..e4978b0a --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeBREAK.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ code : #\hyperref[zbits]{bits}#(20) @ 0b001101) = + #\hyperref[zSome]{Some}#(#\hyperref[zBREAK]{BREAK}#()) /* code is ignored */ diff --git a/cheri/sail_latex/sailfndecodeSomeCACHE.tex b/cheri/sail_latex/sailfndecodeSomeCACHE.tex new file mode 100644 index 00000000..c9f100fe --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCACHE.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b101111 @ base : regno @ op : regno @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zCACHE]{CACHE}#(base, op, imm)) diff --git a/cheri/sail_latex/sailfndecodeSomeCAndPerm.tex b/cheri/sail_latex/sailfndecodeSomeCAndPerm.tex new file mode 100644 index 00000000..04f8dbb2 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCAndPerm.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00100 @ cd : regno @ cb : regno @ rt : regno @ 0b000 @ 0b000) = #\hyperref[zSome]{Some}#(#\hyperref[zCAndPerm]{CAndPerm}#(cd, cb, rt)) diff --git a/cheri/sail_latex/sailfndecodeSomeCBX.tex b/cheri/sail_latex/sailfndecodeSomeCBX.tex new file mode 100644 index 00000000..f009388f --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCBX.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b01001 @ cd : regno @ imm : #\hyperref[zbits]{bits}#(16)) = #\hyperref[zSome]{Some}#(#\hyperref[zCBX]{CBX}#(cd, imm, true)) /* CBTU */ diff --git a/cheri/sail_latex/sailfndecodeSomeCBZ.tex b/cheri/sail_latex/sailfndecodeSomeCBZ.tex new file mode 100644 index 00000000..db46dbd2 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCBZ.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b10001 @ cd : regno @ imm : #\hyperref[zbits]{bits}#(16)) = #\hyperref[zSome]{Some}#(#\hyperref[zCBZ]{CBZ}#(cd, imm, false)) /* CBEZ */ diff --git a/cheri/sail_latex/sailfndecodeSomeCBuildCap.tex b/cheri/sail_latex/sailfndecodeSomeCBuildCap.tex new file mode 100644 index 00000000..c070e1be --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCBuildCap.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ cd : regno @ cb : regno @ ct : regno @ 0b011101) = #\hyperref[zSome]{Some}#(#\hyperref[zCBuildCap]{CBuildCap}#(cd, cb, ct)) diff --git a/cheri/sail_latex/sailfndecodeSomeCCSeal.tex b/cheri/sail_latex/sailfndecodeSomeCCSeal.tex new file mode 100644 index 00000000..4703af82 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCCSeal.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ cd : regno @ cs : regno @ ct : regno @ 0b011111) = #\hyperref[zSome]{Some}#(#\hyperref[zCCSeal]{CCSeal}#(cd, cs, ct)) diff --git a/cheri/sail_latex/sailfndecodeSomeCCall.tex b/cheri/sail_latex/sailfndecodeSomeCCall.tex new file mode 100644 index 00000000..32395a34 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCCall.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00101 @ cs : regno @ cb : regno @ selector : #\hyperref[zbits]{bits}#(11)) = #\hyperref[zSome]{Some}#(#\hyperref[zCCall]{CCall}#(cs, cb, selector)) diff --git a/cheri/sail_latex/sailfndecodeSomeCCheckPerm.tex b/cheri/sail_latex/sailfndecodeSomeCCheckPerm.tex new file mode 100644 index 00000000..1d293316 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCCheckPerm.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b01011 @ cs : regno @ 0b00000 @ rt : regno @ 0b000@ 0b000) = #\hyperref[zSome]{Some}#(#\hyperref[zCCheckPerm]{CCheckPerm}#(cs, rt)) diff --git a/cheri/sail_latex/sailfndecodeSomeCCheckType.tex b/cheri/sail_latex/sailfndecodeSomeCCheckType.tex new file mode 100644 index 00000000..85b4f5ee --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCCheckType.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b01011 @ cs : regno @ cb : regno @ 0b00000 @ 0b000@ 0b001) = #\hyperref[zSome]{Some}#(#\hyperref[zCCheckType]{CCheckType}#(cs, cb)) diff --git a/cheri/sail_latex/sailfndecodeSomeCClearTag.tex b/cheri/sail_latex/sailfndecodeSomeCClearTag.tex new file mode 100644 index 00000000..aad3e0e4 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCClearTag.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00100 @ cd : regno @ cb : regno @ 0b00000 @ 0b000@ 0b101) = #\hyperref[zSome]{Some}#(#\hyperref[zCClearTag]{CClearTag}#(cd, cb)) diff --git a/cheri/sail_latex/sailfndecodeSomeCCopyType.tex b/cheri/sail_latex/sailfndecodeSomeCCopyType.tex new file mode 100644 index 00000000..6c7a5fb8 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCCopyType.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ cd : regno @ cb : regno @ ct : regno @ 0b011110) = #\hyperref[zSome]{Some}#(#\hyperref[zCCopyType]{CCopyType}#(cd, cb, ct)) diff --git a/cheri/sail_latex/sailfndecodeSomeCFromPtr.tex b/cheri/sail_latex/sailfndecodeSomeCFromPtr.tex new file mode 100644 index 00000000..9c992ac0 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCFromPtr.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00100 @ cd : regno @ cb : regno @ rt : regno @ 0b000@ 0b111) = #\hyperref[zSome]{Some}#(#\hyperref[zCFromPtr]{CFromPtr}#(cd, cb, rt)) diff --git a/cheri/sail_latex/sailfndecodeSomeCGetAddr.tex b/cheri/sail_latex/sailfndecodeSomeCGetAddr.tex new file mode 100644 index 00000000..89672867 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCGetAddr.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ cb : regno @ sel : regno @ 0b01111 @ 0b111111) = #\hyperref[zSome]{Some}#(#\hyperref[zCGetAddr]{CGetAddr}#(cb, sel)) diff --git a/cheri/sail_latex/sailfndecodeSomeCGetBase.tex b/cheri/sail_latex/sailfndecodeSomeCGetBase.tex new file mode 100644 index 00000000..3ff0c663 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCGetBase.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rd : regno @ cb : regno @ 0b00000000 @ 0b010) = #\hyperref[zSome]{Some}#(#\hyperref[zCGetBase]{CGetBase}#(rd, cb)) diff --git a/cheri/sail_latex/sailfndecodeSomeCGetCauserd.tex b/cheri/sail_latex/sailfndecodeSomeCGetCauserd.tex new file mode 100644 index 00000000..4ffeb4ab --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCGetCauserd.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rd : regno @ 0b00000 @ 0b00000000 @ 0b100) = #\hyperref[zSome]{Some}#(#\hyperref[zCGetCause]{CGetCause}#(rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeCGetLen.tex b/cheri/sail_latex/sailfndecodeSomeCGetLen.tex new file mode 100644 index 00000000..2a39bae6 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCGetLen.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rd : regno @ cb : regno @ 0b00000000 @ 0b011) = #\hyperref[zSome]{Some}#(#\hyperref[zCGetLen]{CGetLen}#(rd, cb)) diff --git a/cheri/sail_latex/sailfndecodeSomeCGetOffset.tex b/cheri/sail_latex/sailfndecodeSomeCGetOffset.tex new file mode 100644 index 00000000..7ac298c2 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCGetOffset.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b01101 @ rd : regno @ cb : regno @ 0b00000000 @ 0b010) = #\hyperref[zSome]{Some}#(#\hyperref[zCGetOffset]{CGetOffset}#(rd, cb)) /* NB encoding does not follow pattern */ diff --git a/cheri/sail_latex/sailfndecodeSomeCGetPCCSetOffset.tex b/cheri/sail_latex/sailfndecodeSomeCGetPCCSetOffset.tex new file mode 100644 index 00000000..dd92b2fd --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCGetPCCSetOffset.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ cd : regno @ rs : regno @ 0b00111 @ 0b111111) = #\hyperref[zSome]{Some}#(#\hyperref[zCGetPCCSetOffset]{CGetPCCSetOffset}#(cd, rs)) diff --git a/cheri/sail_latex/sailfndecodeSomeCGetPCCcd.tex b/cheri/sail_latex/sailfndecodeSomeCGetPCCcd.tex new file mode 100644 index 00000000..5357a1e4 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCGetPCCcd.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ cd : regno @ 0b00000 @ 0b11111 @ 0b111111) = #\hyperref[zSome]{Some}#(#\hyperref[zCGetPCC]{CGetPCC}#(cd)) diff --git a/cheri/sail_latex/sailfndecodeSomeCGetPerm.tex b/cheri/sail_latex/sailfndecodeSomeCGetPerm.tex new file mode 100644 index 00000000..0a14b6a1 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCGetPerm.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rd : regno @ cb : regno @ 0b00000000 @ 0b000) = #\hyperref[zSome]{Some}#(#\hyperref[zCGetPerm]{CGetPerm}#(rd, cb)) diff --git a/cheri/sail_latex/sailfndecodeSomeCGetSealed.tex b/cheri/sail_latex/sailfndecodeSomeCGetSealed.tex new file mode 100644 index 00000000..c7511dfa --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCGetSealed.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rd : regno @ cb : regno @ 0b00000000 @ 0b110) = #\hyperref[zSome]{Some}#(#\hyperref[zCGetSealed]{CGetSealed}#(rd, cb)) diff --git a/cheri/sail_latex/sailfndecodeSomeCGetTag.tex b/cheri/sail_latex/sailfndecodeSomeCGetTag.tex new file mode 100644 index 00000000..794216a2 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCGetTag.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rd : regno @ cb : regno @ 0b00000000 @ 0b101) = #\hyperref[zSome]{Some}#(#\hyperref[zCGetTag]{CGetTag}#(rd, cb)) diff --git a/cheri/sail_latex/sailfndecodeSomeCGetType.tex b/cheri/sail_latex/sailfndecodeSomeCGetType.tex new file mode 100644 index 00000000..1568e5a4 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCGetType.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rd : regno @ cb : regno @ 0b00000000 @ 0b001) = #\hyperref[zSome]{Some}#(#\hyperref[zCGetType]{CGetType}#(rd, cb)) diff --git a/cheri/sail_latex/sailfndecodeSomeCIncOffset.tex b/cheri/sail_latex/sailfndecodeSomeCIncOffset.tex new file mode 100644 index 00000000..893e774b --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCIncOffset.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b01101 @ cd : regno @ cb : regno @ rt : regno @ 0b000 @ 0b000) = #\hyperref[zSome]{Some}#(#\hyperref[zCIncOffset]{CIncOffset}#(cd, cb, rt)) diff --git a/cheri/sail_latex/sailfndecodeSomeCIncOffsetImmediate.tex b/cheri/sail_latex/sailfndecodeSomeCIncOffsetImmediate.tex new file mode 100644 index 00000000..a0287341 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCIncOffsetImmediate.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b10011 @ cd : regno @ cb : regno @ imm : #\hyperref[zbits]{bits}#(11)) = #\hyperref[zSome]{Some}#(#\hyperref[zCIncOffsetImmediate]{CIncOffsetImmediate}#(cd, cb, imm)) diff --git a/cheri/sail_latex/sailfndecodeSomeCJALR.tex b/cheri/sail_latex/sailfndecodeSomeCJALR.tex new file mode 100644 index 00000000..6d67580e --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCJALR.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00111 @ cd : regno @ cb : regno @ 0b00000 @ 0b000000) = #\hyperref[zSome]{Some}#(#\hyperref[zCJALR]{CJALR}#(cd, cb, true)) /* CJALR */ diff --git a/cheri/sail_latex/sailfndecodeSomeCLC.tex b/cheri/sail_latex/sailfndecodeSomeCLC.tex new file mode 100644 index 00000000..ee20ffd2 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCLC.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b110110 @ cd : regno @ cb : regno @ rt : regno @ offset : #\hyperref[zbits]{bits}#(11)) = #\hyperref[zSome]{Some}#(#\hyperref[zCLC]{CLC}#(cd, cb, rt, #\hyperref[zsignzyextend]{sign\_extend}#(offset), false)) /* CLC */ diff --git a/cheri/sail_latex/sailfndecodeSomeCLoad.tex b/cheri/sail_latex/sailfndecodeSomeCLoad.tex new file mode 100644 index 00000000..4f0e7692 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCLoad.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b110010 @ rd : regno @ cb : regno@ rt : regno @ offset : #\hyperref[zbits]{bits}#(8) @ 0b0 @ 0b00) = #\hyperref[zSome]{Some}#(#\hyperref[zCLoad]{CLoad}#(rd, cb, rt, offset, false, B, false)) /* CLBU */ diff --git a/cheri/sail_latex/sailfndecodeSomeCMOVX.tex b/cheri/sail_latex/sailfndecodeSomeCMOVX.tex new file mode 100644 index 00000000..57f4de7c --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCMOVX.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ cd : regno @ cs : regno @ 0b01010 @ 0b111111) = #\hyperref[zSome]{Some}#(#\hyperref[zCMOVX]{CMOVX}#(cd, cs, 0b00000, false)) /* CMOVE */ diff --git a/cheri/sail_latex/sailfndecodeSomeCPtrCmp.tex b/cheri/sail_latex/sailfndecodeSomeCPtrCmp.tex new file mode 100644 index 00000000..31f83677 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCPtrCmp.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b01110 @ rd : regno @ cb : regno @ ct : regno @ 0b000 @ 0b000) = #\hyperref[zSome]{Some}#(#\hyperref[zCPtrCmp]{CPtrCmp}#(rd, cb, ct, CEQ)) diff --git a/cheri/sail_latex/sailfndecodeSomeCReadHwr.tex b/cheri/sail_latex/sailfndecodeSomeCReadHwr.tex new file mode 100644 index 00000000..0bacf907 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCReadHwr.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ cd : regno @ sel : regno @ 0b01101 @ 0b111111) = #\hyperref[zSome]{Some}#(#\hyperref[zCReadHwr]{CReadHwr}#(cd, sel)) diff --git a/cheri/sail_latex/sailfndecodeSomeCReturn.tex b/cheri/sail_latex/sailfndecodeSomeCReturn.tex new file mode 100644 index 00000000..9e773418 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCReturn.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00110 @ 0b000000000000000000000) = #\hyperref[zSome]{Some}#(#\hyperref[zCReturn]{CReturn}#()) diff --git a/cheri/sail_latex/sailfndecodeSomeCSC.tex b/cheri/sail_latex/sailfndecodeSomeCSC.tex new file mode 100644 index 00000000..1271b654 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCSC.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b111110 @ cs : regno @ cb : regno@ rt : regno @ offset : #\hyperref[zbits]{bits}#(11)) = #\hyperref[zSome]{Some}#(#\hyperref[zCSC]{CSC}#(cs, cb, rt, 0b00000, offset, false)) diff --git a/cheri/sail_latex/sailfndecodeSomeCSeal.tex b/cheri/sail_latex/sailfndecodeSomeCSeal.tex new file mode 100644 index 00000000..91cad204 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCSeal.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00010 @ cd : regno @ cs : regno @ ct : regno @ 0b000@ 0b000) = #\hyperref[zSome]{Some}#(#\hyperref[zCSeal]{CSeal}#(cd, cs, ct)) diff --git a/cheri/sail_latex/sailfndecodeSomeCSetBounds.tex b/cheri/sail_latex/sailfndecodeSomeCSetBounds.tex new file mode 100644 index 00000000..0675556f --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCSetBounds.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00001 @ cd : regno @ cb : regno @ rt : regno @ 0b000000) = #\hyperref[zSome]{Some}#(#\hyperref[zCSetBounds]{CSetBounds}#(cd, cb, rt)) diff --git a/cheri/sail_latex/sailfndecodeSomeCSetBoundsExact.tex b/cheri/sail_latex/sailfndecodeSomeCSetBoundsExact.tex new file mode 100644 index 00000000..39caef88 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCSetBoundsExact.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ cd : regno @ cs : regno @ rt : regno @ 0b001001) = #\hyperref[zSome]{Some}#(#\hyperref[zCSetBoundsExact]{CSetBoundsExact}#(cd, cs, rt)) diff --git a/cheri/sail_latex/sailfndecodeSomeCSetBoundsImmediate.tex b/cheri/sail_latex/sailfndecodeSomeCSetBoundsImmediate.tex new file mode 100644 index 00000000..ce53cb78 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCSetBoundsImmediate.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b10100 @ cd : regno @ cb : regno @ imm : #\hyperref[zbits]{bits}#(11)) = #\hyperref[zSome]{Some}#(#\hyperref[zCSetBoundsImmediate]{CSetBoundsImmediate}#(cd, cb, imm)) diff --git a/cheri/sail_latex/sailfndecodeSomeCSetCausers.tex b/cheri/sail_latex/sailfndecodeSomeCSetCausers.tex new file mode 100644 index 00000000..a775811b --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCSetCausers.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rs : regno @ 0b00010 @ 0b11111 @ 0b111111) = #\hyperref[zSome]{Some}#(#\hyperref[zCSetCause]{CSetCause}#(rs)) diff --git a/cheri/sail_latex/sailfndecodeSomeCSetCausert.tex b/cheri/sail_latex/sailfndecodeSomeCSetCausert.tex new file mode 100644 index 00000000..dc995af3 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCSetCausert.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00100 @ 0b00000 @ 0b00000 @ rt : regno @ 0b000 @ 0b100) = #\hyperref[zSome]{Some}#(#\hyperref[zCSetCause]{CSetCause}#(rt)) diff --git a/cheri/sail_latex/sailfndecodeSomeCSetOffset.tex b/cheri/sail_latex/sailfndecodeSomeCSetOffset.tex new file mode 100644 index 00000000..f2b367c4 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCSetOffset.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b01101 @ cd : regno @ cb : regno @ rt : regno @ 0b000 @ 0b001) = #\hyperref[zSome]{Some}#(#\hyperref[zCSetOffset]{CSetOffset}#(cd, cb, rt)) diff --git a/cheri/sail_latex/sailfndecodeSomeCStore.tex b/cheri/sail_latex/sailfndecodeSomeCStore.tex new file mode 100644 index 00000000..e93884fc --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCStore.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b111010 @ rs : regno @ cb : regno@ rt : regno @ offset : #\hyperref[zbits]{bits}#(8) @ 0b0 @ 0b00) = #\hyperref[zSome]{Some}#(#\hyperref[zCStore]{CStore}#(rs, cb, rt, 0b00000, offset, B, false)) /* CSB */ diff --git a/cheri/sail_latex/sailfndecodeSomeCSub.tex b/cheri/sail_latex/sailfndecodeSomeCSub.tex new file mode 100644 index 00000000..bc2347e5 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCSub.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rt : regno @ cb : regno @ cs : regno @ 0b001010) = #\hyperref[zSome]{Some}#(#\hyperref[zCSub]{CSub}#(rt, cb, cs)) diff --git a/cheri/sail_latex/sailfndecodeSomeCTestSubset.tex b/cheri/sail_latex/sailfndecodeSomeCTestSubset.tex new file mode 100644 index 00000000..1f950ad8 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCTestSubset.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rd : regno @ cb : regno @ ct : regno @ 0b100000) = #\hyperref[zSome]{Some}#(#\hyperref[zCTestSubset]{CTestSubset}#(rd, cb, ct)) diff --git a/cheri/sail_latex/sailfndecodeSomeCToPtr.tex b/cheri/sail_latex/sailfndecodeSomeCToPtr.tex new file mode 100644 index 00000000..aac23e6c --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCToPtr.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b01100 @ rd : regno @ cb : regno @ ct : regno @ 0b000 @ 0b000) = #\hyperref[zSome]{Some}#(#\hyperref[zCToPtr]{CToPtr}#(rd, cb, ct)) diff --git a/cheri/sail_latex/sailfndecodeSomeCUnseal.tex b/cheri/sail_latex/sailfndecodeSomeCUnseal.tex new file mode 100644 index 00000000..50de73da --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCUnseal.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00011 @ cd : regno @ cs : regno @ ct : regno @ 0b000@ 0b000) = #\hyperref[zSome]{Some}#(#\hyperref[zCUnseal]{CUnseal}#(cd, cs, ct)) diff --git a/cheri/sail_latex/sailfndecodeSomeCWriteHwr.tex b/cheri/sail_latex/sailfndecodeSomeCWriteHwr.tex new file mode 100644 index 00000000..663fa792 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCWriteHwr.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ cb : regno @ sel : regno @ 0b01110 @ 0b111111) = #\hyperref[zSome]{Some}#(#\hyperref[zCWriteHwr]{CWriteHwr}#(cb, sel)) diff --git a/cheri/sail_latex/sailfndecodeSomeClearRegs.tex b/cheri/sail_latex/sailfndecodeSomeClearRegs.tex new file mode 100644 index 00000000..37c28d29 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeClearRegs.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b01111 @ 0b00000 @ imm : #\hyperref[zbits]{bits}#(16)) = #\hyperref[zSome]{Some}#(#\hyperref[zClearRegs]{ClearRegs}#(GPLo, imm)) diff --git a/cheri/sail_latex/sailfndecodeSomeCtwoDumprt.tex b/cheri/sail_latex/sailfndecodeSomeCtwoDumprt.tex new file mode 100644 index 00000000..cccfa876 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeCtwoDumprt.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00100 @ rt : regno @ 0x0006) = #\hyperref[zSome]{Some}#(#\hyperref[zCtwoDump]{C2Dump}#(rt)) diff --git a/cheri/sail_latex/sailfndecodeSomeDADD.tex b/cheri/sail_latex/sailfndecodeSomeDADD.tex new file mode 100644 index 00000000..84d05d11 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeDADD.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ rd : regno @ 0b00000 @ 0b101100) = + #\hyperref[zSome]{Some}#(#\hyperref[zDADD]{DADD}#(rs, rt, rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeDADDI.tex b/cheri/sail_latex/sailfndecodeSomeDADDI.tex new file mode 100644 index 00000000..27f4cab7 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeDADDI.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b011000 @ rs : regno @ rt : regno @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zDADDI]{DADDI}#(rs, rt, imm)) diff --git a/cheri/sail_latex/sailfndecodeSomeDADDIU.tex b/cheri/sail_latex/sailfndecodeSomeDADDIU.tex new file mode 100644 index 00000000..66ffc405 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeDADDIU.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b011001 @ rs : regno @ rt : regno @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zDADDIU]{DADDIU}#(rs, rt, imm)) diff --git a/cheri/sail_latex/sailfndecodeSomeDADDU.tex b/cheri/sail_latex/sailfndecodeSomeDADDU.tex new file mode 100644 index 00000000..558ebacf --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeDADDU.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ rd : regno @ 0b00000 @ 0b101101) = + #\hyperref[zSome]{Some}#(#\hyperref[zDADDU]{DADDU}#(rs, rt, rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeDDIV.tex b/cheri/sail_latex/sailfndecodeSomeDDIV.tex new file mode 100644 index 00000000..7e37f87d --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeDDIV.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ 0b00000 @ 0b00000 @ 0b011110) = + #\hyperref[zSome]{Some}#(#\hyperref[zDDIV]{DDIV}#(rs, rt)) diff --git a/cheri/sail_latex/sailfndecodeSomeDDIVU.tex b/cheri/sail_latex/sailfndecodeSomeDDIVU.tex new file mode 100644 index 00000000..b34ce40f --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeDDIVU.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ 0b00000 @ 0b00000 @ 0b011111) = + #\hyperref[zSome]{Some}#(#\hyperref[zDDIVU]{DDIVU}#(rs, rt)) diff --git a/cheri/sail_latex/sailfndecodeSomeDIV.tex b/cheri/sail_latex/sailfndecodeSomeDIV.tex new file mode 100644 index 00000000..f9d47a4f --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeDIV.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ 0b00000 @ 0b00000 @ 0b011010) = + #\hyperref[zSome]{Some}#(#\hyperref[zDIV]{DIV}#(rs, rt)) diff --git a/cheri/sail_latex/sailfndecodeSomeDIVU.tex b/cheri/sail_latex/sailfndecodeSomeDIVU.tex new file mode 100644 index 00000000..0e9c1385 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeDIVU.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ 0b00000 @ 0b00000 @ 0b011011) = + #\hyperref[zSome]{Some}#(#\hyperref[zDIVU]{DIVU}#(rs, rt)) diff --git a/cheri/sail_latex/sailfndecodeSomeDMULT.tex b/cheri/sail_latex/sailfndecodeSomeDMULT.tex new file mode 100644 index 00000000..0d2b12b5 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeDMULT.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ 0b00000 @ 0b00000 @ 0b011100) = + #\hyperref[zSome]{Some}#(#\hyperref[zDMULT]{DMULT}#(rs, rt)) diff --git a/cheri/sail_latex/sailfndecodeSomeDMULTU.tex b/cheri/sail_latex/sailfndecodeSomeDMULTU.tex new file mode 100644 index 00000000..53be685e --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeDMULTU.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ 0b00000 @ 0b00000 @ 0b011101) = + #\hyperref[zSome]{Some}#(#\hyperref[zDMULTU]{DMULTU}#(rs, rt)) diff --git a/cheri/sail_latex/sailfndecodeSomeDSLL.tex b/cheri/sail_latex/sailfndecodeSomeDSLL.tex new file mode 100644 index 00000000..824f4937 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeDSLL.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ 0b00000 @ rt : regno @ rd : regno @ sa : #\hyperref[zbits]{bits}#(5) @ 0b111000) = + #\hyperref[zSome]{Some}#(#\hyperref[zDSLL]{DSLL}#(rt, rd, sa)) diff --git a/cheri/sail_latex/sailfndecodeSomeDSLLV.tex b/cheri/sail_latex/sailfndecodeSomeDSLLV.tex new file mode 100644 index 00000000..707e642c --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeDSLLV.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ rd : regno @ 0b00000 @ 0b010100) = + #\hyperref[zSome]{Some}#(#\hyperref[zDSLLV]{DSLLV}#(rs, rt, rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeDSLLthreetwo.tex b/cheri/sail_latex/sailfndecodeSomeDSLLthreetwo.tex new file mode 100644 index 00000000..431ca9e7 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeDSLLthreetwo.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ 0b00000 @ rt : regno @ rd : regno @ sa : #\hyperref[zbits]{bits}#(5) @ 0b111100) = + #\hyperref[zSome]{Some}#(#\hyperref[zDSLLthreetwo]{DSLL32}#(rt, rd, sa)) diff --git a/cheri/sail_latex/sailfndecodeSomeDSRA.tex b/cheri/sail_latex/sailfndecodeSomeDSRA.tex new file mode 100644 index 00000000..25dfe705 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeDSRA.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ 0b00000 @ rt : regno @ rd : regno @ sa : #\hyperref[zbits]{bits}#(5) @ 0b111011) = + #\hyperref[zSome]{Some}#(#\hyperref[zDSRA]{DSRA}#(rt, rd, sa)) diff --git a/cheri/sail_latex/sailfndecodeSomeDSRAV.tex b/cheri/sail_latex/sailfndecodeSomeDSRAV.tex new file mode 100644 index 00000000..b2b92bcb --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeDSRAV.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ rd : regno @ 0b00000 @ 0b010111) = + #\hyperref[zSome]{Some}#(#\hyperref[zDSRAV]{DSRAV}#(rs, rt, rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeDSRAthreetwo.tex b/cheri/sail_latex/sailfndecodeSomeDSRAthreetwo.tex new file mode 100644 index 00000000..a95f3995 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeDSRAthreetwo.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ 0b00000 @ rt : regno @ rd : regno @ sa : #\hyperref[zbits]{bits}#(5) @ 0b111111) = + #\hyperref[zSome]{Some}#(#\hyperref[zDSRAthreetwo]{DSRA32}#(rt, rd, sa)) diff --git a/cheri/sail_latex/sailfndecodeSomeDSRL.tex b/cheri/sail_latex/sailfndecodeSomeDSRL.tex new file mode 100644 index 00000000..d13257d3 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeDSRL.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ 0b00000 @ rt : regno @ rd : regno @ sa : #\hyperref[zbits]{bits}#(5) @ 0b111010) = + #\hyperref[zSome]{Some}#(#\hyperref[zDSRL]{DSRL}#(rt, rd, sa)) diff --git a/cheri/sail_latex/sailfndecodeSomeDSRLV.tex b/cheri/sail_latex/sailfndecodeSomeDSRLV.tex new file mode 100644 index 00000000..626895ac --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeDSRLV.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ rd : regno @ 0b00000 @ 0b010110) = + #\hyperref[zSome]{Some}#(#\hyperref[zDSRLV]{DSRLV}#(rs, rt, rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeDSRLthreetwo.tex b/cheri/sail_latex/sailfndecodeSomeDSRLthreetwo.tex new file mode 100644 index 00000000..edfd4ace --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeDSRLthreetwo.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ 0b00000 @ rt : regno @ rd : regno @ sa : #\hyperref[zbits]{bits}#(5) @ 0b111110) = + #\hyperref[zSome]{Some}#(#\hyperref[zDSRLthreetwo]{DSRL32}#(rt, rd, sa)) diff --git a/cheri/sail_latex/sailfndecodeSomeDSUB.tex b/cheri/sail_latex/sailfndecodeSomeDSUB.tex new file mode 100644 index 00000000..0a402a4f --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeDSUB.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ rd : regno @ 0b00000 @ 0b101110) = + #\hyperref[zSome]{Some}#(#\hyperref[zDSUB]{DSUB}#(rs, rt, rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeDSUBU.tex b/cheri/sail_latex/sailfndecodeSomeDSUBU.tex new file mode 100644 index 00000000..635c5d1f --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeDSUBU.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ rd : regno @ 0b00000 @ 0b101111) = + #\hyperref[zSome]{Some}#(#\hyperref[zDSUBU]{DSUBU}#(rs, rt, rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeERET.tex b/cheri/sail_latex/sailfndecodeSomeERET.tex new file mode 100644 index 00000000..95d4fa19 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeERET.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b010000 @ 0b1 @ 0b0000000000000000000 @ 0b011000) = + #\hyperref[zSome]{Some}#(#\hyperref[zERET]{ERET}#()) diff --git a/cheri/sail_latex/sailfndecodeSomeHCF.tex b/cheri/sail_latex/sailfndecodeSomeHCF.tex new file mode 100644 index 00000000..6f335350 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeHCF.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b010000 @ 0b00100 @ rt : regno @ 0b10111 @ 0b00000000000) = + #\hyperref[zSome]{Some}#(#\hyperref[zHCF]{HCF}#()) diff --git a/cheri/sail_latex/sailfndecodeSomeJALR.tex b/cheri/sail_latex/sailfndecodeSomeJALR.tex new file mode 100644 index 00000000..9d31119a --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeJALR.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ 0b00000 @ rd : regno @ hint : regno @ 0b001001) = + #\hyperref[zSome]{Some}#(#\hyperref[zJALR]{JALR}#(rs, rd)) /* hint is ignored */ diff --git a/cheri/sail_latex/sailfndecodeSomeJALoffset.tex b/cheri/sail_latex/sailfndecodeSomeJALoffset.tex new file mode 100644 index 00000000..6f89b7a2 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeJALoffset.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000011 @ offset : #\hyperref[zbits]{bits}#(26)) = + #\hyperref[zSome]{Some}#(#\hyperref[zJAL]{JAL}#(offset)) diff --git a/cheri/sail_latex/sailfndecodeSomeJRrs.tex b/cheri/sail_latex/sailfndecodeSomeJRrs.tex new file mode 100644 index 00000000..11f38614 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeJRrs.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ 0b00000 @ 0b00000 @ hint : regno @ 0b001000) = + #\hyperref[zSome]{Some}#(#\hyperref[zJR]{JR}#(rs)) /* hint is ignored */ diff --git a/cheri/sail_latex/sailfndecodeSomeJoffset.tex b/cheri/sail_latex/sailfndecodeSomeJoffset.tex new file mode 100644 index 00000000..b7fe0c10 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeJoffset.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000010 @ offset : #\hyperref[zbits]{bits}#(26)) = + #\hyperref[zSome]{Some}#(#\hyperref[zJ]{J}#(offset)) diff --git a/cheri/sail_latex/sailfndecodeSomeLDL.tex b/cheri/sail_latex/sailfndecodeSomeLDL.tex new file mode 100644 index 00000000..d0aa03e7 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeLDL.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}#(0b011010 @ base : regno @ rt : regno @ offset : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zLDL]{LDL}#(base, rt, offset)) diff --git a/cheri/sail_latex/sailfndecodeSomeLDR.tex b/cheri/sail_latex/sailfndecodeSomeLDR.tex new file mode 100644 index 00000000..e2587245 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeLDR.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}#(0b011011 @ base : regno @ rt : regno @ offset : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zLDR]{LDR}#(base, rt, offset)) diff --git a/cheri/sail_latex/sailfndecodeSomeLUI.tex b/cheri/sail_latex/sailfndecodeSomeLUI.tex new file mode 100644 index 00000000..e26f924d --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeLUI.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b001111 @ 0b00000 @ rt : regno @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zLUI]{LUI}#(rt, imm)) diff --git a/cheri/sail_latex/sailfndecodeSomeLWL.tex b/cheri/sail_latex/sailfndecodeSomeLWL.tex new file mode 100644 index 00000000..12e0398d --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeLWL.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}#(0b100010 @ base : regno @ rt : regno @ offset : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zLWL]{LWL}#(base, rt, offset)) diff --git a/cheri/sail_latex/sailfndecodeSomeLWR.tex b/cheri/sail_latex/sailfndecodeSomeLWR.tex new file mode 100644 index 00000000..fbbe2a6c --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeLWR.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}#(0b100110 @ base : regno @ rt : regno @ offset : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zLWR]{LWR}#(base, rt, offset)) diff --git a/cheri/sail_latex/sailfndecodeSomeLoad.tex b/cheri/sail_latex/sailfndecodeSomeLoad.tex new file mode 100644 index 00000000..b9376877 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeLoad.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b100000 @ base : regno @ rt : regno @ offset : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zLoad]{Load}#(B, true, false, base, rt, offset)) /* LB */ diff --git a/cheri/sail_latex/sailfndecodeSomeMADD.tex b/cheri/sail_latex/sailfndecodeSomeMADD.tex new file mode 100644 index 00000000..3b8b9d75 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeMADD.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b011100 @ rs : regno @ rt : regno @ 0b00000 @ 0b00000 @ 0b000000) = + #\hyperref[zSome]{Some}#(#\hyperref[zMADD]{MADD}#(rs, rt)) diff --git a/cheri/sail_latex/sailfndecodeSomeMADDU.tex b/cheri/sail_latex/sailfndecodeSomeMADDU.tex new file mode 100644 index 00000000..a1b46968 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeMADDU.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b011100 @ rs : regno @ rt : regno @ 0b00000 @ 0b00000 @ 0b000001) = + #\hyperref[zSome]{Some}#(#\hyperref[zMADDU]{MADDU}#(rs, rt)) diff --git a/cheri/sail_latex/sailfndecodeSomeMFCzero.tex b/cheri/sail_latex/sailfndecodeSomeMFCzero.tex new file mode 100644 index 00000000..67608b6d --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeMFCzero.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b010000 @ 0b00000 @ rt : regno @ rd : regno @ 0b00000000 @ sel : #\hyperref[zbits]{bits}#(3)) = + #\hyperref[zSome]{Some}#(#\hyperref[zMFCzero]{MFC0}#(rt, rd, sel, false)) /* MFC0 */ diff --git a/cheri/sail_latex/sailfndecodeSomeMFHIrd.tex b/cheri/sail_latex/sailfndecodeSomeMFHIrd.tex new file mode 100644 index 00000000..9f48db83 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeMFHIrd.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ 0b0000000000 @ rd : regno @ 0b00000 @ 0b010000) = + #\hyperref[zSome]{Some}#(#\hyperref[zMFHI]{MFHI}#(rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeMFLOrd.tex b/cheri/sail_latex/sailfndecodeSomeMFLOrd.tex new file mode 100644 index 00000000..6ea47d5b --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeMFLOrd.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ 0b0000000000 @ rd : regno @ 0b00000 @ 0b010010) = + #\hyperref[zSome]{Some}#(#\hyperref[zMFLO]{MFLO}#(rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeMOVN.tex b/cheri/sail_latex/sailfndecodeSomeMOVN.tex new file mode 100644 index 00000000..e975a85c --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeMOVN.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ rd : regno @ 0b00000 @ 0b001011) = + #\hyperref[zSome]{Some}#(#\hyperref[zMOVN]{MOVN}#(rs, rt, rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeMOVZ.tex b/cheri/sail_latex/sailfndecodeSomeMOVZ.tex new file mode 100644 index 00000000..a503217a --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeMOVZ.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ rd : regno @ 0b00000 @ 0b001010) = + #\hyperref[zSome]{Some}#(#\hyperref[zMOVZ]{MOVZ}#(rs, rt, rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeMSUB.tex b/cheri/sail_latex/sailfndecodeSomeMSUB.tex new file mode 100644 index 00000000..bfc18834 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeMSUB.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b011100 @ rs : regno @ rt : regno @ 0b00000 @ 0b00000 @ 0b000100) = + #\hyperref[zSome]{Some}#(#\hyperref[zMSUB]{MSUB}#(rs, rt)) diff --git a/cheri/sail_latex/sailfndecodeSomeMSUBU.tex b/cheri/sail_latex/sailfndecodeSomeMSUBU.tex new file mode 100644 index 00000000..07efaff8 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeMSUBU.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b011100 @ rs : regno @ rt : regno @ 0b00000 @ 0b00000 @ 0b000101) = + #\hyperref[zSome]{Some}#(#\hyperref[zMSUBU]{MSUBU}#(rs, rt)) diff --git a/cheri/sail_latex/sailfndecodeSomeMTCzero.tex b/cheri/sail_latex/sailfndecodeSomeMTCzero.tex new file mode 100644 index 00000000..890984a6 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeMTCzero.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b010000 @ 0b00100 @ rt : regno @ rd : regno @ 0b00000000 @ sel : #\hyperref[zbits]{bits}#(3)) = + #\hyperref[zSome]{Some}#(#\hyperref[zMTCzero]{MTC0}#(rt, rd, sel, false)) /* MTC0 */ diff --git a/cheri/sail_latex/sailfndecodeSomeMTHIrs.tex b/cheri/sail_latex/sailfndecodeSomeMTHIrs.tex new file mode 100644 index 00000000..bbe47eeb --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeMTHIrs.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ 0b000000000000000 @ 0b010001) = + #\hyperref[zSome]{Some}#(#\hyperref[zMTHI]{MTHI}#(rs)) diff --git a/cheri/sail_latex/sailfndecodeSomeMTLOrs.tex b/cheri/sail_latex/sailfndecodeSomeMTLOrs.tex new file mode 100644 index 00000000..b6e4f81a --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeMTLOrs.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ 0b000000000000000 @ 0b010011) = + #\hyperref[zSome]{Some}#(#\hyperref[zMTLO]{MTLO}#(rs)) diff --git a/cheri/sail_latex/sailfndecodeSomeMUL.tex b/cheri/sail_latex/sailfndecodeSomeMUL.tex new file mode 100644 index 00000000..806554c1 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeMUL.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b011100 @ rs : regno @ rt : regno @ rd : regno @ 0b00000 @ 0b000010) = + #\hyperref[zSome]{Some}#(#\hyperref[zMUL]{MUL}#(rs, rt, rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeMULT.tex b/cheri/sail_latex/sailfndecodeSomeMULT.tex new file mode 100644 index 00000000..3358669f --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeMULT.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ 0b00000 @ 0b00000 @ 0b011000) = + #\hyperref[zSome]{Some}#(#\hyperref[zMULT]{MULT}#(rs, rt)) diff --git a/cheri/sail_latex/sailfndecodeSomeMULTU.tex b/cheri/sail_latex/sailfndecodeSomeMULTU.tex new file mode 100644 index 00000000..1de82a86 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeMULTU.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ 0b00000 @ 0b00000 @ 0b011001) = + #\hyperref[zSome]{Some}#(#\hyperref[zMULTU]{MULTU}#(rs, rt)) diff --git a/cheri/sail_latex/sailfndecodeSomeNOR.tex b/cheri/sail_latex/sailfndecodeSomeNOR.tex new file mode 100644 index 00000000..591bd681 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeNOR.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ rd : regno @ 0b00000 @ 0b100111) = + #\hyperref[zSome]{Some}#(#\hyperref[zNOR]{NOR}#(rs, rt, rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeOR.tex b/cheri/sail_latex/sailfndecodeSomeOR.tex new file mode 100644 index 00000000..4e4c898a --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeOR.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ rd : regno @ 0b00000 @ 0b100101) = + #\hyperref[zSome]{Some}#(#\hyperref[zOR]{OR}#(rs, rt, rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeORI.tex b/cheri/sail_latex/sailfndecodeSomeORI.tex new file mode 100644 index 00000000..ab0e3590 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeORI.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b001101 @ rs : regno @ rt : regno @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zORI]{ORI}#(rs, rt, imm)) diff --git a/cheri/sail_latex/sailfndecodeSomeRDHWR.tex b/cheri/sail_latex/sailfndecodeSomeRDHWR.tex new file mode 100644 index 00000000..ea58d589 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeRDHWR.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b011111 @ 0b00000 @ rt : regno @ rd : regno @ 0b00000 @ 0b111011) = + #\hyperref[zSome]{Some}#(#\hyperref[zRDHWR]{RDHWR}#(rt, rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeRI.tex b/cheri/sail_latex/sailfndecodeSomeRI.tex new file mode 100644 index 00000000..33607cfb --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeRI.tex @@ -0,0 +1 @@ +function clause decode _ = #\hyperref[zSome]{Some}#(#\hyperref[zRI]{RI}#()) diff --git a/cheri/sail_latex/sailfndecodeSomeSDL.tex b/cheri/sail_latex/sailfndecodeSomeSDL.tex new file mode 100644 index 00000000..bf001ec3 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeSDL.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}#(0b101100 @ base : regno @ rt : regno @ offset : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zSDL]{SDL}#(base, rt, offset)) diff --git a/cheri/sail_latex/sailfndecodeSomeSDR.tex b/cheri/sail_latex/sailfndecodeSomeSDR.tex new file mode 100644 index 00000000..437d09b0 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeSDR.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}#(0b101101 @ base : regno @ rt : regno @ offset : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zSDR]{SDR}#(base, rt, offset)) diff --git a/cheri/sail_latex/sailfndecodeSomeSLL.tex b/cheri/sail_latex/sailfndecodeSomeSLL.tex new file mode 100644 index 00000000..2d130736 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeSLL.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ 0b00000 @ rt : regno @ rd : regno @ sa : regno @ 0b000000) = + #\hyperref[zSome]{Some}#(#\hyperref[zSLL]{SLL}#(rt, rd, sa)) diff --git a/cheri/sail_latex/sailfndecodeSomeSLLV.tex b/cheri/sail_latex/sailfndecodeSomeSLLV.tex new file mode 100644 index 00000000..b06ee12d --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeSLLV.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ rd : regno @ 0b00000 @ 0b000100) = + #\hyperref[zSome]{Some}#(#\hyperref[zSLLV]{SLLV}#(rs, rt, rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeSLT.tex b/cheri/sail_latex/sailfndecodeSomeSLT.tex new file mode 100644 index 00000000..b6651698 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeSLT.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ rd : regno @ 0b00000 @ 0b101010) = + #\hyperref[zSome]{Some}#(#\hyperref[zSLT]{SLT}#(rs, rt, rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeSLTI.tex b/cheri/sail_latex/sailfndecodeSomeSLTI.tex new file mode 100644 index 00000000..c1240f5b --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeSLTI.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b001010 @ rs : regno @ rt : regno @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zSLTI]{SLTI}#(rs, rt, imm)) diff --git a/cheri/sail_latex/sailfndecodeSomeSLTIU.tex b/cheri/sail_latex/sailfndecodeSomeSLTIU.tex new file mode 100644 index 00000000..72d15602 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeSLTIU.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b001011 @ rs : regno @ rt : regno @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zSLTIU]{SLTIU}#(rs, rt, imm)) diff --git a/cheri/sail_latex/sailfndecodeSomeSLTU.tex b/cheri/sail_latex/sailfndecodeSomeSLTU.tex new file mode 100644 index 00000000..c735877d --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeSLTU.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ rd : regno @ 0b00000 @ 0b101011) = + #\hyperref[zSome]{Some}#(#\hyperref[zSLTU]{SLTU}#(rs, rt, rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeSRA.tex b/cheri/sail_latex/sailfndecodeSomeSRA.tex new file mode 100644 index 00000000..2050a307 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeSRA.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ 0b00000 @ rt : regno @ rd : regno @ sa : regno @ 0b000011) = + #\hyperref[zSome]{Some}#(#\hyperref[zSRA]{SRA}#(rt, rd, sa)) diff --git a/cheri/sail_latex/sailfndecodeSomeSRAV.tex b/cheri/sail_latex/sailfndecodeSomeSRAV.tex new file mode 100644 index 00000000..a198a715 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeSRAV.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ rd : regno @ 0b00000 @ 0b000111) = + #\hyperref[zSome]{Some}#(#\hyperref[zSRAV]{SRAV}#(rs, rt, rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeSRL.tex b/cheri/sail_latex/sailfndecodeSomeSRL.tex new file mode 100644 index 00000000..80c0dd7a --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeSRL.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ 0b00000 @ rt : regno @ rd : regno @ sa : regno @ 0b000010) = + #\hyperref[zSome]{Some}#(#\hyperref[zSRL]{SRL}#(rt, rd, sa)) diff --git a/cheri/sail_latex/sailfndecodeSomeSRLV.tex b/cheri/sail_latex/sailfndecodeSomeSRLV.tex new file mode 100644 index 00000000..b06e51d9 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeSRLV.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ rd : regno @ 0b00000 @ 0b000110) = + #\hyperref[zSome]{Some}#(#\hyperref[zSRLV]{SRLV}#(rs, rt, rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeSUB.tex b/cheri/sail_latex/sailfndecodeSomeSUB.tex new file mode 100644 index 00000000..2ee4e29f --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeSUB.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ rd : regno @ 0b00000 @ 0b100010) = + #\hyperref[zSome]{Some}#(#\hyperref[zSUB]{SUB}#(rs, rt, rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeSUBU.tex b/cheri/sail_latex/sailfndecodeSomeSUBU.tex new file mode 100644 index 00000000..4f00e98b --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeSUBU.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ rd : regno @ 0b00000 @ 0b100011) = + #\hyperref[zSome]{Some}#(#\hyperref[zSUBU]{SUBU}#(rs, rt, rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeSWL.tex b/cheri/sail_latex/sailfndecodeSomeSWL.tex new file mode 100644 index 00000000..208f2397 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeSWL.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}#(0b101010 @ base : regno @ rt : regno @ offset : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zSWL]{SWL}#(base, rt, offset)) diff --git a/cheri/sail_latex/sailfndecodeSomeSWR.tex b/cheri/sail_latex/sailfndecodeSomeSWR.tex new file mode 100644 index 00000000..41ef1162 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeSWR.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}#(0b101110 @ base : regno @ rt : regno @ offset : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zSWR]{SWR}#(base, rt, offset)) diff --git a/cheri/sail_latex/sailfndecodeSomeSYNC.tex b/cheri/sail_latex/sailfndecodeSomeSYNC.tex new file mode 100644 index 00000000..12f85118 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeSYNC.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ 0b00000 @ 0b00000 @ 0b00000 @ stype : regno @ 0b001111) = + #\hyperref[zSome]{Some}#(#\hyperref[zSYNC]{SYNC}#()) /* stype is currently ignored */ diff --git a/cheri/sail_latex/sailfndecodeSomeSYSCALL.tex b/cheri/sail_latex/sailfndecodeSomeSYSCALL.tex new file mode 100644 index 00000000..bace77fa --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeSYSCALL.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ code : #\hyperref[zbits]{bits}#(20) @ 0b001100) = + #\hyperref[zSome]{Some}#(#\hyperref[zSYSCALL]{SYSCALL}#()) /* code is ignored */ diff --git a/cheri/sail_latex/sailfndecodeSomeStore.tex b/cheri/sail_latex/sailfndecodeSomeStore.tex new file mode 100644 index 00000000..1a291fbd --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeStore.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b101000 @ base : regno @ rt : regno @ offset : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zStore]{Store}#(B, false, base, rt, offset)) /* SB */ diff --git a/cheri/sail_latex/sailfndecodeSomeTRAPIMM.tex b/cheri/sail_latex/sailfndecodeSomeTRAPIMM.tex new file mode 100644 index 00000000..90ed1745 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeTRAPIMM.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000001 @ rs : regno @ 0b01100 @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zTRAPIMM]{TRAPIMM}#(rs, imm, EQ)) /* TEQI */ diff --git a/cheri/sail_latex/sailfndecodeSomeTRAPREG.tex b/cheri/sail_latex/sailfndecodeSomeTRAPREG.tex new file mode 100644 index 00000000..66126500 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeTRAPREG.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ code : #\hyperref[zbits]{bits}#(10) @ 0b110000) = + #\hyperref[zSome]{Some}#(#\hyperref[zTRAPREG]{TRAPREG}#(rs, rt, GE)) /* TGE */ diff --git a/cheri/sail_latex/sailfndecodeSomeWAIT.tex b/cheri/sail_latex/sailfndecodeSomeWAIT.tex new file mode 100644 index 00000000..443840f8 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeWAIT.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b010000 @ 0x80000 @ 0b100000) = + #\hyperref[zSome]{Some}#(#\hyperref[zWAIT]{WAIT}#()) /* we only accept code == 0 */ diff --git a/cheri/sail_latex/sailfndecodeSomeXOR.tex b/cheri/sail_latex/sailfndecodeSomeXOR.tex new file mode 100644 index 00000000..f25d968e --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeXOR.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ rd : regno @ 0b00000 @ 0b100110) = + #\hyperref[zSome]{Some}#(#\hyperref[zXOR]{XOR}#(rs, rt, rd)) diff --git a/cheri/sail_latex/sailfndecodeSomeXORI.tex b/cheri/sail_latex/sailfndecodeSomeXORI.tex new file mode 100644 index 00000000..018ca5d7 --- /dev/null +++ b/cheri/sail_latex/sailfndecodeSomeXORI.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b001110 @ rs : regno @ rt : regno @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zXORI]{XORI}#(rs, rt, imm)) diff --git a/cheri/sail_latex/sailfndecodefailureofnum.tex b/cheri/sail_latex/sailfndecodefailureofnum.tex new file mode 100644 index 00000000..2ad9ff6d --- /dev/null +++ b/cheri/sail_latex/sailfndecodefailureofnum.tex @@ -0,0 +1,6 @@ +function decode_failure_of_num arg# = match arg# { + 0 => no_matching_pattern, + 1 => unsupported_instruction, + 2 => illegal_instruction, + _ => internal_error +} diff --git a/cheri/sail_latex/sailfndumpcptwostate.tex b/cheri/sail_latex/sailfndumpcptwostate.tex new file mode 100644 index 00000000..53ab717e --- /dev/null +++ b/cheri/sail_latex/sailfndumpcptwostate.tex @@ -0,0 +1,17 @@ +function #\hyperref[zdumpzycptwozystate]{dump\_cp2\_state}# () = { + #\hyperref[zprint]{print}#(#\hyperref[zconcatzystr]{concat\_str}#("DEBUG CAP PCC", #\hyperref[zcapToString]{capToString}#(#\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(PCC)))); + foreach(i from 0 to 31) { + #\hyperref[zprint]{print}#(#\hyperref[zconcatzystr]{concat\_str}#("DEBUG CAP REG ", #\hyperref[zconcatzystr]{concat\_str}#(#\hyperref[zstringzyofzyint]{string\_of\_int}#(i), #\hyperref[zcapToString]{capToString}#(#\hyperref[zreadCapReg]{readCapReg}#(#\hyperref[ztozybits]{to\_bits}#(5, i)))))) + }; + #\hyperref[zprint]{print}#(#\hyperref[zconcatzystr]{concat\_str}#("DEBUG CAP HWREG 00", #\hyperref[zcapToString]{capToString}#(#\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(DDC)))); + #\hyperref[zprint]{print}#(#\hyperref[zconcatzystr]{concat\_str}#("DEBUG CAP HWREG 01", #\hyperref[zcapToString]{capToString}#(#\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(CTLSU)))); + #\hyperref[zprint]{print}#(#\hyperref[zconcatzystr]{concat\_str}#("DEBUG CAP HWREG 08", #\hyperref[zcapToString]{capToString}#(#\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(CTLSP)))); + /* TODO: these two should not be mirrored to match the FPGA */ + #\hyperref[zprint]{print}#(#\hyperref[zconcatzystr]{concat\_str}#("DEBUG CAP HWREG 22", #\hyperref[zcapToString]{capToString}#(#\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(KR1C)))); + #\hyperref[zprint]{print}#(#\hyperref[zconcatzystr]{concat\_str}#("DEBUG CAP HWREG 23", #\hyperref[zcapToString]{capToString}#(#\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(KR2C)))); + /* KCC, KDC, EPCC */ + #\hyperref[zprint]{print}#(#\hyperref[zconcatzystr]{concat\_str}#("DEBUG CAP HWREG 29", #\hyperref[zcapToString]{capToString}#(#\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(KCC)))); + #\hyperref[zprint]{print}#(#\hyperref[zconcatzystr]{concat\_str}#("DEBUG CAP HWREG 30", #\hyperref[zcapToString]{capToString}#(#\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(KDC)))); + #\hyperref[zprint]{print}#(#\hyperref[zconcatzystr]{concat\_str}#("DEBUG CAP HWREG 31", #\hyperref[zcapToString]{capToString}#(#\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(EPCC)))); + +} diff --git a/cheri/sail_latex/sailfnexecuteADD.tex b/cheri/sail_latex/sailfnexecuteADD.tex new file mode 100644 index 00000000..2ad9da32 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteADD.tex @@ -0,0 +1,13 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zADD]{ADD}#(rs, rt, rd)) = + { + opA : #\hyperref[zbits]{bits}#(64) = #\hyperref[zrGPR]{rGPR}#(rs); + opB : #\hyperref[zbits]{bits}#(64) = #\hyperref[zrGPR]{rGPR}#(rt); + if #\hyperref[zNotWordVal]{NotWordVal}#(opA) | #\hyperref[zNotWordVal]{NotWordVal}#(opB) then + #\hyperref[zwGPR]{wGPR}#(rd) = undefined /* XXX could exit instead */ + else + let sum33 : #\hyperref[zbits]{bits}#(33) = #\hyperref[zsignzyextend]{sign\_extend}#(opA[31 .. 0]) + #\hyperref[zsignzyextend]{sign\_extend}#(opB[31 .. 0])in + if sum33[32] != sum33[31] then + (#\hyperref[zSignalException]{SignalException}#(Ov)) + else + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[zsignzyextend]{sign\_extend}#(sum33[31..0]) + } diff --git a/cheri/sail_latex/sailfnexecuteADDI.tex b/cheri/sail_latex/sailfnexecuteADDI.tex new file mode 100644 index 00000000..07076225 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteADDI.tex @@ -0,0 +1,12 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zADDI]{ADDI}#(rs, rt, imm)) = + { + opA = #\hyperref[zrGPR]{rGPR}#(rs); + if #\hyperref[zNotWordVal]{NotWordVal}#(opA) then + #\hyperref[zwGPR]{wGPR}#(rt) = undefined /* XXX could exit instead */ + else + let sum33 : #\hyperref[zbits]{bits}#(33) = #\hyperref[zsignzyextend]{sign\_extend}#(opA[31 .. 0]) + #\hyperref[zsignzyextend]{sign\_extend}#(imm) in + if sum33[32] != sum33[31] then + (#\hyperref[zSignalException]{SignalException}#(Ov)) + else + #\hyperref[zwGPR]{wGPR}#(rt) = #\hyperref[zsignzyextend]{sign\_extend}#(sum33[31..0]) + } diff --git a/cheri/sail_latex/sailfnexecuteADDIU.tex b/cheri/sail_latex/sailfnexecuteADDIU.tex new file mode 100644 index 00000000..5be7b646 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteADDIU.tex @@ -0,0 +1,8 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zADDIU]{ADDIU}#(rs, rt, imm)) = + { + opA = #\hyperref[zrGPR]{rGPR}#(rs); + if #\hyperref[zNotWordVal]{NotWordVal}#(opA) then + #\hyperref[zwGPR]{wGPR}#(rt) = undefined /* XXX could exit instead */ + else + #\hyperref[zwGPR]{wGPR}#(rt) = #\hyperref[zsignzyextend]{sign\_extend}#((opA[31 .. 0]) + #\hyperref[zsignzyextend]{sign\_extend}#(imm)) + } diff --git a/cheri/sail_latex/sailfnexecuteADDU.tex b/cheri/sail_latex/sailfnexecuteADDU.tex new file mode 100644 index 00000000..ec253078 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteADDU.tex @@ -0,0 +1,9 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zADDU]{ADDU}#(rs, rt, rd)) = + { + opA = #\hyperref[zrGPR]{rGPR}#(rs); + opB = #\hyperref[zrGPR]{rGPR}#(rt); + if #\hyperref[zNotWordVal]{NotWordVal}#(opA) | #\hyperref[zNotWordVal]{NotWordVal}#(opB) then + #\hyperref[zwGPR]{wGPR}#(rd) = undefined + else + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[zsignzyextend]{sign\_extend}#(opA[31..0] + opB[31..0]) + } diff --git a/cheri/sail_latex/sailfnexecuteAND.tex b/cheri/sail_latex/sailfnexecuteAND.tex new file mode 100644 index 00000000..f24435e8 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteAND.tex @@ -0,0 +1,4 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zAND]{AND}# (rs, rt, rd)) = + { + #\hyperref[zwGPR]{wGPR}#(rd) = (#\hyperref[zrGPR]{rGPR}#(rs) & #\hyperref[zrGPR]{rGPR}#(rt)) + } diff --git a/cheri/sail_latex/sailfnexecuteANDI.tex b/cheri/sail_latex/sailfnexecuteANDI.tex new file mode 100644 index 00000000..03305987 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteANDI.tex @@ -0,0 +1,4 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zANDI]{ANDI}# (rs, rt, imm)) = + { + #\hyperref[zwGPR]{wGPR}#(rt) = (#\hyperref[zrGPR]{rGPR}#(rs) & #\hyperref[zzzerozyextend]{zero\_extend}#(imm)) + } diff --git a/cheri/sail_latex/sailfnexecuteBCMPZ.tex b/cheri/sail_latex/sailfnexecuteBCMPZ.tex new file mode 100644 index 00000000..ffaa5df3 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteBCMPZ.tex @@ -0,0 +1,17 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zBCMPZ]{BCMPZ}#(rs, imm, cmp, link, likely)) = + { + linkVal = PC + 8; + regVal = #\hyperref[zrGPR]{rGPR}#(rs); + condition = #\hyperref[zcompare]{compare}#(cmp, regVal, #\hyperref[zzzerozyextend]{zero\_extend}#(0b0)); + if (condition) then + { + let offset : #\hyperref[zbits]{bits}#(64) = (#\hyperref[zsignzyextend]{sign\_extend}#(imm @ 0b00) + 4) in + #\hyperref[zexecutezybranch]{execute\_branch}#(PC + offset); + } + else if (likely) then + { + nextPC = PC + 8 /* skip branch delay */ + }; + if (link) then + #\hyperref[zwGPR]{wGPR}#(0b11111) = linkVal + } diff --git a/cheri/sail_latex/sailfnexecuteBEQ.tex b/cheri/sail_latex/sailfnexecuteBEQ.tex new file mode 100644 index 00000000..348c1c0e --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteBEQ.tex @@ -0,0 +1,13 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zBEQ]{BEQ}#(rs, rd, imm, ne, likely)) = + { + if ((#\hyperref[zrGPR]{rGPR}#(rs) == #\hyperref[zrGPR]{rGPR}#(rd)) ^ ne) then + { + let offset : #\hyperref[zbits]{bits}#(64) = (#\hyperref[zsignzyextend]{sign\_extend}#(imm @ 0b00) + 4) in + #\hyperref[zexecutezybranch]{execute\_branch}#(PC + offset); + } + else + { + if (likely) then + nextPC = PC + 8; /* skip branch delay */ + } + } diff --git a/cheri/sail_latex/sailfnexecuteBREAK.tex b/cheri/sail_latex/sailfnexecuteBREAK.tex new file mode 100644 index 00000000..06f15ea9 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteBREAK.tex @@ -0,0 +1,4 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zBREAK]{BREAK}#()) = + { + (#\hyperref[zSignalException]{SignalException}#(Bp)) + } diff --git a/cheri/sail_latex/sailfnexecuteCACHE.tex b/cheri/sail_latex/sailfnexecuteCACHE.tex new file mode 100644 index 00000000..14ecf045 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCACHE.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCACHE]{CACHE}#(base, op, imm)) = + #\hyperref[zcheckCPzeroAccess]{checkCP0Access}# () /* pretty much a NOP because no caches */ diff --git a/cheri/sail_latex/sailfnexecuteCAndPerm.tex b/cheri/sail_latex/sailfnexecuteCAndPerm.tex new file mode 100644 index 00000000..b2cc7bc3 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCAndPerm.tex @@ -0,0 +1,18 @@ +function clause #\hyperref[zexecute]{execute}#(#\hyperref[zCAndPerm]{CAndPerm}#(cd, cb, rt)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + let cb_val = #\hyperref[zreadCapReg]{readCapReg}#(cb); + let rt_val = #\hyperref[zrGPR]{rGPR}#(rt); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cd)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cd) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if #\hyperref[znot]{not}# (cb_val.tag) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, cb) + else if (cb_val.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, cb) + else + let perms = #\hyperref[zgetCapPerms]{getCapPerms}#(cb_val) in + let newCap = #\hyperref[zsetCapPerms]{setCapPerms}#(cb_val, (perms & rt_val[30..0])) in + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, newCap); +} diff --git a/cheri/sail_latex/sailfnexecuteCBX.tex b/cheri/sail_latex/sailfnexecuteCBX.tex new file mode 100644 index 00000000..47463a93 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCBX.tex @@ -0,0 +1,11 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCBX]{CBX}#(cb, imm, notset)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if (((#\hyperref[zreadCapReg]{readCapReg}#(cb)).tag) ^ notset) then + { + let offset : #\hyperref[zbits]{bits}#(64) = (#\hyperref[zsignzyextend]{sign\_extend}#(imm @ 0b00) + 4) in + #\hyperref[zexecutezybranch]{execute\_branch}#(PC + offset); + } +} diff --git a/cheri/sail_latex/sailfnexecuteCBZ.tex b/cheri/sail_latex/sailfnexecuteCBZ.tex new file mode 100644 index 00000000..99a6be08 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCBZ.tex @@ -0,0 +1,11 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCBZ]{CBZ}#(cb, imm, notzero)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if (((#\hyperref[zreadCapReg]{readCapReg}#(cb)) == null_cap) ^ notzero) then + { + let offset : #\hyperref[zbits]{bits}#(64) = (#\hyperref[zsignzyextend]{sign\_extend}#(imm @ 0b00) + 4) in + #\hyperref[zexecutezybranch]{execute\_branch}#(PC + offset); + } +} diff --git a/cheri/sail_latex/sailfnexecuteCBuildCap.tex b/cheri/sail_latex/sailfnexecuteCBuildCap.tex new file mode 100644 index 00000000..cff66cc3 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCBuildCap.tex @@ -0,0 +1,40 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCBuildCap]{CBuildCap}#(cd, cb, ct)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + cb_val = #\hyperref[zreadCapRegDDC]{readCapRegDDC}#(cb); + ct_val = #\hyperref[zreadCapReg]{readCapReg}#(ct); + cb_base = #\hyperref[zgetCapBase]{getCapBase}#(cb_val); + ct_base = #\hyperref[zgetCapBase]{getCapBase}#(ct_val); + cb_top = #\hyperref[zgetCapTop]{getCapTop}#(cb_val); + ct_top = #\hyperref[zgetCapTop]{getCapTop}#(ct_val); + cb_perms = #\hyperref[zgetCapPerms]{getCapPerms}#(cb_val); + ct_perms = #\hyperref[zgetCapPerms]{getCapPerms}#(ct_val); + ct_offset = #\hyperref[zgetCapOffset]{getCapOffset}#(ct_val); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cd)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cd) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(ct)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, ct) + else if #\hyperref[znot]{not}# (cb_val.tag) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, cb) + else if (cb_val.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, cb) + else if ct_base < cb_base then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, cb) + else if ct_top > cb_top then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, cb) + else if ct_base > ct_top then /* check for length < 0 - possible because ct might be untagged */ + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, ct) + else if (ct_perms & cb_perms) != ct_perms then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_UserDefViolation, cb) + else + let (exact, cd1) = #\hyperref[zsetCapBounds]{setCapBounds}#(cb_val, #\hyperref[ztozybits]{to\_bits}#(64, ct_base), #\hyperref[ztozybits]{to\_bits}#(65, ct_top)) in + let (representable, cd2) = #\hyperref[zsetCapOffset]{setCapOffset}#(cd1, #\hyperref[ztozybits]{to\_bits}#(64, ct_offset)) in + let cd3 = #\hyperref[zsetCapPerms]{setCapPerms}#(cd2, ct_perms) in + { + assert(exact, ""); /* base and top came from ct originally so will be exact */ + assert(representable, ""); /* similarly offset should be representable XXX except for fastRepCheck */ + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, cd3); + } +} diff --git a/cheri/sail_latex/sailfnexecuteCCSeal.tex b/cheri/sail_latex/sailfnexecuteCCSeal.tex new file mode 100644 index 00000000..7a1bc402 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCCSeal.tex @@ -0,0 +1,37 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCCSeal]{CCSeal}#(cd, cs, ct)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + cs_val = #\hyperref[zreadCapReg]{readCapReg}#(cs); + ct_val = #\hyperref[zreadCapReg]{readCapReg}#(ct); + ct_cursor = #\hyperref[zgetCapCursor]{getCapCursor}#(ct_val); + ct_top = #\hyperref[zgetCapTop]{getCapTop}#(ct_val); + ct_base = #\hyperref[zgetCapBase]{getCapBase}#(ct_val); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cd)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cd) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cs)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cs) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(ct)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, ct) + else if #\hyperref[znot]{not}# (cs_val.tag) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, cs) + else if (#\hyperref[znot]{not}# (ct_val.tag)) | (#\hyperref[zgetCapCursor]{getCapCursor}#(ct_val) == #\hyperref[zunsigned]{unsigned}#(bitone ^^ 64)) then + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, cs_val) + else if (cs_val.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, cs) + else if (ct_val.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, ct) + else if #\hyperref[znot]{not}# (ct_val.permit_seal) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_PermitSealViolation, ct) + else if (ct_cursor < ct_base) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, ct) + else if (ct_cursor >= ct_top) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, ct) + else if (ct_cursor > max_otype) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, ct) + else + let (success, newCap) = #\hyperref[zsealCap]{sealCap}#(cs_val, #\hyperref[ztozybits]{to\_bits}#(24, ct_cursor)) in + if #\hyperref[znot]{not}# (success) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_InexactBounds, cs) + else + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, newCap) +} diff --git a/cheri/sail_latex/sailfnexecuteCCall.tex b/cheri/sail_latex/sailfnexecuteCCall.tex new file mode 100644 index 00000000..1cae71b0 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCCall.tex @@ -0,0 +1,32 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCCall]{CCall}#(cs, cb, 0b00000000000)) = /* selector=0 */ +{ + /* Partial implementation of CCall with checks in hardware, but raising a trap to perform trusted stack manipulation */ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + cs_val = #\hyperref[zreadCapReg]{readCapReg}#(cs); + cb_val = #\hyperref[zreadCapReg]{readCapReg}#(cb); + cs_cursor = #\hyperref[zgetCapCursor]{getCapCursor}#(cs_val); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cs)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cs) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if #\hyperref[znot]{not}# (cs_val.tag) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, cs) + else if #\hyperref[znot]{not}# (cb_val.tag) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, cb) + else if #\hyperref[znot]{not}# (cs_val.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, cs) + else if #\hyperref[znot]{not}# (cb_val.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, cb) + else if ((cs_val.otype) != (cb_val.otype)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TypeViolation, cs) + else if #\hyperref[znot]{not}# (cs_val.permit_execute) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_PermitExecuteViolation, cs) + else if (cb_val.permit_execute) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_PermitExecuteViolation, cb) + else if (cs_cursor < #\hyperref[zgetCapBase]{getCapBase}#(cs_val)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, cs) + else if (cs_cursor >= #\hyperref[zgetCapTop]{getCapTop}#(cs_val)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, cs) + else + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_CallTrap, cs); +} diff --git a/cheri/sail_latex/sailfnexecuteCCheckPerm.tex b/cheri/sail_latex/sailfnexecuteCCheckPerm.tex new file mode 100644 index 00000000..1a4ac93c --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCCheckPerm.tex @@ -0,0 +1,13 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCCheckPerm]{CCheckPerm}#(cs, rt)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + cs_val = #\hyperref[zreadCapReg]{readCapReg}#(cs); + cs_perms : #\hyperref[zbits]{bits}#(64) = #\hyperref[zzzerozyextend]{zero\_extend}#(#\hyperref[zgetCapPerms]{getCapPerms}#(cs_val)); + rt_perms = #\hyperref[zrGPR]{rGPR}#(rt); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cs)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cs) + else if #\hyperref[znot]{not}# (cs_val.tag) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, cs) + else if ((cs_perms & rt_perms) != rt_perms) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_UserDefViolation, cs) +} diff --git a/cheri/sail_latex/sailfnexecuteCCheckType.tex b/cheri/sail_latex/sailfnexecuteCCheckType.tex new file mode 100644 index 00000000..fa9da35a --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCCheckType.tex @@ -0,0 +1,20 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCCheckType]{CCheckType}#(cs, cb)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + cs_val = #\hyperref[zreadCapReg]{readCapReg}#(cs); + cb_val = #\hyperref[zreadCapReg]{readCapReg}#(cb); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cs)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cs) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if #\hyperref[znot]{not}# (cs_val.tag) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, cs) + else if #\hyperref[znot]{not}# (cb_val.tag) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, cb) + else if #\hyperref[znot]{not}# (cs_val.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, cs) + else if #\hyperref[znot]{not}# (cb_val.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, cb) + else if ((cs_val.otype) != (cb_val.otype)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TypeViolation, cs) +} diff --git a/cheri/sail_latex/sailfnexecuteCClearTag.tex b/cheri/sail_latex/sailfnexecuteCClearTag.tex new file mode 100644 index 00000000..54863f96 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCClearTag.tex @@ -0,0 +1,13 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCClearTag]{CClearTag}#(cd, cb)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cd)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cd) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else + { + cb_val = #\hyperref[zreadCapReg]{readCapReg}#(cb); + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, {cb_val with tag=false}); + } +} diff --git a/cheri/sail_latex/sailfnexecuteCCopyType.tex b/cheri/sail_latex/sailfnexecuteCCopyType.tex new file mode 100644 index 00000000..dd34a178 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCCopyType.tex @@ -0,0 +1,31 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCCopyType]{CCopyType}#(cd, cb, ct)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + cb_val = #\hyperref[zreadCapReg]{readCapReg}#(cb); + ct_val = #\hyperref[zreadCapReg]{readCapReg}#(ct); + cb_base = #\hyperref[zgetCapBase]{getCapBase}#(cb_val); + cb_top = #\hyperref[zgetCapTop]{getCapTop}#(cb_val); + ct_otype = #\hyperref[zunsigned]{unsigned}#(ct_val.otype); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cd)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cd) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(ct)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, ct) + else if #\hyperref[znot]{not}# (cb_val.tag) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, cb) + else if (cb_val.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, cb) + else if (ct_val.sealed) then { + if ct_otype < cb_base then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, cb) + else if ct_otype >= cb_top then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, cb) + else + let (success, cap) = #\hyperref[zsetCapOffset]{setCapOffset}#(cb_val, #\hyperref[ztozybits]{to\_bits}#(64, ct_otype - cb_base)) in { + assert(success, ""); /* offset is in bounds so must succeed */ + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, cap); + } + } else + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, #\hyperref[zintzytozycap]{int\_to\_cap}#(bitone ^^ 64)) +} diff --git a/cheri/sail_latex/sailfnexecuteCFromPtr.tex b/cheri/sail_latex/sailfnexecuteCFromPtr.tex new file mode 100644 index 00000000..eeb1fdc6 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCFromPtr.tex @@ -0,0 +1,22 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCFromPtr]{CFromPtr}#(cd, cb, rt)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + cb_val = #\hyperref[zreadCapRegDDC]{readCapRegDDC}#(cb); + rt_val = #\hyperref[zrGPR]{rGPR}#(rt); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cd)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cd) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if (rt_val == 0x0000000000000000) then + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, null_cap) + else if #\hyperref[znot]{not}# (cb_val.tag) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, cb) + else if (cb_val.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, cb) + else + let (success, newCap) = #\hyperref[zsetCapOffset]{setCapOffset}#(cb_val, rt_val) in + if (success) then + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, newCap) + else + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, #\hyperref[zintzytozycap]{int\_to\_cap}#(#\hyperref[ztozybits]{to\_bits}#(64, #\hyperref[zgetCapBase]{getCapBase}#(cb_val)) + rt_val)) +} diff --git a/cheri/sail_latex/sailfnexecuteCGetAddr.tex b/cheri/sail_latex/sailfnexecuteCGetAddr.tex new file mode 100644 index 00000000..dd35b2ce --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCGetAddr.tex @@ -0,0 +1,9 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCGetAddr]{CGetAddr}#(rd, cb)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else + let capVal = #\hyperref[zreadCapReg]{readCapReg}#(cb) in + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[ztozybits]{to\_bits}#(64, #\hyperref[zgetCapCursor]{getCapCursor}#(capVal)); +} diff --git a/cheri/sail_latex/sailfnexecuteCGetBase.tex b/cheri/sail_latex/sailfnexecuteCGetBase.tex new file mode 100644 index 00000000..305762b9 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCGetBase.tex @@ -0,0 +1,9 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCGetBase]{CGetBase}#(rd, cb)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else + let capVal = #\hyperref[zreadCapReg]{readCapReg}#(cb) in + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[ztozybits]{to\_bits}#(64, #\hyperref[zgetCapBase]{getCapBase}#(capVal)); +} diff --git a/cheri/sail_latex/sailfnexecuteCGetCause.tex b/cheri/sail_latex/sailfnexecuteCGetCause.tex new file mode 100644 index 00000000..1753022e --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCGetCause.tex @@ -0,0 +1,8 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCGetCause]{CGetCause}#(rd)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + if #\hyperref[znot]{not}# (#\hyperref[zpcczyaccesszysystemzyregs]{pcc\_access\_system\_regs}# ()) then + #\hyperref[zraisezyctwozyexceptionzynoreg]{raise\_c2\_exception\_noreg}#(CapEx_AccessSystemRegsViolation) + else + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[zzzerozyextend]{zero\_extend}#(CapCause.#\hyperref[zbits]{bits}#()) +} diff --git a/cheri/sail_latex/sailfnexecuteCGetLen.tex b/cheri/sail_latex/sailfnexecuteCGetLen.tex new file mode 100644 index 00000000..53450720 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCGetLen.tex @@ -0,0 +1,10 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCGetLen]{CGetLen}#(rd, cb)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else + let capVal = #\hyperref[zreadCapReg]{readCapReg}#(cb) in + let len65 = #\hyperref[zgetCapLength]{getCapLength}#(capVal) in + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[ztozybits]{to\_bits}#(64, if len65 > MAX_U64 then MAX_U64 else len65); +} diff --git a/cheri/sail_latex/sailfnexecuteCGetOffset.tex b/cheri/sail_latex/sailfnexecuteCGetOffset.tex new file mode 100644 index 00000000..de2e8e6c --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCGetOffset.tex @@ -0,0 +1,9 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCGetOffset]{CGetOffset}#(rd, cb)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else + let capVal = #\hyperref[zreadCapReg]{readCapReg}#(cb) in + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[ztozybits]{to\_bits}#(64, #\hyperref[zgetCapOffset]{getCapOffset}#(capVal)); +} diff --git a/cheri/sail_latex/sailfnexecuteCGetPCC.tex b/cheri/sail_latex/sailfnexecuteCGetPCC.tex new file mode 100644 index 00000000..08b9aa67 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCGetPCC.tex @@ -0,0 +1,11 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCGetPCC]{CGetPCC}#(cd)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cd)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cd) + else + let pcc = (#\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(PCC)) in + let (success, pcc2) = #\hyperref[zsetCapOffset]{setCapOffset}#(pcc, PC) in + {assert (success, ""); /* guaranteed to be in-bounds */ + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, pcc2)}; +} diff --git a/cheri/sail_latex/sailfnexecuteCGetPCCSetOffset.tex b/cheri/sail_latex/sailfnexecuteCGetPCCSetOffset.tex new file mode 100644 index 00000000..b9af822e --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCGetPCCSetOffset.tex @@ -0,0 +1,14 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCGetPCCSetOffset]{CGetPCCSetOffset}#(cd, rs)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cd)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cd) + else + let pcc = (#\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(PCC)) in + let rs_val = #\hyperref[zrGPR]{rGPR}#(rs) in + let (success, newPCC) = #\hyperref[zsetCapOffset]{setCapOffset}#(pcc, rs_val) in + if (success) then + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, newPCC) + else + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, #\hyperref[zintzytozycap]{int\_to\_cap}#(rs_val)); +} diff --git a/cheri/sail_latex/sailfnexecuteCGetPerm.tex b/cheri/sail_latex/sailfnexecuteCGetPerm.tex new file mode 100644 index 00000000..8bde1b68 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCGetPerm.tex @@ -0,0 +1,9 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCGetPerm]{CGetPerm}#(rd, cb)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else + let capVal = #\hyperref[zreadCapReg]{readCapReg}#(cb) in + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[zzzerozyextend]{zero\_extend}#(#\hyperref[zgetCapPerms]{getCapPerms}#(capVal)); +} diff --git a/cheri/sail_latex/sailfnexecuteCGetSealed.tex b/cheri/sail_latex/sailfnexecuteCGetSealed.tex new file mode 100644 index 00000000..fb51d742 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCGetSealed.tex @@ -0,0 +1,9 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCGetSealed]{CGetSealed}#(rd, cb)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else + let capVal = #\hyperref[zreadCapReg]{readCapReg}#(cb) in + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[zzzerozyextend]{zero\_extend}#(capVal.sealed); +} diff --git a/cheri/sail_latex/sailfnexecuteCGetTag.tex b/cheri/sail_latex/sailfnexecuteCGetTag.tex new file mode 100644 index 00000000..827aed6e --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCGetTag.tex @@ -0,0 +1,9 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCGetTag]{CGetTag}#(rd, cb)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else + let capVal = #\hyperref[zreadCapReg]{readCapReg}#(cb) in + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[zzzerozyextend]{zero\_extend}#(capVal.tag); +} diff --git a/cheri/sail_latex/sailfnexecuteCGetType.tex b/cheri/sail_latex/sailfnexecuteCGetType.tex new file mode 100644 index 00000000..abd4490d --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCGetType.tex @@ -0,0 +1,11 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCGetType]{CGetType}#(rd, cb)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else + let capVal = #\hyperref[zreadCapReg]{readCapReg}#(cb) in + #\hyperref[zwGPR]{wGPR}#(rd) = if (capVal.sealed) + then #\hyperref[zzzerozyextend]{zero\_extend}#(capVal.otype) + else (bitone ^^ 64) +} diff --git a/cheri/sail_latex/sailfnexecuteCIncOffset.tex b/cheri/sail_latex/sailfnexecuteCIncOffset.tex new file mode 100644 index 00000000..4b4b1888 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCIncOffset.tex @@ -0,0 +1,18 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCIncOffset]{CIncOffset}#(cd, cb, rt)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + cb_val = #\hyperref[zreadCapReg]{readCapReg}#(cb); + rt_val = #\hyperref[zrGPR]{rGPR}#(rt); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cd)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cd) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if ((cb_val.tag) & (cb_val.sealed) & (rt_val != 0x0000000000000000)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, cb) + else + let (success, newCap) = #\hyperref[zincCapOffset]{incCapOffset}#(cb_val, rt_val) in + if (success) then + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, newCap) + else + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, #\hyperref[zintzytozycap]{int\_to\_cap}#(#\hyperref[ztozybits]{to\_bits}#(64, #\hyperref[zgetCapBase]{getCapBase}#(cb_val)) + rt_val)) +} diff --git a/cheri/sail_latex/sailfnexecuteCIncOffsetImmediate.tex b/cheri/sail_latex/sailfnexecuteCIncOffsetImmediate.tex new file mode 100644 index 00000000..d82f66c9 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCIncOffsetImmediate.tex @@ -0,0 +1,18 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCIncOffsetImmediate]{CIncOffsetImmediate}#(cd, cb, imm)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + let cb_val = #\hyperref[zreadCapReg]{readCapReg}#(cb); + let imm64 : #\hyperref[zbits]{bits}#(64) = #\hyperref[zsignzyextend]{sign\_extend}#(imm) in + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cd)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cd) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if ((cb_val.tag) & (cb_val.sealed)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, cb) + else + let (success, newCap) = #\hyperref[zincCapOffset]{incCapOffset}#(cb_val, imm64) in + if (success) then + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, newCap) + else + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, #\hyperref[zintzytozycap]{int\_to\_cap}#(#\hyperref[ztozybits]{to\_bits}#(64, #\hyperref[zgetCapBase]{getCapBase}#(cb_val)) + imm64)) +} diff --git a/cheri/sail_latex/sailfnexecuteCJALR.tex b/cheri/sail_latex/sailfnexecuteCJALR.tex new file mode 100644 index 00000000..76a5aa86 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCJALR.tex @@ -0,0 +1,35 @@ +function clause #\hyperref[zexecute]{execute}#(#\hyperref[zCJALR]{CJALR}#(cd, cb, link)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + cb_val = #\hyperref[zreadCapReg]{readCapReg}#(cb); + cb_ptr = #\hyperref[zgetCapCursor]{getCapCursor}#(cb_val); + cb_top = #\hyperref[zgetCapTop]{getCapTop}#(cb_val); + cb_base= #\hyperref[zgetCapBase]{getCapBase}#(cb_val); + if (link & #\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cd)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cd) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if #\hyperref[znot]{not}# (cb_val.tag) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, cb) + else if (cb_val.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, cb) + else if #\hyperref[znot]{not}# (cb_val.permit_execute) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_PermitExecuteViolation, cb) + else if (cb_ptr < cb_base) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, cb) + else if ((cb_ptr + 4) > cb_top) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, cb) + else if ((cb_ptr % 4) != 0) then + #\hyperref[zSignalException]{SignalException}#(AdEL) + else + { + if (link) then + let pcc = #\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(PCC) in + let (success, linkCap) = #\hyperref[zsetCapOffset]{setCapOffset}#(pcc, PC+8) in + if (success) then + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, linkCap) + else + assert(false, ""); + #\hyperref[zexecutezybranchzypcc]{execute\_branch\_pcc}#(cb_val); + } +} diff --git a/cheri/sail_latex/sailfnexecuteCLC.tex b/cheri/sail_latex/sailfnexecuteCLC.tex new file mode 100644 index 00000000..a128ee88 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCLC.tex @@ -0,0 +1,44 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCLC]{CLC}#(cd, cb, rt, offset, linked)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + cb_val = #\hyperref[zreadCapRegDDC]{readCapRegDDC}#(cb); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cd)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cd) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if #\hyperref[znot]{not}# (cb_val.tag) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, cb) + else if (cb_val.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, cb) + else if #\hyperref[znot]{not}# (cb_val.permit_load) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_PermitLoadViolation, cb) + else + { + cursor = #\hyperref[zgetCapCursor]{getCapCursor}#(cb_val); + vAddr = (cursor + #\hyperref[zunsigned]{unsigned}#(#\hyperref[zrGPR]{rGPR}#(rt)) + 16 * #\hyperref[zsigned]{signed}#(offset)) % #\hyperref[zpowtwo]{pow2}#(64); + vAddr64= #\hyperref[ztozybits]{to\_bits}#(64, vAddr); + if ((vAddr + cap_size) > #\hyperref[zgetCapTop]{getCapTop}#(cb_val)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, cb) + else if (vAddr < #\hyperref[zgetCapBase]{getCapBase}#(cb_val)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, cb) + else if ((vAddr % cap_size) != 0) then + #\hyperref[zSignalExceptionBadAddr]{SignalExceptionBadAddr}#(AdEL, vAddr64) + else + { + let (pAddr, suppressTag) = #\hyperref[zTLBTranslateC]{TLBTranslateC}#(vAddr64, LoadData) in + let 'cd = #\hyperref[zunsigned]{unsigned}#(cd) in + if (linked) then + { + CP0LLBit = 0b1; + CP0LLAddr = pAddr; + let (tag, mem) = #\hyperref[zMEMrzytaggedzyreserve]{MEMr\_tagged\_reserve}#(pAddr) in + (*CapRegs[cd]) = #\hyperref[zmemBitsToCapBits]{memBitsToCapBits}#(tag & (cb_val.permit_load_cap) & (#\hyperref[znot]{not}# (suppressTag)), mem); + } + else + { + let (tag, mem) = #\hyperref[zMEMrzytagged]{MEMr\_tagged}#(pAddr) in + (*CapRegs[cd]) = #\hyperref[zmemBitsToCapBits]{memBitsToCapBits}#(tag & (cb_val.permit_load_cap) & (#\hyperref[znot]{not}# (suppressTag)), mem); + } + } + } +} diff --git a/cheri/sail_latex/sailfnexecuteCLoad.tex b/cheri/sail_latex/sailfnexecuteCLoad.tex new file mode 100644 index 00000000..399e63f0 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCLoad.tex @@ -0,0 +1,39 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCLoad]{CLoad}#(rd, cb, rt, offset, signext, width, linked)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + cb_val = #\hyperref[zreadCapRegDDC]{readCapRegDDC}#(cb); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if #\hyperref[znot]{not}# (cb_val.tag) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, cb) + else if (cb_val.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, cb) + else if #\hyperref[znot]{not}# (cb_val.permit_load) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_PermitLoadViolation, cb) + else + { + let 'size = #\hyperref[zwordWidthBytes]{wordWidthBytes}#(width); + let cursor = #\hyperref[zgetCapCursor]{getCapCursor}#(cb_val); + let vAddr = (cursor + #\hyperref[zunsigned]{unsigned}#(#\hyperref[zrGPR]{rGPR}#(rt)) + size*#\hyperref[zsigned]{signed}#(offset)) % #\hyperref[zpowtwo]{pow2}#(64); + let vAddr64 = #\hyperref[ztozybits]{to\_bits}#(64, vAddr); + if ((vAddr + size) > #\hyperref[zgetCapTop]{getCapTop}#(cb_val)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, cb) + else if (vAddr < #\hyperref[zgetCapBase]{getCapBase}#(cb_val)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, cb) + else if #\hyperref[znot]{not}# (#\hyperref[zisAddressAligned]{isAddressAligned}#(vAddr64, width)) then + #\hyperref[zSignalExceptionBadAddr]{SignalExceptionBadAddr}#(AdEL, vAddr64) + else + { + pAddr = (#\hyperref[zTLBTranslate]{TLBTranslate}#(vAddr64, LoadData)); + memResult : #\hyperref[zbits]{bits}#(64) = if (linked) then + { + CP0LLBit = 0b1; + CP0LLAddr = pAddr; + #\hyperref[zextendLoad]{extendLoad}#(#\hyperref[zMEMrzyreservezywrapper]{MEMr\_reserve\_wrapper}#(pAddr, size), signext) + } + else + #\hyperref[zextendLoad]{extendLoad}#(#\hyperref[zMEMrzywrapper]{MEMr\_wrapper}#(pAddr, size), signext); + #\hyperref[zwGPR]{wGPR}#(rd) = memResult; + } + } +} diff --git a/cheri/sail_latex/sailfnexecuteCMOVX.tex b/cheri/sail_latex/sailfnexecuteCMOVX.tex new file mode 100644 index 00000000..94039992 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCMOVX.tex @@ -0,0 +1,10 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCMOVX]{CMOVX}#(cd, cb, rt, ismovn)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cd)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cd) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if ((#\hyperref[zrGPR]{rGPR}#(rt) == #\hyperref[zzzeros]{zeros}#()) ^ ismovn) then + #\hyperref[zwriteCapReg]{writeCapReg}#(cd) = #\hyperref[zreadCapReg]{readCapReg}#(cb); +} diff --git a/cheri/sail_latex/sailfnexecuteCPtrCmp.tex b/cheri/sail_latex/sailfnexecuteCPtrCmp.tex new file mode 100644 index 00000000..fc0f7c54 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCPtrCmp.tex @@ -0,0 +1,43 @@ +function clause #\hyperref[zexecute]{execute}#(#\hyperref[zCPtrCmp]{CPtrCmp}#(rd, cb, ct, op)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(ct)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, ct) + else + { + let cb_val = #\hyperref[zreadCapReg]{readCapReg}#(cb); + let ct_val = #\hyperref[zreadCapReg]{readCapReg}#(ct); + equal = false; + ltu = false; + lts = false; + if (cb_val.tag != ct_val.tag) then + { + if #\hyperref[znot]{not}# (cb_val.tag) then + { + ltu = true; + lts = true; + } + } + else + { + cursor1 = #\hyperref[zgetCapCursor]{getCapCursor}#(cb_val); + cursor2 = #\hyperref[zgetCapCursor]{getCapCursor}#(ct_val); + equal = (cursor1 == cursor2); + ltu = (cursor1 < cursor2); + lts = #\hyperref[ztozybits]{to\_bits}#(64, cursor1) <_s #\hyperref[ztozybits]{to\_bits}#(64, cursor2); + }; + let cmp : bool = match op { + CEQ => equal, + CNE => #\hyperref[znot]{not}# (equal), + CLT => lts, + CLE => lts | equal, + CLTU => ltu, + CLEU => ltu | equal, + CEXEQ => cb_val == ct_val, + CNEXEQ => cb_val != ct_val + }; + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[zzzerozyextend]{zero\_extend}# (cmp) + } +} diff --git a/cheri/sail_latex/sailfnexecuteCReadHwr.tex b/cheri/sail_latex/sailfnexecuteCReadHwr.tex new file mode 100644 index 00000000..cc347d08 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCReadHwr.tex @@ -0,0 +1,35 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCReadHwr]{CReadHwr}#(cd, sel)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + let (needSup, needAccessSys) : (bool, bool) = match #\hyperref[zunsigned]{unsigned}#(sel) { + 0 => (false, false), /* DDC -- no access control */ + 1 => (false, false), /* CTLSU -- no access control */ + 8 => (false, true), /* CTLSP -- privileged TLS */ + 22 => (true, false), /* KR1C */ + 23 => (true, false), /* KR2C */ + 29 => (true, true), /* KCC */ + 30 => (true, true), /* KDC */ + 31 => (true, true), /* EPCC */ + _ => #\hyperref[zSignalException]{SignalException}#(ResI) + }; + if #\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cd) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cd) + else if needAccessSys & #\hyperref[znot]{not}#(#\hyperref[zpcczyaccesszysystemzyregs]{pcc\_access\_system\_regs}#()) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, sel) + else if needSup & #\hyperref[znot]{not}#(#\hyperref[zgrantsAccess]{grantsAccess}#(#\hyperref[zgetAccessLevel]{getAccessLevel}#(), Supervisor)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, sel) + else { + capVal : CapStruct = match #\hyperref[zunsigned]{unsigned}#(sel) { + 0 => #\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(DDC), + 1 => #\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(CTLSU), + 8 => #\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(CTLSP), + 22 => #\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(KR1C), + 23 => #\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(KR2C), + 29 => #\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(KCC), + 30 => #\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(KDC), + 31 => #\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(EPCC), + _ => {assert(false, "should be unreachable code"); undefined} + }; + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, capVal); + }; +} diff --git a/cheri/sail_latex/sailfnexecuteCReturn.tex b/cheri/sail_latex/sailfnexecuteCReturn.tex new file mode 100644 index 00000000..67f07815 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCReturn.tex @@ -0,0 +1,5 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCReturn]{CReturn}#()) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + #\hyperref[zraisezyctwozyexceptionzynoreg]{raise\_c2\_exception\_noreg}#(CapEx_ReturnTrap) +} diff --git a/cheri/sail_latex/sailfnexecuteCSC.tex b/cheri/sail_latex/sailfnexecuteCSC.tex new file mode 100644 index 00000000..cd89dcdf --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCSC.tex @@ -0,0 +1,48 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCSC]{CSC}#(cs, cb, rt, rd, offset, conditional)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + cs_val = #\hyperref[zreadCapReg]{readCapReg}#(cs); + cb_val = #\hyperref[zreadCapRegDDC]{readCapRegDDC}#(cb); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cs)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cs) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if #\hyperref[znot]{not}# (cb_val.tag) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, cb) + else if (cb_val.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, cb) + else if #\hyperref[znot]{not}# (cb_val.permit_store) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_PermitStoreViolation, cb) + else if #\hyperref[znot]{not}# (cb_val.permit_store_cap) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_PermitStoreCapViolation, cb) + else if #\hyperref[znot]{not}# (cb_val.permit_store_local_cap) & (cs_val.tag) & #\hyperref[znot]{not}# (cs_val.global) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_PermitStoreLocalCapViolation, cb) + else + { + cursor = #\hyperref[zgetCapCursor]{getCapCursor}#(cb_val); + vAddr = (cursor + #\hyperref[zunsigned]{unsigned}#(#\hyperref[zrGPR]{rGPR}#(rt)) + 16 * #\hyperref[zsigned]{signed}#(offset)) % #\hyperref[zpowtwo]{pow2}#(64); + vAddr64= #\hyperref[ztozybits]{to\_bits}#(64, vAddr); + if ((vAddr + cap_size) > #\hyperref[zgetCapTop]{getCapTop}#(cb_val)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, cb) + else if (vAddr < #\hyperref[zgetCapBase]{getCapBase}#(cb_val)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, cb) + else if ((vAddr % cap_size) != 0) then + #\hyperref[zSignalExceptionBadAddr]{SignalExceptionBadAddr}#(AdES, vAddr64) + else + { + let (pAddr, noStoreCap) = #\hyperref[zTLBTranslateC]{TLBTranslateC}#(vAddr64, StoreData) in + if (cs_val.tag & noStoreCap) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TLBNoStoreCap, cs) + else if (conditional) then + { + success = if (CP0LLBit[0]) then + #\hyperref[zMEMwzytaggedzyconditional]{MEMw\_tagged\_conditional}#(pAddr, cs_val.tag, #\hyperref[zcapStructToMemBits]{capStructToMemBits}#(cs_val)) + else + false; + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[zzzerozyextend]{zero\_extend}#(success); + } + else + #\hyperref[zMEMwzytagged]{MEMw\_tagged}#(pAddr, cs_val.tag, #\hyperref[zcapStructToMemBits]{capStructToMemBits}#(cs_val)); + } + } +} diff --git a/cheri/sail_latex/sailfnexecuteCSeal.tex b/cheri/sail_latex/sailfnexecuteCSeal.tex new file mode 100644 index 00000000..bf062276 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCSeal.tex @@ -0,0 +1,37 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCSeal]{CSeal}#(cd, cs, ct)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + cs_val = #\hyperref[zreadCapReg]{readCapReg}#(cs); + ct_val = #\hyperref[zreadCapReg]{readCapReg}#(ct); + ct_cursor = #\hyperref[zgetCapCursor]{getCapCursor}#(ct_val); + ct_top = #\hyperref[zgetCapTop]{getCapTop}#(ct_val); + ct_base = #\hyperref[zgetCapBase]{getCapBase}#(ct_val); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cd)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cd) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cs)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cs) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(ct)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, ct) + else if #\hyperref[znot]{not}# (cs_val.tag) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, cs) + else if #\hyperref[znot]{not}# (ct_val.tag) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, ct) + else if (cs_val.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, cs) + else if (ct_val.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, ct) + else if #\hyperref[znot]{not}# (ct_val.permit_seal) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_PermitSealViolation, ct) + else if (ct_cursor < ct_base) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, ct) + else if (ct_cursor >= ct_top) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, ct) + else if (ct_cursor > max_otype) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, ct) + else + let (success, newCap) = #\hyperref[zsealCap]{sealCap}#(cs_val, #\hyperref[ztozybits]{to\_bits}#(24, ct_cursor)) in + if #\hyperref[znot]{not}# (success) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_InexactBounds, cs) + else + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, newCap) +} diff --git a/cheri/sail_latex/sailfnexecuteCSetBounds.tex b/cheri/sail_latex/sailfnexecuteCSetBounds.tex new file mode 100644 index 00000000..b193425d --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCSetBounds.tex @@ -0,0 +1,25 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCSetBounds]{CSetBounds}#(cd, cb, rt)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + let cb_val = #\hyperref[zreadCapReg]{readCapReg}#(cb); + let rt_val = #\hyperref[zunsigned]{unsigned}#(#\hyperref[zrGPR]{rGPR}#(rt)); + cursor = #\hyperref[zgetCapCursor]{getCapCursor}#(cb_val); + base = #\hyperref[zgetCapBase]{getCapBase}#(cb_val); + top = #\hyperref[zgetCapTop]{getCapTop}#(cb_val); + newTop = cursor + rt_val; + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cd)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cd) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if #\hyperref[znot]{not}# (cb_val.tag) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, cb) + else if (cb_val.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, cb) + else if (cursor < base) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, cb) + else if (newTop > top) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, cb) + else + let (_, newCap) = #\hyperref[zsetCapBounds]{setCapBounds}#(cb_val, #\hyperref[ztozybits]{to\_bits}#(64, cursor), #\hyperref[ztozybits]{to\_bits}#(65, newTop)) in + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, newCap) /* ignore exact */ +} diff --git a/cheri/sail_latex/sailfnexecuteCSetBoundsExact.tex b/cheri/sail_latex/sailfnexecuteCSetBoundsExact.tex new file mode 100644 index 00000000..29d049b1 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCSetBoundsExact.tex @@ -0,0 +1,28 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCSetBoundsExact]{CSetBoundsExact}#(cd, cb, rt)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + cb_val = #\hyperref[zreadCapReg]{readCapReg}#(cb); + rt_val = #\hyperref[zunsigned]{unsigned}#(#\hyperref[zrGPR]{rGPR}#(rt)); + cursor = #\hyperref[zgetCapCursor]{getCapCursor}#(cb_val); + base = #\hyperref[zgetCapBase]{getCapBase}#(cb_val); + top = #\hyperref[zgetCapTop]{getCapTop}#(cb_val); + newTop = cursor + rt_val; + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cd)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cd) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if #\hyperref[znot]{not}# (cb_val.tag) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, cb) + else if (cb_val.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, cb) + else if (cursor < base) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, cb) + else if (newTop > top) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, cb) + else + let (exact, newCap) = #\hyperref[zsetCapBounds]{setCapBounds}#(cb_val, #\hyperref[ztozybits]{to\_bits}#(64, cursor), #\hyperref[ztozybits]{to\_bits}#(65, newTop)) in + if #\hyperref[znot]{not}# (exact) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_InexactBounds, cb) + else + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, newCap) +} diff --git a/cheri/sail_latex/sailfnexecuteCSetBoundsImmediate.tex b/cheri/sail_latex/sailfnexecuteCSetBoundsImmediate.tex new file mode 100644 index 00000000..2d3cfb44 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCSetBoundsImmediate.tex @@ -0,0 +1,25 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCSetBoundsImmediate]{CSetBoundsImmediate}#(cd, cb, imm)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + cb_val = #\hyperref[zreadCapReg]{readCapReg}#(cb); + immU = #\hyperref[zunsigned]{unsigned}#(imm); + cursor = #\hyperref[zgetCapCursor]{getCapCursor}#(cb_val); + base = #\hyperref[zgetCapBase]{getCapBase}#(cb_val); + top = #\hyperref[zgetCapTop]{getCapTop}#(cb_val); + newTop = cursor + immU; + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cd)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cd) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if #\hyperref[znot]{not}# (cb_val.tag) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, cb) + else if (cb_val.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, cb) + else if (cursor < base) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, cb) + else if (newTop > top) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, cb) + else + let (_, newCap) = #\hyperref[zsetCapBounds]{setCapBounds}#(cb_val, #\hyperref[ztozybits]{to\_bits}#(64, cursor), #\hyperref[ztozybits]{to\_bits}#(65, newTop)) in + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, newCap) /* ignore exact */ +} diff --git a/cheri/sail_latex/sailfnexecuteCSetCause.tex b/cheri/sail_latex/sailfnexecuteCSetCause.tex new file mode 100644 index 00000000..b6b9ca15 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCSetCause.tex @@ -0,0 +1,12 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCSetCause]{CSetCause}#(rt)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + if #\hyperref[znot]{not}# (#\hyperref[zpcczyaccesszysystemzyregs]{pcc\_access\_system\_regs}# ()) then + #\hyperref[zraisezyctwozyexceptionzynoreg]{raise\_c2\_exception\_noreg}#(CapEx_AccessSystemRegsViolation) + else + { + let rt_val = #\hyperref[zrGPR]{rGPR}#(rt); + CapCause->#\hyperref[zExcCode]{ExcCode}#() = rt_val[15..8]; + CapCause->#\hyperref[zRegNum]{RegNum}#() = rt_val[7..0]; + } +} diff --git a/cheri/sail_latex/sailfnexecuteCSetOffset.tex b/cheri/sail_latex/sailfnexecuteCSetOffset.tex new file mode 100644 index 00000000..6973667a --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCSetOffset.tex @@ -0,0 +1,18 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCSetOffset]{CSetOffset}#(cd, cb, rt)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + let cb_val = #\hyperref[zreadCapReg]{readCapReg}#(cb); + let rt_val = #\hyperref[zrGPR]{rGPR}#(rt); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cd)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cd) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if ((cb_val.tag) & (cb_val.sealed)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, cb) + else + let (success, newCap) = #\hyperref[zsetCapOffset]{setCapOffset}#(cb_val, rt_val) in + if (success) then + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, newCap) + else + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, #\hyperref[zintzytozycap]{int\_to\_cap}#(#\hyperref[ztozybits]{to\_bits}#(64, #\hyperref[zgetCapBase]{getCapBase}#(cb_val)) + rt_val)) +} diff --git a/cheri/sail_latex/sailfnexecuteCStore.tex b/cheri/sail_latex/sailfnexecuteCStore.tex new file mode 100644 index 00000000..6ab40e18 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCStore.tex @@ -0,0 +1,53 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCStore]{CStore}#(rs, cb, rt, rd, offset, width, conditional)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + cb_val = #\hyperref[zreadCapRegDDC]{readCapRegDDC}#(cb); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if #\hyperref[znot]{not}# (cb_val.tag) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, cb) + else if (cb_val.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, cb) + else if #\hyperref[znot]{not}# (cb_val.permit_store) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_PermitStoreViolation, cb) + else + { + size = #\hyperref[zwordWidthBytes]{wordWidthBytes}#(width); + cursor = #\hyperref[zgetCapCursor]{getCapCursor}#(cb_val); + vAddr = (cursor + #\hyperref[zunsigned]{unsigned}#(#\hyperref[zrGPR]{rGPR}#(rt)) + size * #\hyperref[zsigned]{signed}#(offset)) % #\hyperref[zpowtwo]{pow2}#(64); + vAddr64= #\hyperref[ztozybits]{to\_bits}#(64, vAddr); + if ((vAddr + size) > #\hyperref[zgetCapTop]{getCapTop}#(cb_val)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, cb) + else if (vAddr < #\hyperref[zgetCapBase]{getCapBase}#(cb_val)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, cb) + else if #\hyperref[znot]{not}# (#\hyperref[zisAddressAligned]{isAddressAligned}#(vAddr64, width)) then + #\hyperref[zSignalExceptionBadAddr]{SignalExceptionBadAddr}#(AdES, vAddr64) + else + { + pAddr = (#\hyperref[zTLBTranslate]{TLBTranslate}#(vAddr64, StoreData)); + rs_val = #\hyperref[zrGPR]{rGPR}#(rs); + if (conditional) then + { + success : bool = if (CP0LLBit[0]) then + match width + { + B => #\hyperref[zMEMwzyconditionalzywrapper]{MEMw\_conditional\_wrapper}#(pAddr, 1, rs_val[7..0]), + H => #\hyperref[zMEMwzyconditionalzywrapper]{MEMw\_conditional\_wrapper}#(pAddr, 2, rs_val[15..0]), + W => #\hyperref[zMEMwzyconditionalzywrapper]{MEMw\_conditional\_wrapper}#(pAddr, 4, rs_val[31..0]), + D => #\hyperref[zMEMwzyconditionalzywrapper]{MEMw\_conditional\_wrapper}#(pAddr, 8, rs_val) + } + else + false; + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[zzzerozyextend]{zero\_extend}#(success); + } + else + match width + { + B => #\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(pAddr, 1) = rs_val[7..0], + H => #\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(pAddr, 2) = rs_val[15..0], + W => #\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(pAddr, 4) = rs_val[31..0], + D => #\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(pAddr, 8) = rs_val + } + } + } +} diff --git a/cheri/sail_latex/sailfnexecuteCSub.tex b/cheri/sail_latex/sailfnexecuteCSub.tex new file mode 100644 index 00000000..957b645f --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCSub.tex @@ -0,0 +1,14 @@ +function clause #\hyperref[zexecute]{execute}#(#\hyperref[zCSub]{CSub}#(rd, cb, ct)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + let ct_val = #\hyperref[zreadCapReg]{readCapReg}#(ct); + let cb_val = #\hyperref[zreadCapReg]{readCapReg}#(cb); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(ct)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, ct) + else + { + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[ztozybits]{to\_bits}#(64, #\hyperref[zgetCapCursor]{getCapCursor}#(cb_val) - #\hyperref[zgetCapCursor]{getCapCursor}#(ct_val)) + } +} diff --git a/cheri/sail_latex/sailfnexecuteCTestSubset.tex b/cheri/sail_latex/sailfnexecuteCTestSubset.tex new file mode 100644 index 00000000..a339dff7 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCTestSubset.tex @@ -0,0 +1,29 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCTestSubset]{CTestSubset}#(rd, cb, ct)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + cb_val = #\hyperref[zreadCapRegDDC]{readCapRegDDC}#(cb); + ct_val = #\hyperref[zreadCapReg]{readCapReg}#(ct); + ct_top = #\hyperref[zgetCapTop]{getCapTop}#(ct_val); + ct_base = #\hyperref[zgetCapBase]{getCapBase}#(ct_val); + ct_perms = #\hyperref[zgetCapPerms]{getCapPerms}#(ct_val); + cb_top = #\hyperref[zgetCapTop]{getCapTop}#(cb_val); + cb_base = #\hyperref[zgetCapBase]{getCapBase}#(cb_val); + cb_perms = #\hyperref[zgetCapPerms]{getCapPerms}#(cb_val); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(ct)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, ct) + else { + result : #\hyperref[zbits]{bits}#(1) = if (cb_val.tag != ct_val.tag) then + 0b0 + else if (ct_base < cb_base) then + 0b0 + else if (ct_top > cb_top) then + 0b0 + else if ((ct_perms & cb_perms) != ct_perms) then + 0b0 + else + 0b1; + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[zzzerozyextend]{zero\_extend}#(result); + } +} diff --git a/cheri/sail_latex/sailfnexecuteCToPtr.tex b/cheri/sail_latex/sailfnexecuteCToPtr.tex new file mode 100644 index 00000000..f37d7ac3 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCToPtr.tex @@ -0,0 +1,27 @@ +function clause #\hyperref[zexecute]{execute}#(#\hyperref[zCToPtr]{CToPtr}#(rd, cb, ct)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + let ct_val = #\hyperref[zreadCapRegDDC]{readCapRegDDC}#(ct); + let cb_val = #\hyperref[zreadCapReg]{readCapReg}#(cb); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(ct)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, ct) + else if #\hyperref[znot]{not}# (ct_val.tag) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, ct) + else if (cb_val.tag) & (cb_val.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, cb) + else + { + let cbBase = #\hyperref[zgetCapBase]{getCapBase}#(cb_val) in + let cbTop = #\hyperref[zgetCapTop]{getCapTop}#(cb_val) in + let ctBase = #\hyperref[zgetCapBase]{getCapBase}#(ct_val) in + let ctTop = #\hyperref[zgetCapTop]{getCapTop}#(ct_val) in + #\hyperref[zwGPR]{wGPR}#(rd) = if (#\hyperref[znot]{not}# (cb_val.tag)) | + (cbBase < ctBase) | + (cbTop > ctTop) then + #\hyperref[zzzeros]{zeros}#() + else + #\hyperref[ztozybits]{to\_bits}#(64, #\hyperref[zgetCapCursor]{getCapCursor}#(cb_val) - ctBase) + } +} diff --git a/cheri/sail_latex/sailfnexecuteCUnseal.tex b/cheri/sail_latex/sailfnexecuteCUnseal.tex new file mode 100644 index 00000000..48b529ef --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCUnseal.tex @@ -0,0 +1,35 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCUnseal]{CUnseal}#(cd, cs, ct)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + cs_val = #\hyperref[zreadCapReg]{readCapReg}#(cs); + ct_val = #\hyperref[zreadCapReg]{readCapReg}#(ct); + ct_cursor = #\hyperref[zgetCapCursor]{getCapCursor}#(ct_val); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cd)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cd) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cs)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cs) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(ct)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, ct) + else if #\hyperref[znot]{not}# (cs_val.tag) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, cs) + else if #\hyperref[znot]{not}# (ct_val.tag) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, ct) + else if #\hyperref[znot]{not}# (cs_val.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, cs) + else if (ct_val.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, ct) + else if (ct_cursor != #\hyperref[zunsigned]{unsigned}#(cs_val.otype)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TypeViolation, ct) + else if #\hyperref[znot]{not}# (ct_val.permit_unseal) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_PermitUnsealViolation, ct) + else if (ct_cursor < #\hyperref[zgetCapBase]{getCapBase}#(ct_val)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, ct) + else if (ct_cursor >= #\hyperref[zgetCapTop]{getCapTop}#(ct_val)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, ct) + else + #\hyperref[zwriteCapReg]{writeCapReg}#(cd, {cs_val with + sealed=false, + otype=#\hyperref[zzzeros]{zeros}#(), + global=(cs_val.global & ct_val.global) + }) +} diff --git a/cheri/sail_latex/sailfnexecuteCWriteHwr.tex b/cheri/sail_latex/sailfnexecuteCWriteHwr.tex new file mode 100644 index 00000000..586efb38 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCWriteHwr.tex @@ -0,0 +1,35 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCWriteHwr]{CWriteHwr}#(cb, sel)) = +{ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + let (needSup, needAccessSys) : (bool, bool) = match #\hyperref[zunsigned]{unsigned}#(sel) { + 0 => (false, false), /* DDC -- no access control */ + 1 => (false, false), /* CTLSU -- no access control */ + 8 => (false, true), /* CTLSP -- privileged TLS */ + 22 => (true, false), /* KR1C */ + 23 => (true, false), /* KR2C */ + 29 => (true, true), /* KCC */ + 30 => (true, true), /* KDC */ + 31 => (true, true), /* EPCC */ + _ => #\hyperref[zSignalException]{SignalException}#(ResI) + }; + if #\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if needAccessSys & #\hyperref[znot]{not}#(#\hyperref[zpcczyaccesszysystemzyregs]{pcc\_access\_system\_regs}#()) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, sel) + else if needSup & #\hyperref[znot]{not}#(#\hyperref[zgrantsAccess]{grantsAccess}#(#\hyperref[zgetAccessLevel]{getAccessLevel}#(), Supervisor)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, sel) + else { + capVal = #\hyperref[zreadCapReg]{readCapReg}#(cb); + match #\hyperref[zunsigned]{unsigned}#(sel) { + 0 => DDC = #\hyperref[zcapStructToCapReg]{capStructToCapReg}#(capVal), + 1 => CTLSU = #\hyperref[zcapStructToCapReg]{capStructToCapReg}#(capVal), + 8 => CTLSP = #\hyperref[zcapStructToCapReg]{capStructToCapReg}#(capVal), + 22 => KR1C = #\hyperref[zcapStructToCapReg]{capStructToCapReg}#(capVal), + 23 => KR2C = #\hyperref[zcapStructToCapReg]{capStructToCapReg}#(capVal), + 29 => KCC = #\hyperref[zcapStructToCapReg]{capStructToCapReg}#(capVal), + 30 => KDC = #\hyperref[zcapStructToCapReg]{capStructToCapReg}#(capVal), + 31 => EPCC = #\hyperref[zcapStructToCapReg]{capStructToCapReg}#(capVal), + _ => assert(false, "should be unreachable code") + }; + }; +} diff --git a/cheri/sail_latex/sailfnexecuteClearRegs.tex b/cheri/sail_latex/sailfnexecuteClearRegs.tex new file mode 100644 index 00000000..5283918f --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteClearRegs.tex @@ -0,0 +1,21 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zClearRegs]{ClearRegs}#(regset, m)) = +{ + if ((regset == CLo) | (regset == CHi)) then + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + if (regset == CHi) then + foreach (i from 0 to 15) + let r = #\hyperref[ztozybits]{to\_bits}#(5, i+16) in + if (m[i] & #\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(r)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, r); + foreach (i from 0 to 15) + if (m[i]) then + match regset { + GPLo => #\hyperref[zwGPR]{wGPR}#(#\hyperref[ztozybits]{to\_bits}#(5, i)) = #\hyperref[zzzeros]{zeros}#(), + GPHi => #\hyperref[zwGPR]{wGPR}#(#\hyperref[ztozybits]{to\_bits}#(5, i+16)) = #\hyperref[zzzeros]{zeros}#(), + CLo => if i == 0 then + DDC = #\hyperref[zcapStructToCapReg]{capStructToCapReg}#(null_cap) + else + #\hyperref[zwriteCapReg]{writeCapReg}#(#\hyperref[ztozybits]{to\_bits}#(5, i)) = null_cap, + CHi => #\hyperref[zwriteCapReg]{writeCapReg}#(#\hyperref[ztozybits]{to\_bits}#(5, i+16)) = null_cap + } +} diff --git a/cheri/sail_latex/sailfnexecuteCtwoDump.tex b/cheri/sail_latex/sailfnexecuteCtwoDump.tex new file mode 100644 index 00000000..d4986ec2 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteCtwoDump.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCtwoDump]{C2Dump}# (rt)) = + () /* Currently a NOP */ diff --git a/cheri/sail_latex/sailfnexecuteDADD.tex b/cheri/sail_latex/sailfnexecuteDADD.tex new file mode 100644 index 00000000..8a3c2f76 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteDADD.tex @@ -0,0 +1,10 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zDADD]{DADD}# (rs, rt, rd)) = + { + let sum65 : #\hyperref[zbits]{bits}#(65) = #\hyperref[zsignzyextend]{sign\_extend}#(#\hyperref[zrGPR]{rGPR}#(rs)) + #\hyperref[zsignzyextend]{sign\_extend}#(#\hyperref[zrGPR]{rGPR}#(rt)) in + { + if sum65[64] != sum65[63] then + (#\hyperref[zSignalException]{SignalException}#(Ov)) + else + #\hyperref[zwGPR]{wGPR}#(rd) = sum65[63..0] + } + } diff --git a/cheri/sail_latex/sailfnexecuteDADDI.tex b/cheri/sail_latex/sailfnexecuteDADDI.tex new file mode 100644 index 00000000..c03260b8 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteDADDI.tex @@ -0,0 +1,10 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zDADDI]{DADDI}# (rs, rt, imm)) = + { + let sum65 : #\hyperref[zbits]{bits}#(65) = #\hyperref[zsignzyextend]{sign\_extend}#(#\hyperref[zrGPR]{rGPR}#(rs)) + #\hyperref[zsignzyextend]{sign\_extend}#(imm) in + { + if (sum65[64] != sum65[63]) then + (#\hyperref[zSignalException]{SignalException}#(Ov)) + else + #\hyperref[zwGPR]{wGPR}#(rt) = sum65[63..0] + } + } diff --git a/cheri/sail_latex/sailfnexecuteDADDIU.tex b/cheri/sail_latex/sailfnexecuteDADDIU.tex new file mode 100644 index 00000000..028190a0 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteDADDIU.tex @@ -0,0 +1,4 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zDADDIU]{DADDIU}# (rs, rt, imm)) = + { + #\hyperref[zwGPR]{wGPR}#(rt) = #\hyperref[zrGPR]{rGPR}#(rs) + #\hyperref[zsignzyextend]{sign\_extend}#(imm) + } diff --git a/cheri/sail_latex/sailfnexecuteDADDU.tex b/cheri/sail_latex/sailfnexecuteDADDU.tex new file mode 100644 index 00000000..610deeef --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteDADDU.tex @@ -0,0 +1,4 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zDADDU]{DADDU}# (rs, rt, rd)) = + { + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[zrGPR]{rGPR}#(rs) + #\hyperref[zrGPR]{rGPR}#(rt) + } diff --git a/cheri/sail_latex/sailfnexecuteDDIV.tex b/cheri/sail_latex/sailfnexecuteDDIV.tex new file mode 100644 index 00000000..9e16d758 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteDDIV.tex @@ -0,0 +1,16 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zDDIV]{DDIV}#(rs, rt)) = + { + rsVal = #\hyperref[zsigned]{signed}#(#\hyperref[zrGPR]{rGPR}#(rs)); + rtVal = #\hyperref[zsigned]{signed}#(#\hyperref[zrGPR]{rGPR}#(rt)); + let (q , r) = + if (rtVal == 0) + then (undefined : #\hyperref[zbits]{bits}#(64), undefined : #\hyperref[zbits]{bits}#(64)) + else + let qi = #\hyperref[zquotzyroundzyzzero]{quot\_round\_zero}#(rsVal, rtVal) in + let ri = (rsVal - (qi * rtVal)) in + (#\hyperref[ztozybits]{to\_bits}#(64, qi), #\hyperref[ztozybits]{to\_bits}#(64, ri)) in + { + LO = q; + HI = r; + } + } diff --git a/cheri/sail_latex/sailfnexecuteDDIVU.tex b/cheri/sail_latex/sailfnexecuteDDIVU.tex new file mode 100644 index 00000000..af83d644 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteDDIVU.tex @@ -0,0 +1,16 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zDDIVU]{DDIVU}#(rs, rt)) = + { + rsVal = #\hyperref[zunsigned]{unsigned}#(#\hyperref[zrGPR]{rGPR}#(rs)); + rtVal = #\hyperref[zunsigned]{unsigned}#(#\hyperref[zrGPR]{rGPR}#(rt)); + let (q, r) = + if (rtVal == 0) + then (undefined : #\hyperref[zbits]{bits}#(64), undefined : #\hyperref[zbits]{bits}#(64)) + else + let qi = #\hyperref[zquotzyroundzyzzero]{quot\_round\_zero}#(rsVal, rtVal) in + let ri = #\hyperref[zremzyroundzyzzero]{rem\_round\_zero}#(rsVal, rtVal) in + (#\hyperref[ztozybits]{to\_bits}#(64, qi), #\hyperref[ztozybits]{to\_bits}#(64, ri)) in + { + LO = q; + HI = r; + } + } diff --git a/cheri/sail_latex/sailfnexecuteDIV.tex b/cheri/sail_latex/sailfnexecuteDIV.tex new file mode 100644 index 00000000..8bebe43f --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteDIV.tex @@ -0,0 +1,19 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zDIV]{DIV}#(rs, rt)) = + { + rsVal = #\hyperref[zrGPR]{rGPR}#(rs); + rtVal = #\hyperref[zrGPR]{rGPR}#(rt); + let (q, r) = + if (#\hyperref[zNotWordVal]{NotWordVal}#(rsVal) | #\hyperref[zNotWordVal]{NotWordVal}#(rtVal) | (rtVal == 0x0000000000000000)) then + (undefined : #\hyperref[zbits]{bits}#(32), undefined : #\hyperref[zbits]{bits}#(32)) + else + let si = #\hyperref[zsigned]{signed}#((rsVal[31..0])) in + let ti = #\hyperref[zsigned]{signed}#((rtVal[31..0])) in + let qi = #\hyperref[zquotzyroundzyzzero]{quot\_round\_zero}#(si, ti) in + let ri = si - (ti*qi) in + (#\hyperref[ztozybits]{to\_bits}#(32, qi), #\hyperref[ztozybits]{to\_bits}#(32, ri)) + in + { + HI = #\hyperref[zsignzyextend]{sign\_extend}#(r); + LO = #\hyperref[zsignzyextend]{sign\_extend}#(q); + } + } diff --git a/cheri/sail_latex/sailfnexecuteDIVU.tex b/cheri/sail_latex/sailfnexecuteDIVU.tex new file mode 100644 index 00000000..a6e54b6a --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteDIVU.tex @@ -0,0 +1,19 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zDIVU]{DIVU}#(rs, rt)) = + { + rsVal = #\hyperref[zrGPR]{rGPR}#(rs); + rtVal = #\hyperref[zrGPR]{rGPR}#(rt); + let (q, r) = + if (#\hyperref[zNotWordVal]{NotWordVal}#(rsVal) | #\hyperref[zNotWordVal]{NotWordVal}#(rtVal) | rtVal == 0x0000000000000000) then + (undefined : #\hyperref[zbits]{bits}#(32), undefined : #\hyperref[zbits]{bits}#(32)) + else + let si = #\hyperref[zunsigned]{unsigned}#(rsVal[31..0]) in + let ti = #\hyperref[zunsigned]{unsigned}#(rtVal[31..0]) in + let qi = #\hyperref[zquotzyroundzyzzero]{quot\_round\_zero}#(si, ti) in + let ri = #\hyperref[zremzyroundzyzzero]{rem\_round\_zero}#(si, ti) in + (#\hyperref[ztozybits]{to\_bits}#(32, qi), #\hyperref[ztozybits]{to\_bits}#(32, ri)) + in + { + HI = #\hyperref[zsignzyextend]{sign\_extend}#(r); + LO = #\hyperref[zsignzyextend]{sign\_extend}#(q); + } + } diff --git a/cheri/sail_latex/sailfnexecuteDMULT.tex b/cheri/sail_latex/sailfnexecuteDMULT.tex new file mode 100644 index 00000000..595fdc74 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteDMULT.tex @@ -0,0 +1,6 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zDMULT]{DMULT}#(rs, rt)) = + { + result = #\hyperref[zrGPR]{rGPR}#(rs) *_s #\hyperref[zrGPR]{rGPR}#(rt); + HI = (result[127..64]); + LO = (result[63..0]); + } diff --git a/cheri/sail_latex/sailfnexecuteDMULTU.tex b/cheri/sail_latex/sailfnexecuteDMULTU.tex new file mode 100644 index 00000000..cb23f01f --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteDMULTU.tex @@ -0,0 +1,6 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zDMULTU]{DMULTU}#(rs, rt)) = + { + result = #\hyperref[zrGPR]{rGPR}#(rs) *_u #\hyperref[zrGPR]{rGPR}#(rt); + HI = (result[127..64]); + LO = (result[63..0]); + } diff --git a/cheri/sail_latex/sailfnexecuteDSLL.tex b/cheri/sail_latex/sailfnexecuteDSLL.tex new file mode 100644 index 00000000..d470bb23 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteDSLL.tex @@ -0,0 +1,5 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zDSLL]{DSLL}# (rt, rd, sa)) = + { + + #\hyperref[zwGPR]{wGPR}#(rd) = (#\hyperref[zrGPR]{rGPR}#(rt) << sa) + } diff --git a/cheri/sail_latex/sailfnexecuteDSLLV.tex b/cheri/sail_latex/sailfnexecuteDSLLV.tex new file mode 100644 index 00000000..87270292 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteDSLLV.tex @@ -0,0 +1,4 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zDSLLV]{DSLLV}# (rs, rt, rd)) = + { + #\hyperref[zwGPR]{wGPR}#(rd) = (#\hyperref[zrGPR]{rGPR}#(rt) << ((#\hyperref[zrGPR]{rGPR}#(rs))[5 .. 0])) + } diff --git a/cheri/sail_latex/sailfnexecuteDSLLthreetwo.tex b/cheri/sail_latex/sailfnexecuteDSLLthreetwo.tex new file mode 100644 index 00000000..0af771cf --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteDSLLthreetwo.tex @@ -0,0 +1,4 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zDSLLthreetwo]{DSLL32}# (rt, rd, sa)) = + { + #\hyperref[zwGPR]{wGPR}#(rd) = (#\hyperref[zrGPR]{rGPR}#(rt) << (0b1 @ sa)) + } diff --git a/cheri/sail_latex/sailfnexecuteDSRA.tex b/cheri/sail_latex/sailfnexecuteDSRA.tex new file mode 100644 index 00000000..119d7e4d --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteDSRA.tex @@ -0,0 +1,5 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zDSRA]{DSRA}# (rt, rd, sa)) = + { + temp = #\hyperref[zrGPR]{rGPR}#(rt); + #\hyperref[zwGPR]{wGPR}#(rd) = temp >>_s sa + } diff --git a/cheri/sail_latex/sailfnexecuteDSRAV.tex b/cheri/sail_latex/sailfnexecuteDSRAV.tex new file mode 100644 index 00000000..35f4a18c --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteDSRAV.tex @@ -0,0 +1,6 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zDSRAV]{DSRAV}# (rs, rt, rd)) = + { + temp = #\hyperref[zrGPR]{rGPR}#(rt); + sa = #\hyperref[zrGPR]{rGPR}#(rs)[5..0]; + #\hyperref[zwGPR]{wGPR}#(rd) = temp >>_s sa + } diff --git a/cheri/sail_latex/sailfnexecuteDSRAthreetwo.tex b/cheri/sail_latex/sailfnexecuteDSRAthreetwo.tex new file mode 100644 index 00000000..9a0380a5 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteDSRAthreetwo.tex @@ -0,0 +1,6 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zDSRAthreetwo]{DSRA32}# (rt, rd, sa)) = + { + temp = #\hyperref[zrGPR]{rGPR}#(rt); + sa32 = 0b1 @ sa; /* sa+32 */ + #\hyperref[zwGPR]{wGPR}#(rd) = temp >>_s sa32 + } diff --git a/cheri/sail_latex/sailfnexecuteDSRL.tex b/cheri/sail_latex/sailfnexecuteDSRL.tex new file mode 100644 index 00000000..bebaebba --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteDSRL.tex @@ -0,0 +1,5 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zDSRL]{DSRL}# (rt, rd, sa)) = + { + temp = #\hyperref[zrGPR]{rGPR}#(rt); + #\hyperref[zwGPR]{wGPR}#(rd) = temp >> sa; + } diff --git a/cheri/sail_latex/sailfnexecuteDSRLV.tex b/cheri/sail_latex/sailfnexecuteDSRLV.tex new file mode 100644 index 00000000..d0dc368c --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteDSRLV.tex @@ -0,0 +1,6 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zDSRLV]{DSRLV}# (rs, rt, rd)) = + { + temp = #\hyperref[zrGPR]{rGPR}#(rt); + sa = #\hyperref[zrGPR]{rGPR}#(rs)[5..0]; + #\hyperref[zwGPR]{wGPR}#(rd) = temp >> sa; + } diff --git a/cheri/sail_latex/sailfnexecuteDSRLthreetwo.tex b/cheri/sail_latex/sailfnexecuteDSRLthreetwo.tex new file mode 100644 index 00000000..155fe058 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteDSRLthreetwo.tex @@ -0,0 +1,6 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zDSRLthreetwo]{DSRL32}# (rt, rd, sa)) = + { + temp = #\hyperref[zrGPR]{rGPR}#(rt); + sa32 = 0b1 @ sa; /* sa+32 */ + #\hyperref[zwGPR]{wGPR}#(rd) = temp >> sa32; + } diff --git a/cheri/sail_latex/sailfnexecuteDSUB.tex b/cheri/sail_latex/sailfnexecuteDSUB.tex new file mode 100644 index 00000000..b4021172 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteDSUB.tex @@ -0,0 +1,10 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zDSUB]{DSUB}# (rs, rt, rd)) = + { + let temp65 : #\hyperref[zbits]{bits}#(65) = #\hyperref[zsignzyextend]{sign\_extend}#(#\hyperref[zrGPR]{rGPR}#(rs)) - #\hyperref[zsignzyextend]{sign\_extend}#(#\hyperref[zrGPR]{rGPR}#(rt)) in + { + if temp65[64] != temp65[63] then + (#\hyperref[zSignalException]{SignalException}#(Ov)) + else + #\hyperref[zwGPR]{wGPR}#(rd) = temp65[63..0] + } + } diff --git a/cheri/sail_latex/sailfnexecuteDSUBU.tex b/cheri/sail_latex/sailfnexecuteDSUBU.tex new file mode 100644 index 00000000..1f0f28ec --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteDSUBU.tex @@ -0,0 +1,4 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zDSUBU]{DSUBU}# (rs, rt, rd)) = + { + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[zrGPR]{rGPR}#(rs) - #\hyperref[zrGPR]{rGPR}#(rt) + } diff --git a/cheri/sail_latex/sailfnexecuteERET.tex b/cheri/sail_latex/sailfnexecuteERET.tex new file mode 100644 index 00000000..1517ff7d --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteERET.tex @@ -0,0 +1,16 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zERET]{ERET}#()) = + { + #\hyperref[zcheckCPzeroAccess]{checkCP0Access}#(); + #\hyperref[zERETHook]{ERETHook}#(); + CP0LLBit = 0b0; + if (CP0Status.#\hyperref[zERL]{ERL}#() == bitone) then + { + nextPC = CP0ErrorEPC; + CP0Status->#\hyperref[zERL]{ERL}#() = 0b0; + } + else + { + nextPC = CP0EPC; + CP0Status->#\hyperref[zEXL]{EXL}#() = 0b0; + } + } diff --git a/cheri/sail_latex/sailfnexecuteHCF.tex b/cheri/sail_latex/sailfnexecuteHCF.tex new file mode 100644 index 00000000..29eef4b5 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteHCF.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zHCF]{HCF}#()) = + () /* halt instruction actually executed by interpreter framework */ diff --git a/cheri/sail_latex/sailfnexecuteJ.tex b/cheri/sail_latex/sailfnexecuteJ.tex new file mode 100644 index 00000000..b671d406 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteJ.tex @@ -0,0 +1,4 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zJ]{J}#(offset)) = + { + #\hyperref[zexecutezybranch]{execute\_branch}#((PC + 4)[63..28] @ offset @ 0b00); + } diff --git a/cheri/sail_latex/sailfnexecuteJAL.tex b/cheri/sail_latex/sailfnexecuteJAL.tex new file mode 100644 index 00000000..3aa4dbf4 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteJAL.tex @@ -0,0 +1,5 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zJAL]{JAL}#(offset)) = + { + #\hyperref[zexecutezybranch]{execute\_branch}#((PC + 4)[63..28] @ offset @ 0b00); + #\hyperref[zwGPR]{wGPR}#(0b11111) = PC + 8; + } diff --git a/cheri/sail_latex/sailfnexecuteJALR.tex b/cheri/sail_latex/sailfnexecuteJALR.tex new file mode 100644 index 00000000..41415ba8 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteJALR.tex @@ -0,0 +1,5 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zJALR]{JALR}#(rs, rd)) = + { + #\hyperref[zexecutezybranch]{execute\_branch}#(#\hyperref[zrGPR]{rGPR}#(rs)); + #\hyperref[zwGPR]{wGPR}#(rd) = PC + 8; + } diff --git a/cheri/sail_latex/sailfnexecuteJR.tex b/cheri/sail_latex/sailfnexecuteJR.tex new file mode 100644 index 00000000..ab19bbfb --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteJR.tex @@ -0,0 +1,4 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zJR]{JR}#(rs)) = + { + #\hyperref[zexecutezybranch]{execute\_branch}#(#\hyperref[zrGPR]{rGPR}#(rs)); + } diff --git a/cheri/sail_latex/sailfnexecuteLDL.tex b/cheri/sail_latex/sailfnexecuteLDL.tex new file mode 100644 index 00000000..c7df3f65 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteLDL.tex @@ -0,0 +1,20 @@ +function clause #\hyperref[zexecute]{execute}#(#\hyperref[zLDL]{LDL}#(base, rt, offset)) = + { + vAddr = #\hyperref[zaddrWrapperUnaligned]{addrWrapperUnaligned}#(#\hyperref[zsignzyextend]{sign\_extend}#(offset) + #\hyperref[zrGPR]{rGPR}#(base), LoadData, DL); + let pAddr = #\hyperref[zTLBTranslate]{TLBTranslate}#(vAddr, LoadData) in + { + mem_val = #\hyperref[zMEMrzywrapper]{MEMr\_wrapper}#(pAddr[63..3] @ 0b000, 8); /* read double of interest */ + reg_val = #\hyperref[zrGPR]{rGPR}#(rt); + #\hyperref[zwGPR]{wGPR}#(rt) = match vAddr[2..0] + { + 0b000 => mem_val, + 0b001 => mem_val[55..0] @ reg_val[7..0], + 0b010 => mem_val[47..0] @ reg_val[15..0], + 0b011 => mem_val[39..0] @ reg_val[23..0], + 0b100 => mem_val[31..0] @ reg_val[31..0], + 0b101 => mem_val[23..0] @ reg_val[39..0], + 0b110 => mem_val[15..0] @ reg_val[47..0], + 0b111 => mem_val[07..0] @ reg_val[55..0] + }; + } + } diff --git a/cheri/sail_latex/sailfnexecuteLDR.tex b/cheri/sail_latex/sailfnexecuteLDR.tex new file mode 100644 index 00000000..a66114b2 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteLDR.tex @@ -0,0 +1,20 @@ +function clause #\hyperref[zexecute]{execute}#(#\hyperref[zLDR]{LDR}#(base, rt, offset)) = + { + vAddr = #\hyperref[zaddrWrapperUnaligned]{addrWrapperUnaligned}#(#\hyperref[zsignzyextend]{sign\_extend}#(offset) + #\hyperref[zrGPR]{rGPR}#(base), LoadData, DR); + let pAddr = #\hyperref[zTLBTranslate]{TLBTranslate}#(vAddr, LoadData) in + { + mem_val = #\hyperref[zMEMrzywrapper]{MEMr\_wrapper}#(pAddr[63..3] @ 0b000, 8); /* read double of interest */ + reg_val = #\hyperref[zrGPR]{rGPR}#(rt); + #\hyperref[zwGPR]{wGPR}#(rt) = match vAddr[2..0] + { + 0b000 => reg_val[63..08] @ mem_val[63..56], + 0b001 => reg_val[63..16] @ mem_val[63..48], + 0b010 => reg_val[63..24] @ mem_val[63..40], + 0b011 => reg_val[63..32] @ mem_val[63..32], + 0b100 => reg_val[63..40] @ mem_val[63..24], + 0b101 => reg_val[63..48] @ mem_val[63..16], + 0b110 => reg_val[63..56] @ mem_val[63..08], + 0b111 => mem_val + }; + } + } diff --git a/cheri/sail_latex/sailfnexecuteLUI.tex b/cheri/sail_latex/sailfnexecuteLUI.tex new file mode 100644 index 00000000..9c3f8089 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteLUI.tex @@ -0,0 +1,4 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zLUI]{LUI}# (rt, imm)) = + { + #\hyperref[zwGPR]{wGPR}#(rt) = #\hyperref[zsignzyextend]{sign\_extend}#(imm @ 0x0000) + } diff --git a/cheri/sail_latex/sailfnexecuteLWL.tex b/cheri/sail_latex/sailfnexecuteLWL.tex new file mode 100644 index 00000000..46fd760d --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteLWL.tex @@ -0,0 +1,17 @@ +function clause #\hyperref[zexecute]{execute}#(#\hyperref[zLWL]{LWL}#(base, rt, offset)) = + { + vAddr = #\hyperref[zaddrWrapperUnaligned]{addrWrapperUnaligned}#(#\hyperref[zsignzyextend]{sign\_extend}#(offset) + #\hyperref[zrGPR]{rGPR}#(base), LoadData, WL); + let pAddr = (#\hyperref[zTLBTranslate]{TLBTranslate}#(vAddr, LoadData)) in + { + mem_val = #\hyperref[zMEMrzywrapper]{MEMr\_wrapper}# (pAddr[63..2] @ 0b00, 4); /* read word of interest */ + reg_val = #\hyperref[zrGPR]{rGPR}#(rt); + result : #\hyperref[zbits]{bits}#(32) = match vAddr[1..0] + { + 0b00 => mem_val, + 0b01 => mem_val[23..0] @ reg_val[07..0], + 0b10 => mem_val[15..0] @ reg_val[15..0], + 0b11 => mem_val[07..0] @ reg_val[23..0] + }; + #\hyperref[zwGPR]{wGPR}#(rt) = #\hyperref[zsignzyextend]{sign\_extend}#(result); + } + } diff --git a/cheri/sail_latex/sailfnexecuteLWR.tex b/cheri/sail_latex/sailfnexecuteLWR.tex new file mode 100644 index 00000000..c72d81e0 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteLWR.tex @@ -0,0 +1,17 @@ +function clause #\hyperref[zexecute]{execute}#(#\hyperref[zLWR]{LWR}#(base, rt, offset)) = + { + vAddr = #\hyperref[zaddrWrapperUnaligned]{addrWrapperUnaligned}#(#\hyperref[zsignzyextend]{sign\_extend}#(offset) + #\hyperref[zrGPR]{rGPR}#(base), LoadData, WR); + let pAddr = (#\hyperref[zTLBTranslate]{TLBTranslate}#(vAddr, LoadData)) in + { + mem_val = #\hyperref[zMEMrzywrapper]{MEMr\_wrapper}#(pAddr[63..2] @ 0b00, 4); /* read word of interest */ + reg_val = #\hyperref[zrGPR]{rGPR}#(rt); + result : #\hyperref[zbits]{bits}#(32) = match vAddr[1..0] + { + 0b00 => reg_val[31..8] @ mem_val[31..24], + 0b01 => reg_val[31..16] @ mem_val[31..16], + 0b10 => reg_val[31..24] @ mem_val[31..8], + 0b11 => mem_val + }; + #\hyperref[zwGPR]{wGPR}#(rt) = #\hyperref[zsignzyextend]{sign\_extend}#(result) + } + } diff --git a/cheri/sail_latex/sailfnexecuteLoad.tex b/cheri/sail_latex/sailfnexecuteLoad.tex new file mode 100644 index 00000000..2db4a73b --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteLoad.tex @@ -0,0 +1,30 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zLoad]{Load}#(width, sign, linked, base, rt, offset)) = + { + vAddr : #\hyperref[zbits]{bits}#(64) = #\hyperref[zaddrWrapper]{addrWrapper}#(#\hyperref[zsignzyextend]{sign\_extend}#(offset) + #\hyperref[zrGPR]{rGPR}#(base), LoadData, width); + if ~ (#\hyperref[zisAddressAligned]{isAddressAligned}#(vAddr, width)) then + (#\hyperref[zSignalExceptionBadAddr]{SignalExceptionBadAddr}#(AdEL, vAddr)) /* unaligned access */ + else + let pAddr = (#\hyperref[zTLBTranslate]{TLBTranslate}#(vAddr, LoadData)) in + { + memResult : #\hyperref[zbits]{bits}#(64) = if (linked) then + { + CP0LLBit = 0b1; + CP0LLAddr = pAddr; + match width { + W => #\hyperref[zextendLoad]{extendLoad}#(#\hyperref[zMEMrzyreservezywrapper]{MEMr\_reserve\_wrapper}#(pAddr, 4), sign), + D => #\hyperref[zextendLoad]{extendLoad}#(#\hyperref[zMEMrzyreservezywrapper]{MEMr\_reserve\_wrapper}#(pAddr, 8), sign), + _ => throw(#\hyperref[zErrorzyinternalzyerror]{Error\_internal\_error}#()) /* there is no llbc or llhc */ + } + } + else + { + match width { + B => #\hyperref[zextendLoad]{extendLoad}#(#\hyperref[zMEMrzywrapper]{MEMr\_wrapper}#(pAddr, 1), sign), + H => #\hyperref[zextendLoad]{extendLoad}#(#\hyperref[zMEMrzywrapper]{MEMr\_wrapper}#(pAddr, 2), sign), + W => #\hyperref[zextendLoad]{extendLoad}#(#\hyperref[zMEMrzywrapper]{MEMr\_wrapper}#(pAddr, 4), sign), + D => #\hyperref[zextendLoad]{extendLoad}#(#\hyperref[zMEMrzywrapper]{MEMr\_wrapper}#(pAddr, 8), sign) + } + }; + #\hyperref[zwGPR]{wGPR}#(rt) = memResult + } + } diff --git a/cheri/sail_latex/sailfnexecuteMADD.tex b/cheri/sail_latex/sailfnexecuteMADD.tex new file mode 100644 index 00000000..77d54494 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteMADD.tex @@ -0,0 +1,12 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zMADD]{MADD}#(rs, rt)) = + { + rsVal = #\hyperref[zrGPR]{rGPR}#(rs); + rtVal = #\hyperref[zrGPR]{rGPR}#(rt); + mul_result : #\hyperref[zbits]{bits}#(64) = if (#\hyperref[zNotWordVal]{NotWordVal}#(rsVal) | #\hyperref[zNotWordVal]{NotWordVal}#(rtVal)) then + undefined + else + rsVal[31..0] *_s rtVal[31..0]; + result = mul_result + (HI[31..0] @ LO[31..0]); + HI = #\hyperref[zsignzyextend]{sign\_extend}#(result[63..32]); + LO = #\hyperref[zsignzyextend]{sign\_extend}#(result[31..0]); + } diff --git a/cheri/sail_latex/sailfnexecuteMADDU.tex b/cheri/sail_latex/sailfnexecuteMADDU.tex new file mode 100644 index 00000000..67f95457 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteMADDU.tex @@ -0,0 +1,12 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zMADDU]{MADDU}#(rs, rt)) = + { + rsVal = #\hyperref[zrGPR]{rGPR}#(rs); + rtVal = #\hyperref[zrGPR]{rGPR}#(rt); + mul_result : #\hyperref[zbits]{bits}#(64) = if (#\hyperref[zNotWordVal]{NotWordVal}#(rsVal) | #\hyperref[zNotWordVal]{NotWordVal}#(rtVal)) then + undefined + else + rsVal[31..0] *_u rtVal[31..0]; + result = mul_result + (HI[31..0] @ LO[31..0]); + HI = #\hyperref[zsignzyextend]{sign\_extend}#(result[63..32]); + LO = #\hyperref[zsignzyextend]{sign\_extend}#(result[31..0]); + } diff --git a/cheri/sail_latex/sailfnexecuteMFCzero.tex b/cheri/sail_latex/sailfnexecuteMFCzero.tex new file mode 100644 index 00000000..c15ef9f8 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteMFCzero.tex @@ -0,0 +1,70 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zMFCzero]{MFC0}#(rt, rd, sel, double)) = { + #\hyperref[zcheckCPzeroAccess]{checkCP0Access}#(); + let result : #\hyperref[zbits]{bits}#(64) = match (rd, sel) + { + (0b00000,0b000) => let idx : #\hyperref[zbits]{bits}#(31) = #\hyperref[zzzerozyextend]{zero\_extend}#(TLBIndex) in + (0x00000000 @ TLBProbe @ idx), /* 0, TLB Index */ + (0b00001,0b000) => #\hyperref[zzzerozyextend]{zero\_extend}#(TLBRandom), /* 1, TLB Random */ + (0b00010,0b000) => TLBEntryLo0.#\hyperref[zbits]{bits}#(), /* 2, TLB EntryLo0 */ + (0b00011,0b000) => TLBEntryLo1.#\hyperref[zbits]{bits}#(), /* 3, TLB EntryLo1 */ + (0b00100,0b000) => TLBContext.#\hyperref[zbits]{bits}#(), /* 4, TLB Context */ + (0b00100,0b010) => CP0UserLocal, + (0b00101,0b000) => #\hyperref[zzzerozyextend]{zero\_extend}#(TLBPageMask @ 0x000), /* 5, TLB PageMask */ + (0b00110,0b000) => #\hyperref[zzzerozyextend]{zero\_extend}#(TLBWired), /* 6, TLB Wired */ + (0b00111,0b000) => #\hyperref[zzzerozyextend]{zero\_extend}#(CP0HWREna), /* 7, HWREna */ + (0b01000,0b000) => CP0BadVAddr, /* 8, BadVAddr reg */ + (0b01000,0b001) => #\hyperref[zzzerozyextend]{zero\_extend}#(0b0), /* 8, BadInstr reg XXX TODO */ + (0b01001,0b000) => #\hyperref[zzzerozyextend]{zero\_extend}#(CP0Count), /* 9, Count reg */ + (0b01010,0b000) => TLBEntryHi.#\hyperref[zbits]{bits}#(),/* 10, TLB EntryHi */ + (0b01011,0b000) => #\hyperref[zzzerozyextend]{zero\_extend}#(CP0Compare), /* 11, Compare reg */ + (0b01100,0b000) => #\hyperref[zzzerozyextend]{zero\_extend}#(CP0Status.#\hyperref[zbits]{bits}#()), /* 12, Status reg */ + (0b01101,0b000) => #\hyperref[zzzerozyextend]{zero\_extend}#(CP0Cause.#\hyperref[zbits]{bits}#()), /* 13, Cause reg */ + (0b01110,0b000) => CP0EPC, /* 14, EPC */ + (0b01111,0b000) => #\hyperref[zzzerozyextend]{zero\_extend}#(0x00000400), /* 15, sel 0: PrID processor ID */ + (0b01111,0b110) => #\hyperref[zzzerozyextend]{zero\_extend}#(0b0), /* 15, sel 6: CHERI core ID */ + (0b01111,0b111) => #\hyperref[zzzerozyextend]{zero\_extend}#(0b0), /* 15, sel 7: CHERI thread ID */ + (0b10000,0b000) => #\hyperref[zzzerozyextend]{zero\_extend}#(0b1 /* M */ /* 16, sel 0: Config0 */ + @ 0b000000000000000 /* Impl */ + @ 0b1 /* BE */ + @ 0b10 /* AT */ + @ 0b000 /* AR */ + @ 0b001 /* MT standard TLB */ + @ 0b0000 /* zero */ + @ CP0ConfigK0), + (0b10000,0b001) => #\hyperref[zzzerozyextend]{zero\_extend}#( /* 16, sel 1: Config1 */ + 0b1 /* M */ + @ TLBIndexMax /* MMU size-1 */ + @ 0b000 /* IS icache sets */ + @ 0b000 /* IL icache lines */ + @ 0b000 /* IA icache assoc. */ + @ 0b000 /* DS dcache sets */ + @ 0b000 /* DL dcache lines */ + @ 0b000 /* DA dcache assoc. */ + @ #\hyperref[zboolzytozybits]{bool\_to\_bits}#(have_cp2) /* C2 CP2 presence */ + @ 0b0 /* MD MDMX implemented */ + @ 0b0 /* PC performance counters */ + @ 0b0 /* WR watch registers */ + @ 0b0 /* CA 16e code compression */ + @ 0b0 /* EP EJTAG */ + @ 0b0), /* FP FPU present */ + (0b10000,0b010) => #\hyperref[zzzerozyextend]{zero\_extend}#( /* 16, sel 2: Config2 */ + 0b1 /* M */ + @ 0b000 /* TU L3 control */ + @ 0b0000 /* TS L3 sets */ + @ 0b0000 /* TL L3 lines */ + @ 0b0000 /* TA L3 assoc. */ + @ 0b0000 /* SU L2 control */ + @ 0b0000 /* SS L2 sets */ + @ 0b0000 /* SL L2 lines */ + @ 0b0000), /* SA L2 assoc. */ + (0b10000,0b011) => 0x0000000000002000, /* 16, sel 3: Config3 zero except for bit 13 == ulri */ + (0b10000,0b101) => 0x0000000000000000, /* 16, sel 5: Config5 beri specific -- no extended TLB */ + (0b10001,0b000) => CP0LLAddr, /* 17, sel 0: LLAddr */ + (0b10010,0b000) => #\hyperref[zzzerozyextend]{zero\_extend}#(0b0), /* 18, WatchLo */ + (0b10011,0b000) => #\hyperref[zzzerozyextend]{zero\_extend}#(0b0), /* 19, WatchHi */ + (0b10100,0b000) => TLBXContext.#\hyperref[zbits]{bits}#(), /* 20, XContext */ + (0b11110,0b000) => CP0ErrorEPC, /* 30, ErrorEPC */ + _ => (#\hyperref[zSignalException]{SignalException}#(ResI)) + } in + #\hyperref[zwGPR]{wGPR}#(rt) = if (double) then result else #\hyperref[zsignzyextend]{sign\_extend}#(result[31..0]) +} diff --git a/cheri/sail_latex/sailfnexecuteMFHI.tex b/cheri/sail_latex/sailfnexecuteMFHI.tex new file mode 100644 index 00000000..ff0aadba --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteMFHI.tex @@ -0,0 +1,4 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zMFHI]{MFHI}#(rd)) = + { + #\hyperref[zwGPR]{wGPR}#(rd) = HI + } diff --git a/cheri/sail_latex/sailfnexecuteMFLO.tex b/cheri/sail_latex/sailfnexecuteMFLO.tex new file mode 100644 index 00000000..69ad3a35 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteMFLO.tex @@ -0,0 +1,4 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zMFLO]{MFLO}#(rd)) = + { + #\hyperref[zwGPR]{wGPR}#(rd) = LO + } diff --git a/cheri/sail_latex/sailfnexecuteMOVN.tex b/cheri/sail_latex/sailfnexecuteMOVN.tex new file mode 100644 index 00000000..9802ef3d --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteMOVN.tex @@ -0,0 +1,5 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zMOVN]{MOVN}#(rs, rt, rd)) = + { + if (#\hyperref[zrGPR]{rGPR}#(rt) != 0x0000000000000000) then + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[zrGPR]{rGPR}#(rs) + } diff --git a/cheri/sail_latex/sailfnexecuteMOVZ.tex b/cheri/sail_latex/sailfnexecuteMOVZ.tex new file mode 100644 index 00000000..0c09e058 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteMOVZ.tex @@ -0,0 +1,5 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zMOVZ]{MOVZ}#(rs, rt, rd)) = + { + if (#\hyperref[zrGPR]{rGPR}#(rt) == 0x0000000000000000) then + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[zrGPR]{rGPR}#(rs) + } diff --git a/cheri/sail_latex/sailfnexecuteMSUB.tex b/cheri/sail_latex/sailfnexecuteMSUB.tex new file mode 100644 index 00000000..7d796f26 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteMSUB.tex @@ -0,0 +1,12 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zMSUB]{MSUB}#(rs, rt)) = + { + rsVal = #\hyperref[zrGPR]{rGPR}#(rs); + rtVal = #\hyperref[zrGPR]{rGPR}#(rt); + mul_result : #\hyperref[zbits]{bits}#(64) = if (#\hyperref[zNotWordVal]{NotWordVal}#(rsVal) | #\hyperref[zNotWordVal]{NotWordVal}#(rtVal)) then + undefined + else + rsVal[31..0] *_s rtVal[31..0]; + result = (HI[31..0] @ LO[31..0]) - mul_result; + HI = #\hyperref[zsignzyextend]{sign\_extend}#(result[63..32]); + LO = #\hyperref[zsignzyextend]{sign\_extend}#(result[31..0]); + } diff --git a/cheri/sail_latex/sailfnexecuteMSUBU.tex b/cheri/sail_latex/sailfnexecuteMSUBU.tex new file mode 100644 index 00000000..f501e5c5 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteMSUBU.tex @@ -0,0 +1,12 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zMSUBU]{MSUBU}#(rs, rt)) = + { + rsVal = #\hyperref[zrGPR]{rGPR}#(rs); + rtVal = #\hyperref[zrGPR]{rGPR}#(rt); + mul_result : #\hyperref[zbits]{bits}#(64) = if (#\hyperref[zNotWordVal]{NotWordVal}#(rsVal) | #\hyperref[zNotWordVal]{NotWordVal}#(rtVal)) then + undefined + else + rsVal[31..0] *_u rtVal[31..0]; + result = (HI[31..0] @ LO[31..0]) - mul_result; + HI = #\hyperref[zsignzyextend]{sign\_extend}#(result[63..32]); + LO = #\hyperref[zsignzyextend]{sign\_extend}#(result[31..0]); + } diff --git a/cheri/sail_latex/sailfnexecuteMTCzero.tex b/cheri/sail_latex/sailfnexecuteMTCzero.tex new file mode 100644 index 00000000..61c6703e --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteMTCzero.tex @@ -0,0 +1,52 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zMTCzero]{MTC0}#(rt, rd, sel, double)) = { + #\hyperref[zcheckCPzeroAccess]{checkCP0Access}#(); + let reg_val = #\hyperref[zrGPR]{rGPR}#(rt) in + match (rd, sel) + { + (0b00000,0b000) => TLBIndex = #\hyperref[zmask]{mask}#(reg_val), /* NB no write to TLBProbe */ + (0b00001,0b000) => (), /* TLBRandom is read only */ + (0b00010,0b000) => TLBEntryLo0->#\hyperref[zbits]{bits}#() = reg_val, + (0b00011,0b000) => TLBEntryLo1->#\hyperref[zbits]{bits}#() = reg_val, + (0b00100,0b000) => TLBContext->#\hyperref[zPTEBase]{PTEBase}#() = reg_val[63..23], + (0b00100,0b010) => CP0UserLocal = reg_val, + (0b00101,0b000) => TLBPageMask = reg_val[28..13], + (0b00110,0b000) => { + TLBWired = #\hyperref[zmask]{mask}#(reg_val); + TLBRandom = TLBIndexMax; + }, + (0b00111,0b000) => CP0HWREna = (reg_val[31..29] @ 0b0000000000000000000000000 @ reg_val[3..0]), + (0b01000,0b000) => (), /* BadVAddr read only */ + (0b01001,0b000) => CP0Count = reg_val[31..0], + (0b01010,0b000) => { + TLBEntryHi->#\hyperref[zR]{R}#() = reg_val[63..62]; + TLBEntryHi->#\hyperref[zVPNtwo]{VPN2}#() = reg_val[39..13]; + TLBEntryHi->#\hyperref[zASID]{ASID}#() = reg_val[7..0]; + }, + (0b01011,0b000) => { /* 11, sel 0: Compare reg */ + CP0Compare = reg_val[31..0]; + CP0Cause->#\hyperref[zIP]{IP}#() = CP0Cause.#\hyperref[zIP]{IP}#() & 0x7f; /* clear IP7 */ + }, + (0b01100,0b000) => { /* 12 Status */ + CP0Status->#\hyperref[zCU]{CU}#() = reg_val[31..28]; + CP0Status->#\hyperref[zBEV]{BEV}#() = reg_val[22]; + CP0Status->#\hyperref[zIM]{IM}#() = reg_val[15..8]; + CP0Status->#\hyperref[zKX]{KX}#() = reg_val[7]; + CP0Status->#\hyperref[zSX]{SX}#() = reg_val[6]; + CP0Status->#\hyperref[zUX]{UX}#() = reg_val[5]; + CP0Status->#\hyperref[zKSU]{KSU}#() = reg_val[4..3]; + CP0Status->#\hyperref[zERL]{ERL}#() = reg_val[2]; + CP0Status->#\hyperref[zEXL]{EXL}#() = reg_val[1]; + CP0Status->#\hyperref[zIE]{IE}#() = reg_val[0]; + }, + (0b01101,0b000) => { /* 13 Cause */ + CP0Cause->#\hyperref[zIV]{IV}#() = reg_val[23]; /* TODO special interrupt vector not implemeneted */ + let ip = CP0Cause.#\hyperref[zIP]{IP}#() in + CP0Cause->#\hyperref[zIP]{IP}#() = ((ip[7..2]) @ (reg_val[9..8])); + }, + (0b01110,0b000) => CP0EPC = reg_val, /* 14, EPC */ + (0b10000,0b000) => CP0ConfigK0 = reg_val[2..0], /* K0 cache config 16: Config0 */ + (0b10100,0b000) => TLBXContext->#\hyperref[zXPTEBase]{XPTEBase}#() = reg_val[63..33], + (0b11110,0b000) => CP0ErrorEPC = reg_val, /* 30, ErrorEPC */ + _ => (#\hyperref[zSignalException]{SignalException}#(ResI)) + } +} diff --git a/cheri/sail_latex/sailfnexecuteMTHI.tex b/cheri/sail_latex/sailfnexecuteMTHI.tex new file mode 100644 index 00000000..e221477e --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteMTHI.tex @@ -0,0 +1,4 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zMTHI]{MTHI}#(rs)) = + { + HI = #\hyperref[zrGPR]{rGPR}#(rs) + } diff --git a/cheri/sail_latex/sailfnexecuteMTLO.tex b/cheri/sail_latex/sailfnexecuteMTLO.tex new file mode 100644 index 00000000..af9f9aae --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteMTLO.tex @@ -0,0 +1,4 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zMTLO]{MTLO}#(rs)) = + { + LO = #\hyperref[zrGPR]{rGPR}#(rs) + } diff --git a/cheri/sail_latex/sailfnexecuteMUL.tex b/cheri/sail_latex/sailfnexecuteMUL.tex new file mode 100644 index 00000000..385f4433 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteMUL.tex @@ -0,0 +1,15 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zMUL]{MUL}#(rs, rt, rd)) = + { + rsVal = #\hyperref[zrGPR]{rGPR}#(rs); + rtVal = #\hyperref[zrGPR]{rGPR}#(rt); + result : #\hyperref[zbits]{bits}#(64) = #\hyperref[zsignzyextend]{sign\_extend}#((rsVal[31..0]) *#\hyperref[zzys]{\_s}# (rtVal[31..0])); + #\hyperref[zwGPR]{wGPR}#(rd) = if (#\hyperref[zNotWordVal]{NotWordVal}#(rsVal) | #\hyperref[zNotWordVal]{NotWordVal}#(rtVal)) then + undefined + else + #\hyperref[zsignzyextend]{sign\_extend}#(result[31..0]); + /* HI and LO are technically undefined after MUL, but this causes problems with tests and + (potentially) context switch so just leave them alone + HI = undefined; + LO = undefined; + */ + } diff --git a/cheri/sail_latex/sailfnexecuteMULT.tex b/cheri/sail_latex/sailfnexecuteMULT.tex new file mode 100644 index 00000000..b8de983f --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteMULT.tex @@ -0,0 +1,11 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zMULT]{MULT}#(rs, rt)) = + { + rsVal = #\hyperref[zrGPR]{rGPR}#(rs); + rtVal = #\hyperref[zrGPR]{rGPR}#(rt); + result : #\hyperref[zbits]{bits}#(64) = if (#\hyperref[zNotWordVal]{NotWordVal}#(rsVal) | #\hyperref[zNotWordVal]{NotWordVal}#(rtVal)) then + undefined + else + (rsVal[31..0]) *#\hyperref[zzys]{\_s}# (rtVal[31..0]); + HI = #\hyperref[zsignzyextend]{sign\_extend}#(result[63..32]); + LO = #\hyperref[zsignzyextend]{sign\_extend}#(result[31..0]); + } diff --git a/cheri/sail_latex/sailfnexecuteMULTU.tex b/cheri/sail_latex/sailfnexecuteMULTU.tex new file mode 100644 index 00000000..0095e387 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteMULTU.tex @@ -0,0 +1,11 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zMULTU]{MULTU}#(rs, rt)) = + { + rsVal = #\hyperref[zrGPR]{rGPR}#(rs); + rtVal = #\hyperref[zrGPR]{rGPR}#(rt); + result : #\hyperref[zbits]{bits}#(64) = if (#\hyperref[zNotWordVal]{NotWordVal}#(rsVal) | #\hyperref[zNotWordVal]{NotWordVal}#(rtVal)) then + undefined + else + (rsVal[31..0]) *#\hyperref[zzyu]{\_u}# (rtVal[31..0]); + HI = #\hyperref[zsignzyextend]{sign\_extend}#(result[63..32]); + LO = #\hyperref[zsignzyextend]{sign\_extend}#(result[31..0]); + } diff --git a/cheri/sail_latex/sailfnexecuteNOR.tex b/cheri/sail_latex/sailfnexecuteNOR.tex new file mode 100644 index 00000000..a1cfa14b --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteNOR.tex @@ -0,0 +1,4 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zNOR]{NOR}# (rs, rt, rd)) = + { + #\hyperref[zwGPR]{wGPR}#(rd) = ~(#\hyperref[zrGPR]{rGPR}#(rs) | #\hyperref[zrGPR]{rGPR}#(rt)) + } diff --git a/cheri/sail_latex/sailfnexecuteOR.tex b/cheri/sail_latex/sailfnexecuteOR.tex new file mode 100644 index 00000000..01c0fcf6 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteOR.tex @@ -0,0 +1,4 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zOR]{OR}# (rs, rt, rd)) = + { + #\hyperref[zwGPR]{wGPR}#(rd) = (#\hyperref[zrGPR]{rGPR}#(rs) | #\hyperref[zrGPR]{rGPR}#(rt)) + } diff --git a/cheri/sail_latex/sailfnexecuteORI.tex b/cheri/sail_latex/sailfnexecuteORI.tex new file mode 100644 index 00000000..0a3f9d15 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteORI.tex @@ -0,0 +1,4 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zORI]{ORI}# (rs, rt, imm)) = + { + #\hyperref[zwGPR]{wGPR}#(rt) = (#\hyperref[zrGPR]{rGPR}#(rs) | #\hyperref[zzzerozyextend]{zero\_extend}#(imm)) + } diff --git a/cheri/sail_latex/sailfnexecuteRDHWR.tex b/cheri/sail_latex/sailfnexecuteRDHWR.tex new file mode 100644 index 00000000..e64fff25 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteRDHWR.tex @@ -0,0 +1,18 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zRDHWR]{RDHWR}#(rt, rd)) = { + let accessLevel = #\hyperref[zgetAccessLevel]{getAccessLevel}#() in + let haveAccessLevel : bool = accessLevel == Kernel in + let haveCU0 : bool = bitone == (CP0Status.#\hyperref[zCU]{CU}#()[0]) in + let rdi as atom(_) = #\hyperref[zunsigned]{unsigned}#(rd) in + let haveHWREna : bool = bitone == (CP0HWREna[rdi]) in + if ~(haveAccessLevel | haveCU0 | haveHWREna) then + (#\hyperref[zSignalException]{SignalException}#(ResI)); + let temp : #\hyperref[zbits]{bits}#(64) = match rd { + 0b00000 => #\hyperref[zzzerozyextend]{zero\_extend}#([bitzero]), /* CPUNum */ + 0b00001 => #\hyperref[zzzerozyextend]{zero\_extend}#([bitzero]), /* SYNCI_step */ + 0b00010 => #\hyperref[zzzerozyextend]{zero\_extend}#(CP0Count), /* Count */ + 0b00011 => #\hyperref[zzzerozyextend]{zero\_extend}#([bitone]), /* Count resolution */ + 0b11101 => CP0UserLocal, /* User local register */ + _ => (#\hyperref[zSignalException]{SignalException}#(ResI)) + } in + #\hyperref[zwGPR]{wGPR}#(rt) = temp; +} diff --git a/cheri/sail_latex/sailfnexecuteRI.tex b/cheri/sail_latex/sailfnexecuteRI.tex new file mode 100644 index 00000000..6206c8e3 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteRI.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zRI]{RI}#()) = + #\hyperref[zSignalException]{SignalException}# (ResI) diff --git a/cheri/sail_latex/sailfnexecuteSDL.tex b/cheri/sail_latex/sailfnexecuteSDL.tex new file mode 100644 index 00000000..0e8e78b4 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteSDL.tex @@ -0,0 +1,19 @@ +function clause #\hyperref[zexecute]{execute}#(#\hyperref[zSDL]{SDL}#(base, rt, offset)) = + { + vAddr = #\hyperref[zaddrWrapperUnaligned]{addrWrapperUnaligned}#(#\hyperref[zsignzyextend]{sign\_extend}#(offset) + #\hyperref[zrGPR]{rGPR}#(base), StoreData, DL); + let pAddr = #\hyperref[zTLBTranslate]{TLBTranslate}#(vAddr, StoreData) in + { + reg_val = #\hyperref[zrGPR]{rGPR}#(rt); + match vAddr[2..0] + { + 0b000 => (#\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(pAddr, 8) = reg_val[63..00]), + 0b001 => (#\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(pAddr, 7) = reg_val[63..08]), + 0b010 => (#\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(pAddr, 6) = reg_val[63..16]), + 0b011 => (#\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(pAddr, 5) = reg_val[63..24]), + 0b100 => (#\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(pAddr, 4) = reg_val[63..32]), + 0b101 => (#\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(pAddr, 3) = reg_val[63..40]), + 0b110 => (#\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(pAddr, 2) = reg_val[63..48]), + 0b111 => (#\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(pAddr, 1) = reg_val[63..56]) + } + } + } diff --git a/cheri/sail_latex/sailfnexecuteSDR.tex b/cheri/sail_latex/sailfnexecuteSDR.tex new file mode 100644 index 00000000..98f7a8a7 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteSDR.tex @@ -0,0 +1,20 @@ +function clause #\hyperref[zexecute]{execute}#(#\hyperref[zSDR]{SDR}#(base, rt, offset)) = + { + vAddr = #\hyperref[zaddrWrapperUnaligned]{addrWrapperUnaligned}#(#\hyperref[zsignzyextend]{sign\_extend}#(offset) + #\hyperref[zrGPR]{rGPR}#(base), StoreData, DR); + let pAddr = #\hyperref[zTLBTranslate]{TLBTranslate}#(vAddr, StoreData) in + { + reg_val = #\hyperref[zrGPR]{rGPR}#(rt); + wordAddr = pAddr[63..3] @ 0b000; + match vAddr[2..0] + { + 0b000 => (#\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(wordAddr, 1) = reg_val[07..0]), + 0b001 => (#\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(wordAddr, 2) = reg_val[15..0]), + 0b010 => (#\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(wordAddr, 3) = reg_val[23..0]), + 0b011 => (#\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(wordAddr, 4) = reg_val[31..0]), + 0b100 => (#\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(wordAddr, 5) = reg_val[39..0]), + 0b101 => (#\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(wordAddr, 6) = reg_val[47..0]), + 0b110 => (#\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(wordAddr, 7) = reg_val[55..0]), + 0b111 => (#\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(wordAddr, 8) = reg_val[63..0]) + } + } + } diff --git a/cheri/sail_latex/sailfnexecuteSLL.tex b/cheri/sail_latex/sailfnexecuteSLL.tex new file mode 100644 index 00000000..31f5399a --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteSLL.tex @@ -0,0 +1,5 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zSLL]{SLL}#(rt, rd, sa)) = + { + rt32 = #\hyperref[zrGPR]{rGPR}#(rt)[31..0]; + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[zsignzyextend]{sign\_extend}#(rt32 << sa); + } diff --git a/cheri/sail_latex/sailfnexecuteSLLV.tex b/cheri/sail_latex/sailfnexecuteSLLV.tex new file mode 100644 index 00000000..41598e6d --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteSLLV.tex @@ -0,0 +1,6 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zSLLV]{SLLV}#(rs, rt, rd)) = + { + sa = #\hyperref[zrGPR]{rGPR}#(rs)[4..0]; + rt32 = #\hyperref[zrGPR]{rGPR}#(rt)[31..0]; + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[zsignzyextend]{sign\_extend}#(rt32 << sa) + } diff --git a/cheri/sail_latex/sailfnexecuteSLT.tex b/cheri/sail_latex/sailfnexecuteSLT.tex new file mode 100644 index 00000000..8e625945 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteSLT.tex @@ -0,0 +1,4 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zSLT]{SLT}#(rs, rt, rd)) = + { + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[zzzerozyextend]{zero\_extend}#(if (#\hyperref[zrGPR]{rGPR}#(rs) <_s #\hyperref[zrGPR]{rGPR}#(rt)) then 0b1 else 0b0) + } diff --git a/cheri/sail_latex/sailfnexecuteSLTI.tex b/cheri/sail_latex/sailfnexecuteSLTI.tex new file mode 100644 index 00000000..32582b6f --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteSLTI.tex @@ -0,0 +1,6 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zSLTI]{SLTI}#(rs, rt, imm)) = + { + let imm_val = #\hyperref[zsigned]{signed}#(imm) in + let rs_val = #\hyperref[zsigned]{signed}#(#\hyperref[zrGPR]{rGPR}#(rs)) in + #\hyperref[zwGPR]{wGPR}#(rt) = #\hyperref[zzzerozyextend]{zero\_extend}#(if (rs_val < imm_val) then 0b1 else 0b0) + } diff --git a/cheri/sail_latex/sailfnexecuteSLTIU.tex b/cheri/sail_latex/sailfnexecuteSLTIU.tex new file mode 100644 index 00000000..e232aa07 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteSLTIU.tex @@ -0,0 +1,6 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zSLTIU]{SLTIU}#(rs, rt, imm)) = + { + let rs_val = #\hyperref[zrGPR]{rGPR}#(rs) in + let immext : #\hyperref[zbits]{bits}#(64) = #\hyperref[zsignzyextend]{sign\_extend}#(imm) in /* NB defined to sign extend here even though comparison is unsigned! */ + #\hyperref[zwGPR]{wGPR}#(rt) = #\hyperref[zzzerozyextend]{zero\_extend}#(if (rs_val <_u immext) then 0b1 else 0b0) + } diff --git a/cheri/sail_latex/sailfnexecuteSLTU.tex b/cheri/sail_latex/sailfnexecuteSLTU.tex new file mode 100644 index 00000000..38b71b30 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteSLTU.tex @@ -0,0 +1,6 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zSLTU]{SLTU}#(rs, rt, rd)) = + { + let rs_val = #\hyperref[zrGPR]{rGPR}#(rs) in + let rt_val = #\hyperref[zrGPR]{rGPR}#(rt) in + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[zzzerozyextend]{zero\_extend}#(if (rs_val <_u rt_val) then 0b1 else 0b0) + } diff --git a/cheri/sail_latex/sailfnexecuteSRA.tex b/cheri/sail_latex/sailfnexecuteSRA.tex new file mode 100644 index 00000000..3d881120 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteSRA.tex @@ -0,0 +1,10 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zSRA]{SRA}#(rt, rd, sa)) = + { + temp = #\hyperref[zrGPR]{rGPR}#(rt); + if (#\hyperref[zNotWordVal]{NotWordVal}#(temp)) then + #\hyperref[zwGPR]{wGPR}#(rd) = undefined + else { + rt32 = temp[31..0]; + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[zsignzyextend]{sign\_extend}#(rt32 >>_s sa); + } + } diff --git a/cheri/sail_latex/sailfnexecuteSRAV.tex b/cheri/sail_latex/sailfnexecuteSRAV.tex new file mode 100644 index 00000000..54d3bd1e --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteSRAV.tex @@ -0,0 +1,11 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zSRAV]{SRAV}#(rs, rt, rd)) = + { + temp = #\hyperref[zrGPR]{rGPR}#(rt); + sa = #\hyperref[zrGPR]{rGPR}#(rs)[4..0]; + if (#\hyperref[zNotWordVal]{NotWordVal}#(temp)) then + #\hyperref[zwGPR]{wGPR}#(rd) = undefined + else { + rt32 = temp[31..0]; + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[zsignzyextend]{sign\_extend}#(rt32 >>_s sa) + } + } diff --git a/cheri/sail_latex/sailfnexecuteSRL.tex b/cheri/sail_latex/sailfnexecuteSRL.tex new file mode 100644 index 00000000..961ea82f --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteSRL.tex @@ -0,0 +1,10 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zSRL]{SRL}#(rt, rd, sa)) = + { + temp = #\hyperref[zrGPR]{rGPR}#(rt); + if (#\hyperref[zNotWordVal]{NotWordVal}#(temp)) then + #\hyperref[zwGPR]{wGPR}#(rd) = undefined + else { + rt32 = temp[31..0]; + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[zsignzyextend]{sign\_extend}#(rt32 >> sa); + } + } diff --git a/cheri/sail_latex/sailfnexecuteSRLV.tex b/cheri/sail_latex/sailfnexecuteSRLV.tex new file mode 100644 index 00000000..9b859a85 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteSRLV.tex @@ -0,0 +1,11 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zSRLV]{SRLV}#(rs, rt, rd)) = + { + temp = #\hyperref[zrGPR]{rGPR}#(rt); + sa = (#\hyperref[zrGPR]{rGPR}#(rs))[4..0]; + if (#\hyperref[zNotWordVal]{NotWordVal}#(temp)) then + #\hyperref[zwGPR]{wGPR}#(rd) = undefined + else { + rt32 = temp[31..0]; + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[zsignzyextend]{sign\_extend}#(rt32 >> sa); + } + } diff --git a/cheri/sail_latex/sailfnexecuteSUB.tex b/cheri/sail_latex/sailfnexecuteSUB.tex new file mode 100644 index 00000000..8a7b9d61 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteSUB.tex @@ -0,0 +1,13 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zSUB]{SUB}#(rs, rt, rd)) = + { + opA = #\hyperref[zrGPR]{rGPR}#(rs); + opB = #\hyperref[zrGPR]{rGPR}#(rt); + if #\hyperref[zNotWordVal]{NotWordVal}#(opA) | #\hyperref[zNotWordVal]{NotWordVal}#(opB) then + #\hyperref[zwGPR]{wGPR}#(rd) = undefined /* XXX could instead */ + else + let temp33 : #\hyperref[zbits]{bits}#(33) = #\hyperref[zsignzyextend]{sign\_extend}#(opA[31..0]) - #\hyperref[zsignzyextend]{sign\_extend}#(opB[31..0]) in + if temp33[32] != temp33[31] then + (#\hyperref[zSignalException]{SignalException}#(Ov)) + else + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[zsignzyextend]{sign\_extend}#(temp33[31..0]) + } diff --git a/cheri/sail_latex/sailfnexecuteSUBU.tex b/cheri/sail_latex/sailfnexecuteSUBU.tex new file mode 100644 index 00000000..65b106e1 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteSUBU.tex @@ -0,0 +1,9 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zSUBU]{SUBU}#(rs, rt, rd)) = + { + opA = #\hyperref[zrGPR]{rGPR}#(rs); + opB = #\hyperref[zrGPR]{rGPR}#(rt); + if #\hyperref[zNotWordVal]{NotWordVal}#(opA) | #\hyperref[zNotWordVal]{NotWordVal}#(opB) then + #\hyperref[zwGPR]{wGPR}#(rd) = undefined + else + #\hyperref[zwGPR]{wGPR}#(rd) = #\hyperref[zsignzyextend]{sign\_extend}#(opA[31..0] - opB[31..0]) + } diff --git a/cheri/sail_latex/sailfnexecuteSWL.tex b/cheri/sail_latex/sailfnexecuteSWL.tex new file mode 100644 index 00000000..56ed19a6 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteSWL.tex @@ -0,0 +1,15 @@ +function clause #\hyperref[zexecute]{execute}#(#\hyperref[zSWL]{SWL}#(base, rt, offset)) = + { + vAddr = #\hyperref[zaddrWrapperUnaligned]{addrWrapperUnaligned}#(#\hyperref[zsignzyextend]{sign\_extend}#(offset) + #\hyperref[zrGPR]{rGPR}#(base), StoreData, WL); + let pAddr = #\hyperref[zTLBTranslate]{TLBTranslate}#(vAddr, StoreData) in + { + reg_val = #\hyperref[zrGPR]{rGPR}#(rt); + match vAddr[1..0] + { + 0b00 => (#\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(pAddr, 4) = reg_val[31..0]), + 0b01 => (#\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(pAddr, 3) = reg_val[31..8]), + 0b10 => (#\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(pAddr, 2) = reg_val[31..16]), + 0b11 => (#\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(pAddr, 1) = reg_val[31..24]) + } + } + } diff --git a/cheri/sail_latex/sailfnexecuteSWR.tex b/cheri/sail_latex/sailfnexecuteSWR.tex new file mode 100644 index 00000000..9b0815e9 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteSWR.tex @@ -0,0 +1,16 @@ +function clause #\hyperref[zexecute]{execute}#(#\hyperref[zSWR]{SWR}#(base, rt, offset)) = + { + vAddr = #\hyperref[zaddrWrapperUnaligned]{addrWrapperUnaligned}#(#\hyperref[zsignzyextend]{sign\_extend}#(offset) + #\hyperref[zrGPR]{rGPR}#(base), StoreData, WR); + let pAddr = #\hyperref[zTLBTranslate]{TLBTranslate}#(vAddr, StoreData) in + { + wordAddr = pAddr[63..2] @ 0b00; + reg_val = #\hyperref[zrGPR]{rGPR}#(rt); + match vAddr[1..0] + { + 0b00 => (#\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(wordAddr, 1) = reg_val[7..0]), + 0b01 => (#\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(wordAddr, 2) = reg_val[15..0]), + 0b10 => (#\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(wordAddr, 3) = reg_val[23..0]), + 0b11 => (#\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(wordAddr, 4) = reg_val[31..0]) + } + } + } diff --git a/cheri/sail_latex/sailfnexecuteSYNC.tex b/cheri/sail_latex/sailfnexecuteSYNC.tex new file mode 100644 index 00000000..e5d5a25e --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteSYNC.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zexecute]{execute}#(#\hyperref[zSYNC]{SYNC}#()) = + #\hyperref[zMEMzysync]{MEM\_sync}#() diff --git a/cheri/sail_latex/sailfnexecuteSYSCALL.tex b/cheri/sail_latex/sailfnexecuteSYSCALL.tex new file mode 100644 index 00000000..35fc0371 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteSYSCALL.tex @@ -0,0 +1,4 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zSYSCALL]{SYSCALL}#()) = + { + (#\hyperref[zSignalException]{SignalException}#(Sys)) + } diff --git a/cheri/sail_latex/sailfnexecuteStore.tex b/cheri/sail_latex/sailfnexecuteStore.tex new file mode 100644 index 00000000..1030fdd2 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteStore.tex @@ -0,0 +1,29 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zStore]{Store}#(width, conditional, base, rt, offset)) = + { + vAddr : #\hyperref[zbits]{bits}#(64) = #\hyperref[zaddrWrapper]{addrWrapper}#(#\hyperref[zsignzyextend]{sign\_extend}#(offset) + #\hyperref[zrGPR]{rGPR}#(base), StoreData, width); + rt_val = #\hyperref[zrGPR]{rGPR}#(rt); + if ~ (#\hyperref[zisAddressAligned]{isAddressAligned}#(vAddr, width)) then + (#\hyperref[zSignalExceptionBadAddr]{SignalExceptionBadAddr}#(AdES, vAddr)) /* unaligned access */ + else + let pAddr = (#\hyperref[zTLBTranslate]{TLBTranslate}#(vAddr, StoreData)) in + { + if (conditional) then + { + success : bool = if (CP0LLBit[0]) then match width + { + W => #\hyperref[zMEMwzyconditionalzywrapper]{MEMw\_conditional\_wrapper}#(pAddr, 4, rt_val[31..0]), + D => #\hyperref[zMEMwzyconditionalzywrapper]{MEMw\_conditional\_wrapper}#(pAddr, 8, rt_val), + _ => throw(#\hyperref[zErrorzyinternalzyerror]{Error\_internal\_error}#()) /* there is no sbc or shc */ + } else false; + #\hyperref[zwGPR]{wGPR}#(rt) = #\hyperref[zzzerozyextend]{zero\_extend}#(success) + } + else + match width + { + B => #\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(pAddr, 1) = rt_val[7..0], + H => #\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(pAddr, 2) = rt_val[15..0], + W => #\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(pAddr, 4) = rt_val[31..0], + D => #\hyperref[zMEMwzywrapper]{MEMw\_wrapper}#(pAddr, 8) = rt_val + } + } + } diff --git a/cheri/sail_latex/sailfnexecuteTLBP.tex b/cheri/sail_latex/sailfnexecuteTLBP.tex new file mode 100644 index 00000000..1c781dda --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteTLBP.tex @@ -0,0 +1,14 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zTLBP]{TLBP}#()) = { + #\hyperref[zcheckCPzeroAccess]{checkCP0Access}#(); + let result = #\hyperref[ztlbSearch]{tlbSearch}#(TLBEntryHi.#\hyperref[zbits]{bits}#()) in + match result { + (#\hyperref[zSome]{Some}#(idx)) => { + TLBProbe = [bitzero]; + TLBIndex = idx; + }, + #\hyperref[zNone]{None}#() => { + TLBProbe = [bitone]; + TLBIndex = 0b000000; + } + } +} diff --git a/cheri/sail_latex/sailfnexecuteTLBR.tex b/cheri/sail_latex/sailfnexecuteTLBR.tex new file mode 100644 index 00000000..fd7aefd2 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteTLBR.tex @@ -0,0 +1,24 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zTLBR]{TLBR}#()) = { + #\hyperref[zcheckCPzeroAccess]{checkCP0Access}#(); + let i as atom(_) = #\hyperref[zunsigned]{unsigned}#(TLBIndex) in + let entry = #\hyperref[zregzyderef]{reg\_deref}#(TLBEntries[i]) in { + TLBPageMask = entry.#\hyperref[zpagemask]{pagemask}#(); + TLBEntryHi->#\hyperref[zR]{R}#() = entry.#\hyperref[zr]{r}#(); + TLBEntryHi->#\hyperref[zVPNtwo]{VPN2}#() = entry.#\hyperref[zvpntwo]{vpn2}#(); + TLBEntryHi->#\hyperref[zASID]{ASID}#() = entry.#\hyperref[zasid]{asid}#(); + TLBEntryLo0->#\hyperref[zCapS]{CapS}#()= entry.#\hyperref[zcapszero]{caps0}#(); + TLBEntryLo0->#\hyperref[zCapL]{CapL}#()= entry.#\hyperref[zcaplzero]{capl0}#(); + TLBEntryLo0->#\hyperref[zPFN]{PFN}#() = entry.#\hyperref[zpfnzero]{pfn0}#(); + TLBEntryLo0->#\hyperref[zC]{C}#() = entry.#\hyperref[zczero]{c0}#(); + TLBEntryLo0->#\hyperref[zD]{D}#() = entry.#\hyperref[zdzero]{d0}#(); + TLBEntryLo0->#\hyperref[zV]{V}#() = entry.#\hyperref[zvzero]{v0}#(); + TLBEntryLo0->#\hyperref[zG]{G}#() = entry.#\hyperref[zg]{g}#(); + TLBEntryLo1->#\hyperref[zCapS]{CapS}#()= entry.#\hyperref[zcapsone]{caps1}#(); + TLBEntryLo1->#\hyperref[zCapL]{CapL}#()= entry.#\hyperref[zcaplone]{capl1}#(); + TLBEntryLo1->#\hyperref[zPFN]{PFN}#() = entry.#\hyperref[zpfnone]{pfn1}#(); + TLBEntryLo1->#\hyperref[zC]{C}#() = entry.#\hyperref[zcone]{c1}#(); + TLBEntryLo1->#\hyperref[zD]{D}#() = entry.#\hyperref[zdone]{d1}#(); + TLBEntryLo1->#\hyperref[zV]{V}#() = entry.#\hyperref[zvone]{v1}#(); + TLBEntryLo1->#\hyperref[zG]{G}#() = entry.#\hyperref[zg]{g}#(); + } +} diff --git a/cheri/sail_latex/sailfnexecuteTLBWI.tex b/cheri/sail_latex/sailfnexecuteTLBWI.tex new file mode 100644 index 00000000..2b32342e --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteTLBWI.tex @@ -0,0 +1,4 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zTLBWI]{TLBWI}#()) = { + #\hyperref[zcheckCPzeroAccess]{checkCP0Access}#(); + #\hyperref[zTLBWriteEntry]{TLBWriteEntry}#(TLBIndex); +} diff --git a/cheri/sail_latex/sailfnexecuteTLBWR.tex b/cheri/sail_latex/sailfnexecuteTLBWR.tex new file mode 100644 index 00000000..df582e88 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteTLBWR.tex @@ -0,0 +1,4 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zTLBWR]{TLBWR}#()) = { + #\hyperref[zcheckCPzeroAccess]{checkCP0Access}#(); + #\hyperref[zTLBWriteEntry]{TLBWriteEntry}#(TLBRandom); +} diff --git a/cheri/sail_latex/sailfnexecuteTRAPIMM.tex b/cheri/sail_latex/sailfnexecuteTRAPIMM.tex new file mode 100644 index 00000000..9fa187e9 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteTRAPIMM.tex @@ -0,0 +1,8 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zTRAPIMM]{TRAPIMM}#(rs, imm, cmp)) = + { + rs_val = #\hyperref[zrGPR]{rGPR}#(rs); + imm_val : #\hyperref[zbits]{bits}#(64) = #\hyperref[zsignzyextend]{sign\_extend}#(imm); + condition = #\hyperref[zcompare]{compare}#(cmp, rs_val, imm_val); + if (condition) then + (#\hyperref[zSignalException]{SignalException}#(Tr)) + } diff --git a/cheri/sail_latex/sailfnexecuteTRAPREG.tex b/cheri/sail_latex/sailfnexecuteTRAPREG.tex new file mode 100644 index 00000000..9d3d759c --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteTRAPREG.tex @@ -0,0 +1,8 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zTRAPREG]{TRAPREG}#(rs, rt, cmp)) = + { + rs_val = #\hyperref[zrGPR]{rGPR}#(rs); + rt_val = #\hyperref[zrGPR]{rGPR}#(rt); + condition = #\hyperref[zcompare]{compare}#(cmp, rs_val, rt_val); + if (condition) then + (#\hyperref[zSignalException]{SignalException}#(Tr)) + } diff --git a/cheri/sail_latex/sailfnexecuteWAIT.tex b/cheri/sail_latex/sailfnexecuteWAIT.tex new file mode 100644 index 00000000..9ef8ce0e --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteWAIT.tex @@ -0,0 +1,3 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zWAIT]{WAIT}#()) = { + nextPC = PC; +} diff --git a/cheri/sail_latex/sailfnexecuteXOR.tex b/cheri/sail_latex/sailfnexecuteXOR.tex new file mode 100644 index 00000000..79e89bc5 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteXOR.tex @@ -0,0 +1,4 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zXOR]{XOR}# (rs, rt, rd)) = + { + #\hyperref[zwGPR]{wGPR}#(rd) = (#\hyperref[zrGPR]{rGPR}#(rs) ^ #\hyperref[zrGPR]{rGPR}#(rt)) + } diff --git a/cheri/sail_latex/sailfnexecuteXORI.tex b/cheri/sail_latex/sailfnexecuteXORI.tex new file mode 100644 index 00000000..1310c125 --- /dev/null +++ b/cheri/sail_latex/sailfnexecuteXORI.tex @@ -0,0 +1,4 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zXORI]{XORI}# (rs, rt, imm)) = + { + #\hyperref[zwGPR]{wGPR}#(rt) = (#\hyperref[zrGPR]{rGPR}#(rs) ^ #\hyperref[zzzerozyextend]{zero\_extend}#(imm)) + } diff --git a/cheri/sail_latex/sailfnexecutebranch.tex b/cheri/sail_latex/sailfnexecutebranch.tex new file mode 100644 index 00000000..9f2f03fc --- /dev/null +++ b/cheri/sail_latex/sailfnexecutebranch.tex @@ -0,0 +1,4 @@ +function #\hyperref[zexecutezybranch]{execute\_branch}#(pc) = { + delayedPC = pc; + branchPending = 0b1; +} diff --git a/cheri/sail_latex/sailfnexecutebranchpcc.tex b/cheri/sail_latex/sailfnexecutebranchpcc.tex new file mode 100644 index 00000000..8c803ce2 --- /dev/null +++ b/cheri/sail_latex/sailfnexecutebranchpcc.tex @@ -0,0 +1,5 @@ +function #\hyperref[zexecutezybranchzypcc]{execute\_branch\_pcc}#(newPCC) = { + delayedPC = #\hyperref[ztozybits]{to\_bits}#(64, #\hyperref[zgetCapOffset]{getCapOffset}#(newPCC)); + delayedPCC = #\hyperref[zcapStructToCapReg]{capStructToCapReg}#(newPCC); + branchPending = 0b1; +} diff --git a/cheri/sail_latex/sailfnextendLoad.tex b/cheri/sail_latex/sailfnextendLoad.tex new file mode 100644 index 00000000..08d1f9a4 --- /dev/null +++ b/cheri/sail_latex/sailfnextendLoad.tex @@ -0,0 +1,6 @@ +function #\hyperref[zextendLoad]{extendLoad}#(memResult, sign) = { + if (sign) then + #\hyperref[zsignzyextend]{sign\_extend}#(memResult) + else + #\hyperref[zzzerozyextend]{zero\_extend}#(memResult) +} diff --git a/cheri/sail_latex/sailfngetAccessLevel.tex b/cheri/sail_latex/sailfngetAccessLevel.tex new file mode 100644 index 00000000..c37a672e --- /dev/null +++ b/cheri/sail_latex/sailfngetAccessLevel.tex @@ -0,0 +1,10 @@ +function #\hyperref[zgetAccessLevel]{getAccessLevel}#() = + if ((CP0Status.#\hyperref[zEXL]{EXL}#()) | (CP0Status.#\hyperref[zERL]{ERL}#())) then + Kernel + else match CP0Status.#\hyperref[zKSU]{KSU}#() + { + 0b00 => Kernel, + 0b01 => Supervisor, + 0b10 => User, + _ => User /* behaviour undefined, assume user */ + } diff --git a/cheri/sail_latex/sailfngetCapBase.tex b/cheri/sail_latex/sailfngetCapBase.tex new file mode 100644 index 00000000..92f7963b --- /dev/null +++ b/cheri/sail_latex/sailfngetCapBase.tex @@ -0,0 +1 @@ +function #\hyperref[zgetCapBase]{getCapBase}#(c) : CapStruct -> uint64 = #\hyperref[zunsigned]{unsigned}#(c.base) diff --git a/cheri/sail_latex/sailfngetCapCauseRegExcCode.tex b/cheri/sail_latex/sailfngetCapCauseRegExcCode.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetCapCauseRegExcCode.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetCapCauseRegRegNum.tex b/cheri/sail_latex/sailfngetCapCauseRegRegNum.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetCapCauseRegRegNum.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetCapCauseRegbits.tex b/cheri/sail_latex/sailfngetCapCauseRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetCapCauseRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetCapCursor.tex b/cheri/sail_latex/sailfngetCapCursor.tex new file mode 100644 index 00000000..06750973 --- /dev/null +++ b/cheri/sail_latex/sailfngetCapCursor.tex @@ -0,0 +1 @@ +function #\hyperref[zgetCapCursor]{getCapCursor}#(c) : CapStruct -> uint64 = #\hyperref[zunsigned]{unsigned}#(c.address) diff --git a/cheri/sail_latex/sailfngetCapLength.tex b/cheri/sail_latex/sailfngetCapLength.tex new file mode 100644 index 00000000..501ed940 --- /dev/null +++ b/cheri/sail_latex/sailfngetCapLength.tex @@ -0,0 +1 @@ +function #\hyperref[zgetCapLength]{getCapLength}#(c) : CapStruct -> CapLen = #\hyperref[zunsigned]{unsigned}#(c.length) diff --git a/cheri/sail_latex/sailfngetCapOffset.tex b/cheri/sail_latex/sailfngetCapOffset.tex new file mode 100644 index 00000000..d1dc5f8d --- /dev/null +++ b/cheri/sail_latex/sailfngetCapOffset.tex @@ -0,0 +1 @@ +function #\hyperref[zgetCapOffset]{getCapOffset}#(c) : CapStruct -> uint64 = (#\hyperref[zunsigned]{unsigned}#(c.address) - #\hyperref[zunsigned]{unsigned}#(c.base)) % (#\hyperref[zpowtwo]{pow2}#(64)) diff --git a/cheri/sail_latex/sailfngetCapPerms.tex b/cheri/sail_latex/sailfngetCapPerms.tex new file mode 100644 index 00000000..932930ae --- /dev/null +++ b/cheri/sail_latex/sailfngetCapPerms.tex @@ -0,0 +1,16 @@ +function #\hyperref[zgetCapPerms]{getCapPerms}#(cap) : CapStruct -> #\hyperref[zbits]{bits}#(31) = + ( + cap.uperms + @ cap.perm_reserved11_14 + @ 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_latex/sailfngetCapTop.tex b/cheri/sail_latex/sailfngetCapTop.tex new file mode 100644 index 00000000..3a3c74d5 --- /dev/null +++ b/cheri/sail_latex/sailfngetCapTop.tex @@ -0,0 +1 @@ +function #\hyperref[zgetCapTop]{getCapTop}#(c) : CapStruct -> CapLen = #\hyperref[zunsigned]{unsigned}#(c.base) + #\hyperref[zunsigned]{unsigned}#(c.length) /* XXX bug here? -- should be mod 2^64 */ diff --git a/cheri/sail_latex/sailfngetCauseRegBD.tex b/cheri/sail_latex/sailfngetCauseRegBD.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetCauseRegBD.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetCauseRegCE.tex b/cheri/sail_latex/sailfngetCauseRegCE.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetCauseRegCE.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetCauseRegExcCode.tex b/cheri/sail_latex/sailfngetCauseRegExcCode.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetCauseRegExcCode.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetCauseRegIP.tex b/cheri/sail_latex/sailfngetCauseRegIP.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetCauseRegIP.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetCauseRegIV.tex b/cheri/sail_latex/sailfngetCauseRegIV.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetCauseRegIV.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetCauseRegWP.tex b/cheri/sail_latex/sailfngetCauseRegWP.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetCauseRegWP.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetCauseRegbits.tex b/cheri/sail_latex/sailfngetCauseRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetCauseRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetContextRegBadVPNtwo.tex b/cheri/sail_latex/sailfngetContextRegBadVPNtwo.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetContextRegBadVPNtwo.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetContextRegPTEBase.tex b/cheri/sail_latex/sailfngetContextRegPTEBase.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetContextRegPTEBase.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetContextRegbits.tex b/cheri/sail_latex/sailfngetContextRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetContextRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetStatusRegBEV.tex b/cheri/sail_latex/sailfngetStatusRegBEV.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetStatusRegBEV.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetStatusRegCU.tex b/cheri/sail_latex/sailfngetStatusRegCU.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetStatusRegCU.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetStatusRegERL.tex b/cheri/sail_latex/sailfngetStatusRegERL.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetStatusRegERL.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetStatusRegEXL.tex b/cheri/sail_latex/sailfngetStatusRegEXL.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetStatusRegEXL.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetStatusRegIE.tex b/cheri/sail_latex/sailfngetStatusRegIE.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetStatusRegIE.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetStatusRegIM.tex b/cheri/sail_latex/sailfngetStatusRegIM.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetStatusRegIM.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetStatusRegKSU.tex b/cheri/sail_latex/sailfngetStatusRegKSU.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetStatusRegKSU.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetStatusRegKX.tex b/cheri/sail_latex/sailfngetStatusRegKX.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetStatusRegKX.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetStatusRegSX.tex b/cheri/sail_latex/sailfngetStatusRegSX.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetStatusRegSX.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetStatusRegUX.tex b/cheri/sail_latex/sailfngetStatusRegUX.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetStatusRegUX.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetStatusRegbits.tex b/cheri/sail_latex/sailfngetStatusRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetStatusRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntryHiRegASID.tex b/cheri/sail_latex/sailfngetTLBEntryHiRegASID.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntryHiRegASID.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntryHiRegR.tex b/cheri/sail_latex/sailfngetTLBEntryHiRegR.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntryHiRegR.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntryHiRegVPNtwo.tex b/cheri/sail_latex/sailfngetTLBEntryHiRegVPNtwo.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntryHiRegVPNtwo.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntryHiRegbits.tex b/cheri/sail_latex/sailfngetTLBEntryHiRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntryHiRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntryLoRegC.tex b/cheri/sail_latex/sailfngetTLBEntryLoRegC.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntryLoRegC.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntryLoRegCapL.tex b/cheri/sail_latex/sailfngetTLBEntryLoRegCapL.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntryLoRegCapL.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntryLoRegCapS.tex b/cheri/sail_latex/sailfngetTLBEntryLoRegCapS.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntryLoRegCapS.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntryLoRegD.tex b/cheri/sail_latex/sailfngetTLBEntryLoRegD.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntryLoRegD.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntryLoRegG.tex b/cheri/sail_latex/sailfngetTLBEntryLoRegG.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntryLoRegG.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntryLoRegPFN.tex b/cheri/sail_latex/sailfngetTLBEntryLoRegPFN.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntryLoRegPFN.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntryLoRegV.tex b/cheri/sail_latex/sailfngetTLBEntryLoRegV.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntryLoRegV.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntryLoRegbits.tex b/cheri/sail_latex/sailfngetTLBEntryLoRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntryLoRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntryasid.tex b/cheri/sail_latex/sailfngetTLBEntryasid.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntryasid.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntrybits.tex b/cheri/sail_latex/sailfngetTLBEntrybits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntrybits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntrycaplone.tex b/cheri/sail_latex/sailfngetTLBEntrycaplone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntrycaplone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntrycaplzero.tex b/cheri/sail_latex/sailfngetTLBEntrycaplzero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntrycaplzero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntrycapsone.tex b/cheri/sail_latex/sailfngetTLBEntrycapsone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntrycapsone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntrycapszero.tex b/cheri/sail_latex/sailfngetTLBEntrycapszero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntrycapszero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntrycone.tex b/cheri/sail_latex/sailfngetTLBEntrycone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntrycone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntryczero.tex b/cheri/sail_latex/sailfngetTLBEntryczero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntryczero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntrydone.tex b/cheri/sail_latex/sailfngetTLBEntrydone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntrydone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntrydzero.tex b/cheri/sail_latex/sailfngetTLBEntrydzero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntrydzero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntryg.tex b/cheri/sail_latex/sailfngetTLBEntryg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntryg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntrypagemask.tex b/cheri/sail_latex/sailfngetTLBEntrypagemask.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntrypagemask.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntrypfnone.tex b/cheri/sail_latex/sailfngetTLBEntrypfnone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntrypfnone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntrypfnzero.tex b/cheri/sail_latex/sailfngetTLBEntrypfnzero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntrypfnzero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntryr.tex b/cheri/sail_latex/sailfngetTLBEntryr.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntryr.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntryvalid.tex b/cheri/sail_latex/sailfngetTLBEntryvalid.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntryvalid.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntryvone.tex b/cheri/sail_latex/sailfngetTLBEntryvone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntryvone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntryvpntwo.tex b/cheri/sail_latex/sailfngetTLBEntryvpntwo.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntryvpntwo.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetTLBEntryvzero.tex b/cheri/sail_latex/sailfngetTLBEntryvzero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetTLBEntryvzero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetXContextRegXBadVPNtwo.tex b/cheri/sail_latex/sailfngetXContextRegXBadVPNtwo.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetXContextRegXBadVPNtwo.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetXContextRegXPTEBase.tex b/cheri/sail_latex/sailfngetXContextRegXPTEBase.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetXContextRegXPTEBase.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetXContextRegXR.tex b/cheri/sail_latex/sailfngetXContextRegXR.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetXContextRegXR.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngetXContextRegbits.tex b/cheri/sail_latex/sailfngetXContextRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfngetXContextRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfngrantsAccess.tex b/cheri/sail_latex/sailfngrantsAccess.tex new file mode 100644 index 00000000..0840683d --- /dev/null +++ b/cheri/sail_latex/sailfngrantsAccess.tex @@ -0,0 +1,2 @@ +function #\hyperref[zgrantsAccess]{grantsAccess}# (currentLevel, requiredLevel) = + #\hyperref[zintzyofzyAccessLevel]{int\_of\_AccessLevel}#(currentLevel) >= #\hyperref[zintzyofzyAccessLevel]{int\_of\_AccessLevel}#(requiredLevel) diff --git a/cheri/sail_latex/sailfnincCapOffset.tex b/cheri/sail_latex/sailfnincCapOffset.tex new file mode 100644 index 00000000..134bc1fd --- /dev/null +++ b/cheri/sail_latex/sailfnincCapOffset.tex @@ -0,0 +1,3 @@ +function #\hyperref[zincCapOffset]{incCapOffset}#(c, delta) = + let newAddr : #\hyperref[zbits]{bits}#(64) = c.address + delta in + (true, {c with address = newAddr}) diff --git a/cheri/sail_latex/sailfnincrementCPzeroCount.tex b/cheri/sail_latex/sailfnincrementCPzeroCount.tex new file mode 100644 index 00000000..71ca2e51 --- /dev/null +++ b/cheri/sail_latex/sailfnincrementCPzeroCount.tex @@ -0,0 +1,17 @@ +function #\hyperref[zincrementCPzeroCount]{incrementCP0Count}#() = { + TLBRandom = (if (TLBRandom == TLBWired) + then (TLBIndexMax) else (TLBRandom - 1)); + + CP0Count = (CP0Count + 1); + if (CP0Count == CP0Compare) then { + CP0Cause->#\hyperref[zIP]{IP}#() = CP0Cause.#\hyperref[zIP]{IP}#() | 0x80; /* IP7 is timer interrupt */ + }; + + let ims = CP0Status.#\hyperref[zIM]{IM}#() in + let ips = CP0Cause.#\hyperref[zIP]{IP}#() in + let ie = CP0Status.#\hyperref[zIE]{IE}#() in + let exl = CP0Status.#\hyperref[zEXL]{EXL}#() in + let erl = CP0Status.#\hyperref[zERL]{ERL}#() in + if ((~(exl)) & (~(erl)) & ie & ((ips & ims) != 0x00)) then + #\hyperref[zSignalException]{SignalException}#(Interrupt); +} diff --git a/cheri/sail_latex/sailfninitcptwostate.tex b/cheri/sail_latex/sailfninitcptwostate.tex new file mode 100644 index 00000000..ea9e07b5 --- /dev/null +++ b/cheri/sail_latex/sailfninitcptwostate.tex @@ -0,0 +1,19 @@ +function #\hyperref[zinitzycptwozystate]{init\_cp2\_state}# () = { + let defaultBits = #\hyperref[zcapStructToCapReg]{capStructToCapReg}#(default_cap); + let nullBits = #\hyperref[zcapStructToCapReg]{capStructToCapReg}#(null_cap); + PCC = defaultBits; + nextPCC = defaultBits; + delayedPCC = defaultBits; + DDC = defaultBits; + KCC = defaultBits; + EPCC = defaultBits; + KDC = nullBits; + KR1C = nullBits; + KR2C = nullBits; + CTLSP = nullBits; + CTLSU = nullBits; + foreach(i from 1 to 31) { + let idx = #\hyperref[ztozybits]{to\_bits}#(5, i) in + #\hyperref[zwriteCapReg]{writeCapReg}#(idx, null_cap) + } +} diff --git a/cheri/sail_latex/sailfninitcpzerostate.tex b/cheri/sail_latex/sailfninitcpzerostate.tex new file mode 100644 index 00000000..be4ebee2 --- /dev/null +++ b/cheri/sail_latex/sailfninitcpzerostate.tex @@ -0,0 +1,3 @@ +function #\hyperref[zinitzycpzerozystate]{init\_cp0\_state}# () : unit -> unit = { + CP0Status->#\hyperref[zBEV]{BEV}#() = bitone; +} diff --git a/cheri/sail_latex/sailfnintofAccessLevel.tex b/cheri/sail_latex/sailfnintofAccessLevel.tex new file mode 100644 index 00000000..0a5bb3c6 --- /dev/null +++ b/cheri/sail_latex/sailfnintofAccessLevel.tex @@ -0,0 +1,6 @@ +function int_of_AccessLevel level = + match level { + User => 0, + Supervisor => 1, + Kernel => 2 + } diff --git a/cheri/sail_latex/sailfninttocap.tex b/cheri/sail_latex/sailfninttocap.tex new file mode 100644 index 00000000..a10d10c1 --- /dev/null +++ b/cheri/sail_latex/sailfninttocap.tex @@ -0,0 +1,2 @@ +function #\hyperref[zintzytozycap]{int\_to\_cap}# (address) : #\hyperref[zbits]{bits}#(64) -> CapStruct = + {null_cap with address = address} diff --git a/cheri/sail_latex/sailfnisAddressAligned.tex b/cheri/sail_latex/sailfnisAddressAligned.tex new file mode 100644 index 00000000..212605ce --- /dev/null +++ b/cheri/sail_latex/sailfnisAddressAligned.tex @@ -0,0 +1,3 @@ +function #\hyperref[zisAddressAligned]{isAddressAligned}# (addr, wordType) = + let a = #\hyperref[zunsigned]{unsigned}#(addr) in + a / alignment_width == (a + #\hyperref[zwordWidthBytes]{wordWidthBytes}#(wordType) - 1) / alignment_width diff --git a/cheri/sail_latex/sailfnisnone.tex b/cheri/sail_latex/sailfnisnone.tex new file mode 100644 index 00000000..877cc2a0 --- /dev/null +++ b/cheri/sail_latex/sailfnisnone.tex @@ -0,0 +1,4 @@ +function is_none opt = match opt { + #\hyperref[zSome]{Some}#(_) => false, + #\hyperref[zNone]{None}#() => true +} diff --git a/cheri/sail_latex/sailfnissome.tex b/cheri/sail_latex/sailfnissome.tex new file mode 100644 index 00000000..f1f5f655 --- /dev/null +++ b/cheri/sail_latex/sailfnissome.tex @@ -0,0 +1,4 @@ +function is_some opt = match opt { + #\hyperref[zSome]{Some}#(_) => true, + #\hyperref[zNone]{None}#() => false +} diff --git a/cheri/sail_latex/sailfnmask.tex b/cheri/sail_latex/sailfnmask.tex new file mode 100644 index 00000000..e62ea529 --- /dev/null +++ b/cheri/sail_latex/sailfnmask.tex @@ -0,0 +1 @@ +function mask bs = bs['n - 1 .. 0] diff --git a/cheri/sail_latex/sailfnmemBitsToCapBits.tex b/cheri/sail_latex/sailfnmemBitsToCapBits.tex new file mode 100644 index 00000000..f5dc7a3b --- /dev/null +++ b/cheri/sail_latex/sailfnmemBitsToCapBits.tex @@ -0,0 +1,2 @@ +function #\hyperref[zmemBitsToCapBits]{memBitsToCapBits}#(tag, b) : (bool, #\hyperref[zbits]{bits}#(256)) -> #\hyperref[zbits]{bits}#(257) = + tag @ (b ^ null_cap_bits) diff --git a/cheri/sail_latex/sailfnmipssignextend.tex b/cheri/sail_latex/sailfnmipssignextend.tex new file mode 100644 index 00000000..80945b61 --- /dev/null +++ b/cheri/sail_latex/sailfnmipssignextend.tex @@ -0,0 +1 @@ +function mips_sign_extend v = #\hyperref[zsailzysignzyextend]{sail\_sign\_extend}#(v, sizeof('m)) diff --git a/cheri/sail_latex/sailfnmipszzeroextend.tex b/cheri/sail_latex/sailfnmipszzeroextend.tex new file mode 100644 index 00000000..6c9914d9 --- /dev/null +++ b/cheri/sail_latex/sailfnmipszzeroextend.tex @@ -0,0 +1 @@ +function mips_zero_extend v = #\hyperref[zsailzyzzerozyextend]{sail\_zero\_extend}#(v, sizeof('m)) diff --git a/cheri/sail_latex/sailfnneqanything.tex b/cheri/sail_latex/sailfnneqanything.tex new file mode 100644 index 00000000..1605ed05 --- /dev/null +++ b/cheri/sail_latex/sailfnneqanything.tex @@ -0,0 +1 @@ +function #\hyperref[zneqzyanything]{neq\_anything}# (x, y) = #\hyperref[znotzybool]{not\_bool}#(x == y) diff --git a/cheri/sail_latex/sailfnneqatom.tex b/cheri/sail_latex/sailfnneqatom.tex new file mode 100644 index 00000000..e9a9f93f --- /dev/null +++ b/cheri/sail_latex/sailfnneqatom.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_latex/sailfnneqbool.tex b/cheri/sail_latex/sailfnneqbool.tex new file mode 100644 index 00000000..65007b8e --- /dev/null +++ b/cheri/sail_latex/sailfnneqbool.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_latex/sailfnneqint.tex b/cheri/sail_latex/sailfnneqint.tex new file mode 100644 index 00000000..952a7735 --- /dev/null +++ b/cheri/sail_latex/sailfnneqint.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_latex/sailfnneqrange.tex b/cheri/sail_latex/sailfnneqrange.tex new file mode 100644 index 00000000..43f49e9e --- /dev/null +++ b/cheri/sail_latex/sailfnneqrange.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_latex/sailfnneqvec.tex b/cheri/sail_latex/sailfnneqvec.tex new file mode 100644 index 00000000..c446df08 --- /dev/null +++ b/cheri/sail_latex/sailfnneqvec.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_latex/sailfnnumofAccessLevel.tex b/cheri/sail_latex/sailfnnumofAccessLevel.tex new file mode 100644 index 00000000..a5a1d8af --- /dev/null +++ b/cheri/sail_latex/sailfnnumofAccessLevel.tex @@ -0,0 +1,5 @@ +function num_of_AccessLevel arg# = match arg# { + User => 0, + Supervisor => 1, + Kernel => 2 +} diff --git a/cheri/sail_latex/sailfnnumofCPtrCmpOp.tex b/cheri/sail_latex/sailfnnumofCPtrCmpOp.tex new file mode 100644 index 00000000..4d20546b --- /dev/null +++ b/cheri/sail_latex/sailfnnumofCPtrCmpOp.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_latex/sailfnnumofCapEx.tex b/cheri/sail_latex/sailfnnumofCapEx.tex new file mode 100644 index 00000000..d2ee7b0f --- /dev/null +++ b/cheri/sail_latex/sailfnnumofCapEx.tex @@ -0,0 +1,25 @@ +function num_of_CapEx arg# = match arg# { + CapEx_None => 0, + CapEx_LengthViolation => 1, + CapEx_TagViolation => 2, + CapEx_SealViolation => 3, + CapEx_TypeViolation => 4, + CapEx_CallTrap => 5, + CapEx_ReturnTrap => 6, + CapEx_TSSUnderFlow => 7, + CapEx_UserDefViolation => 8, + CapEx_TLBNoStoreCap => 9, + CapEx_InexactBounds => 10, + CapEx_GlobalViolation => 11, + CapEx_PermitExecuteViolation => 12, + CapEx_PermitLoadViolation => 13, + CapEx_PermitStoreViolation => 14, + CapEx_PermitLoadCapViolation => 15, + CapEx_PermitStoreCapViolation => 16, + CapEx_PermitStoreLocalCapViolation => 17, + CapEx_PermitSealViolation => 18, + CapEx_AccessSystemRegsViolation => 19, + CapEx_PermitCCallViolation => 20, + CapEx_AccessCCallIDCViolation => 21, + CapEx_PermitUnsealViolation => 22 +} diff --git a/cheri/sail_latex/sailfnnumofClearRegSet.tex b/cheri/sail_latex/sailfnnumofClearRegSet.tex new file mode 100644 index 00000000..3dd58b89 --- /dev/null +++ b/cheri/sail_latex/sailfnnumofClearRegSet.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_latex/sailfnnumofComparison.tex b/cheri/sail_latex/sailfnnumofComparison.tex new file mode 100644 index 00000000..d98bebc2 --- /dev/null +++ b/cheri/sail_latex/sailfnnumofComparison.tex @@ -0,0 +1,10 @@ +function num_of_Comparison arg# = match arg# { + EQ => 0, + NE => 1, + GE => 2, + GEU => 3, + GT => 4, + LE => 5, + LT => 6, + LTU => 7 +} diff --git a/cheri/sail_latex/sailfnnumofException.tex b/cheri/sail_latex/sailfnnumofException.tex new file mode 100644 index 00000000..02bad081 --- /dev/null +++ b/cheri/sail_latex/sailfnnumofException.tex @@ -0,0 +1,21 @@ +function num_of_Exception arg# = match arg# { + Interrupt => 0, + TLBMod => 1, + TLBL => 2, + TLBS => 3, + AdEL => 4, + AdES => 5, + Sys => 6, + Bp => 7, + ResI => 8, + CpU => 9, + Ov => 10, + Tr => 11, + C2E => 12, + C2Trap => 13, + XTLBRefillL => 14, + XTLBRefillS => 15, + XTLBInvL => 16, + XTLBInvS => 17, + MCheck => 18 +} diff --git a/cheri/sail_latex/sailfnnumofMemAccessType.tex b/cheri/sail_latex/sailfnnumofMemAccessType.tex new file mode 100644 index 00000000..47b1af66 --- /dev/null +++ b/cheri/sail_latex/sailfnnumofMemAccessType.tex @@ -0,0 +1,5 @@ +function num_of_MemAccessType arg# = match arg# { + Instruction => 0, + LoadData => 1, + StoreData => 2 +} diff --git a/cheri/sail_latex/sailfnnumofWordType.tex b/cheri/sail_latex/sailfnnumofWordType.tex new file mode 100644 index 00000000..0ed09f63 --- /dev/null +++ b/cheri/sail_latex/sailfnnumofWordType.tex @@ -0,0 +1,6 @@ +function num_of_WordType arg# = match arg# { + B => 0, + H => 1, + W => 2, + D => 3 +} diff --git a/cheri/sail_latex/sailfnnumofWordTypeUnaligned.tex b/cheri/sail_latex/sailfnnumofWordTypeUnaligned.tex new file mode 100644 index 00000000..f6b61ce7 --- /dev/null +++ b/cheri/sail_latex/sailfnnumofWordTypeUnaligned.tex @@ -0,0 +1,6 @@ +function num_of_WordTypeUnaligned arg# = match arg# { + WL => 0, + WR => 1, + DL => 2, + DR => 3 +} diff --git a/cheri/sail_latex/sailfnnumofdecodefailure.tex b/cheri/sail_latex/sailfnnumofdecodefailure.tex new file mode 100644 index 00000000..3b5fadb3 --- /dev/null +++ b/cheri/sail_latex/sailfnnumofdecodefailure.tex @@ -0,0 +1,6 @@ +function num_of_decode_failure arg# = match arg# { + no_matching_pattern => 0, + unsupported_instruction => 1, + illegal_instruction => 2, + internal_error => 3 +} diff --git a/cheri/sail_latex/sailfnones.tex b/cheri/sail_latex/sailfnones.tex new file mode 100644 index 00000000..e58040d7 --- /dev/null +++ b/cheri/sail_latex/sailfnones.tex @@ -0,0 +1 @@ +function #\hyperref[zones]{ones}#() = #\hyperref[zreplicatezybits]{replicate\_bits}# (0b1,'n) diff --git a/cheri/sail_latex/sailfnpccaccesssystemregs.tex b/cheri/sail_latex/sailfnpccaccesssystemregs.tex new file mode 100644 index 00000000..3e54b060 --- /dev/null +++ b/cheri/sail_latex/sailfnpccaccesssystemregs.tex @@ -0,0 +1,3 @@ +function #\hyperref[zpcczyaccesszysystemzyregs]{pcc\_access\_system\_regs}# () = + let pcc = #\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(PCC) in + (pcc.access_system_regs) diff --git a/cheri/sail_latex/sailfnrGPR.tex b/cheri/sail_latex/sailfnrGPR.tex new file mode 100644 index 00000000..751d67a3 --- /dev/null +++ b/cheri/sail_latex/sailfnrGPR.tex @@ -0,0 +1,4 @@ +function rGPR idx = { + let i as atom(_) = #\hyperref[zunsigned]{unsigned}#(idx) in + if i == 0 then 0x0000000000000000 else GPR[i] +} diff --git a/cheri/sail_latex/sailfnraisectwoexception.tex b/cheri/sail_latex/sailfnraisectwoexception.tex new file mode 100644 index 00000000..e3d6bcbb --- /dev/null +++ b/cheri/sail_latex/sailfnraisectwoexception.tex @@ -0,0 +1,6 @@ +function #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(capEx, regnum) = + let reg8 = 0b000 @ regnum in + if ((capEx == CapEx_AccessSystemRegsViolation) & (regnum == IDCNO)) then + #\hyperref[zraisezyctwozyexceptioneight]{raise\_c2\_exception8}#(CapEx_AccessCCallIDCViolation, reg8) + else + #\hyperref[zraisezyctwozyexceptioneight]{raise\_c2\_exception8}#(capEx, reg8) diff --git a/cheri/sail_latex/sailfnraisectwoexceptioneight.tex b/cheri/sail_latex/sailfnraisectwoexceptioneight.tex new file mode 100644 index 00000000..b6490aa0 --- /dev/null +++ b/cheri/sail_latex/sailfnraisectwoexceptioneight.tex @@ -0,0 +1,9 @@ +function #\hyperref[zraisezyctwozyexceptioneight]{raise\_c2\_exception8}#(capEx, regnum) = + { + CapCause->#\hyperref[zExcCode]{ExcCode}#() = #\hyperref[zCapExCode]{CapExCode}#(capEx); + CapCause->#\hyperref[zRegNum]{RegNum}#() = regnum; + let mipsEx = + if ((capEx == CapEx_CallTrap) | (capEx == CapEx_ReturnTrap)) + then C2Trap else C2E in + #\hyperref[zSignalException]{SignalException}#(mipsEx); + } diff --git a/cheri/sail_latex/sailfnraisectwoexceptionnoreg.tex b/cheri/sail_latex/sailfnraisectwoexceptionnoreg.tex new file mode 100644 index 00000000..db246d80 --- /dev/null +++ b/cheri/sail_latex/sailfnraisectwoexceptionnoreg.tex @@ -0,0 +1,2 @@ +function #\hyperref[zraisezyctwozyexceptionzynoreg]{raise\_c2\_exception\_noreg}#(capEx) = + #\hyperref[zraisezyctwozyexceptioneight]{raise\_c2\_exception8}#(capEx, 0xff) diff --git a/cheri/sail_latex/sailfnreadCapReg.tex b/cheri/sail_latex/sailfnreadCapReg.tex new file mode 100644 index 00000000..357027c3 --- /dev/null +++ b/cheri/sail_latex/sailfnreadCapReg.tex @@ -0,0 +1,6 @@ +function #\hyperref[zreadCapReg]{readCapReg}#(n) = + if (n == 0b00000) then + null_cap + else + let i = #\hyperref[zunsigned]{unsigned}#(n) in + #\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(#\hyperref[zregzyderef]{reg\_deref}#(CapRegs[i])) diff --git a/cheri/sail_latex/sailfnreadCapRegDDC.tex b/cheri/sail_latex/sailfnreadCapRegDDC.tex new file mode 100644 index 00000000..f2fea30c --- /dev/null +++ b/cheri/sail_latex/sailfnreadCapRegDDC.tex @@ -0,0 +1,3 @@ +function #\hyperref[zreadCapRegDDC]{readCapRegDDC}#(n) = + let i = #\hyperref[zunsigned]{unsigned}#(n) in + #\hyperref[zcapRegToCapStruct]{capRegToCapStruct}#(#\hyperref[zregzyderef]{reg\_deref}#(CapRegs[i])) /* NB CapRegs[0] is points to DDC */ diff --git a/cheri/sail_latex/sailfnregisterinaccessible.tex b/cheri/sail_latex/sailfnregisterinaccessible.tex new file mode 100644 index 00000000..368d01a4 --- /dev/null +++ b/cheri/sail_latex/sailfnregisterinaccessible.tex @@ -0,0 +1,7 @@ +function #\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(r) = + ((r == IDCNO) & inCCallDelay) | + ((r == KR1CNO | + r == KR2CNO | + r == KDCNO | + r == KCCNO | + r == EPCCNO) & #\hyperref[znot]{not}# (#\hyperref[zpcczyaccesszysystemzyregs]{pcc\_access\_system\_regs}# ())) diff --git a/cheri/sail_latex/sailfnsailmask.tex b/cheri/sail_latex/sailfnsailmask.tex new file mode 100644 index 00000000..37ede658 --- /dev/null +++ b/cheri/sail_latex/sailfnsailmask.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_latex/sailfnsealCap.tex b/cheri/sail_latex/sailfnsealCap.tex new file mode 100644 index 00000000..beb1435b --- /dev/null +++ b/cheri/sail_latex/sailfnsealCap.tex @@ -0,0 +1,2 @@ +function #\hyperref[zsealCap]{sealCap}#(cap, otype) : (CapStruct, #\hyperref[zbits]{bits}#(24)) -> (bool, CapStruct) = + (true, {cap with sealed=true, otype=otype}) diff --git a/cheri/sail_latex/sailfnsetCapBounds.tex b/cheri/sail_latex/sailfnsetCapBounds.tex new file mode 100644 index 00000000..cb689dd8 --- /dev/null +++ b/cheri/sail_latex/sailfnsetCapBounds.tex @@ -0,0 +1,3 @@ +function #\hyperref[zsetCapBounds]{setCapBounds}#(cap, base, top) = + let length : #\hyperref[zbits]{bits}#(65) = top - (0b0 @ base) in + (true, {cap with base = base, length = length[63..0], address = base}) diff --git a/cheri/sail_latex/sailfnsetCapCauseRegExcCode.tex b/cheri/sail_latex/sailfnsetCapCauseRegExcCode.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetCapCauseRegExcCode.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetCapCauseRegRegNum.tex b/cheri/sail_latex/sailfnsetCapCauseRegRegNum.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetCapCauseRegRegNum.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetCapCauseRegbits.tex b/cheri/sail_latex/sailfnsetCapCauseRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetCapCauseRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetCapOffset.tex b/cheri/sail_latex/sailfnsetCapOffset.tex new file mode 100644 index 00000000..404630e3 --- /dev/null +++ b/cheri/sail_latex/sailfnsetCapOffset.tex @@ -0,0 +1,2 @@ +function #\hyperref[zsetCapOffset]{setCapOffset}#(c, offset) = + (true, {c with address=c.base + offset}) diff --git a/cheri/sail_latex/sailfnsetCapPerms.tex b/cheri/sail_latex/sailfnsetCapPerms.tex new file mode 100644 index 00000000..1a1f67bd --- /dev/null +++ b/cheri/sail_latex/sailfnsetCapPerms.tex @@ -0,0 +1,16 @@ +function #\hyperref[zsetCapPerms]{setCapPerms}#(cap, perms) : (CapStruct, #\hyperref[zbits]{bits}#(31)) -> CapStruct = + { cap with + uperms = perms[30..15], + /* perm_reserved11_14 = perms[14..11], XXX should allow to set? only affects cbuildcap. */ + 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_latex/sailfnsetCauseRegBD.tex b/cheri/sail_latex/sailfnsetCauseRegBD.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetCauseRegBD.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetCauseRegCE.tex b/cheri/sail_latex/sailfnsetCauseRegCE.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetCauseRegCE.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetCauseRegExcCode.tex b/cheri/sail_latex/sailfnsetCauseRegExcCode.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetCauseRegExcCode.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetCauseRegIP.tex b/cheri/sail_latex/sailfnsetCauseRegIP.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetCauseRegIP.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetCauseRegIV.tex b/cheri/sail_latex/sailfnsetCauseRegIV.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetCauseRegIV.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetCauseRegWP.tex b/cheri/sail_latex/sailfnsetCauseRegWP.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetCauseRegWP.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetCauseRegbits.tex b/cheri/sail_latex/sailfnsetCauseRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetCauseRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetContextRegBadVPNtwo.tex b/cheri/sail_latex/sailfnsetContextRegBadVPNtwo.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetContextRegBadVPNtwo.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetContextRegPTEBase.tex b/cheri/sail_latex/sailfnsetContextRegPTEBase.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetContextRegPTEBase.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetContextRegbits.tex b/cheri/sail_latex/sailfnsetContextRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetContextRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetStatusRegBEV.tex b/cheri/sail_latex/sailfnsetStatusRegBEV.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetStatusRegBEV.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetStatusRegCU.tex b/cheri/sail_latex/sailfnsetStatusRegCU.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetStatusRegCU.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetStatusRegERL.tex b/cheri/sail_latex/sailfnsetStatusRegERL.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetStatusRegERL.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetStatusRegEXL.tex b/cheri/sail_latex/sailfnsetStatusRegEXL.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetStatusRegEXL.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetStatusRegIE.tex b/cheri/sail_latex/sailfnsetStatusRegIE.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetStatusRegIE.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetStatusRegIM.tex b/cheri/sail_latex/sailfnsetStatusRegIM.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetStatusRegIM.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetStatusRegKSU.tex b/cheri/sail_latex/sailfnsetStatusRegKSU.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetStatusRegKSU.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetStatusRegKX.tex b/cheri/sail_latex/sailfnsetStatusRegKX.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetStatusRegKX.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetStatusRegSX.tex b/cheri/sail_latex/sailfnsetStatusRegSX.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetStatusRegSX.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetStatusRegUX.tex b/cheri/sail_latex/sailfnsetStatusRegUX.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetStatusRegUX.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetStatusRegbits.tex b/cheri/sail_latex/sailfnsetStatusRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetStatusRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntryHiRegASID.tex b/cheri/sail_latex/sailfnsetTLBEntryHiRegASID.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntryHiRegASID.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntryHiRegR.tex b/cheri/sail_latex/sailfnsetTLBEntryHiRegR.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntryHiRegR.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntryHiRegVPNtwo.tex b/cheri/sail_latex/sailfnsetTLBEntryHiRegVPNtwo.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntryHiRegVPNtwo.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntryHiRegbits.tex b/cheri/sail_latex/sailfnsetTLBEntryHiRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntryHiRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntryLoRegC.tex b/cheri/sail_latex/sailfnsetTLBEntryLoRegC.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntryLoRegC.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntryLoRegCapL.tex b/cheri/sail_latex/sailfnsetTLBEntryLoRegCapL.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntryLoRegCapL.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntryLoRegCapS.tex b/cheri/sail_latex/sailfnsetTLBEntryLoRegCapS.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntryLoRegCapS.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntryLoRegD.tex b/cheri/sail_latex/sailfnsetTLBEntryLoRegD.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntryLoRegD.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntryLoRegG.tex b/cheri/sail_latex/sailfnsetTLBEntryLoRegG.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntryLoRegG.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntryLoRegPFN.tex b/cheri/sail_latex/sailfnsetTLBEntryLoRegPFN.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntryLoRegPFN.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntryLoRegV.tex b/cheri/sail_latex/sailfnsetTLBEntryLoRegV.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntryLoRegV.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntryLoRegbits.tex b/cheri/sail_latex/sailfnsetTLBEntryLoRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntryLoRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntryasid.tex b/cheri/sail_latex/sailfnsetTLBEntryasid.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntryasid.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntrybits.tex b/cheri/sail_latex/sailfnsetTLBEntrybits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntrybits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntrycaplone.tex b/cheri/sail_latex/sailfnsetTLBEntrycaplone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntrycaplone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntrycaplzero.tex b/cheri/sail_latex/sailfnsetTLBEntrycaplzero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntrycaplzero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntrycapsone.tex b/cheri/sail_latex/sailfnsetTLBEntrycapsone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntrycapsone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntrycapszero.tex b/cheri/sail_latex/sailfnsetTLBEntrycapszero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntrycapszero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntrycone.tex b/cheri/sail_latex/sailfnsetTLBEntrycone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntrycone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntryczero.tex b/cheri/sail_latex/sailfnsetTLBEntryczero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntryczero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntrydone.tex b/cheri/sail_latex/sailfnsetTLBEntrydone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntrydone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntrydzero.tex b/cheri/sail_latex/sailfnsetTLBEntrydzero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntrydzero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntryg.tex b/cheri/sail_latex/sailfnsetTLBEntryg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntryg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntrypagemask.tex b/cheri/sail_latex/sailfnsetTLBEntrypagemask.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntrypagemask.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntrypfnone.tex b/cheri/sail_latex/sailfnsetTLBEntrypfnone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntrypfnone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntrypfnzero.tex b/cheri/sail_latex/sailfnsetTLBEntrypfnzero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntrypfnzero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntryr.tex b/cheri/sail_latex/sailfnsetTLBEntryr.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntryr.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntryvalid.tex b/cheri/sail_latex/sailfnsetTLBEntryvalid.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntryvalid.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntryvone.tex b/cheri/sail_latex/sailfnsetTLBEntryvone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntryvone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntryvpntwo.tex b/cheri/sail_latex/sailfnsetTLBEntryvpntwo.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntryvpntwo.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetTLBEntryvzero.tex b/cheri/sail_latex/sailfnsetTLBEntryvzero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetTLBEntryvzero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetXContextRegXBadVPNtwo.tex b/cheri/sail_latex/sailfnsetXContextRegXBadVPNtwo.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetXContextRegXBadVPNtwo.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetXContextRegXPTEBase.tex b/cheri/sail_latex/sailfnsetXContextRegXPTEBase.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetXContextRegXPTEBase.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetXContextRegXR.tex b/cheri/sail_latex/sailfnsetXContextRegXR.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetXContextRegXR.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsetXContextRegbits.tex b/cheri/sail_latex/sailfnsetXContextRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnsetXContextRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnsupportedinstructions.tex b/cheri/sail_latex/sailfnsupportedinstructions.tex new file mode 100644 index 00000000..b3ffdfa4 --- /dev/null +++ b/cheri/sail_latex/sailfnsupportedinstructions.tex @@ -0,0 +1 @@ +function supported_instructions instr = #\hyperref[zSome]{Some}#(instr) diff --git a/cheri/sail_latex/sailfntlbEntryMatch.tex b/cheri/sail_latex/sailfntlbEntryMatch.tex new file mode 100644 index 00000000..f952062f --- /dev/null +++ b/cheri/sail_latex/sailfntlbEntryMatch.tex @@ -0,0 +1,12 @@ +function #\hyperref[ztlbEntryMatch]{tlbEntryMatch}#(r, vpn2, asid, entry) = + let entryValid = entry.#\hyperref[zvalid]{valid}#() in + let entryR = entry.#\hyperref[zr]{r}#() in + let entryMask = entry.#\hyperref[zpagemask]{pagemask}#() in + let entryVPN = entry.#\hyperref[zvpntwo]{vpn2}#() in + let entryASID = entry.#\hyperref[zasid]{asid}#() in + let entryG = entry.#\hyperref[zg]{g}#() in + let vpnMask : #\hyperref[zbits]{bits}#(27) = ~(#\hyperref[zzzerozyextend]{zero\_extend}#(entryMask)) in + (entryValid & + (r == entryR) & + ((vpn2 & vpnMask) == ((entryVPN) & vpnMask)) & + ((asid == (entryASID)) | (entryG))) diff --git a/cheri/sail_latex/sailfntlbSearch.tex b/cheri/sail_latex/sailfntlbSearch.tex new file mode 100644 index 00000000..8bce6f3b --- /dev/null +++ b/cheri/sail_latex/sailfntlbSearch.tex @@ -0,0 +1,10 @@ +function #\hyperref[ztlbSearch]{tlbSearch}#(VAddr) = + let r = (VAddr[63..62]) in + let vpn2 = (VAddr[39..13]) in + let asid = TLBEntryHi.#\hyperref[zASID]{ASID}#() in { + foreach (idx from 0 to 63) { + if(#\hyperref[ztlbEntryMatch]{tlbEntryMatch}#(r, vpn2, asid, #\hyperref[zregzyderef]{reg\_deref}#(TLBEntries[idx]))) then + return #\hyperref[zSome]{Some}#(#\hyperref[ztozybits]{to\_bits}#(6, idx)) + }; + #\hyperref[zNone]{None}#() + } diff --git a/cheri/sail_latex/sailfntobits.tex b/cheri/sail_latex/sailfntobits.tex new file mode 100644 index 00000000..d1df5e83 --- /dev/null +++ b/cheri/sail_latex/sailfntobits.tex @@ -0,0 +1 @@ +function #\hyperref[ztozybits]{to\_bits}# (l, n) = #\hyperref[zgetzyslicezyint]{get\_slice\_int}#(l, n, 0) diff --git a/cheri/sail_latex/sailfnupdateCapCauseRegExcCode.tex b/cheri/sail_latex/sailfnupdateCapCauseRegExcCode.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateCapCauseRegExcCode.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateCapCauseRegRegNum.tex b/cheri/sail_latex/sailfnupdateCapCauseRegRegNum.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateCapCauseRegRegNum.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateCapCauseRegbits.tex b/cheri/sail_latex/sailfnupdateCapCauseRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateCapCauseRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateCauseRegBD.tex b/cheri/sail_latex/sailfnupdateCauseRegBD.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateCauseRegBD.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateCauseRegCE.tex b/cheri/sail_latex/sailfnupdateCauseRegCE.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateCauseRegCE.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateCauseRegExcCode.tex b/cheri/sail_latex/sailfnupdateCauseRegExcCode.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateCauseRegExcCode.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateCauseRegIP.tex b/cheri/sail_latex/sailfnupdateCauseRegIP.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateCauseRegIP.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateCauseRegIV.tex b/cheri/sail_latex/sailfnupdateCauseRegIV.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateCauseRegIV.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateCauseRegWP.tex b/cheri/sail_latex/sailfnupdateCauseRegWP.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateCauseRegWP.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateCauseRegbits.tex b/cheri/sail_latex/sailfnupdateCauseRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateCauseRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateContextRegBadVPNtwo.tex b/cheri/sail_latex/sailfnupdateContextRegBadVPNtwo.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateContextRegBadVPNtwo.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateContextRegPTEBase.tex b/cheri/sail_latex/sailfnupdateContextRegPTEBase.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateContextRegPTEBase.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateContextRegbits.tex b/cheri/sail_latex/sailfnupdateContextRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateContextRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateStatusRegBEV.tex b/cheri/sail_latex/sailfnupdateStatusRegBEV.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateStatusRegBEV.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateStatusRegCU.tex b/cheri/sail_latex/sailfnupdateStatusRegCU.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateStatusRegCU.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateStatusRegERL.tex b/cheri/sail_latex/sailfnupdateStatusRegERL.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateStatusRegERL.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateStatusRegEXL.tex b/cheri/sail_latex/sailfnupdateStatusRegEXL.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateStatusRegEXL.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateStatusRegIE.tex b/cheri/sail_latex/sailfnupdateStatusRegIE.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateStatusRegIE.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateStatusRegIM.tex b/cheri/sail_latex/sailfnupdateStatusRegIM.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateStatusRegIM.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateStatusRegKSU.tex b/cheri/sail_latex/sailfnupdateStatusRegKSU.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateStatusRegKSU.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateStatusRegKX.tex b/cheri/sail_latex/sailfnupdateStatusRegKX.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateStatusRegKX.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateStatusRegSX.tex b/cheri/sail_latex/sailfnupdateStatusRegSX.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateStatusRegSX.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateStatusRegUX.tex b/cheri/sail_latex/sailfnupdateStatusRegUX.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateStatusRegUX.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateStatusRegbits.tex b/cheri/sail_latex/sailfnupdateStatusRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateStatusRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntryHiRegASID.tex b/cheri/sail_latex/sailfnupdateTLBEntryHiRegASID.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntryHiRegASID.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntryHiRegR.tex b/cheri/sail_latex/sailfnupdateTLBEntryHiRegR.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntryHiRegR.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntryHiRegVPNtwo.tex b/cheri/sail_latex/sailfnupdateTLBEntryHiRegVPNtwo.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntryHiRegVPNtwo.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntryHiRegbits.tex b/cheri/sail_latex/sailfnupdateTLBEntryHiRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntryHiRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntryLoRegC.tex b/cheri/sail_latex/sailfnupdateTLBEntryLoRegC.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntryLoRegC.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntryLoRegCapL.tex b/cheri/sail_latex/sailfnupdateTLBEntryLoRegCapL.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntryLoRegCapL.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntryLoRegCapS.tex b/cheri/sail_latex/sailfnupdateTLBEntryLoRegCapS.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntryLoRegCapS.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntryLoRegD.tex b/cheri/sail_latex/sailfnupdateTLBEntryLoRegD.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntryLoRegD.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntryLoRegG.tex b/cheri/sail_latex/sailfnupdateTLBEntryLoRegG.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntryLoRegG.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntryLoRegPFN.tex b/cheri/sail_latex/sailfnupdateTLBEntryLoRegPFN.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntryLoRegPFN.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntryLoRegV.tex b/cheri/sail_latex/sailfnupdateTLBEntryLoRegV.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntryLoRegV.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntryLoRegbits.tex b/cheri/sail_latex/sailfnupdateTLBEntryLoRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntryLoRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntryasid.tex b/cheri/sail_latex/sailfnupdateTLBEntryasid.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntryasid.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntrybits.tex b/cheri/sail_latex/sailfnupdateTLBEntrybits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntrybits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntrycaplone.tex b/cheri/sail_latex/sailfnupdateTLBEntrycaplone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntrycaplone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntrycaplzero.tex b/cheri/sail_latex/sailfnupdateTLBEntrycaplzero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntrycaplzero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntrycapsone.tex b/cheri/sail_latex/sailfnupdateTLBEntrycapsone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntrycapsone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntrycapszero.tex b/cheri/sail_latex/sailfnupdateTLBEntrycapszero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntrycapszero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntrycone.tex b/cheri/sail_latex/sailfnupdateTLBEntrycone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntrycone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntryczero.tex b/cheri/sail_latex/sailfnupdateTLBEntryczero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntryczero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntrydone.tex b/cheri/sail_latex/sailfnupdateTLBEntrydone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntrydone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntrydzero.tex b/cheri/sail_latex/sailfnupdateTLBEntrydzero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntrydzero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntryg.tex b/cheri/sail_latex/sailfnupdateTLBEntryg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntryg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntrypagemask.tex b/cheri/sail_latex/sailfnupdateTLBEntrypagemask.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntrypagemask.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntrypfnone.tex b/cheri/sail_latex/sailfnupdateTLBEntrypfnone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntrypfnone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntrypfnzero.tex b/cheri/sail_latex/sailfnupdateTLBEntrypfnzero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntrypfnzero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntryr.tex b/cheri/sail_latex/sailfnupdateTLBEntryr.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntryr.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntryvalid.tex b/cheri/sail_latex/sailfnupdateTLBEntryvalid.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntryvalid.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntryvone.tex b/cheri/sail_latex/sailfnupdateTLBEntryvone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntryvone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntryvpntwo.tex b/cheri/sail_latex/sailfnupdateTLBEntryvpntwo.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntryvpntwo.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateTLBEntryvzero.tex b/cheri/sail_latex/sailfnupdateTLBEntryvzero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateTLBEntryvzero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateXContextRegXBadVPNtwo.tex b/cheri/sail_latex/sailfnupdateXContextRegXBadVPNtwo.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateXContextRegXBadVPNtwo.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateXContextRegXPTEBase.tex b/cheri/sail_latex/sailfnupdateXContextRegXPTEBase.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateXContextRegXPTEBase.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateXContextRegXR.tex b/cheri/sail_latex/sailfnupdateXContextRegXR.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateXContextRegXR.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnupdateXContextRegbits.tex b/cheri/sail_latex/sailfnupdateXContextRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailfnupdateXContextRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailfnwGPR.tex b/cheri/sail_latex/sailfnwGPR.tex new file mode 100644 index 00000000..338d4b5c --- /dev/null +++ b/cheri/sail_latex/sailfnwGPR.tex @@ -0,0 +1,8 @@ +function #\hyperref[zwGPR]{wGPR}# (idx, v) = { + let i as atom(_) = #\hyperref[zunsigned]{unsigned}#(idx) in + if i != 0 then { + /*#\hyperref[zprerrzystring]{prerr\_string}#(#\hyperref[zstringzyofzyint]{string\_of\_int}#(i)); + #\hyperref[zprerrzybits]{prerr\_bits}#(" <- ", v);*/ + GPR[i] = v; + }; +} diff --git a/cheri/sail_latex/sailfnwordWidthBytes.tex b/cheri/sail_latex/sailfnwordWidthBytes.tex new file mode 100644 index 00000000..a5760d98 --- /dev/null +++ b/cheri/sail_latex/sailfnwordWidthBytes.tex @@ -0,0 +1,7 @@ +function #\hyperref[zwordWidthBytes]{wordWidthBytes}#(w) = + match w { + B => 1, + H => 2, + W => 4, + D => 8 + } diff --git a/cheri/sail_latex/sailfnwriteCapReg.tex b/cheri/sail_latex/sailfnwriteCapReg.tex new file mode 100644 index 00000000..d8de79fd --- /dev/null +++ b/cheri/sail_latex/sailfnwriteCapReg.tex @@ -0,0 +1,6 @@ +function #\hyperref[zwriteCapReg]{writeCapReg}#(n, cap) : (regno, CapStruct) -> unit = + if (n == 0b00000) then + () + else + let i = #\hyperref[zunsigned]{unsigned}#(n) in + (*CapRegs[i]) = #\hyperref[zcapStructToCapReg]{capStructToCapReg}#(cap) diff --git a/cheri/sail_latex/sailfnzeightoperatorzzerozIsznine.tex b/cheri/sail_latex/sailfnzeightoperatorzzerozIsznine.tex new file mode 100644 index 00000000..62e5a2e4 --- /dev/null +++ b/cheri/sail_latex/sailfnzeightoperatorzzerozIsznine.tex @@ -0,0 +1 @@ +function operator <#\hyperref[zzys]{\_s}# (x, y) = #\hyperref[zsigned]{signed}#(x) < #\hyperref[zsigned]{signed}#(y) diff --git a/cheri/sail_latex/sailfnzeightoperatorzzerozIuznine.tex b/cheri/sail_latex/sailfnzeightoperatorzzerozIuznine.tex new file mode 100644 index 00000000..3f946820 --- /dev/null +++ b/cheri/sail_latex/sailfnzeightoperatorzzerozIuznine.tex @@ -0,0 +1 @@ +function operator <#\hyperref[zzyu]{\_u}# (x, y) = #\hyperref[zunsigned]{unsigned}#(x) < #\hyperref[zunsigned]{unsigned}#(y) diff --git a/cheri/sail_latex/sailfnzeightoperatorzzerozKzJsznine.tex b/cheri/sail_latex/sailfnzeightoperatorzzerozKzJsznine.tex new file mode 100644 index 00000000..57ecf181 --- /dev/null +++ b/cheri/sail_latex/sailfnzeightoperatorzzerozKzJsznine.tex @@ -0,0 +1 @@ +function operator >=#\hyperref[zzys]{\_s}# (x, y) = #\hyperref[zsigned]{signed}#(x) >= #\hyperref[zsigned]{signed}#(y) diff --git a/cheri/sail_latex/sailfnzeightoperatorzzerozKzJuznine.tex b/cheri/sail_latex/sailfnzeightoperatorzzerozKzJuznine.tex new file mode 100644 index 00000000..6df36c6f --- /dev/null +++ b/cheri/sail_latex/sailfnzeightoperatorzzerozKzJuznine.tex @@ -0,0 +1 @@ +function operator >=#\hyperref[zzyu]{\_u}# (x, y) = #\hyperref[zunsigned]{unsigned}#(x) >= #\hyperref[zunsigned]{unsigned}#(y) diff --git a/cheri/sail_latex/sailfnzeightoperatorzzerozQzQznine.tex b/cheri/sail_latex/sailfnzeightoperatorzzerozQzQznine.tex new file mode 100644 index 00000000..2c372e1b --- /dev/null +++ b/cheri/sail_latex/sailfnzeightoperatorzzerozQzQznine.tex @@ -0,0 +1 @@ +function operator ^^ (bs, n) = #\hyperref[zreplicatezybits]{replicate\_bits}# (bs, n) diff --git a/cheri/sail_latex/sailfnzzeros.tex b/cheri/sail_latex/sailfnzzeros.tex new file mode 100644 index 00000000..38d463fb --- /dev/null +++ b/cheri/sail_latex/sailfnzzeros.tex @@ -0,0 +1 @@ +function #\hyperref[zzzeros]{zeros}#() = #\hyperref[zreplicatezybits]{replicate\_bits}# (0b0,'n) diff --git a/cheri/sail_latex/sailgetAccessLevel.tex b/cheri/sail_latex/sailgetAccessLevel.tex new file mode 100644 index 00000000..4412096c --- /dev/null +++ b/cheri/sail_latex/sailgetAccessLevel.tex @@ -0,0 +1 @@ +val getAccessLevel : unit -> AccessLevel effect {rreg} diff --git a/cheri/sail_latex/sailgetCapBase.tex b/cheri/sail_latex/sailgetCapBase.tex new file mode 100644 index 00000000..c7044d1d --- /dev/null +++ b/cheri/sail_latex/sailgetCapBase.tex @@ -0,0 +1 @@ +val getCapBase : CapStruct -> uint64 diff --git a/cheri/sail_latex/sailgetCapCauseRegExcCode.tex b/cheri/sail_latex/sailgetCapCauseRegExcCode.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetCapCauseRegExcCode.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetCapCauseRegRegNum.tex b/cheri/sail_latex/sailgetCapCauseRegRegNum.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetCapCauseRegRegNum.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetCapCauseRegbits.tex b/cheri/sail_latex/sailgetCapCauseRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetCapCauseRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetCapCursor.tex b/cheri/sail_latex/sailgetCapCursor.tex new file mode 100644 index 00000000..fd5d72d8 --- /dev/null +++ b/cheri/sail_latex/sailgetCapCursor.tex @@ -0,0 +1 @@ +val getCapCursor : CapStruct -> uint64 diff --git a/cheri/sail_latex/sailgetCapLength.tex b/cheri/sail_latex/sailgetCapLength.tex new file mode 100644 index 00000000..aaa822c8 --- /dev/null +++ b/cheri/sail_latex/sailgetCapLength.tex @@ -0,0 +1 @@ +val getCapLength : CapStruct -> CapLen diff --git a/cheri/sail_latex/sailgetCapOffset.tex b/cheri/sail_latex/sailgetCapOffset.tex new file mode 100644 index 00000000..668c3df1 --- /dev/null +++ b/cheri/sail_latex/sailgetCapOffset.tex @@ -0,0 +1 @@ +val getCapOffset : CapStruct -> uint64 diff --git a/cheri/sail_latex/sailgetCapPerms.tex b/cheri/sail_latex/sailgetCapPerms.tex new file mode 100644 index 00000000..b2dabf89 --- /dev/null +++ b/cheri/sail_latex/sailgetCapPerms.tex @@ -0,0 +1 @@ +val getCapPerms : CapStruct -> bits(31) diff --git a/cheri/sail_latex/sailgetCapTop.tex b/cheri/sail_latex/sailgetCapTop.tex new file mode 100644 index 00000000..ff0e5f95 --- /dev/null +++ b/cheri/sail_latex/sailgetCapTop.tex @@ -0,0 +1 @@ +val getCapTop : CapStruct -> CapLen diff --git a/cheri/sail_latex/sailgetCauseRegBD.tex b/cheri/sail_latex/sailgetCauseRegBD.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetCauseRegBD.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetCauseRegCE.tex b/cheri/sail_latex/sailgetCauseRegCE.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetCauseRegCE.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetCauseRegExcCode.tex b/cheri/sail_latex/sailgetCauseRegExcCode.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetCauseRegExcCode.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetCauseRegIP.tex b/cheri/sail_latex/sailgetCauseRegIP.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetCauseRegIP.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetCauseRegIV.tex b/cheri/sail_latex/sailgetCauseRegIV.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetCauseRegIV.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetCauseRegWP.tex b/cheri/sail_latex/sailgetCauseRegWP.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetCauseRegWP.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetCauseRegbits.tex b/cheri/sail_latex/sailgetCauseRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetCauseRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetContextRegBadVPNtwo.tex b/cheri/sail_latex/sailgetContextRegBadVPNtwo.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetContextRegBadVPNtwo.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetContextRegPTEBase.tex b/cheri/sail_latex/sailgetContextRegPTEBase.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetContextRegPTEBase.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetContextRegbits.tex b/cheri/sail_latex/sailgetContextRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetContextRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetStatusRegBEV.tex b/cheri/sail_latex/sailgetStatusRegBEV.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetStatusRegBEV.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetStatusRegCU.tex b/cheri/sail_latex/sailgetStatusRegCU.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetStatusRegCU.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetStatusRegERL.tex b/cheri/sail_latex/sailgetStatusRegERL.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetStatusRegERL.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetStatusRegEXL.tex b/cheri/sail_latex/sailgetStatusRegEXL.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetStatusRegEXL.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetStatusRegIE.tex b/cheri/sail_latex/sailgetStatusRegIE.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetStatusRegIE.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetStatusRegIM.tex b/cheri/sail_latex/sailgetStatusRegIM.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetStatusRegIM.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetStatusRegKSU.tex b/cheri/sail_latex/sailgetStatusRegKSU.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetStatusRegKSU.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetStatusRegKX.tex b/cheri/sail_latex/sailgetStatusRegKX.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetStatusRegKX.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetStatusRegSX.tex b/cheri/sail_latex/sailgetStatusRegSX.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetStatusRegSX.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetStatusRegUX.tex b/cheri/sail_latex/sailgetStatusRegUX.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetStatusRegUX.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetStatusRegbits.tex b/cheri/sail_latex/sailgetStatusRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetStatusRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntryHiRegASID.tex b/cheri/sail_latex/sailgetTLBEntryHiRegASID.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntryHiRegASID.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntryHiRegR.tex b/cheri/sail_latex/sailgetTLBEntryHiRegR.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntryHiRegR.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntryHiRegVPNtwo.tex b/cheri/sail_latex/sailgetTLBEntryHiRegVPNtwo.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntryHiRegVPNtwo.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntryHiRegbits.tex b/cheri/sail_latex/sailgetTLBEntryHiRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntryHiRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntryLoRegC.tex b/cheri/sail_latex/sailgetTLBEntryLoRegC.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntryLoRegC.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntryLoRegCapL.tex b/cheri/sail_latex/sailgetTLBEntryLoRegCapL.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntryLoRegCapL.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntryLoRegCapS.tex b/cheri/sail_latex/sailgetTLBEntryLoRegCapS.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntryLoRegCapS.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntryLoRegD.tex b/cheri/sail_latex/sailgetTLBEntryLoRegD.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntryLoRegD.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntryLoRegG.tex b/cheri/sail_latex/sailgetTLBEntryLoRegG.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntryLoRegG.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntryLoRegPFN.tex b/cheri/sail_latex/sailgetTLBEntryLoRegPFN.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntryLoRegPFN.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntryLoRegV.tex b/cheri/sail_latex/sailgetTLBEntryLoRegV.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntryLoRegV.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntryLoRegbits.tex b/cheri/sail_latex/sailgetTLBEntryLoRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntryLoRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntryasid.tex b/cheri/sail_latex/sailgetTLBEntryasid.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntryasid.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntrybits.tex b/cheri/sail_latex/sailgetTLBEntrybits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntrybits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntrycaplone.tex b/cheri/sail_latex/sailgetTLBEntrycaplone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntrycaplone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntrycaplzero.tex b/cheri/sail_latex/sailgetTLBEntrycaplzero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntrycaplzero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntrycapsone.tex b/cheri/sail_latex/sailgetTLBEntrycapsone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntrycapsone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntrycapszero.tex b/cheri/sail_latex/sailgetTLBEntrycapszero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntrycapszero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntrycone.tex b/cheri/sail_latex/sailgetTLBEntrycone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntrycone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntryczero.tex b/cheri/sail_latex/sailgetTLBEntryczero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntryczero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntrydone.tex b/cheri/sail_latex/sailgetTLBEntrydone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntrydone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntrydzero.tex b/cheri/sail_latex/sailgetTLBEntrydzero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntrydzero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntryg.tex b/cheri/sail_latex/sailgetTLBEntryg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntryg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntrypagemask.tex b/cheri/sail_latex/sailgetTLBEntrypagemask.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntrypagemask.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntrypfnone.tex b/cheri/sail_latex/sailgetTLBEntrypfnone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntrypfnone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntrypfnzero.tex b/cheri/sail_latex/sailgetTLBEntrypfnzero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntrypfnzero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntryr.tex b/cheri/sail_latex/sailgetTLBEntryr.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntryr.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntryvalid.tex b/cheri/sail_latex/sailgetTLBEntryvalid.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntryvalid.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntryvone.tex b/cheri/sail_latex/sailgetTLBEntryvone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntryvone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntryvpntwo.tex b/cheri/sail_latex/sailgetTLBEntryvpntwo.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntryvpntwo.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetTLBEntryvzero.tex b/cheri/sail_latex/sailgetTLBEntryvzero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetTLBEntryvzero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetXContextRegXBadVPNtwo.tex b/cheri/sail_latex/sailgetXContextRegXBadVPNtwo.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetXContextRegXBadVPNtwo.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetXContextRegXPTEBase.tex b/cheri/sail_latex/sailgetXContextRegXPTEBase.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetXContextRegXPTEBase.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetXContextRegXR.tex b/cheri/sail_latex/sailgetXContextRegXR.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetXContextRegXR.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetXContextRegbits.tex b/cheri/sail_latex/sailgetXContextRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailgetXContextRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailgetsliceint.tex b/cheri/sail_latex/sailgetsliceint.tex new file mode 100644 index 00000000..2b30d096 --- /dev/null +++ b/cheri/sail_latex/sailgetsliceint.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_latex/sailgettimens.tex b/cheri/sail_latex/sailgettimens.tex new file mode 100644 index 00000000..74cfd526 --- /dev/null +++ b/cheri/sail_latex/sailgettimens.tex @@ -0,0 +1 @@ +val "get_time_ns" : unit -> int diff --git a/cheri/sail_latex/sailgrantsAccess.tex b/cheri/sail_latex/sailgrantsAccess.tex new file mode 100644 index 00000000..ab28ac58 --- /dev/null +++ b/cheri/sail_latex/sailgrantsAccess.tex @@ -0,0 +1 @@ +val grantsAccess : (AccessLevel, AccessLevel) -> bool diff --git a/cheri/sail_latex/sailgtatom.tex b/cheri/sail_latex/sailgtatom.tex new file mode 100644 index 00000000..b2147a8f --- /dev/null +++ b/cheri/sail_latex/sailgtatom.tex @@ -0,0 +1 @@ +val gt_atom = {coq: "Z.gtb", _: "gt"} : forall 'n 'm. (atom('n), atom('m)) -> bool diff --git a/cheri/sail_latex/sailgtatomrange.tex b/cheri/sail_latex/sailgtatomrange.tex new file mode 100644 index 00000000..3c520181 --- /dev/null +++ b/cheri/sail_latex/sailgtatomrange.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_latex/sailgteqatom.tex b/cheri/sail_latex/sailgteqatom.tex new file mode 100644 index 00000000..fb3b66b2 --- /dev/null +++ b/cheri/sail_latex/sailgteqatom.tex @@ -0,0 +1 @@ +val gteq_atom = {coq: "Z.geb", _: "gteq"} : forall 'n 'm. (atom('n), atom('m)) -> bool diff --git a/cheri/sail_latex/sailgteqatomrange.tex b/cheri/sail_latex/sailgteqatomrange.tex new file mode 100644 index 00000000..7aaf633f --- /dev/null +++ b/cheri/sail_latex/sailgteqatomrange.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_latex/sailgteqint.tex b/cheri/sail_latex/sailgteqint.tex new file mode 100644 index 00000000..77271d1f --- /dev/null +++ b/cheri/sail_latex/sailgteqint.tex @@ -0,0 +1 @@ +val gteq_int = {coq: "Z.geb", _:"gteq"} : (int, int) -> bool diff --git a/cheri/sail_latex/sailgteqrangeatom.tex b/cheri/sail_latex/sailgteqrangeatom.tex new file mode 100644 index 00000000..fda25265 --- /dev/null +++ b/cheri/sail_latex/sailgteqrangeatom.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_latex/sailgtint.tex b/cheri/sail_latex/sailgtint.tex new file mode 100644 index 00000000..2d953eec --- /dev/null +++ b/cheri/sail_latex/sailgtint.tex @@ -0,0 +1 @@ +val gt_int = {coq: "Z.gtb", _:"gt"} : (int, int) -> bool diff --git a/cheri/sail_latex/sailgtrangeatom.tex b/cheri/sail_latex/sailgtrangeatom.tex new file mode 100644 index 00000000..b8635909 --- /dev/null +++ b/cheri/sail_latex/sailgtrangeatom.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_latex/sailimmonesix.tex b/cheri/sail_latex/sailimmonesix.tex new file mode 100644 index 00000000..bec28c6c --- /dev/null +++ b/cheri/sail_latex/sailimmonesix.tex @@ -0,0 +1 @@ +type imm16 = #\hyperref[zbits]{bits}#(16) /* 16-bit immediate */ diff --git a/cheri/sail_latex/sailincCapOffset.tex b/cheri/sail_latex/sailincCapOffset.tex new file mode 100644 index 00000000..8e182ff3 --- /dev/null +++ b/cheri/sail_latex/sailincCapOffset.tex @@ -0,0 +1 @@ +val incCapOffset : (CapStruct, #\hyperref[zbits]{bits}#(64)) -> (bool, CapStruct) diff --git a/cheri/sail_latex/sailincrementCPzeroCount.tex b/cheri/sail_latex/sailincrementCPzeroCount.tex new file mode 100644 index 00000000..ca1384eb --- /dev/null +++ b/cheri/sail_latex/sailincrementCPzeroCount.tex @@ -0,0 +1 @@ +val incrementCP0Count : unit -> unit effect {rreg,wreg,escape} diff --git a/cheri/sail_latex/sailinitcptwostate.tex b/cheri/sail_latex/sailinitcptwostate.tex new file mode 100644 index 00000000..98ced710 --- /dev/null +++ b/cheri/sail_latex/sailinitcptwostate.tex @@ -0,0 +1 @@ +val init_cp2_state : unit -> unit effect {wreg} diff --git a/cheri/sail_latex/sailinitcpzerostate.tex b/cheri/sail_latex/sailinitcpzerostate.tex new file mode 100644 index 00000000..743cc402 --- /dev/null +++ b/cheri/sail_latex/sailinitcpzerostate.tex @@ -0,0 +1 @@ +val init_cp0_state : unit -> unit effect {wreg} diff --git a/cheri/sail_latex/sailintofAccessLevel.tex b/cheri/sail_latex/sailintofAccessLevel.tex new file mode 100644 index 00000000..257f321f --- /dev/null +++ b/cheri/sail_latex/sailintofAccessLevel.tex @@ -0,0 +1 @@ +val int_of_AccessLevel : AccessLevel -> {|0, 1, 2|} effect pure diff --git a/cheri/sail_latex/sailintpower.tex b/cheri/sail_latex/sailintpower.tex new file mode 100644 index 00000000..0aa13188 --- /dev/null +++ b/cheri/sail_latex/sailintpower.tex @@ -0,0 +1 @@ +val int_power = {ocaml: "int_power", lem: "pow", coq: "Z.pow"} : (int, int) -> int diff --git a/cheri/sail_latex/sailinttocap.tex b/cheri/sail_latex/sailinttocap.tex new file mode 100644 index 00000000..0f4cd328 --- /dev/null +++ b/cheri/sail_latex/sailinttocap.tex @@ -0,0 +1 @@ +val int_to_cap : bits(64) -> CapStruct diff --git a/cheri/sail_latex/sailisAddressAligned.tex b/cheri/sail_latex/sailisAddressAligned.tex new file mode 100644 index 00000000..e1f8c318 --- /dev/null +++ b/cheri/sail_latex/sailisAddressAligned.tex @@ -0,0 +1 @@ +val isAddressAligned : (#\hyperref[zbits]{bits}#(64), WordType) -> bool diff --git a/cheri/sail_latex/sailisnone.tex b/cheri/sail_latex/sailisnone.tex new file mode 100644 index 00000000..76688d37 --- /dev/null +++ b/cheri/sail_latex/sailisnone.tex @@ -0,0 +1 @@ +val is_none : forall ('a : Type). #\hyperref[zoption]{option}#('a) -> bool diff --git a/cheri/sail_latex/sailissome.tex b/cheri/sail_latex/sailissome.tex new file mode 100644 index 00000000..071ac6b6 --- /dev/null +++ b/cheri/sail_latex/sailissome.tex @@ -0,0 +1 @@ +val is_some : forall ('a : Type). #\hyperref[zoption]{option}#('a) -> bool diff --git a/cheri/sail_latex/saillength.tex b/cheri/sail_latex/saillength.tex new file mode 100644 index 00000000..248c8507 --- /dev/null +++ b/cheri/sail_latex/saillength.tex @@ -0,0 +1 @@ +overload length = {bitvector_length, vector_length}
\ No newline at end of file diff --git a/cheri/sail_latex/sailltatom.tex b/cheri/sail_latex/sailltatom.tex new file mode 100644 index 00000000..5cca54df --- /dev/null +++ b/cheri/sail_latex/sailltatom.tex @@ -0,0 +1 @@ +val lt_atom = {coq: "Z.ltb", _: "lt"} : forall 'n 'm. (atom('n), atom('m)) -> bool diff --git a/cheri/sail_latex/sailltatomrange.tex b/cheri/sail_latex/sailltatomrange.tex new file mode 100644 index 00000000..19d3375d --- /dev/null +++ b/cheri/sail_latex/sailltatomrange.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_latex/saillteqatom.tex b/cheri/sail_latex/saillteqatom.tex new file mode 100644 index 00000000..26e27e2d --- /dev/null +++ b/cheri/sail_latex/saillteqatom.tex @@ -0,0 +1 @@ +val lteq_atom = {coq: "Z.leb", _: "lteq"} : forall 'n 'm. (atom('n), atom('m)) -> bool diff --git a/cheri/sail_latex/saillteqatomrange.tex b/cheri/sail_latex/saillteqatomrange.tex new file mode 100644 index 00000000..6e951cf7 --- /dev/null +++ b/cheri/sail_latex/saillteqatomrange.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_latex/saillteqint.tex b/cheri/sail_latex/saillteqint.tex new file mode 100644 index 00000000..555176be --- /dev/null +++ b/cheri/sail_latex/saillteqint.tex @@ -0,0 +1 @@ +val lteq_int = {coq: "Z.leb", _:"lteq"} : (int, int) -> bool diff --git a/cheri/sail_latex/saillteqrangeatom.tex b/cheri/sail_latex/saillteqrangeatom.tex new file mode 100644 index 00000000..f8fcd32d --- /dev/null +++ b/cheri/sail_latex/saillteqrangeatom.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_latex/sailltint.tex b/cheri/sail_latex/sailltint.tex new file mode 100644 index 00000000..40bd4e85 --- /dev/null +++ b/cheri/sail_latex/sailltint.tex @@ -0,0 +1 @@ +val lt_int = {coq: "Z.ltb", _:"lt"} : (int, int) -> bool diff --git a/cheri/sail_latex/sailltrangeatom.tex b/cheri/sail_latex/sailltrangeatom.tex new file mode 100644 index 00000000..d8495496 --- /dev/null +++ b/cheri/sail_latex/sailltrangeatom.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_latex/sailmask.tex b/cheri/sail_latex/sailmask.tex new file mode 100644 index 00000000..35d052db --- /dev/null +++ b/cheri/sail_latex/sailmask.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_latex/sailmaxatom.tex b/cheri/sail_latex/sailmaxatom.tex new file mode 100644 index 00000000..6cbdfa7f --- /dev/null +++ b/cheri/sail_latex/sailmaxatom.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_latex/sailmaxint.tex b/cheri/sail_latex/sailmaxint.tex new file mode 100644 index 00000000..c537babb --- /dev/null +++ b/cheri/sail_latex/sailmaxint.tex @@ -0,0 +1 @@ +val max_int = {lem: "max", coq: "Z.max", _: "max_int"} : (int, int) -> int diff --git a/cheri/sail_latex/sailmaxnat.tex b/cheri/sail_latex/sailmaxnat.tex new file mode 100644 index 00000000..1b62334a --- /dev/null +++ b/cheri/sail_latex/sailmaxnat.tex @@ -0,0 +1 @@ +val max_nat = {lem: "max", coq: "Z.max", _: "max_int"} : (nat, nat) -> nat diff --git a/cheri/sail_latex/sailmemBitsToCapBits.tex b/cheri/sail_latex/sailmemBitsToCapBits.tex new file mode 100644 index 00000000..99aaa592 --- /dev/null +++ b/cheri/sail_latex/sailmemBitsToCapBits.tex @@ -0,0 +1 @@ +val memBitsToCapBits : (bool, bits(256)) -> bits(257) diff --git a/cheri/sail_latex/sailmin.tex b/cheri/sail_latex/sailmin.tex new file mode 100644 index 00000000..94097198 --- /dev/null +++ b/cheri/sail_latex/sailmin.tex @@ -0,0 +1 @@ +overload min = {min_atom, min_nat, min_int}
\ No newline at end of file diff --git a/cheri/sail_latex/sailminatom.tex b/cheri/sail_latex/sailminatom.tex new file mode 100644 index 00000000..acfea384 --- /dev/null +++ b/cheri/sail_latex/sailminatom.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_latex/sailminint.tex b/cheri/sail_latex/sailminint.tex new file mode 100644 index 00000000..3d633d08 --- /dev/null +++ b/cheri/sail_latex/sailminint.tex @@ -0,0 +1 @@ +val min_int = {lem: "min", coq: "Z.min", _: "min_int"} : (int, int) -> int diff --git a/cheri/sail_latex/sailminnat.tex b/cheri/sail_latex/sailminnat.tex new file mode 100644 index 00000000..85409bd8 --- /dev/null +++ b/cheri/sail_latex/sailminnat.tex @@ -0,0 +1 @@ +val min_nat = {lem: "min", coq: "Z.min", _: "min_int"} : (nat, nat) -> nat diff --git a/cheri/sail_latex/sailmipssignextend.tex b/cheri/sail_latex/sailmipssignextend.tex new file mode 100644 index 00000000..e613567d --- /dev/null +++ b/cheri/sail_latex/sailmipssignextend.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_latex/sailmipszzeroextend.tex b/cheri/sail_latex/sailmipszzeroextend.tex new file mode 100644 index 00000000..adbb4188 --- /dev/null +++ b/cheri/sail_latex/sailmipszzeroextend.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_latex/sailmod.tex b/cheri/sail_latex/sailmod.tex new file mode 100644 index 00000000..ab70dd7a --- /dev/null +++ b/cheri/sail_latex/sailmod.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_latex/sailmodBD.tex b/cheri/sail_latex/sailmodBD.tex new file mode 100644 index 00000000..f3e58d9b --- /dev/null +++ b/cheri/sail_latex/sailmodBD.tex @@ -0,0 +1 @@ +overload _mod_BD = {_get_CauseReg_BD, _set_CauseReg_BD}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodBEV.tex b/cheri/sail_latex/sailmodBEV.tex new file mode 100644 index 00000000..beee53c1 --- /dev/null +++ b/cheri/sail_latex/sailmodBEV.tex @@ -0,0 +1 @@ +overload _mod_BEV = {_get_StatusReg_BEV, _set_StatusReg_BEV}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodBadVPNtwo.tex b/cheri/sail_latex/sailmodBadVPNtwo.tex new file mode 100644 index 00000000..c2578121 --- /dev/null +++ b/cheri/sail_latex/sailmodBadVPNtwo.tex @@ -0,0 +1 @@ +overload _mod_BadVPN2 = {_get_ContextReg_BadVPN2, _set_ContextReg_BadVPN2}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodC.tex b/cheri/sail_latex/sailmodC.tex new file mode 100644 index 00000000..01df09e2 --- /dev/null +++ b/cheri/sail_latex/sailmodC.tex @@ -0,0 +1 @@ +overload _mod_C = {_get_TLBEntryLoReg_C, _set_TLBEntryLoReg_C}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodCE.tex b/cheri/sail_latex/sailmodCE.tex new file mode 100644 index 00000000..9136541c --- /dev/null +++ b/cheri/sail_latex/sailmodCE.tex @@ -0,0 +1 @@ +overload _mod_CE = {_get_CauseReg_CE, _set_CauseReg_CE}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodCU.tex b/cheri/sail_latex/sailmodCU.tex new file mode 100644 index 00000000..2a2b7db3 --- /dev/null +++ b/cheri/sail_latex/sailmodCU.tex @@ -0,0 +1 @@ +overload _mod_CU = {_get_StatusReg_CU, _set_StatusReg_CU}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodCapL.tex b/cheri/sail_latex/sailmodCapL.tex new file mode 100644 index 00000000..1e92b0d4 --- /dev/null +++ b/cheri/sail_latex/sailmodCapL.tex @@ -0,0 +1 @@ +overload _mod_CapL = {_get_TLBEntryLoReg_CapL, _set_TLBEntryLoReg_CapL}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodCapS.tex b/cheri/sail_latex/sailmodCapS.tex new file mode 100644 index 00000000..bdacef07 --- /dev/null +++ b/cheri/sail_latex/sailmodCapS.tex @@ -0,0 +1 @@ +overload _mod_CapS = {_get_TLBEntryLoReg_CapS, _set_TLBEntryLoReg_CapS}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodD.tex b/cheri/sail_latex/sailmodD.tex new file mode 100644 index 00000000..af4cad2e --- /dev/null +++ b/cheri/sail_latex/sailmodD.tex @@ -0,0 +1 @@ +overload _mod_D = {_get_TLBEntryLoReg_D, _set_TLBEntryLoReg_D}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodERL.tex b/cheri/sail_latex/sailmodERL.tex new file mode 100644 index 00000000..b334b7dc --- /dev/null +++ b/cheri/sail_latex/sailmodERL.tex @@ -0,0 +1 @@ +overload _mod_ERL = {_get_StatusReg_ERL, _set_StatusReg_ERL}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodEXL.tex b/cheri/sail_latex/sailmodEXL.tex new file mode 100644 index 00000000..16b2bc8c --- /dev/null +++ b/cheri/sail_latex/sailmodEXL.tex @@ -0,0 +1 @@ +overload _mod_EXL = {_get_StatusReg_EXL, _set_StatusReg_EXL}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodExcCode.tex b/cheri/sail_latex/sailmodExcCode.tex new file mode 100644 index 00000000..baa16ec2 --- /dev/null +++ b/cheri/sail_latex/sailmodExcCode.tex @@ -0,0 +1 @@ +overload _mod_ExcCode = {_get_CapCauseReg_ExcCode, _set_CapCauseReg_ExcCode}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodIE.tex b/cheri/sail_latex/sailmodIE.tex new file mode 100644 index 00000000..940ad6f3 --- /dev/null +++ b/cheri/sail_latex/sailmodIE.tex @@ -0,0 +1 @@ +overload _mod_IE = {_get_StatusReg_IE, _set_StatusReg_IE}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodIM.tex b/cheri/sail_latex/sailmodIM.tex new file mode 100644 index 00000000..d3a58dd0 --- /dev/null +++ b/cheri/sail_latex/sailmodIM.tex @@ -0,0 +1 @@ +overload _mod_IM = {_get_StatusReg_IM, _set_StatusReg_IM}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodIP.tex b/cheri/sail_latex/sailmodIP.tex new file mode 100644 index 00000000..361230bf --- /dev/null +++ b/cheri/sail_latex/sailmodIP.tex @@ -0,0 +1 @@ +overload _mod_IP = {_get_CauseReg_IP, _set_CauseReg_IP}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodIV.tex b/cheri/sail_latex/sailmodIV.tex new file mode 100644 index 00000000..1222520b --- /dev/null +++ b/cheri/sail_latex/sailmodIV.tex @@ -0,0 +1 @@ +overload _mod_IV = {_get_CauseReg_IV, _set_CauseReg_IV}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodKSU.tex b/cheri/sail_latex/sailmodKSU.tex new file mode 100644 index 00000000..7cff9a26 --- /dev/null +++ b/cheri/sail_latex/sailmodKSU.tex @@ -0,0 +1 @@ +overload _mod_KSU = {_get_StatusReg_KSU, _set_StatusReg_KSU}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodKX.tex b/cheri/sail_latex/sailmodKX.tex new file mode 100644 index 00000000..a90ad274 --- /dev/null +++ b/cheri/sail_latex/sailmodKX.tex @@ -0,0 +1 @@ +overload _mod_KX = {_get_StatusReg_KX, _set_StatusReg_KX}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodPFN.tex b/cheri/sail_latex/sailmodPFN.tex new file mode 100644 index 00000000..bba40f6d --- /dev/null +++ b/cheri/sail_latex/sailmodPFN.tex @@ -0,0 +1 @@ +overload _mod_PFN = {_get_TLBEntryLoReg_PFN, _set_TLBEntryLoReg_PFN}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodPTEBase.tex b/cheri/sail_latex/sailmodPTEBase.tex new file mode 100644 index 00000000..890eb57c --- /dev/null +++ b/cheri/sail_latex/sailmodPTEBase.tex @@ -0,0 +1 @@ +overload _mod_PTEBase = {_get_ContextReg_PTEBase, _set_ContextReg_PTEBase}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodRegNum.tex b/cheri/sail_latex/sailmodRegNum.tex new file mode 100644 index 00000000..6cc28de3 --- /dev/null +++ b/cheri/sail_latex/sailmodRegNum.tex @@ -0,0 +1 @@ +overload _mod_RegNum = {_get_CapCauseReg_RegNum, _set_CapCauseReg_RegNum}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodSX.tex b/cheri/sail_latex/sailmodSX.tex new file mode 100644 index 00000000..4ea62484 --- /dev/null +++ b/cheri/sail_latex/sailmodSX.tex @@ -0,0 +1 @@ +overload _mod_SX = {_get_StatusReg_SX, _set_StatusReg_SX}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodUX.tex b/cheri/sail_latex/sailmodUX.tex new file mode 100644 index 00000000..aa31242d --- /dev/null +++ b/cheri/sail_latex/sailmodUX.tex @@ -0,0 +1 @@ +overload _mod_UX = {_get_StatusReg_UX, _set_StatusReg_UX}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodV.tex b/cheri/sail_latex/sailmodV.tex new file mode 100644 index 00000000..964f5eab --- /dev/null +++ b/cheri/sail_latex/sailmodV.tex @@ -0,0 +1 @@ +overload _mod_V = {_get_TLBEntryLoReg_V, _set_TLBEntryLoReg_V}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodWP.tex b/cheri/sail_latex/sailmodWP.tex new file mode 100644 index 00000000..1ab7fbf7 --- /dev/null +++ b/cheri/sail_latex/sailmodWP.tex @@ -0,0 +1 @@ +overload _mod_WP = {_get_CauseReg_WP, _set_CauseReg_WP}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodXBadVPNtwo.tex b/cheri/sail_latex/sailmodXBadVPNtwo.tex new file mode 100644 index 00000000..9122b39d --- /dev/null +++ b/cheri/sail_latex/sailmodXBadVPNtwo.tex @@ -0,0 +1 @@ +overload _mod_XBadVPN2 = {_get_XContextReg_XBadVPN2, _set_XContextReg_XBadVPN2}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodXPTEBase.tex b/cheri/sail_latex/sailmodXPTEBase.tex new file mode 100644 index 00000000..67e094bf --- /dev/null +++ b/cheri/sail_latex/sailmodXPTEBase.tex @@ -0,0 +1 @@ +overload _mod_XPTEBase = {_get_XContextReg_XPTEBase, _set_XContextReg_XPTEBase}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodXR.tex b/cheri/sail_latex/sailmodXR.tex new file mode 100644 index 00000000..a3c5ab29 --- /dev/null +++ b/cheri/sail_latex/sailmodXR.tex @@ -0,0 +1 @@ +overload _mod_XR = {_get_XContextReg_XR, _set_XContextReg_XR}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodasid.tex b/cheri/sail_latex/sailmodasid.tex new file mode 100644 index 00000000..b80fbc05 --- /dev/null +++ b/cheri/sail_latex/sailmodasid.tex @@ -0,0 +1 @@ +overload _mod_asid = {_get_TLBEntry_asid, _set_TLBEntry_asid}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodbits.tex b/cheri/sail_latex/sailmodbits.tex new file mode 100644 index 00000000..b14554ac --- /dev/null +++ b/cheri/sail_latex/sailmodbits.tex @@ -0,0 +1 @@ +overload _mod_bits = {_get_CapCauseReg_bits, _set_CapCauseReg_bits}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodcaplone.tex b/cheri/sail_latex/sailmodcaplone.tex new file mode 100644 index 00000000..cc216500 --- /dev/null +++ b/cheri/sail_latex/sailmodcaplone.tex @@ -0,0 +1 @@ +overload _mod_capl1 = {_get_TLBEntry_capl1, _set_TLBEntry_capl1}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodcaplzero.tex b/cheri/sail_latex/sailmodcaplzero.tex new file mode 100644 index 00000000..91969233 --- /dev/null +++ b/cheri/sail_latex/sailmodcaplzero.tex @@ -0,0 +1 @@ +overload _mod_capl0 = {_get_TLBEntry_capl0, _set_TLBEntry_capl0}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodcapsone.tex b/cheri/sail_latex/sailmodcapsone.tex new file mode 100644 index 00000000..c2aa1743 --- /dev/null +++ b/cheri/sail_latex/sailmodcapsone.tex @@ -0,0 +1 @@ +overload _mod_caps1 = {_get_TLBEntry_caps1, _set_TLBEntry_caps1}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodcapszero.tex b/cheri/sail_latex/sailmodcapszero.tex new file mode 100644 index 00000000..36fbc5bb --- /dev/null +++ b/cheri/sail_latex/sailmodcapszero.tex @@ -0,0 +1 @@ +overload _mod_caps0 = {_get_TLBEntry_caps0, _set_TLBEntry_caps0}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodcone.tex b/cheri/sail_latex/sailmodcone.tex new file mode 100644 index 00000000..70d2a78c --- /dev/null +++ b/cheri/sail_latex/sailmodcone.tex @@ -0,0 +1 @@ +overload _mod_c1 = {_get_TLBEntry_c1, _set_TLBEntry_c1}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodczero.tex b/cheri/sail_latex/sailmodczero.tex new file mode 100644 index 00000000..56a19643 --- /dev/null +++ b/cheri/sail_latex/sailmodczero.tex @@ -0,0 +1 @@ +overload _mod_c0 = {_get_TLBEntry_c0, _set_TLBEntry_c0}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmoddone.tex b/cheri/sail_latex/sailmoddone.tex new file mode 100644 index 00000000..d970eb5b --- /dev/null +++ b/cheri/sail_latex/sailmoddone.tex @@ -0,0 +1 @@ +overload _mod_d1 = {_get_TLBEntry_d1, _set_TLBEntry_d1}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmoddzero.tex b/cheri/sail_latex/sailmoddzero.tex new file mode 100644 index 00000000..0e860884 --- /dev/null +++ b/cheri/sail_latex/sailmoddzero.tex @@ -0,0 +1 @@ +overload _mod_d0 = {_get_TLBEntry_d0, _set_TLBEntry_d0}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodg.tex b/cheri/sail_latex/sailmodg.tex new file mode 100644 index 00000000..6c46a49a --- /dev/null +++ b/cheri/sail_latex/sailmodg.tex @@ -0,0 +1 @@ +overload _mod_g = {_get_TLBEntry_g, _set_TLBEntry_g}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodint.tex b/cheri/sail_latex/sailmodint.tex new file mode 100644 index 00000000..bd5677aa --- /dev/null +++ b/cheri/sail_latex/sailmodint.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_latex/sailmodpagemask.tex b/cheri/sail_latex/sailmodpagemask.tex new file mode 100644 index 00000000..130ccab2 --- /dev/null +++ b/cheri/sail_latex/sailmodpagemask.tex @@ -0,0 +1 @@ +overload _mod_pagemask = {_get_TLBEntry_pagemask, _set_TLBEntry_pagemask}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodpfnone.tex b/cheri/sail_latex/sailmodpfnone.tex new file mode 100644 index 00000000..3e703530 --- /dev/null +++ b/cheri/sail_latex/sailmodpfnone.tex @@ -0,0 +1 @@ +overload _mod_pfn1 = {_get_TLBEntry_pfn1, _set_TLBEntry_pfn1}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodpfnzero.tex b/cheri/sail_latex/sailmodpfnzero.tex new file mode 100644 index 00000000..e3e2bfb2 --- /dev/null +++ b/cheri/sail_latex/sailmodpfnzero.tex @@ -0,0 +1 @@ +overload _mod_pfn0 = {_get_TLBEntry_pfn0, _set_TLBEntry_pfn0}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodr.tex b/cheri/sail_latex/sailmodr.tex new file mode 100644 index 00000000..ca85fe92 --- /dev/null +++ b/cheri/sail_latex/sailmodr.tex @@ -0,0 +1 @@ +overload _mod_r = {_get_TLBEntry_r, _set_TLBEntry_r}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodulus.tex b/cheri/sail_latex/sailmodulus.tex new file mode 100644 index 00000000..ca23a339 --- /dev/null +++ b/cheri/sail_latex/sailmodulus.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_latex/sailmodvalid.tex b/cheri/sail_latex/sailmodvalid.tex new file mode 100644 index 00000000..21baa26c --- /dev/null +++ b/cheri/sail_latex/sailmodvalid.tex @@ -0,0 +1 @@ +overload _mod_valid = {_get_TLBEntry_valid, _set_TLBEntry_valid}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodvone.tex b/cheri/sail_latex/sailmodvone.tex new file mode 100644 index 00000000..30619a05 --- /dev/null +++ b/cheri/sail_latex/sailmodvone.tex @@ -0,0 +1 @@ +overload _mod_v1 = {_get_TLBEntry_v1, _set_TLBEntry_v1}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodvpntwo.tex b/cheri/sail_latex/sailmodvpntwo.tex new file mode 100644 index 00000000..08cd1947 --- /dev/null +++ b/cheri/sail_latex/sailmodvpntwo.tex @@ -0,0 +1 @@ +overload _mod_vpn2 = {_get_TLBEntry_vpn2, _set_TLBEntry_vpn2}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmodvzero.tex b/cheri/sail_latex/sailmodvzero.tex new file mode 100644 index 00000000..3e05b3f3 --- /dev/null +++ b/cheri/sail_latex/sailmodvzero.tex @@ -0,0 +1 @@ +overload _mod_v0 = {_get_TLBEntry_v0, _set_TLBEntry_v0}
\ No newline at end of file diff --git a/cheri/sail_latex/sailmultatom.tex b/cheri/sail_latex/sailmultatom.tex new file mode 100644 index 00000000..bbac3e2f --- /dev/null +++ b/cheri/sail_latex/sailmultatom.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_latex/sailmultint.tex b/cheri/sail_latex/sailmultint.tex new file mode 100644 index 00000000..08698e6f --- /dev/null +++ b/cheri/sail_latex/sailmultint.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_latex/sailnegate.tex b/cheri/sail_latex/sailnegate.tex new file mode 100644 index 00000000..ce000062 --- /dev/null +++ b/cheri/sail_latex/sailnegate.tex @@ -0,0 +1 @@ +overload negate = {negate_range, negate_int}
\ No newline at end of file diff --git a/cheri/sail_latex/sailnegateatom.tex b/cheri/sail_latex/sailnegateatom.tex new file mode 100644 index 00000000..d1361e63 --- /dev/null +++ b/cheri/sail_latex/sailnegateatom.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_latex/sailnegateint.tex b/cheri/sail_latex/sailnegateint.tex new file mode 100644 index 00000000..52375787 --- /dev/null +++ b/cheri/sail_latex/sailnegateint.tex @@ -0,0 +1 @@ +val negate_int = {ocaml: "negate", lem: "integerNegate", c: "neg_int", coq: "Z.opp"} : int -> int diff --git a/cheri/sail_latex/sailnegaterange.tex b/cheri/sail_latex/sailnegaterange.tex new file mode 100644 index 00000000..7a4ad386 --- /dev/null +++ b/cheri/sail_latex/sailnegaterange.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_latex/sailneqanything.tex b/cheri/sail_latex/sailneqanything.tex new file mode 100644 index 00000000..a898649e --- /dev/null +++ b/cheri/sail_latex/sailneqanything.tex @@ -0,0 +1 @@ +val neq_anything = {lem: "neq", coq: "generic_neq"} : forall ('a : Type). ('a, 'a) -> bool diff --git a/cheri/sail_latex/sailneqatom.tex b/cheri/sail_latex/sailneqatom.tex new file mode 100644 index 00000000..be777013 --- /dev/null +++ b/cheri/sail_latex/sailneqatom.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_latex/sailneqbool.tex b/cheri/sail_latex/sailneqbool.tex new file mode 100644 index 00000000..0d80dc17 --- /dev/null +++ b/cheri/sail_latex/sailneqbool.tex @@ -0,0 +1 @@ +val neq_bool : (bool, bool) -> bool diff --git a/cheri/sail_latex/sailneqint.tex b/cheri/sail_latex/sailneqint.tex new file mode 100644 index 00000000..b233ca6b --- /dev/null +++ b/cheri/sail_latex/sailneqint.tex @@ -0,0 +1 @@ +val neq_int = {lem: "neq"} : (int, int) -> bool diff --git a/cheri/sail_latex/sailneqrange.tex b/cheri/sail_latex/sailneqrange.tex new file mode 100644 index 00000000..d2d8fb0c --- /dev/null +++ b/cheri/sail_latex/sailneqrange.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_latex/sailneqvec.tex b/cheri/sail_latex/sailneqvec.tex new file mode 100644 index 00000000..f655b3d8 --- /dev/null +++ b/cheri/sail_latex/sailneqvec.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_latex/sailnot.tex b/cheri/sail_latex/sailnot.tex new file mode 100644 index 00000000..515b3ef9 --- /dev/null +++ b/cheri/sail_latex/sailnot.tex @@ -0,0 +1 @@ +val not = {coq:"negb", _:"not"} : bool -> bool diff --git a/cheri/sail_latex/sailnotbool.tex b/cheri/sail_latex/sailnotbool.tex new file mode 100644 index 00000000..7630f6c2 --- /dev/null +++ b/cheri/sail_latex/sailnotbool.tex @@ -0,0 +1 @@ +val not_bool = {coq: "negb", _: "not"} : bool -> bool diff --git a/cheri/sail_latex/sailnotvec.tex b/cheri/sail_latex/sailnotvec.tex new file mode 100644 index 00000000..a560a544 --- /dev/null +++ b/cheri/sail_latex/sailnotvec.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_latex/sailnumofAccessLevel.tex b/cheri/sail_latex/sailnumofAccessLevel.tex new file mode 100644 index 00000000..0c618cc8 --- /dev/null +++ b/cheri/sail_latex/sailnumofAccessLevel.tex @@ -0,0 +1 @@ +val num_of_AccessLevel : AccessLevel -> {'e, 0 <= 'e & 'e <= 2. atom('e)} diff --git a/cheri/sail_latex/sailnumofCPtrCmpOp.tex b/cheri/sail_latex/sailnumofCPtrCmpOp.tex new file mode 100644 index 00000000..40f1bfa9 --- /dev/null +++ b/cheri/sail_latex/sailnumofCPtrCmpOp.tex @@ -0,0 +1 @@ +val num_of_CPtrCmpOp : CPtrCmpOp -> {'e, 0 <= 'e & 'e <= 7. atom('e)} diff --git a/cheri/sail_latex/sailnumofCapEx.tex b/cheri/sail_latex/sailnumofCapEx.tex new file mode 100644 index 00000000..3bec74dc --- /dev/null +++ b/cheri/sail_latex/sailnumofCapEx.tex @@ -0,0 +1 @@ +val num_of_CapEx : CapEx -> {'e, 0 <= 'e & 'e <= 22. atom('e)} diff --git a/cheri/sail_latex/sailnumofClearRegSet.tex b/cheri/sail_latex/sailnumofClearRegSet.tex new file mode 100644 index 00000000..14ea7bea --- /dev/null +++ b/cheri/sail_latex/sailnumofClearRegSet.tex @@ -0,0 +1 @@ +val num_of_ClearRegSet : ClearRegSet -> {'e, 0 <= 'e & 'e <= 3. atom('e)} diff --git a/cheri/sail_latex/sailnumofComparison.tex b/cheri/sail_latex/sailnumofComparison.tex new file mode 100644 index 00000000..bac8031f --- /dev/null +++ b/cheri/sail_latex/sailnumofComparison.tex @@ -0,0 +1 @@ +val num_of_Comparison : Comparison -> {'e, 0 <= 'e & 'e <= 7. atom('e)} diff --git a/cheri/sail_latex/sailnumofException.tex b/cheri/sail_latex/sailnumofException.tex new file mode 100644 index 00000000..2f823724 --- /dev/null +++ b/cheri/sail_latex/sailnumofException.tex @@ -0,0 +1 @@ +val num_of_Exception : Exception -> {'e, 0 <= 'e & 'e <= 18. atom('e)} diff --git a/cheri/sail_latex/sailnumofMemAccessType.tex b/cheri/sail_latex/sailnumofMemAccessType.tex new file mode 100644 index 00000000..dc81a81c --- /dev/null +++ b/cheri/sail_latex/sailnumofMemAccessType.tex @@ -0,0 +1 @@ +val num_of_MemAccessType : MemAccessType -> {'e, 0 <= 'e & 'e <= 2. atom('e)} diff --git a/cheri/sail_latex/sailnumofWordType.tex b/cheri/sail_latex/sailnumofWordType.tex new file mode 100644 index 00000000..2be61446 --- /dev/null +++ b/cheri/sail_latex/sailnumofWordType.tex @@ -0,0 +1 @@ +val num_of_WordType : WordType -> {'e, 0 <= 'e & 'e <= 3. atom('e)} diff --git a/cheri/sail_latex/sailnumofWordTypeUnaligned.tex b/cheri/sail_latex/sailnumofWordTypeUnaligned.tex new file mode 100644 index 00000000..40c9a426 --- /dev/null +++ b/cheri/sail_latex/sailnumofWordTypeUnaligned.tex @@ -0,0 +1 @@ +val num_of_WordTypeUnaligned : WordTypeUnaligned -> {'e, 0 <= 'e & 'e <= 3. atom('e)} diff --git a/cheri/sail_latex/sailnumofdecodefailure.tex b/cheri/sail_latex/sailnumofdecodefailure.tex new file mode 100644 index 00000000..197b4ae9 --- /dev/null +++ b/cheri/sail_latex/sailnumofdecodefailure.tex @@ -0,0 +1 @@ +val num_of_decode_failure : decode_failure -> {'e, 0 <= 'e & 'e <= 3. atom('e)} diff --git a/cheri/sail_latex/sailones.tex b/cheri/sail_latex/sailones.tex new file mode 100644 index 00000000..94fd805f --- /dev/null +++ b/cheri/sail_latex/sailones.tex @@ -0,0 +1 @@ +val ones : forall 'n, 'n >= 0 . unit -> #\hyperref[zbits]{bits}#('n) diff --git a/cheri/sail_latex/sailorbits.tex b/cheri/sail_latex/sailorbits.tex new file mode 100644 index 00000000..55db5ffa --- /dev/null +++ b/cheri/sail_latex/sailorbits.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_latex/sailorbool.tex b/cheri/sail_latex/sailorbool.tex new file mode 100644 index 00000000..4b6bfa15 --- /dev/null +++ b/cheri/sail_latex/sailorbool.tex @@ -0,0 +1 @@ +val or_bool = {coq: "orb", _: "or_bool"} : (bool, bool) -> bool diff --git a/cheri/sail_latex/sailpccaccesssystemregs.tex b/cheri/sail_latex/sailpccaccesssystemregs.tex new file mode 100644 index 00000000..399ab221 --- /dev/null +++ b/cheri/sail_latex/sailpccaccesssystemregs.tex @@ -0,0 +1 @@ +val pcc_access_system_regs : unit -> bool effect {rreg} diff --git a/cheri/sail_latex/sailplainvectoraccess.tex b/cheri/sail_latex/sailplainvectoraccess.tex new file mode 100644 index 00000000..94824f77 --- /dev/null +++ b/cheri/sail_latex/sailplainvectoraccess.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_latex/sailplainvectorupdate.tex b/cheri/sail_latex/sailplainvectorupdate.tex new file mode 100644 index 00000000..6880d9bd --- /dev/null +++ b/cheri/sail_latex/sailplainvectorupdate.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_latex/sailpowtwo.tex b/cheri/sail_latex/sailpowtwo.tex new file mode 100644 index 00000000..41da946e --- /dev/null +++ b/cheri/sail_latex/sailpowtwo.tex @@ -0,0 +1 @@ +val pow2 = "pow2" : forall 'n. atom('n) -> atom(2 ^ 'n) diff --git a/cheri/sail_latex/sailprerrbits.tex b/cheri/sail_latex/sailprerrbits.tex new file mode 100644 index 00000000..7d926384 --- /dev/null +++ b/cheri/sail_latex/sailprerrbits.tex @@ -0,0 +1 @@ +val "prerr_bits" : forall 'n. (string, #\hyperref[zbits]{bits}#('n)) -> unit diff --git a/cheri/sail_latex/sailprerrendline.tex b/cheri/sail_latex/sailprerrendline.tex new file mode 100644 index 00000000..ad4a94a0 --- /dev/null +++ b/cheri/sail_latex/sailprerrendline.tex @@ -0,0 +1 @@ +val "prerr_endline" : string -> unit diff --git a/cheri/sail_latex/sailprerrint.tex b/cheri/sail_latex/sailprerrint.tex new file mode 100644 index 00000000..ce7a7d61 --- /dev/null +++ b/cheri/sail_latex/sailprerrint.tex @@ -0,0 +1 @@ +val "prerr_int" : (string, int) -> unit diff --git a/cheri/sail_latex/sailprerrstring.tex b/cheri/sail_latex/sailprerrstring.tex new file mode 100644 index 00000000..7b849da2 --- /dev/null +++ b/cheri/sail_latex/sailprerrstring.tex @@ -0,0 +1 @@ +val "prerr_string" : string -> unit diff --git a/cheri/sail_latex/sailprint.tex b/cheri/sail_latex/sailprint.tex new file mode 100644 index 00000000..50a64219 --- /dev/null +++ b/cheri/sail_latex/sailprint.tex @@ -0,0 +1 @@ +val print = "print_endline" : string -> unit diff --git a/cheri/sail_latex/sailprintbits.tex b/cheri/sail_latex/sailprintbits.tex new file mode 100644 index 00000000..8783a59a --- /dev/null +++ b/cheri/sail_latex/sailprintbits.tex @@ -0,0 +1 @@ +val "print_bits" : forall 'n. (string, #\hyperref[zbits]{bits}#('n)) -> unit diff --git a/cheri/sail_latex/sailprintint.tex b/cheri/sail_latex/sailprintint.tex new file mode 100644 index 00000000..ddf33afc --- /dev/null +++ b/cheri/sail_latex/sailprintint.tex @@ -0,0 +1 @@ +val "print_int" : (string, int) -> unit diff --git a/cheri/sail_latex/sailputchar.tex b/cheri/sail_latex/sailputchar.tex new file mode 100644 index 00000000..a123c709 --- /dev/null +++ b/cheri/sail_latex/sailputchar.tex @@ -0,0 +1 @@ +val putchar = {c:"sail_putchar", _:"putchar"} : int -> unit diff --git a/cheri/sail_latex/sailquotient.tex b/cheri/sail_latex/sailquotient.tex new file mode 100644 index 00000000..7dba5359 --- /dev/null +++ b/cheri/sail_latex/sailquotient.tex @@ -0,0 +1 @@ +val quotient = {ocaml: "quotient", lem: "integerDiv", coq: "Z.mod"} : (int, int) -> int diff --git a/cheri/sail_latex/sailquotientnat.tex b/cheri/sail_latex/sailquotientnat.tex new file mode 100644 index 00000000..14db4ae0 --- /dev/null +++ b/cheri/sail_latex/sailquotientnat.tex @@ -0,0 +1 @@ +val quotient_nat = {ocaml: "quotient", lem: "integerDiv", coq: "Z.div"} : (nat, nat) -> nat diff --git a/cheri/sail_latex/sailquotroundzzero.tex b/cheri/sail_latex/sailquotroundzzero.tex new file mode 100644 index 00000000..9523cfcc --- /dev/null +++ b/cheri/sail_latex/sailquotroundzzero.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_latex/sailrGPR.tex b/cheri/sail_latex/sailrGPR.tex new file mode 100644 index 00000000..19721488 --- /dev/null +++ b/cheri/sail_latex/sailrGPR.tex @@ -0,0 +1 @@ +val rGPR : #\hyperref[zbits]{bits}#(5) -> #\hyperref[zbits]{bits}#(64) effect {rreg} diff --git a/cheri/sail_latex/sailraisectwoexception.tex b/cheri/sail_latex/sailraisectwoexception.tex new file mode 100644 index 00000000..f8a562ec --- /dev/null +++ b/cheri/sail_latex/sailraisectwoexception.tex @@ -0,0 +1 @@ +val raise_c2_exception : forall ('o : Type) . (CapEx, regno) -> 'o effect {escape, rreg, wreg} diff --git a/cheri/sail_latex/sailraisectwoexceptioneight.tex b/cheri/sail_latex/sailraisectwoexceptioneight.tex new file mode 100644 index 00000000..21b0bcf9 --- /dev/null +++ b/cheri/sail_latex/sailraisectwoexceptioneight.tex @@ -0,0 +1 @@ +val raise_c2_exception8 : forall ('o : Type) . (CapEx, #\hyperref[zbits]{bits}#(8)) -> 'o effect {escape, rreg, wreg} diff --git a/cheri/sail_latex/sailraisectwoexceptionnoreg.tex b/cheri/sail_latex/sailraisectwoexceptionnoreg.tex new file mode 100644 index 00000000..be594e4e --- /dev/null +++ b/cheri/sail_latex/sailraisectwoexceptionnoreg.tex @@ -0,0 +1 @@ +val raise_c2_exception_noreg : forall ('o : Type) . (CapEx) -> 'o effect {escape, rreg, wreg} diff --git a/cheri/sail_latex/sailreadCapReg.tex b/cheri/sail_latex/sailreadCapReg.tex new file mode 100644 index 00000000..f4d77264 --- /dev/null +++ b/cheri/sail_latex/sailreadCapReg.tex @@ -0,0 +1 @@ +val readCapReg : regno -> CapStruct effect {rreg} diff --git a/cheri/sail_latex/sailreadCapRegDDC.tex b/cheri/sail_latex/sailreadCapRegDDC.tex new file mode 100644 index 00000000..2ec2e75d --- /dev/null +++ b/cheri/sail_latex/sailreadCapRegDDC.tex @@ -0,0 +1 @@ +val readCapRegDDC : regno -> CapStruct effect {rreg} diff --git a/cheri/sail_latex/sailregderef.tex b/cheri/sail_latex/sailregderef.tex new file mode 100644 index 00000000..7f1dc7e8 --- /dev/null +++ b/cheri/sail_latex/sailregderef.tex @@ -0,0 +1 @@ +val _reg_deref = "reg_deref" : forall ('a : Type). #\hyperref[zregister]{register}#('a) -> 'a diff --git a/cheri/sail_latex/sailregisterinaccessible.tex b/cheri/sail_latex/sailregisterinaccessible.tex new file mode 100644 index 00000000..d732248a --- /dev/null +++ b/cheri/sail_latex/sailregisterinaccessible.tex @@ -0,0 +1 @@ +val register_inaccessible : regno -> bool effect {rreg} diff --git a/cheri/sail_latex/sailregno.tex b/cheri/sail_latex/sailregno.tex new file mode 100644 index 00000000..5246f847 --- /dev/null +++ b/cheri/sail_latex/sailregno.tex @@ -0,0 +1 @@ +type regno = #\hyperref[zbits]{bits}#(5) /* a register number */ diff --git a/cheri/sail_latex/sailregregimmonesix.tex b/cheri/sail_latex/sailregregimmonesix.tex new file mode 100644 index 00000000..0be3ccec --- /dev/null +++ b/cheri/sail_latex/sailregregimmonesix.tex @@ -0,0 +1 @@ +type regregimm16 = (regno, regno, imm16) diff --git a/cheri/sail_latex/sailregregreg.tex b/cheri/sail_latex/sailregregreg.tex new file mode 100644 index 00000000..e3409dff --- /dev/null +++ b/cheri/sail_latex/sailregregreg.tex @@ -0,0 +1 @@ +type regregreg = (regno, regno, regno) diff --git a/cheri/sail_latex/sailremroundzzero.tex b/cheri/sail_latex/sailremroundzzero.tex new file mode 100644 index 00000000..9d8113ba --- /dev/null +++ b/cheri/sail_latex/sailremroundzzero.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_latex/sailreplicatebits.tex b/cheri/sail_latex/sailreplicatebits.tex new file mode 100644 index 00000000..cd7a97d7 --- /dev/null +++ b/cheri/sail_latex/sailreplicatebits.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_latex/sailreverseendianness.tex b/cheri/sail_latex/sailreverseendianness.tex new file mode 100644 index 00000000..9105738f --- /dev/null +++ b/cheri/sail_latex/sailreverseendianness.tex @@ -0,0 +1 @@ +val reverse_endianness = "reverse_endianness" : forall 'W, 'W >= 1. #\hyperref[zbits]{bits}#(8 * 'W) -> #\hyperref[zbits]{bits}#(8 * 'W) effect pure diff --git a/cheri/sail_latex/sailsailfndecodeSomeBCMPZv.tex b/cheri/sail_latex/sailsailfndecodeSomeBCMPZv.tex new file mode 100644 index 00000000..5106d2ec --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeBCMPZv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000001 @ rs : regno @ 0b10000 @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zBCMPZ]{BCMPZ}#(rs, imm, LT, true, false)) /* BLTZAL */ diff --git a/cheri/sail_latex/sailsailfndecodeSomeBEQv.tex b/cheri/sail_latex/sailsailfndecodeSomeBEQv.tex new file mode 100644 index 00000000..aa31ba6b --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeBEQv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b010100 @ rs : regno @ rt : regno @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zBEQ]{BEQ}#(rs, rt, imm, false, true)) /* BEQL */ diff --git a/cheri/sail_latex/sailsailfndecodeSomeCAndPermv.tex b/cheri/sail_latex/sailsailfndecodeSomeCAndPermv.tex new file mode 100644 index 00000000..893a1c6d --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCAndPermv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ cd : regno @ cs : regno @ rt : regno @ 0b001101) = #\hyperref[zSome]{Some}#(#\hyperref[zCAndPerm]{CAndPerm}#(cd, cs, rt)) diff --git a/cheri/sail_latex/sailsailfndecodeSomeCBXv.tex b/cheri/sail_latex/sailsailfndecodeSomeCBXv.tex new file mode 100644 index 00000000..32d3c875 --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCBXv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b01010 @ cd : regno @ imm : #\hyperref[zbits]{bits}#(16)) = #\hyperref[zSome]{Some}#(#\hyperref[zCBX]{CBX}#(cd, imm, false)) /* CBTS */ diff --git a/cheri/sail_latex/sailsailfndecodeSomeCBZv.tex b/cheri/sail_latex/sailsailfndecodeSomeCBZv.tex new file mode 100644 index 00000000..32781f76 --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCBZv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b10010 @ cd : regno @ imm : #\hyperref[zbits]{bits}#(16)) = #\hyperref[zSome]{Some}#(#\hyperref[zCBZ]{CBZ}#(cd, imm, true)) /* CBNZ */ diff --git a/cheri/sail_latex/sailsailfndecodeSomeCCheckPermv.tex b/cheri/sail_latex/sailsailfndecodeSomeCCheckPermv.tex new file mode 100644 index 00000000..ee2c8bde --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCCheckPermv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ cs : regno @ rt : regno @ 0b01000 @ 0b111111) = #\hyperref[zSome]{Some}#(#\hyperref[zCCheckPerm]{CCheckPerm}#(cs, rt)) diff --git a/cheri/sail_latex/sailsailfndecodeSomeCCheckTypev.tex b/cheri/sail_latex/sailsailfndecodeSomeCCheckTypev.tex new file mode 100644 index 00000000..661760cc --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCCheckTypev.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ cs : regno @ cb : regno @ 0b01001 @ 0b111111) = #\hyperref[zSome]{Some}#(#\hyperref[zCCheckType]{CCheckType}#(cs, cb)) diff --git a/cheri/sail_latex/sailsailfndecodeSomeCClearTagv.tex b/cheri/sail_latex/sailsailfndecodeSomeCClearTagv.tex new file mode 100644 index 00000000..766ce399 --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCClearTagv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ cd : regno @ cb : regno @ 0b01011 @ 0b111111) = #\hyperref[zSome]{Some}#(#\hyperref[zCClearTag]{CClearTag}#(cd, cb)) diff --git a/cheri/sail_latex/sailsailfndecodeSomeCFromPtrv.tex b/cheri/sail_latex/sailsailfndecodeSomeCFromPtrv.tex new file mode 100644 index 00000000..e977fcd2 --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCFromPtrv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ cd : regno @ cb : regno @ rs : regno @ 0b010011) = #\hyperref[zSome]{Some}#(#\hyperref[zCFromPtr]{CFromPtr}#(cd, cb, rs)) diff --git a/cheri/sail_latex/sailsailfndecodeSomeCGetBasev.tex b/cheri/sail_latex/sailsailfndecodeSomeCGetBasev.tex new file mode 100644 index 00000000..05fa9835 --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCGetBasev.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rd : regno @ cb : regno @ 0b00010 @ 0b111111) = #\hyperref[zSome]{Some}#(#\hyperref[zCGetBase]{CGetBase}#(rd, cb)) diff --git a/cheri/sail_latex/sailsailfndecodeSomeCGetCauserdv.tex b/cheri/sail_latex/sailsailfndecodeSomeCGetCauserdv.tex new file mode 100644 index 00000000..c44fd7ff --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCGetCauserdv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rd : regno @ 0b00001 @ 0b11111 @ 0b111111) = #\hyperref[zSome]{Some}#(#\hyperref[zCGetCause]{CGetCause}#(rd)) diff --git a/cheri/sail_latex/sailsailfndecodeSomeCGetLenv.tex b/cheri/sail_latex/sailsailfndecodeSomeCGetLenv.tex new file mode 100644 index 00000000..3a4a434b --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCGetLenv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rd : regno @ cb : regno @ 0b00011 @ 0b111111) = #\hyperref[zSome]{Some}#(#\hyperref[zCGetLen]{CGetLen}#(rd, cb)) diff --git a/cheri/sail_latex/sailsailfndecodeSomeCGetOffsetv.tex b/cheri/sail_latex/sailsailfndecodeSomeCGetOffsetv.tex new file mode 100644 index 00000000..a5a22beb --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCGetOffsetv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rd : regno @ cb : regno @ 0b00110 @ 0b111111) = #\hyperref[zSome]{Some}#(#\hyperref[zCGetOffset]{CGetOffset}#(rd, cb)) diff --git a/cheri/sail_latex/sailsailfndecodeSomeCGetPermv.tex b/cheri/sail_latex/sailsailfndecodeSomeCGetPermv.tex new file mode 100644 index 00000000..5dbabd98 --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCGetPermv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rd : regno @ cb : regno @ 0b00000 @ 0b111111) = #\hyperref[zSome]{Some}#(#\hyperref[zCGetPerm]{CGetPerm}#(rd, cb)) diff --git a/cheri/sail_latex/sailsailfndecodeSomeCGetSealedv.tex b/cheri/sail_latex/sailsailfndecodeSomeCGetSealedv.tex new file mode 100644 index 00000000..00d254ad --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCGetSealedv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rd : regno @ cb : regno @ 0b00101 @ 0b111111) = #\hyperref[zSome]{Some}#(#\hyperref[zCGetSealed]{CGetSealed}#(rd, cb)) diff --git a/cheri/sail_latex/sailsailfndecodeSomeCGetTagv.tex b/cheri/sail_latex/sailsailfndecodeSomeCGetTagv.tex new file mode 100644 index 00000000..e46392b5 --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCGetTagv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rd : regno @ cb : regno @ 0b00100 @ 0b111111) = #\hyperref[zSome]{Some}#(#\hyperref[zCGetTag]{CGetTag}#(rd, cb)) diff --git a/cheri/sail_latex/sailsailfndecodeSomeCGetTypev.tex b/cheri/sail_latex/sailsailfndecodeSomeCGetTypev.tex new file mode 100644 index 00000000..20baf29c --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCGetTypev.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rd : regno @ cb : regno @ 0b00001 @ 0b111111) = #\hyperref[zSome]{Some}#(#\hyperref[zCGetType]{CGetType}#(rd, cb)) diff --git a/cheri/sail_latex/sailsailfndecodeSomeCIncOffsetv.tex b/cheri/sail_latex/sailsailfndecodeSomeCIncOffsetv.tex new file mode 100644 index 00000000..5d2501bb --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCIncOffsetv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ cd : regno @ cb : regno @ rt : regno @ 0b010001) = #\hyperref[zSome]{Some}#(#\hyperref[zCIncOffset]{CIncOffset}#(cd, cb, rt)) diff --git a/cheri/sail_latex/sailsailfndecodeSomeCJALRv.tex b/cheri/sail_latex/sailsailfndecodeSomeCJALRv.tex new file mode 100644 index 00000000..3f5f8411 --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCJALRv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b01000 @ 0b00000 @ cb : regno @ 0b00000 @ 0b000000) = #\hyperref[zSome]{Some}#(#\hyperref[zCJALR]{CJALR}#(0b00000, cb, false)) /* CJR */ diff --git a/cheri/sail_latex/sailsailfndecodeSomeCLCv.tex b/cheri/sail_latex/sailsailfndecodeSomeCLCv.tex new file mode 100644 index 00000000..fa732648 --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCLCv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b10000 @ cd : regno @ cb : regno@ 0b0000000 @ 0b1111) = #\hyperref[zSome]{Some}#(#\hyperref[zCLC]{CLC}#(cd, cb, 0b00000, 0x0000, true)) /* CLLC */ diff --git a/cheri/sail_latex/sailsailfndecodeSomeCLoadv.tex b/cheri/sail_latex/sailsailfndecodeSomeCLoadv.tex new file mode 100644 index 00000000..9fbd4a7b --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCLoadv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b110010 @ rd : regno @ cb : regno@ rt : regno @ offset : #\hyperref[zbits]{bits}#(8) @ 0b1 @ 0b00) = #\hyperref[zSome]{Some}#(#\hyperref[zCLoad]{CLoad}#(rd, cb, rt, offset, true, B, false)) /* CLB */ diff --git a/cheri/sail_latex/sailsailfndecodeSomeCMOVXv.tex b/cheri/sail_latex/sailsailfndecodeSomeCMOVXv.tex new file mode 100644 index 00000000..09fb371f --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCMOVXv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ cd : regno @ cs : regno @ rs : regno @ 0b011011) = #\hyperref[zSome]{Some}#(#\hyperref[zCMOVX]{CMOVX}#(cd, cs, rs, false)) /* CMOVZ */ diff --git a/cheri/sail_latex/sailsailfndecodeSomeCPtrCmpv.tex b/cheri/sail_latex/sailsailfndecodeSomeCPtrCmpv.tex new file mode 100644 index 00000000..af60dcc8 --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCPtrCmpv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b01110 @ rd : regno @ cb : regno @ ct : regno @ 0b000 @ 0b001) = #\hyperref[zSome]{Some}#(#\hyperref[zCPtrCmp]{CPtrCmp}#(rd, cb, ct, CNE)) diff --git a/cheri/sail_latex/sailsailfndecodeSomeCReturnv.tex b/cheri/sail_latex/sailsailfndecodeSomeCReturnv.tex new file mode 100644 index 00000000..da0a09d2 --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCReturnv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00101 @ 0b00000 @ 0b00000 @ 0b11111111111) = #\hyperref[zSome]{Some}#(#\hyperref[zCReturn]{CReturn}#()) diff --git a/cheri/sail_latex/sailsailfndecodeSomeCSCv.tex b/cheri/sail_latex/sailsailfndecodeSomeCSCv.tex new file mode 100644 index 00000000..14b9e73a --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCSCv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b10000 @ cs : regno @ cb : regno@ rd : regno @ 0b00 @ 0b0111) = #\hyperref[zSome]{Some}#(#\hyperref[zCSC]{CSC}#(cs, cb, 0b00000, rd, 0b00000000000, true)) /* CSCC */ diff --git a/cheri/sail_latex/sailsailfndecodeSomeCSealv.tex b/cheri/sail_latex/sailsailfndecodeSomeCSealv.tex new file mode 100644 index 00000000..4000c397 --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCSealv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ cd : regno @ cs : regno @ ct : regno @ 0b001011) = #\hyperref[zSome]{Some}#(#\hyperref[zCSeal]{CSeal}#(cd, cs, ct)) diff --git a/cheri/sail_latex/sailsailfndecodeSomeCSetBoundsv.tex b/cheri/sail_latex/sailsailfndecodeSomeCSetBoundsv.tex new file mode 100644 index 00000000..1d6a4e52 --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCSetBoundsv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ cd : regno @ cs : regno @ rt : regno @ 0b001000) = #\hyperref[zSome]{Some}#(#\hyperref[zCSetBounds]{CSetBounds}#(cd, cs, rt)) diff --git a/cheri/sail_latex/sailsailfndecodeSomeCSetOffsetv.tex b/cheri/sail_latex/sailsailfndecodeSomeCSetOffsetv.tex new file mode 100644 index 00000000..478a8f93 --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCSetOffsetv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ cd : regno @ cs : regno @ rt : regno @ 0b001111) = #\hyperref[zSome]{Some}#(#\hyperref[zCSetOffset]{CSetOffset}#(cd, cs, rt)) diff --git a/cheri/sail_latex/sailsailfndecodeSomeCStorev.tex b/cheri/sail_latex/sailsailfndecodeSomeCStorev.tex new file mode 100644 index 00000000..e5e4dd1d --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCStorev.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b111010 @ rs : regno @ cb : regno@ rt : regno @ offset : #\hyperref[zbits]{bits}#(8) @ 0b0 @ 0b01) = #\hyperref[zSome]{Some}#(#\hyperref[zCStore]{CStore}#(rs, cb, rt, 0b00000, offset, H, false)) /* CSH */ diff --git a/cheri/sail_latex/sailsailfndecodeSomeCToPtrv.tex b/cheri/sail_latex/sailsailfndecodeSomeCToPtrv.tex new file mode 100644 index 00000000..d9b325f9 --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCToPtrv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rd : regno @ cb : regno @ ct : regno @ 0b010010) = #\hyperref[zSome]{Some}#(#\hyperref[zCToPtr]{CToPtr}#(rd, cb, ct)) diff --git a/cheri/sail_latex/sailsailfndecodeSomeCUnsealv.tex b/cheri/sail_latex/sailsailfndecodeSomeCUnsealv.tex new file mode 100644 index 00000000..acb3c721 --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeCUnsealv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ cd : regno @ cs : regno @ ct : regno @ 0b001100) = #\hyperref[zSome]{Some}#(#\hyperref[zCUnseal]{CUnseal}#(cd, cs, ct)) diff --git a/cheri/sail_latex/sailsailfndecodeSomeClearRegsv.tex b/cheri/sail_latex/sailsailfndecodeSomeClearRegsv.tex new file mode 100644 index 00000000..791485cd --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeClearRegsv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b01111 @ 0b00001 @ imm : #\hyperref[zbits]{bits}#(16)) = #\hyperref[zSome]{Some}#(#\hyperref[zClearRegs]{ClearRegs}#(GPHi, imm)) diff --git a/cheri/sail_latex/sailsailfndecodeSomeHCFv.tex b/cheri/sail_latex/sailsailfndecodeSomeHCFv.tex new file mode 100644 index 00000000..dbecd8da --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeHCFv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b010000 @ 0b00100 @ rt : regno @ 0b11010 @ 0b00000000000) = + #\hyperref[zSome]{Some}#(#\hyperref[zHCF]{HCF}#()) diff --git a/cheri/sail_latex/sailsailfndecodeSomeLoadv.tex b/cheri/sail_latex/sailsailfndecodeSomeLoadv.tex new file mode 100644 index 00000000..211a2f4a --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeLoadv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b100100 @ base : regno @ rt : regno @ offset : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zLoad]{Load}#(B, false, false, base, rt, offset)) /* LBU */ diff --git a/cheri/sail_latex/sailsailfndecodeSomeMFCzerov.tex b/cheri/sail_latex/sailsailfndecodeSomeMFCzerov.tex new file mode 100644 index 00000000..f54ffdfd --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeMFCzerov.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b010000 @ 0b00001 @ rt : regno @ rd : regno @ 0b00000000 @ sel : #\hyperref[zbits]{bits}#(3)) = + #\hyperref[zSome]{Some}#(#\hyperref[zMFCzero]{MFC0}#(rt, rd, sel, true)) /* DMFC0 */ diff --git a/cheri/sail_latex/sailsailfndecodeSomeMTCzerov.tex b/cheri/sail_latex/sailsailfndecodeSomeMTCzerov.tex new file mode 100644 index 00000000..ae848c1e --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeMTCzerov.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b010000 @ 0b00101 @ rt : regno @ rd : regno @ 0b00000000 @ sel : #\hyperref[zbits]{bits}#(3)) = + #\hyperref[zSome]{Some}#(#\hyperref[zMTCzero]{MTC0}#(rt, rd, sel, true)) /* DMTC0 */ diff --git a/cheri/sail_latex/sailsailfndecodeSomeStorev.tex b/cheri/sail_latex/sailsailfndecodeSomeStorev.tex new file mode 100644 index 00000000..6ddb5562 --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeStorev.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b101001 @ base : regno @ rt : regno @ offset : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zStore]{Store}#(H, false, base, rt, offset)) /* SH */ diff --git a/cheri/sail_latex/sailsailfndecodeSomeTRAPIMMv.tex b/cheri/sail_latex/sailsailfndecodeSomeTRAPIMMv.tex new file mode 100644 index 00000000..f899f0e7 --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeTRAPIMMv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000001 @ rs : regno @ 0b01110 @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zTRAPIMM]{TRAPIMM}#(rs, imm, NE)) /* TNEI */ diff --git a/cheri/sail_latex/sailsailfndecodeSomeTRAPREGv.tex b/cheri/sail_latex/sailsailfndecodeSomeTRAPREGv.tex new file mode 100644 index 00000000..9909d5da --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomeTRAPREGv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ code : #\hyperref[zbits]{bits}#(10) @ 0b110001) = + #\hyperref[zSome]{Some}#(#\hyperref[zTRAPREG]{TRAPREG}#(rs, rt, GEU)) /* TGEU */ diff --git a/cheri/sail_latex/sailsailfndecodeSomev.tex b/cheri/sail_latex/sailsailfndecodeSomev.tex new file mode 100644 index 00000000..bf842c52 --- /dev/null +++ b/cheri/sail_latex/sailsailfndecodeSomev.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010000 @ 0b10000000000000000000 @ 0b000110) = #\hyperref[zSome]{Some}#(#\hyperref[zTLBWR]{TLBWR}#() : ast) diff --git a/cheri/sail_latex/sailsailfnexecuteCCallv.tex b/cheri/sail_latex/sailsailfnexecuteCCallv.tex new file mode 100644 index 00000000..6a11ddac --- /dev/null +++ b/cheri/sail_latex/sailsailfnexecuteCCallv.tex @@ -0,0 +1,46 @@ +function clause #\hyperref[zexecute]{execute}# (#\hyperref[zCCall]{CCall}#(cs, cb, 0b00000000001)) = /* selector=1 */ +{ + /* Jump-like implementation of CCall that unseals arguments */ + #\hyperref[zcheckCPtwousable]{checkCP2usable}#(); + cs_val = #\hyperref[zreadCapReg]{readCapReg}#(cs); + cb_val = #\hyperref[zreadCapReg]{readCapReg}#(cb); + cs_cursor = #\hyperref[zgetCapCursor]{getCapCursor}#(cs_val); + if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cs)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cs) + else if (#\hyperref[zregisterzyinaccessible]{register\_inaccessible}#(cb)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_AccessSystemRegsViolation, cb) + else if #\hyperref[znot]{not}# (cs_val.tag) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, cs) + else if #\hyperref[znot]{not}# (cb_val.tag) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TagViolation, cb) + else if #\hyperref[znot]{not}# (cs_val.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, cs) + else if #\hyperref[znot]{not}# (cb_val.sealed) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_SealViolation, cb) + else if ((cs_val.otype) != (cb_val.otype)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_TypeViolation, cs) + else if #\hyperref[znot]{not}# (cs_val.permit_ccall) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_PermitCCallViolation, cs) + else if #\hyperref[znot]{not}# (cb_val.permit_ccall) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_PermitCCallViolation, cb) + else if #\hyperref[znot]{not}# (cs_val.permit_execute) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_PermitExecuteViolation, cs) + else if (cb_val.permit_execute) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_PermitExecuteViolation, cb) + else if (cs_cursor < #\hyperref[zgetCapBase]{getCapBase}#(cs_val)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, cs) + else if (cs_cursor >= #\hyperref[zgetCapTop]{getCapTop}#(cs_val)) then + #\hyperref[zraisezyctwozyexception]{raise\_c2\_exception}#(CapEx_LengthViolation, cs) + else + { + #\hyperref[zexecutezybranchzypcc]{execute\_branch\_pcc}#({cs_val with + sealed=false, + otype=#\hyperref[zzzeros]{zeros}#() + }); + inCCallDelay = 0b1; + C26 = #\hyperref[zcapStructToCapReg]{capStructToCapReg}#({cb_val with + sealed=false, + otype=#\hyperref[zzzeros]{zeros}#() + }); + } +} diff --git a/cheri/sail_latex/sailsailmask.tex b/cheri/sail_latex/sailsailmask.tex new file mode 100644 index 00000000..45862747 --- /dev/null +++ b/cheri/sail_latex/sailsailmask.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_latex/sailsailmaxv.tex b/cheri/sail_latex/sailsailmaxv.tex new file mode 100644 index 00000000..1ceed42c --- /dev/null +++ b/cheri/sail_latex/sailsailmaxv.tex @@ -0,0 +1 @@ +overload max = {max_atom, max_nat, max_int}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailmodASIDv.tex b/cheri/sail_latex/sailsailmodASIDv.tex new file mode 100644 index 00000000..4e4c154c --- /dev/null +++ b/cheri/sail_latex/sailsailmodASIDv.tex @@ -0,0 +1 @@ +overload _mod_ASID = {_get_TLBEntryHiReg_ASID, _set_TLBEntryHiReg_ASID}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailmodExcCodev.tex b/cheri/sail_latex/sailsailmodExcCodev.tex new file mode 100644 index 00000000..95bd4a1b --- /dev/null +++ b/cheri/sail_latex/sailsailmodExcCodev.tex @@ -0,0 +1 @@ +overload _mod_ExcCode = {_get_CauseReg_ExcCode, _set_CauseReg_ExcCode}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailmodGv.tex b/cheri/sail_latex/sailsailmodGv.tex new file mode 100644 index 00000000..ddb88eaa --- /dev/null +++ b/cheri/sail_latex/sailsailmodGv.tex @@ -0,0 +1 @@ +overload _mod_G = {_get_TLBEntryLoReg_G, _set_TLBEntryLoReg_G}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailmodRv.tex b/cheri/sail_latex/sailsailmodRv.tex new file mode 100644 index 00000000..85ef85fa --- /dev/null +++ b/cheri/sail_latex/sailsailmodRv.tex @@ -0,0 +1 @@ +overload _mod_R = {_get_TLBEntryHiReg_R, _set_TLBEntryHiReg_R}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailmodVPNtwov.tex b/cheri/sail_latex/sailsailmodVPNtwov.tex new file mode 100644 index 00000000..7de971a8 --- /dev/null +++ b/cheri/sail_latex/sailsailmodVPNtwov.tex @@ -0,0 +1 @@ +overload _mod_VPN2 = {_get_TLBEntryHiReg_VPN2, _set_TLBEntryHiReg_VPN2}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailmodbitsv.tex b/cheri/sail_latex/sailsailmodbitsv.tex new file mode 100644 index 00000000..f27daebb --- /dev/null +++ b/cheri/sail_latex/sailsailmodbitsv.tex @@ -0,0 +1 @@ +overload _mod_bits = {_get_StatusReg_bits, _set_StatusReg_bits}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailnegatev.tex b/cheri/sail_latex/sailsailnegatev.tex new file mode 100644 index 00000000..4f7aea58 --- /dev/null +++ b/cheri/sail_latex/sailsailnegatev.tex @@ -0,0 +1 @@ +overload negate = {negate_atom, negate_int}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailregderefv.tex b/cheri/sail_latex/sailsailregderefv.tex new file mode 100644 index 00000000..f5de92ca --- /dev/null +++ b/cheri/sail_latex/sailsailregderefv.tex @@ -0,0 +1 @@ +val "reg_deref" : forall ('a : Type). #\hyperref[zregister]{register}#('a) -> 'a effect {rreg} diff --git a/cheri/sail_latex/sailsailsailfndecodeSomeBCMPZvv.tex b/cheri/sail_latex/sailsailsailfndecodeSomeBCMPZvv.tex new file mode 100644 index 00000000..05919c54 --- /dev/null +++ b/cheri/sail_latex/sailsailsailfndecodeSomeBCMPZvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000001 @ rs : regno @ 0b00010 @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zBCMPZ]{BCMPZ}#(rs, imm, LT, false, true)) /* BLTZL */ diff --git a/cheri/sail_latex/sailsailsailfndecodeSomeBEQvv.tex b/cheri/sail_latex/sailsailsailfndecodeSomeBEQvv.tex new file mode 100644 index 00000000..4ee94638 --- /dev/null +++ b/cheri/sail_latex/sailsailsailfndecodeSomeBEQvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000101 @ rs : regno @ rt : regno @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zBEQ]{BEQ}#(rs, rt, imm, true , false)) /* BNE */ diff --git a/cheri/sail_latex/sailsailsailfndecodeSomeCJALRvv.tex b/cheri/sail_latex/sailsailsailfndecodeSomeCJALRvv.tex new file mode 100644 index 00000000..a14bda16 --- /dev/null +++ b/cheri/sail_latex/sailsailsailfndecodeSomeCJALRvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ cb : regno @ 0b00011 @ 0b11111 @ 0b111111) = #\hyperref[zSome]{Some}#(#\hyperref[zCJALR]{CJALR}#(0b00000, cb, false)) /* CJR */ diff --git a/cheri/sail_latex/sailsailsailfndecodeSomeCLCvv.tex b/cheri/sail_latex/sailsailsailfndecodeSomeCLCvv.tex new file mode 100644 index 00000000..ec1bbddb --- /dev/null +++ b/cheri/sail_latex/sailsailsailfndecodeSomeCLCvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b011101 @ cd : regno @ cb : regno @ offset : #\hyperref[zbits]{bits}#(16)) = #\hyperref[zSome]{Some}#(#\hyperref[zCLC]{CLC}#(cd, cb, 0b00000, offset, false)) /* CLCBI */ diff --git a/cheri/sail_latex/sailsailsailfndecodeSomeCLoadvv.tex b/cheri/sail_latex/sailsailsailfndecodeSomeCLoadvv.tex new file mode 100644 index 00000000..59928bdf --- /dev/null +++ b/cheri/sail_latex/sailsailsailfndecodeSomeCLoadvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b110010 @ rd : regno @ cb : regno@ rt : regno @ offset : #\hyperref[zbits]{bits}#(8) @ 0b0 @ 0b01) = #\hyperref[zSome]{Some}#(#\hyperref[zCLoad]{CLoad}#(rd, cb, rt, offset, false, H, false)) /* CLHU */ diff --git a/cheri/sail_latex/sailsailsailfndecodeSomeCMOVXvv.tex b/cheri/sail_latex/sailsailsailfndecodeSomeCMOVXvv.tex new file mode 100644 index 00000000..17ed8e64 --- /dev/null +++ b/cheri/sail_latex/sailsailsailfndecodeSomeCMOVXvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ cd : regno @ cs : regno @ rs : regno @ 0b011100) = #\hyperref[zSome]{Some}#(#\hyperref[zCMOVX]{CMOVX}#(cd, cs, rs, true)) /* CMOVN */ diff --git a/cheri/sail_latex/sailsailsailfndecodeSomeCPtrCmpvv.tex b/cheri/sail_latex/sailsailsailfndecodeSomeCPtrCmpvv.tex new file mode 100644 index 00000000..e89b161e --- /dev/null +++ b/cheri/sail_latex/sailsailsailfndecodeSomeCPtrCmpvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b01110 @ rd : regno @ cb : regno @ ct : regno @ 0b000 @ 0b010) = #\hyperref[zSome]{Some}#(#\hyperref[zCPtrCmp]{CPtrCmp}#(rd, cb, ct, CLT)) diff --git a/cheri/sail_latex/sailsailsailfndecodeSomeCStorevv.tex b/cheri/sail_latex/sailsailsailfndecodeSomeCStorevv.tex new file mode 100644 index 00000000..16a0ca69 --- /dev/null +++ b/cheri/sail_latex/sailsailsailfndecodeSomeCStorevv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b111010 @ rs : regno @ cb : regno@ rt : regno @ offset : #\hyperref[zbits]{bits}#(8) @ 0b0 @ 0b10) = #\hyperref[zSome]{Some}#(#\hyperref[zCStore]{CStore}#(rs, cb, rt, 0b00000, offset, W, false)) /* CSW */ diff --git a/cheri/sail_latex/sailsailsailfndecodeSomeClearRegsvv.tex b/cheri/sail_latex/sailsailsailfndecodeSomeClearRegsvv.tex new file mode 100644 index 00000000..1f6face1 --- /dev/null +++ b/cheri/sail_latex/sailsailsailfndecodeSomeClearRegsvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b01111 @ 0b00010 @ imm : #\hyperref[zbits]{bits}#(16)) = #\hyperref[zSome]{Some}#(#\hyperref[zClearRegs]{ClearRegs}#(CLo, imm)) diff --git a/cheri/sail_latex/sailsailsailfndecodeSomeLoadvv.tex b/cheri/sail_latex/sailsailsailfndecodeSomeLoadvv.tex new file mode 100644 index 00000000..9158cc9a --- /dev/null +++ b/cheri/sail_latex/sailsailsailfndecodeSomeLoadvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b100001 @ base : regno @ rt : regno @ offset : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zLoad]{Load}#(H, true, false, base, rt, offset)) /* LH */ diff --git a/cheri/sail_latex/sailsailsailfndecodeSomeStorevv.tex b/cheri/sail_latex/sailsailsailfndecodeSomeStorevv.tex new file mode 100644 index 00000000..f71ec6a1 --- /dev/null +++ b/cheri/sail_latex/sailsailsailfndecodeSomeStorevv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b101011 @ base : regno @ rt : regno @ offset : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zStore]{Store}#(W, false, base, rt, offset)) /* SW */ diff --git a/cheri/sail_latex/sailsailsailfndecodeSomeTRAPIMMvv.tex b/cheri/sail_latex/sailsailsailfndecodeSomeTRAPIMMvv.tex new file mode 100644 index 00000000..39d26d09 --- /dev/null +++ b/cheri/sail_latex/sailsailsailfndecodeSomeTRAPIMMvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000001 @ rs : regno @ 0b01000 @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zTRAPIMM]{TRAPIMM}#(rs, imm, GE)) /* TGEI */ diff --git a/cheri/sail_latex/sailsailsailfndecodeSomeTRAPREGvv.tex b/cheri/sail_latex/sailsailsailfndecodeSomeTRAPREGvv.tex new file mode 100644 index 00000000..69135618 --- /dev/null +++ b/cheri/sail_latex/sailsailsailfndecodeSomeTRAPREGvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ code : #\hyperref[zbits]{bits}#(10) @ 0b110010) = + #\hyperref[zSome]{Some}#(#\hyperref[zTRAPREG]{TRAPREG}#(rs, rt, LT)) /* TLT */ diff --git a/cheri/sail_latex/sailsailsailfndecodeSomevv.tex b/cheri/sail_latex/sailsailsailfndecodeSomevv.tex new file mode 100644 index 00000000..30e900f1 --- /dev/null +++ b/cheri/sail_latex/sailsailsailfndecodeSomevv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010000 @ 0b10000000000000000000 @ 0b000001) = #\hyperref[zSome]{Some}#(#\hyperref[zTLBR]{TLBR}#() : ast) diff --git a/cheri/sail_latex/sailsailsailmodbitsvv.tex b/cheri/sail_latex/sailsailsailmodbitsvv.tex new file mode 100644 index 00000000..7f154d12 --- /dev/null +++ b/cheri/sail_latex/sailsailsailmodbitsvv.tex @@ -0,0 +1 @@ +overload _mod_bits = {_get_TLBEntry_bits, _set_TLBEntry_bits}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailsailsailfndecodeSomeBCMPZvvv.tex b/cheri/sail_latex/sailsailsailsailfndecodeSomeBCMPZvvv.tex new file mode 100644 index 00000000..b58ee95f --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailfndecodeSomeBCMPZvvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000001 @ rs : regno @ 0b10010 @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zBCMPZ]{BCMPZ}#(rs, imm, LT, true, true)) /* BLTZALL */ diff --git a/cheri/sail_latex/sailsailsailsailfndecodeSomeBEQvvv.tex b/cheri/sail_latex/sailsailsailsailfndecodeSomeBEQvvv.tex new file mode 100644 index 00000000..c8be8d7f --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailfndecodeSomeBEQvvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b010101 @ rs : regno @ rt : regno @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zBEQ]{BEQ}#(rs, rt, imm, true , true)) /* BNEL */ diff --git a/cheri/sail_latex/sailsailsailsailfndecodeSomeCJALRvvv.tex b/cheri/sail_latex/sailsailsailsailfndecodeSomeCJALRvvv.tex new file mode 100644 index 00000000..bc34143b --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailfndecodeSomeCJALRvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ cd : regno @ cb : regno @ 0b01100 @ 0b111111) = #\hyperref[zSome]{Some}#(#\hyperref[zCJALR]{CJALR}#(cd, cb, true)) /* CJALR */ diff --git a/cheri/sail_latex/sailsailsailsailfndecodeSomeCLoadvvv.tex b/cheri/sail_latex/sailsailsailsailfndecodeSomeCLoadvvv.tex new file mode 100644 index 00000000..a510352e --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailfndecodeSomeCLoadvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b110010 @ rd : regno @ cb : regno@ rt : regno @ offset : #\hyperref[zbits]{bits}#(8) @ 0b1 @ 0b01) = #\hyperref[zSome]{Some}#(#\hyperref[zCLoad]{CLoad}#(rd, cb, rt, offset, true, H, false)) /* CLH */ diff --git a/cheri/sail_latex/sailsailsailsailfndecodeSomeCPtrCmpvvv.tex b/cheri/sail_latex/sailsailsailsailfndecodeSomeCPtrCmpvvv.tex new file mode 100644 index 00000000..1cbb97ff --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailfndecodeSomeCPtrCmpvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b01110 @ rd : regno @ cb : regno @ ct : regno @ 0b000 @ 0b011) = #\hyperref[zSome]{Some}#(#\hyperref[zCPtrCmp]{CPtrCmp}#(rd, cb, ct, CLE)) diff --git a/cheri/sail_latex/sailsailsailsailfndecodeSomeCStorevvv.tex b/cheri/sail_latex/sailsailsailsailfndecodeSomeCStorevvv.tex new file mode 100644 index 00000000..1ff7d0b3 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailfndecodeSomeCStorevvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b111010 @ rs : regno @ cb : regno@ rt : regno @ offset : #\hyperref[zbits]{bits}#(8) @ 0b0 @ 0b11) = #\hyperref[zSome]{Some}#(#\hyperref[zCStore]{CStore}#(rs, cb, rt, 0b00000, offset, D, false)) /* CSD */ diff --git a/cheri/sail_latex/sailsailsailsailfndecodeSomeClearRegsvvv.tex b/cheri/sail_latex/sailsailsailsailfndecodeSomeClearRegsvvv.tex new file mode 100644 index 00000000..21776cce --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailfndecodeSomeClearRegsvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b01111 @ 0b00011 @ imm : #\hyperref[zbits]{bits}#(16)) = #\hyperref[zSome]{Some}#(#\hyperref[zClearRegs]{ClearRegs}#(CHi, imm)) diff --git a/cheri/sail_latex/sailsailsailsailfndecodeSomeLoadvvv.tex b/cheri/sail_latex/sailsailsailsailfndecodeSomeLoadvvv.tex new file mode 100644 index 00000000..e0f61740 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailfndecodeSomeLoadvvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b100101 @ base : regno @ rt : regno @ offset : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zLoad]{Load}#(H, false, false, base, rt, offset)) /* LHU */ diff --git a/cheri/sail_latex/sailsailsailsailfndecodeSomeStorevvv.tex b/cheri/sail_latex/sailsailsailsailfndecodeSomeStorevvv.tex new file mode 100644 index 00000000..83e6bdf2 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailfndecodeSomeStorevvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b111111 @ base : regno @ rt : regno @ offset : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zStore]{Store}#(D, false, base, rt, offset)) /* SD */ diff --git a/cheri/sail_latex/sailsailsailsailfndecodeSomeTRAPIMMvvv.tex b/cheri/sail_latex/sailsailsailsailfndecodeSomeTRAPIMMvvv.tex new file mode 100644 index 00000000..225ae50d --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailfndecodeSomeTRAPIMMvvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000001 @ rs : regno @ 0b01001 @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zTRAPIMM]{TRAPIMM}#(rs, imm, GEU)) /* TGEIU */ diff --git a/cheri/sail_latex/sailsailsailsailfndecodeSomeTRAPREGvvv.tex b/cheri/sail_latex/sailsailsailsailfndecodeSomeTRAPREGvvv.tex new file mode 100644 index 00000000..4cd33da5 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailfndecodeSomeTRAPREGvvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ code : #\hyperref[zbits]{bits}#(10) @ 0b110011) = + #\hyperref[zSome]{Some}#(#\hyperref[zTRAPREG]{TRAPREG}#(rs, rt, LTU)) /* TLTU */ diff --git a/cheri/sail_latex/sailsailsailsailfndecodeSomevvv.tex b/cheri/sail_latex/sailsailsailsailfndecodeSomevvv.tex new file mode 100644 index 00000000..2ef5d08d --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailfndecodeSomevvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010000 @ 0b10000000000000000000 @ 0b001000) = #\hyperref[zSome]{Some}#(#\hyperref[zTLBP]{TLBP}#() : ast) diff --git a/cheri/sail_latex/sailsailsailsailmodbitsvvv.tex b/cheri/sail_latex/sailsailsailsailmodbitsvvv.tex new file mode 100644 index 00000000..bde40ee8 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailmodbitsvvv.tex @@ -0,0 +1 @@ +overload _mod_bits = {_get_XContextReg_bits, _set_XContextReg_bits}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailsailsailsailfndecodeSomeBCMPZvvvv.tex b/cheri/sail_latex/sailsailsailsailsailfndecodeSomeBCMPZvvvv.tex new file mode 100644 index 00000000..cf942540 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailfndecodeSomeBCMPZvvvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000001 @ rs : regno @ 0b00001 @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zBCMPZ]{BCMPZ}#(rs, imm, GE, false, false)) /* BGEZ */ diff --git a/cheri/sail_latex/sailsailsailsailsailfndecodeSomeCLoadvvvv.tex b/cheri/sail_latex/sailsailsailsailsailfndecodeSomeCLoadvvvv.tex new file mode 100644 index 00000000..db208247 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailfndecodeSomeCLoadvvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b110010 @ rd : regno @ cb : regno@ rt : regno @ offset : #\hyperref[zbits]{bits}#(8) @ 0b0 @ 0b10) = #\hyperref[zSome]{Some}#(#\hyperref[zCLoad]{CLoad}#(rd, cb, rt, offset, false, W, false)) /* CLWU */ diff --git a/cheri/sail_latex/sailsailsailsailsailfndecodeSomeCPtrCmpvvvv.tex b/cheri/sail_latex/sailsailsailsailsailfndecodeSomeCPtrCmpvvvv.tex new file mode 100644 index 00000000..c49c5823 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailfndecodeSomeCPtrCmpvvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b01110 @ rd : regno @ cb : regno @ ct : regno @ 0b000 @ 0b100) = #\hyperref[zSome]{Some}#(#\hyperref[zCPtrCmp]{CPtrCmp}#(rd, cb, ct, CLTU)) diff --git a/cheri/sail_latex/sailsailsailsailsailfndecodeSomeCStorevvvv.tex b/cheri/sail_latex/sailsailsailsailsailfndecodeSomeCStorevvvv.tex new file mode 100644 index 00000000..50b5be16 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailfndecodeSomeCStorevvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b10000 @ rs : regno @ cb : regno @ rd : regno @ 0b0000 @ 0b00) = #\hyperref[zSome]{Some}#(#\hyperref[zCStore]{CStore}#(rs, cb, 0b00000, rd, 0b00000000, B, true)) /* CSCB */ diff --git a/cheri/sail_latex/sailsailsailsailsailfndecodeSomeLoadvvvv.tex b/cheri/sail_latex/sailsailsailsailsailfndecodeSomeLoadvvvv.tex new file mode 100644 index 00000000..4983e9f0 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailfndecodeSomeLoadvvvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b100011 @ base : regno @ rt : regno @ offset : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zLoad]{Load}#(W, true, false, base, rt, offset)) /* LW */ diff --git a/cheri/sail_latex/sailsailsailsailsailfndecodeSomeStorevvvv.tex b/cheri/sail_latex/sailsailsailsailsailfndecodeSomeStorevvvv.tex new file mode 100644 index 00000000..64711c35 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailfndecodeSomeStorevvvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b111000 @ base : regno @ rt : regno @ offset : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zStore]{Store}#(W, true, base, rt, offset)) /* SC */ diff --git a/cheri/sail_latex/sailsailsailsailsailfndecodeSomeTRAPIMMvvvv.tex b/cheri/sail_latex/sailsailsailsailsailfndecodeSomeTRAPIMMvvvv.tex new file mode 100644 index 00000000..369341e7 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailfndecodeSomeTRAPIMMvvvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000001 @ rs : regno @ 0b01010 @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zTRAPIMM]{TRAPIMM}#(rs, imm, LT)) /* TLTI */ diff --git a/cheri/sail_latex/sailsailsailsailsailfndecodeSomeTRAPREGvvvv.tex b/cheri/sail_latex/sailsailsailsailsailfndecodeSomeTRAPREGvvvv.tex new file mode 100644 index 00000000..ac4b2bdb --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailfndecodeSomeTRAPREGvvvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ code : #\hyperref[zbits]{bits}#(10) @ 0b110100) = + #\hyperref[zSome]{Some}#(#\hyperref[zTRAPREG]{TRAPREG}#(rs, rt, EQ)) /* TEQ */ diff --git a/cheri/sail_latex/sailsailsailsailsailmodbitsvvvv.tex b/cheri/sail_latex/sailsailsailsailsailmodbitsvvvv.tex new file mode 100644 index 00000000..8b2aac3e --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailmodbitsvvvv.tex @@ -0,0 +1 @@ +overload _mod_bits = {_get_ContextReg_bits, _set_ContextReg_bits}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailsailsailsailsailfndecodeSomeBCMPZvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailfndecodeSomeBCMPZvvvvv.tex new file mode 100644 index 00000000..548182a5 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailfndecodeSomeBCMPZvvvvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000001 @ rs : regno @ 0b10001 @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zBCMPZ]{BCMPZ}#(rs, imm, GE, true, false)) /* BGEZAL */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailfndecodeSomeCLoadvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailfndecodeSomeCLoadvvvvv.tex new file mode 100644 index 00000000..5f29eb1c --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailfndecodeSomeCLoadvvvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b110010 @ rd : regno @ cb : regno@ rt : regno @ offset : #\hyperref[zbits]{bits}#(8) @ 0b1 @ 0b10) = #\hyperref[zSome]{Some}#(#\hyperref[zCLoad]{CLoad}#(rd, cb, rt, offset, true, W, false)) /* CLW */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvv.tex new file mode 100644 index 00000000..27f6c71c --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b01110 @ rd : regno @ cb : regno @ ct : regno @ 0b000 @ 0b101) = #\hyperref[zSome]{Some}#(#\hyperref[zCPtrCmp]{CPtrCmp}#(rd, cb, ct, CLEU)) diff --git a/cheri/sail_latex/sailsailsailsailsailsailfndecodeSomeCStorevvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailfndecodeSomeCStorevvvvv.tex new file mode 100644 index 00000000..3b0a96ff --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailfndecodeSomeCStorevvvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b10000 @ rs : regno @ cb : regno @ rd : regno @ 0b0000 @ 0b01) = #\hyperref[zSome]{Some}#(#\hyperref[zCStore]{CStore}#(rs, cb, 0b00000, rd, 0b00000000, H, true)) /* CSCH */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailfndecodeSomeLoadvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailfndecodeSomeLoadvvvvv.tex new file mode 100644 index 00000000..6bc11576 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailfndecodeSomeLoadvvvvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b100111 @ base : regno @ rt : regno @ offset : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zLoad]{Load}#(W, false, false, base, rt, offset)) /* LWU */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailfndecodeSomeStorevvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailfndecodeSomeStorevvvvv.tex new file mode 100644 index 00000000..e7f1c376 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailfndecodeSomeStorevvvvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b111100 @ base : regno @ rt : regno @ offset : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zStore]{Store}#(D, true, base, rt, offset)) /* SCD */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailfndecodeSomeTRAPIMMvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailfndecodeSomeTRAPIMMvvvvv.tex new file mode 100644 index 00000000..ee21bf92 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailfndecodeSomeTRAPIMMvvvvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000001 @ rs : regno @ 0b01011 @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zTRAPIMM]{TRAPIMM}#(rs, imm, LTU)) /* TLTIU */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailfndecodeSomeTRAPREGvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailfndecodeSomeTRAPREGvvvvv.tex new file mode 100644 index 00000000..15cb09f9 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailfndecodeSomeTRAPREGvvvvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000000 @ rs : regno @ rt : regno @ code : #\hyperref[zbits]{bits}#(10) @ 0b110110) = + #\hyperref[zSome]{Some}#(#\hyperref[zTRAPREG]{TRAPREG}#(rs, rt, NE)) /* TNE */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailmodbitsvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailmodbitsvvvvv.tex new file mode 100644 index 00000000..d52fa2ec --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailmodbitsvvvvv.tex @@ -0,0 +1 @@ +overload _mod_bits = {_get_TLBEntryHiReg_bits, _set_TLBEntryHiReg_bits}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvv.tex new file mode 100644 index 00000000..1cadc33c --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000001 @ rs : regno @ 0b00011 @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zBCMPZ]{BCMPZ}#(rs, imm, GE, false, true)) /* BGEZL */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvv.tex new file mode 100644 index 00000000..187c70a2 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b110010 @ rd : regno @ cb : regno@ rt : regno @ offset : #\hyperref[zbits]{bits}#(8) @ 0b0 @ 0b11) = #\hyperref[zSome]{Some}#(#\hyperref[zCLoad]{CLoad}#(rd, cb, rt, offset, false, D, false)) /* CLD */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvv.tex new file mode 100644 index 00000000..26c46207 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b01110 @ rd : regno @ cb : regno @ ct : regno @ 0b000 @ 0b110) = #\hyperref[zSome]{Some}#(#\hyperref[zCPtrCmp]{CPtrCmp}#(rd, cb, ct, CEXEQ)) diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailfndecodeSomeCStorevvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailfndecodeSomeCStorevvvvvv.tex new file mode 100644 index 00000000..1b2921e2 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailfndecodeSomeCStorevvvvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b10000 @ rs : regno @ cb : regno @ rd : regno @ 0b0000 @ 0b10) = #\hyperref[zSome]{Some}#(#\hyperref[zCStore]{CStore}#(rs, cb, 0b00000, rd, 0b00000000, W, true)) /* CSCW */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailfndecodeSomeLoadvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailfndecodeSomeLoadvvvvvv.tex new file mode 100644 index 00000000..1172d6d4 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailfndecodeSomeLoadvvvvvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b110111 @ base : regno @ rt : regno @ offset : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zLoad]{Load}#(D, false, false, base, rt, offset)) /* LD */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailmodbitsvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailmodbitsvvvvvv.tex new file mode 100644 index 00000000..7ba9e37c --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailmodbitsvvvvvv.tex @@ -0,0 +1 @@ +overload _mod_bits = {_get_TLBEntryLoReg_bits, _set_TLBEntryLoReg_bits}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvvv.tex new file mode 100644 index 00000000..36b5eb5c --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000001 @ rs : regno @ 0b10011 @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zBCMPZ]{BCMPZ}#(rs, imm, GE, true, true)) /* BGEZALL */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvv.tex new file mode 100644 index 00000000..91fb7205 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b10000 @ rd : regno @ cb : regno @ 0b00000001 @ 0b0 @ 0b00) = #\hyperref[zSome]{Some}#(#\hyperref[zCLoad]{CLoad}#(rd, cb, 0b00000, 0b00000000, false, B, true)) /* CLLBU */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvv.tex new file mode 100644 index 00000000..644864c8 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b01110 @ rd : regno @ cb : regno @ ct : regno @ 0b000 @ 0b111) = #\hyperref[zSome]{Some}#(#\hyperref[zCPtrCmp]{CPtrCmp}#(rd, cb, ct, CNEXEQ)) diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailfndecodeSomeCStorevvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailfndecodeSomeCStorevvvvvvv.tex new file mode 100644 index 00000000..cd3cbe68 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailfndecodeSomeCStorevvvvvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b10000 @ rs : regno @ cb : regno @ rd : regno @ 0b0000 @ 0b11) = #\hyperref[zSome]{Some}#(#\hyperref[zCStore]{CStore}#(rs, cb, 0b00000, rd, 0b00000000, D, true)) /* CSCD */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailfndecodeSomeLoadvvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailfndecodeSomeLoadvvvvvvv.tex new file mode 100644 index 00000000..61af3203 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailfndecodeSomeLoadvvvvvvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b110000 @ base : regno @ rt : regno @ offset : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zLoad]{Load}#(W, true, true, base, rt, offset)) /* LL */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailmodbitsvvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailmodbitsvvvvvvv.tex new file mode 100644 index 00000000..b9059538 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailmodbitsvvvvvvv.tex @@ -0,0 +1 @@ +overload _mod_bits = {_get_CauseReg_bits, _set_CauseReg_bits}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvvvv.tex new file mode 100644 index 00000000..71d4e6a5 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvvvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000111 @ rs : regno @ 0b00000 @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zBCMPZ]{BCMPZ}#(rs, imm, GT, false, false)) /* BGTZ */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvv.tex new file mode 100644 index 00000000..4b5608e4 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b10000 @ rd : regno @ cb : regno @ 0b00000001 @ 0b1 @ 0b00) = #\hyperref[zSome]{Some}#(#\hyperref[zCLoad]{CLoad}#(rd, cb, 0b00000, 0b00000000, true, B, true)) /* CLLB */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvv.tex new file mode 100644 index 00000000..5649673e --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rd : regno @ cb : regno @ cs : regno @ 0b010100) = #\hyperref[zSome]{Some}#(#\hyperref[zCPtrCmp]{CPtrCmp}#(rd, cb, cs, CEQ)) diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailsailfndecodeSomeLoadvvvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailfndecodeSomeLoadvvvvvvvv.tex new file mode 100644 index 00000000..99da4355 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailfndecodeSomeLoadvvvvvvvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b110100 @ base : regno @ rt : regno @ offset : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zLoad]{Load}#(D, false, true, base, rt, offset)) /* LLD */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvvvvv.tex new file mode 100644 index 00000000..53bc8683 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvvvvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b010111 @ rs : regno @ 0b00000 @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zBCMPZ]{BCMPZ}#(rs, imm, GT, false, true)) /* BGTZL */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvvv.tex new file mode 100644 index 00000000..fde00667 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b10000 @ rd : regno @ cb : regno @ 0b00000001 @ 0b0 @ 0b01) = #\hyperref[zSome]{Some}#(#\hyperref[zCLoad]{CLoad}#(rd, cb, 0b00000, 0b00000000, false, H, true)) /* CLLHU */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvv.tex new file mode 100644 index 00000000..a6a71fee --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rd : regno @ cb : regno @ cs : regno @ 0b010101) = #\hyperref[zSome]{Some}#(#\hyperref[zCPtrCmp]{CPtrCmp}#(rd, cb, cs, CNE)) diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvvvvvv.tex new file mode 100644 index 00000000..1718e9a8 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvvvvvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b000110 @ rs : regno @ 0b00000 @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zBCMPZ]{BCMPZ}#(rs, imm, LE, false, false)) /* BLEZ */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvvvv.tex new file mode 100644 index 00000000..72c5c950 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b10000 @ rd : regno @ cb : regno @ 0b00000001 @ 0b1 @ 0b01) = #\hyperref[zSome]{Some}#(#\hyperref[zCLoad]{CLoad}#(rd, cb, 0b00000, 0b00000000, true, H, true)) /* CLLH */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvv.tex new file mode 100644 index 00000000..0346ca8c --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rd : regno @ cb : regno @ cs : regno @ 0b010110) = #\hyperref[zSome]{Some}#(#\hyperref[zCPtrCmp]{CPtrCmp}#(rd, cb, cs, CLT)) diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvvvvvvv.tex new file mode 100644 index 00000000..f0772815 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeBCMPZvvvvvvvvvvv.tex @@ -0,0 +1,2 @@ +function clause #\hyperref[zdecode]{decode}# (0b010110 @ rs : regno @ 0b00000 @ imm : imm16) = + #\hyperref[zSome]{Some}#(#\hyperref[zBCMPZ]{BCMPZ}#(rs, imm, LE, false, true)) /* BLEZL */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvvvvv.tex new file mode 100644 index 00000000..3378b72a --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvvvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b10000 @ rd : regno @ cb : regno @ 0b00000001 @ 0b0 @ 0b10) = #\hyperref[zSome]{Some}#(#\hyperref[zCLoad]{CLoad}#(rd, cb, 0b00000, 0b00000000, false, W, true)) /* CLLWU */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvvv.tex new file mode 100644 index 00000000..133bc7e4 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rd : regno @ cb : regno @ cs : regno @ 0b010111) = #\hyperref[zSome]{Some}#(#\hyperref[zCPtrCmp]{CPtrCmp}#(rd, cb, cs, CLE)) diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvvvvvv.tex new file mode 100644 index 00000000..c9a4c20e --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvvvvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b10000 @ rd : regno @ cb : regno @ 0b00000001 @ 0b1 @ 0b10) = #\hyperref[zSome]{Some}#(#\hyperref[zCLoad]{CLoad}#(rd, cb, 0b00000, 0b00000000, true, W, true)) /* CLLW */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvvvv.tex new file mode 100644 index 00000000..0b8afa50 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rd : regno @ cb : regno @ cs : regno @ 0b011000) = #\hyperref[zSome]{Some}#(#\hyperref[zCPtrCmp]{CPtrCmp}#(rd, cb, cs, CLTU)) diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvvvvvvv.tex new file mode 100644 index 00000000..791243c3 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCLoadvvvvvvvvvvvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b10000 @ rd : regno @ cb : regno @ 0b00000001 @ 0b0 @ 0b11) = #\hyperref[zSome]{Some}#(#\hyperref[zCLoad]{CLoad}#(rd, cb, 0b00000, 0b00000000, false, D, true)) /* CLLD */ diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvvvvv.tex new file mode 100644 index 00000000..f37b5e5a --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvvvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rd : regno @ cb : regno @ cs : regno @ 0b011001) = #\hyperref[zSome]{Some}#(#\hyperref[zCPtrCmp]{CPtrCmp}#(rd, cb, cs, CLEU)) diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvvvvvv.tex new file mode 100644 index 00000000..709a6f6d --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvvvvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rd : regno @ cb : regno @ cs : regno @ 0b011010) = #\hyperref[zSome]{Some}#(#\hyperref[zCPtrCmp]{CPtrCmp}#(rd, cb, cs, CEXEQ)) diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvvvvvvv.tex new file mode 100644 index 00000000..ae2792ce --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailsailsailsailsailsailsailsailsailfndecodeSomeCPtrCmpvvvvvvvvvvvvvvv.tex @@ -0,0 +1 @@ +function clause #\hyperref[zdecode]{decode}# (0b010010 @ 0b00000 @ rd : regno @ cb : regno @ cs : regno @ 0b100001) = #\hyperref[zSome]{Some}#(#\hyperref[zCPtrCmp]{CPtrCmp}#(rd, cb, cs, CNEXEQ)) diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailsailupdatebitsvvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailsailupdatebitsvvvvvvv.tex new file mode 100644 index 00000000..1be74427 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailsailupdatebitsvvvvvvv.tex @@ -0,0 +1 @@ +overload update_bits = {_update_CauseReg_bits}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailsailsailsailsailsailupdatebitsvvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailsailupdatebitsvvvvvv.tex new file mode 100644 index 00000000..60c5e7a6 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailsailupdatebitsvvvvvv.tex @@ -0,0 +1 @@ +overload update_bits = {_update_TLBEntryLoReg_bits}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailsailsailsailsailupdatebitsvvvvv.tex b/cheri/sail_latex/sailsailsailsailsailsailupdatebitsvvvvv.tex new file mode 100644 index 00000000..efc2c5b0 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailsailupdatebitsvvvvv.tex @@ -0,0 +1 @@ +overload update_bits = {_update_TLBEntryHiReg_bits}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailsailsailsailupdatebitsvvvv.tex b/cheri/sail_latex/sailsailsailsailsailupdatebitsvvvv.tex new file mode 100644 index 00000000..c4d81402 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailsailupdatebitsvvvv.tex @@ -0,0 +1 @@ +overload update_bits = {_update_ContextReg_bits}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailsailsailupdatebitsvvv.tex b/cheri/sail_latex/sailsailsailsailupdatebitsvvv.tex new file mode 100644 index 00000000..28ee31f9 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailupdatebitsvvv.tex @@ -0,0 +1 @@ +overload update_bits = {_update_XContextReg_bits}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailsailsailzeightoperatorzzerozJzJzninevvv.tex b/cheri/sail_latex/sailsailsailsailzeightoperatorzzerozJzJzninevvv.tex new file mode 100644 index 00000000..0f72fdc9 --- /dev/null +++ b/cheri/sail_latex/sailsailsailsailzeightoperatorzzerozJzJzninevvv.tex @@ -0,0 +1 @@ +overload (operator ==) = {eq_bit2}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailsailupdatebitsvv.tex b/cheri/sail_latex/sailsailsailupdatebitsvv.tex new file mode 100644 index 00000000..64d81afd --- /dev/null +++ b/cheri/sail_latex/sailsailsailupdatebitsvv.tex @@ -0,0 +1 @@ +overload update_bits = {_update_TLBEntry_bits}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailsailzeightoperatorzzerozBzninevv.tex b/cheri/sail_latex/sailsailsailzeightoperatorzzerozBzninevv.tex new file mode 100644 index 00000000..eacd556c --- /dev/null +++ b/cheri/sail_latex/sailsailsailzeightoperatorzzerozBzninevv.tex @@ -0,0 +1 @@ +overload (operator +) = {add_atom, add_int}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailsailzeightoperatorzzerozFzninevv.tex b/cheri/sail_latex/sailsailsailzeightoperatorzzerozFzninevv.tex new file mode 100644 index 00000000..73c40722 --- /dev/null +++ b/cheri/sail_latex/sailsailsailzeightoperatorzzerozFzninevv.tex @@ -0,0 +1 @@ +overload (operator /) = {div}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailsailzeightoperatorzzerozJzJzninevv.tex b/cheri/sail_latex/sailsailsailzeightoperatorzzerozJzJzninevv.tex new file mode 100644 index 00000000..47b1d0f6 --- /dev/null +++ b/cheri/sail_latex/sailsailsailzeightoperatorzzerozJzJzninevv.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_latex/sailsailsailzeightoperatorzzerozfivezninevv.tex b/cheri/sail_latex/sailsailsailzeightoperatorzzerozfivezninevv.tex new file mode 100644 index 00000000..552e0c24 --- /dev/null +++ b/cheri/sail_latex/sailsailsailzeightoperatorzzerozfivezninevv.tex @@ -0,0 +1 @@ +overload (operator %) = {mod}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailsignextend.tex b/cheri/sail_latex/sailsailsignextend.tex new file mode 100644 index 00000000..dfaa5c86 --- /dev/null +++ b/cheri/sail_latex/sailsailsignextend.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_latex/sailsailupdateASIDv.tex b/cheri/sail_latex/sailsailupdateASIDv.tex new file mode 100644 index 00000000..f415980a --- /dev/null +++ b/cheri/sail_latex/sailsailupdateASIDv.tex @@ -0,0 +1 @@ +overload update_ASID = {_update_TLBEntryHiReg_ASID}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailupdateExcCodev.tex b/cheri/sail_latex/sailsailupdateExcCodev.tex new file mode 100644 index 00000000..041de51c --- /dev/null +++ b/cheri/sail_latex/sailsailupdateExcCodev.tex @@ -0,0 +1 @@ +overload update_ExcCode = {_update_CauseReg_ExcCode}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailupdateGv.tex b/cheri/sail_latex/sailsailupdateGv.tex new file mode 100644 index 00000000..23f7bf3c --- /dev/null +++ b/cheri/sail_latex/sailsailupdateGv.tex @@ -0,0 +1 @@ +overload update_G = {_update_TLBEntryLoReg_G}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailupdateRv.tex b/cheri/sail_latex/sailsailupdateRv.tex new file mode 100644 index 00000000..03a3a143 --- /dev/null +++ b/cheri/sail_latex/sailsailupdateRv.tex @@ -0,0 +1 @@ +overload update_R = {_update_TLBEntryHiReg_R}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailupdateVPNtwov.tex b/cheri/sail_latex/sailsailupdateVPNtwov.tex new file mode 100644 index 00000000..e2b42a9a --- /dev/null +++ b/cheri/sail_latex/sailsailupdateVPNtwov.tex @@ -0,0 +1 @@ +overload update_VPN2 = {_update_TLBEntryHiReg_VPN2}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailupdatebitsv.tex b/cheri/sail_latex/sailsailupdatebitsv.tex new file mode 100644 index 00000000..cc90c98a --- /dev/null +++ b/cheri/sail_latex/sailsailupdatebitsv.tex @@ -0,0 +1 @@ +overload update_bits = {_update_StatusReg_bits}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailzeightoperatorzzerozAzninev.tex b/cheri/sail_latex/sailsailzeightoperatorzzerozAzninev.tex new file mode 100644 index 00000000..afe7a721 --- /dev/null +++ b/cheri/sail_latex/sailsailzeightoperatorzzerozAzninev.tex @@ -0,0 +1 @@ +overload (operator *) = {mult_atom, mult_int}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailzeightoperatorzzerozBzninev.tex b/cheri/sail_latex/sailsailzeightoperatorzzerozBzninev.tex new file mode 100644 index 00000000..ddc56bfd --- /dev/null +++ b/cheri/sail_latex/sailsailzeightoperatorzzerozBzninev.tex @@ -0,0 +1 @@ +overload (operator +) = {add_bits, add_bits_int}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailzeightoperatorzzerozDzninev.tex b/cheri/sail_latex/sailsailzeightoperatorzzerozDzninev.tex new file mode 100644 index 00000000..5d12fdf1 --- /dev/null +++ b/cheri/sail_latex/sailsailzeightoperatorzzerozDzninev.tex @@ -0,0 +1 @@ +overload (operator -) = {sub_atom, sub_int}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailzeightoperatorzzerozFzninev.tex b/cheri/sail_latex/sailsailzeightoperatorzzerozFzninev.tex new file mode 100644 index 00000000..38e9124b --- /dev/null +++ b/cheri/sail_latex/sailsailzeightoperatorzzerozFzninev.tex @@ -0,0 +1 @@ +overload (operator /) = {div_int}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailzeightoperatorzzerozJzJzninev.tex b/cheri/sail_latex/sailsailzeightoperatorzzerozJzJzninev.tex new file mode 100644 index 00000000..1314a962 --- /dev/null +++ b/cheri/sail_latex/sailsailzeightoperatorzzerozJzJzninev.tex @@ -0,0 +1 @@ +overload (operator ==) = {eq_bit, eq_bits}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailzeightoperatorzzerozQzninev.tex b/cheri/sail_latex/sailsailzeightoperatorzzerozQzninev.tex new file mode 100644 index 00000000..05769645 --- /dev/null +++ b/cheri/sail_latex/sailsailzeightoperatorzzerozQzninev.tex @@ -0,0 +1 @@ +overload (operator ^) = {sail_mask}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailzeightoperatorzzerozUzninev.tex b/cheri/sail_latex/sailsailzeightoperatorzzerozUzninev.tex new file mode 100644 index 00000000..1ebacbc4 --- /dev/null +++ b/cheri/sail_latex/sailsailzeightoperatorzzerozUzninev.tex @@ -0,0 +1 @@ +overload (operator |) = {or_bool}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailzeightoperatorzzerozfivezninev.tex b/cheri/sail_latex/sailsailzeightoperatorzzerozfivezninev.tex new file mode 100644 index 00000000..14fa73b8 --- /dev/null +++ b/cheri/sail_latex/sailsailzeightoperatorzzerozfivezninev.tex @@ -0,0 +1 @@ +overload (operator %) = {mod_int}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailzeightoperatorzzerozonezJzninev.tex b/cheri/sail_latex/sailsailzeightoperatorzzerozonezJzninev.tex new file mode 100644 index 00000000..527cf596 --- /dev/null +++ b/cheri/sail_latex/sailsailzeightoperatorzzerozonezJzninev.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_latex/sailsailzeightoperatorzzerozsixzninev.tex b/cheri/sail_latex/sailsailzeightoperatorzzerozsixzninev.tex new file mode 100644 index 00000000..be6f29ef --- /dev/null +++ b/cheri/sail_latex/sailsailzeightoperatorzzerozsixzninev.tex @@ -0,0 +1 @@ +overload (operator &) = {and_bool}
\ No newline at end of file diff --git a/cheri/sail_latex/sailsailzzeroextend.tex b/cheri/sail_latex/sailsailzzeroextend.tex new file mode 100644 index 00000000..53f6fff9 --- /dev/null +++ b/cheri/sail_latex/sailsailzzeroextend.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_latex/sailsailzzeros.tex b/cheri/sail_latex/sailsailzzeros.tex new file mode 100644 index 00000000..9c60aa12 --- /dev/null +++ b/cheri/sail_latex/sailsailzzeros.tex @@ -0,0 +1 @@ +val sail_zeros = "zeros" : forall 'n. atom('n) -> #\hyperref[zbits]{bits}#('n) diff --git a/cheri/sail_latex/sailsealCap.tex b/cheri/sail_latex/sailsealCap.tex new file mode 100644 index 00000000..891ae279 --- /dev/null +++ b/cheri/sail_latex/sailsealCap.tex @@ -0,0 +1 @@ +val sealCap : (CapStruct, bits(24)) -> (bool, CapStruct) diff --git a/cheri/sail_latex/sailsetCapBounds.tex b/cheri/sail_latex/sailsetCapBounds.tex new file mode 100644 index 00000000..6984ccf1 --- /dev/null +++ b/cheri/sail_latex/sailsetCapBounds.tex @@ -0,0 +1 @@ +val setCapBounds : (CapStruct, #\hyperref[zbits]{bits}#(64), #\hyperref[zbits]{bits}#(65)) -> (bool, CapStruct) diff --git a/cheri/sail_latex/sailsetCapCauseRegExcCode.tex b/cheri/sail_latex/sailsetCapCauseRegExcCode.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetCapCauseRegExcCode.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetCapCauseRegRegNum.tex b/cheri/sail_latex/sailsetCapCauseRegRegNum.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetCapCauseRegRegNum.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetCapCauseRegbits.tex b/cheri/sail_latex/sailsetCapCauseRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetCapCauseRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetCapOffset.tex b/cheri/sail_latex/sailsetCapOffset.tex new file mode 100644 index 00000000..d2fca67a --- /dev/null +++ b/cheri/sail_latex/sailsetCapOffset.tex @@ -0,0 +1 @@ +val setCapOffset : (CapStruct, #\hyperref[zbits]{bits}#(64)) -> (bool, CapStruct) diff --git a/cheri/sail_latex/sailsetCapPerms.tex b/cheri/sail_latex/sailsetCapPerms.tex new file mode 100644 index 00000000..617f19fb --- /dev/null +++ b/cheri/sail_latex/sailsetCapPerms.tex @@ -0,0 +1 @@ +val setCapPerms : (CapStruct, bits(31)) -> CapStruct diff --git a/cheri/sail_latex/sailsetCauseRegBD.tex b/cheri/sail_latex/sailsetCauseRegBD.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetCauseRegBD.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetCauseRegCE.tex b/cheri/sail_latex/sailsetCauseRegCE.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetCauseRegCE.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetCauseRegExcCode.tex b/cheri/sail_latex/sailsetCauseRegExcCode.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetCauseRegExcCode.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetCauseRegIP.tex b/cheri/sail_latex/sailsetCauseRegIP.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetCauseRegIP.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetCauseRegIV.tex b/cheri/sail_latex/sailsetCauseRegIV.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetCauseRegIV.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetCauseRegWP.tex b/cheri/sail_latex/sailsetCauseRegWP.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetCauseRegWP.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetCauseRegbits.tex b/cheri/sail_latex/sailsetCauseRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetCauseRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetContextRegBadVPNtwo.tex b/cheri/sail_latex/sailsetContextRegBadVPNtwo.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetContextRegBadVPNtwo.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetContextRegPTEBase.tex b/cheri/sail_latex/sailsetContextRegPTEBase.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetContextRegPTEBase.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetContextRegbits.tex b/cheri/sail_latex/sailsetContextRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetContextRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetStatusRegBEV.tex b/cheri/sail_latex/sailsetStatusRegBEV.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetStatusRegBEV.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetStatusRegCU.tex b/cheri/sail_latex/sailsetStatusRegCU.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetStatusRegCU.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetStatusRegERL.tex b/cheri/sail_latex/sailsetStatusRegERL.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetStatusRegERL.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetStatusRegEXL.tex b/cheri/sail_latex/sailsetStatusRegEXL.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetStatusRegEXL.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetStatusRegIE.tex b/cheri/sail_latex/sailsetStatusRegIE.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetStatusRegIE.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetStatusRegIM.tex b/cheri/sail_latex/sailsetStatusRegIM.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetStatusRegIM.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetStatusRegKSU.tex b/cheri/sail_latex/sailsetStatusRegKSU.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetStatusRegKSU.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetStatusRegKX.tex b/cheri/sail_latex/sailsetStatusRegKX.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetStatusRegKX.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetStatusRegSX.tex b/cheri/sail_latex/sailsetStatusRegSX.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetStatusRegSX.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetStatusRegUX.tex b/cheri/sail_latex/sailsetStatusRegUX.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetStatusRegUX.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetStatusRegbits.tex b/cheri/sail_latex/sailsetStatusRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetStatusRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntryHiRegASID.tex b/cheri/sail_latex/sailsetTLBEntryHiRegASID.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntryHiRegASID.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntryHiRegR.tex b/cheri/sail_latex/sailsetTLBEntryHiRegR.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntryHiRegR.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntryHiRegVPNtwo.tex b/cheri/sail_latex/sailsetTLBEntryHiRegVPNtwo.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntryHiRegVPNtwo.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntryHiRegbits.tex b/cheri/sail_latex/sailsetTLBEntryHiRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntryHiRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntryLoRegC.tex b/cheri/sail_latex/sailsetTLBEntryLoRegC.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntryLoRegC.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntryLoRegCapL.tex b/cheri/sail_latex/sailsetTLBEntryLoRegCapL.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntryLoRegCapL.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntryLoRegCapS.tex b/cheri/sail_latex/sailsetTLBEntryLoRegCapS.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntryLoRegCapS.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntryLoRegD.tex b/cheri/sail_latex/sailsetTLBEntryLoRegD.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntryLoRegD.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntryLoRegG.tex b/cheri/sail_latex/sailsetTLBEntryLoRegG.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntryLoRegG.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntryLoRegPFN.tex b/cheri/sail_latex/sailsetTLBEntryLoRegPFN.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntryLoRegPFN.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntryLoRegV.tex b/cheri/sail_latex/sailsetTLBEntryLoRegV.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntryLoRegV.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntryLoRegbits.tex b/cheri/sail_latex/sailsetTLBEntryLoRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntryLoRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntryasid.tex b/cheri/sail_latex/sailsetTLBEntryasid.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntryasid.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntrybits.tex b/cheri/sail_latex/sailsetTLBEntrybits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntrybits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntrycaplone.tex b/cheri/sail_latex/sailsetTLBEntrycaplone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntrycaplone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntrycaplzero.tex b/cheri/sail_latex/sailsetTLBEntrycaplzero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntrycaplzero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntrycapsone.tex b/cheri/sail_latex/sailsetTLBEntrycapsone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntrycapsone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntrycapszero.tex b/cheri/sail_latex/sailsetTLBEntrycapszero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntrycapszero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntrycone.tex b/cheri/sail_latex/sailsetTLBEntrycone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntrycone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntryczero.tex b/cheri/sail_latex/sailsetTLBEntryczero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntryczero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntrydone.tex b/cheri/sail_latex/sailsetTLBEntrydone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntrydone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntrydzero.tex b/cheri/sail_latex/sailsetTLBEntrydzero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntrydzero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntryg.tex b/cheri/sail_latex/sailsetTLBEntryg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntryg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntrypagemask.tex b/cheri/sail_latex/sailsetTLBEntrypagemask.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntrypagemask.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntrypfnone.tex b/cheri/sail_latex/sailsetTLBEntrypfnone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntrypfnone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntrypfnzero.tex b/cheri/sail_latex/sailsetTLBEntrypfnzero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntrypfnzero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntryr.tex b/cheri/sail_latex/sailsetTLBEntryr.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntryr.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntryvalid.tex b/cheri/sail_latex/sailsetTLBEntryvalid.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntryvalid.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntryvone.tex b/cheri/sail_latex/sailsetTLBEntryvone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntryvone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntryvpntwo.tex b/cheri/sail_latex/sailsetTLBEntryvpntwo.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntryvpntwo.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetTLBEntryvzero.tex b/cheri/sail_latex/sailsetTLBEntryvzero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetTLBEntryvzero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetXContextRegXBadVPNtwo.tex b/cheri/sail_latex/sailsetXContextRegXBadVPNtwo.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetXContextRegXBadVPNtwo.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetXContextRegXPTEBase.tex b/cheri/sail_latex/sailsetXContextRegXPTEBase.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetXContextRegXPTEBase.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetXContextRegXR.tex b/cheri/sail_latex/sailsetXContextRegXR.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetXContextRegXR.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetXContextRegbits.tex b/cheri/sail_latex/sailsetXContextRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailsetXContextRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailsetslicebits.tex b/cheri/sail_latex/sailsetslicebits.tex new file mode 100644 index 00000000..8a81bff5 --- /dev/null +++ b/cheri/sail_latex/sailsetslicebits.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_latex/sailsetsliceint.tex b/cheri/sail_latex/sailsetsliceint.tex new file mode 100644 index 00000000..413bf721 --- /dev/null +++ b/cheri/sail_latex/sailsetsliceint.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_latex/sailshiftbitsleft.tex b/cheri/sail_latex/sailshiftbitsleft.tex new file mode 100644 index 00000000..cdb2eb6a --- /dev/null +++ b/cheri/sail_latex/sailshiftbitsleft.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_latex/sailshiftbitsright.tex b/cheri/sail_latex/sailshiftbitsright.tex new file mode 100644 index 00000000..dbc72b11 --- /dev/null +++ b/cheri/sail_latex/sailshiftbitsright.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_latex/sailshiftl.tex b/cheri/sail_latex/sailshiftl.tex new file mode 100644 index 00000000..b2c54c27 --- /dev/null +++ b/cheri/sail_latex/sailshiftl.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_latex/sailshiftr.tex b/cheri/sail_latex/sailshiftr.tex new file mode 100644 index 00000000..f282dcbe --- /dev/null +++ b/cheri/sail_latex/sailshiftr.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_latex/sailshlint.tex b/cheri/sail_latex/sailshlint.tex new file mode 100644 index 00000000..8ffbcf6c --- /dev/null +++ b/cheri/sail_latex/sailshlint.tex @@ -0,0 +1 @@ +val shl_int = "shl_int" : (int, int) -> int diff --git a/cheri/sail_latex/sailshrint.tex b/cheri/sail_latex/sailshrint.tex new file mode 100644 index 00000000..087c17bb --- /dev/null +++ b/cheri/sail_latex/sailshrint.tex @@ -0,0 +1 @@ +val shr_int = "shr_int" : (int, int) -> int diff --git a/cheri/sail_latex/sailsigned.tex b/cheri/sail_latex/sailsigned.tex new file mode 100644 index 00000000..dcdc3049 --- /dev/null +++ b/cheri/sail_latex/sailsigned.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_latex/sailsignextend.tex b/cheri/sail_latex/sailsignextend.tex new file mode 100644 index 00000000..03f56369 --- /dev/null +++ b/cheri/sail_latex/sailsignextend.tex @@ -0,0 +1 @@ +overload sign_extend = {mips_sign_extend}
\ No newline at end of file diff --git a/cheri/sail_latex/sailskipbarr.tex b/cheri/sail_latex/sailskipbarr.tex new file mode 100644 index 00000000..52a6bedd --- /dev/null +++ b/cheri/sail_latex/sailskipbarr.tex @@ -0,0 +1 @@ +val skip_barr = "skip" : unit -> unit effect {barr} diff --git a/cheri/sail_latex/sailskipeamem.tex b/cheri/sail_latex/sailskipeamem.tex new file mode 100644 index 00000000..b6199f85 --- /dev/null +++ b/cheri/sail_latex/sailskipeamem.tex @@ -0,0 +1 @@ +val skip_eamem = "skip" : unit -> unit effect {eamem} diff --git a/cheri/sail_latex/sailskipescape.tex b/cheri/sail_latex/sailskipescape.tex new file mode 100644 index 00000000..413b5c1f --- /dev/null +++ b/cheri/sail_latex/sailskipescape.tex @@ -0,0 +1 @@ +val skip_escape = "skip" : unit -> unit effect {escape} diff --git a/cheri/sail_latex/sailskiprmemt.tex b/cheri/sail_latex/sailskiprmemt.tex new file mode 100644 index 00000000..97c88af4 --- /dev/null +++ b/cheri/sail_latex/sailskiprmemt.tex @@ -0,0 +1 @@ +val skip_rmemt = "skip" : unit -> unit effect {rmemt} diff --git a/cheri/sail_latex/sailskiprreg.tex b/cheri/sail_latex/sailskiprreg.tex new file mode 100644 index 00000000..08804f54 --- /dev/null +++ b/cheri/sail_latex/sailskiprreg.tex @@ -0,0 +1 @@ +val skip_rreg = "skip" : unit -> unit effect {rreg} diff --git a/cheri/sail_latex/sailskipwmvt.tex b/cheri/sail_latex/sailskipwmvt.tex new file mode 100644 index 00000000..8f991c20 --- /dev/null +++ b/cheri/sail_latex/sailskipwmvt.tex @@ -0,0 +1 @@ +val skip_wmvt = "skip" : unit -> unit effect {wmvt} diff --git a/cheri/sail_latex/sailskipwreg.tex b/cheri/sail_latex/sailskipwreg.tex new file mode 100644 index 00000000..e79f7c10 --- /dev/null +++ b/cheri/sail_latex/sailskipwreg.tex @@ -0,0 +1 @@ +val skip_wreg = "skip" : unit -> unit effect {wreg} diff --git a/cheri/sail_latex/sailslice.tex b/cheri/sail_latex/sailslice.tex new file mode 100644 index 00000000..b9bb5a70 --- /dev/null +++ b/cheri/sail_latex/sailslice.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_latex/sailstringofint.tex b/cheri/sail_latex/sailstringofint.tex new file mode 100644 index 00000000..05edaa20 --- /dev/null +++ b/cheri/sail_latex/sailstringofint.tex @@ -0,0 +1 @@ +val string_of_int = "string_of_int" : int -> string diff --git a/cheri/sail_latex/sailsubatom.tex b/cheri/sail_latex/sailsubatom.tex new file mode 100644 index 00000000..437e2d4c --- /dev/null +++ b/cheri/sail_latex/sailsubatom.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_latex/sailsubint.tex b/cheri/sail_latex/sailsubint.tex new file mode 100644 index 00000000..11fdf922 --- /dev/null +++ b/cheri/sail_latex/sailsubint.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_latex/sailsubrange.tex b/cheri/sail_latex/sailsubrange.tex new file mode 100644 index 00000000..2aad56b6 --- /dev/null +++ b/cheri/sail_latex/sailsubrange.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_latex/sailsubvec.tex b/cheri/sail_latex/sailsubvec.tex new file mode 100644 index 00000000..b92f07a4 --- /dev/null +++ b/cheri/sail_latex/sailsubvec.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_latex/sailsubvecint.tex b/cheri/sail_latex/sailsubvecint.tex new file mode 100644 index 00000000..70bf667e --- /dev/null +++ b/cheri/sail_latex/sailsubvecint.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_latex/sailsupportedinstructions.tex b/cheri/sail_latex/sailsupportedinstructions.tex new file mode 100644 index 00000000..489c178d --- /dev/null +++ b/cheri/sail_latex/sailsupportedinstructions.tex @@ -0,0 +1 @@ +val supported_instructions : ast -> #\hyperref[zoption]{option}#(ast) diff --git a/cheri/sail_latex/sailtlbEntryMatch.tex b/cheri/sail_latex/sailtlbEntryMatch.tex new file mode 100644 index 00000000..c8461b89 --- /dev/null +++ b/cheri/sail_latex/sailtlbEntryMatch.tex @@ -0,0 +1 @@ +val tlbEntryMatch : (#\hyperref[zbits]{bits}#(2), #\hyperref[zbits]{bits}#(27), #\hyperref[zbits]{bits}#(8), TLBEntry) -> bool effect pure diff --git a/cheri/sail_latex/sailtlbSearch.tex b/cheri/sail_latex/sailtlbSearch.tex new file mode 100644 index 00000000..4e391617 --- /dev/null +++ b/cheri/sail_latex/sailtlbSearch.tex @@ -0,0 +1 @@ +val tlbSearch : #\hyperref[zbits]{bits}#(64) -> #\hyperref[zoption]{option}#(TLBIndexT) effect {rreg} diff --git a/cheri/sail_latex/sailtobits.tex b/cheri/sail_latex/sailtobits.tex new file mode 100644 index 00000000..9dd3c655 --- /dev/null +++ b/cheri/sail_latex/sailtobits.tex @@ -0,0 +1 @@ +val to_bits : forall 'l, 'l >= 0 .(atom('l), int) -> #\hyperref[zbits]{bits}#('l) diff --git a/cheri/sail_latex/sailtruncate.tex b/cheri/sail_latex/sailtruncate.tex new file mode 100644 index 00000000..5f7760f3 --- /dev/null +++ b/cheri/sail_latex/sailtruncate.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_latex/sailuintsixfour.tex b/cheri/sail_latex/sailuintsixfour.tex new file mode 100644 index 00000000..a0d52c8f --- /dev/null +++ b/cheri/sail_latex/sailuintsixfour.tex @@ -0,0 +1 @@ +type uint64 = range(0, (2 ^ 64) - 1) diff --git a/cheri/sail_latex/sailunsigned.tex b/cheri/sail_latex/sailunsigned.tex new file mode 100644 index 00000000..47867039 --- /dev/null +++ b/cheri/sail_latex/sailunsigned.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_latex/sailupdateBD.tex b/cheri/sail_latex/sailupdateBD.tex new file mode 100644 index 00000000..db94f260 --- /dev/null +++ b/cheri/sail_latex/sailupdateBD.tex @@ -0,0 +1 @@ +overload update_BD = {_update_CauseReg_BD}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateBEV.tex b/cheri/sail_latex/sailupdateBEV.tex new file mode 100644 index 00000000..e45f5c7d --- /dev/null +++ b/cheri/sail_latex/sailupdateBEV.tex @@ -0,0 +1 @@ +overload update_BEV = {_update_StatusReg_BEV}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateBadVPNtwo.tex b/cheri/sail_latex/sailupdateBadVPNtwo.tex new file mode 100644 index 00000000..7b9f2827 --- /dev/null +++ b/cheri/sail_latex/sailupdateBadVPNtwo.tex @@ -0,0 +1 @@ +overload update_BadVPN2 = {_update_ContextReg_BadVPN2}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateC.tex b/cheri/sail_latex/sailupdateC.tex new file mode 100644 index 00000000..4e4756e3 --- /dev/null +++ b/cheri/sail_latex/sailupdateC.tex @@ -0,0 +1 @@ +overload update_C = {_update_TLBEntryLoReg_C}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateCE.tex b/cheri/sail_latex/sailupdateCE.tex new file mode 100644 index 00000000..12be67a2 --- /dev/null +++ b/cheri/sail_latex/sailupdateCE.tex @@ -0,0 +1 @@ +overload update_CE = {_update_CauseReg_CE}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateCU.tex b/cheri/sail_latex/sailupdateCU.tex new file mode 100644 index 00000000..fcc82986 --- /dev/null +++ b/cheri/sail_latex/sailupdateCU.tex @@ -0,0 +1 @@ +overload update_CU = {_update_StatusReg_CU}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateCapCauseRegExcCode.tex b/cheri/sail_latex/sailupdateCapCauseRegExcCode.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateCapCauseRegExcCode.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateCapCauseRegRegNum.tex b/cheri/sail_latex/sailupdateCapCauseRegRegNum.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateCapCauseRegRegNum.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateCapCauseRegbits.tex b/cheri/sail_latex/sailupdateCapCauseRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateCapCauseRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateCapL.tex b/cheri/sail_latex/sailupdateCapL.tex new file mode 100644 index 00000000..7b0d8471 --- /dev/null +++ b/cheri/sail_latex/sailupdateCapL.tex @@ -0,0 +1 @@ +overload update_CapL = {_update_TLBEntryLoReg_CapL}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateCapS.tex b/cheri/sail_latex/sailupdateCapS.tex new file mode 100644 index 00000000..dfe685ee --- /dev/null +++ b/cheri/sail_latex/sailupdateCapS.tex @@ -0,0 +1 @@ +overload update_CapS = {_update_TLBEntryLoReg_CapS}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateCauseRegBD.tex b/cheri/sail_latex/sailupdateCauseRegBD.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateCauseRegBD.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateCauseRegCE.tex b/cheri/sail_latex/sailupdateCauseRegCE.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateCauseRegCE.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateCauseRegExcCode.tex b/cheri/sail_latex/sailupdateCauseRegExcCode.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateCauseRegExcCode.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateCauseRegIP.tex b/cheri/sail_latex/sailupdateCauseRegIP.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateCauseRegIP.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateCauseRegIV.tex b/cheri/sail_latex/sailupdateCauseRegIV.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateCauseRegIV.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateCauseRegWP.tex b/cheri/sail_latex/sailupdateCauseRegWP.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateCauseRegWP.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateCauseRegbits.tex b/cheri/sail_latex/sailupdateCauseRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateCauseRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateContextRegBadVPNtwo.tex b/cheri/sail_latex/sailupdateContextRegBadVPNtwo.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateContextRegBadVPNtwo.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateContextRegPTEBase.tex b/cheri/sail_latex/sailupdateContextRegPTEBase.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateContextRegPTEBase.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateContextRegbits.tex b/cheri/sail_latex/sailupdateContextRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateContextRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateD.tex b/cheri/sail_latex/sailupdateD.tex new file mode 100644 index 00000000..2f367d1e --- /dev/null +++ b/cheri/sail_latex/sailupdateD.tex @@ -0,0 +1 @@ +overload update_D = {_update_TLBEntryLoReg_D}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateERL.tex b/cheri/sail_latex/sailupdateERL.tex new file mode 100644 index 00000000..d1f9da12 --- /dev/null +++ b/cheri/sail_latex/sailupdateERL.tex @@ -0,0 +1 @@ +overload update_ERL = {_update_StatusReg_ERL}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateEXL.tex b/cheri/sail_latex/sailupdateEXL.tex new file mode 100644 index 00000000..9d82b64d --- /dev/null +++ b/cheri/sail_latex/sailupdateEXL.tex @@ -0,0 +1 @@ +overload update_EXL = {_update_StatusReg_EXL}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateExcCode.tex b/cheri/sail_latex/sailupdateExcCode.tex new file mode 100644 index 00000000..38736fe7 --- /dev/null +++ b/cheri/sail_latex/sailupdateExcCode.tex @@ -0,0 +1 @@ +overload update_ExcCode = {_update_CapCauseReg_ExcCode}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateIE.tex b/cheri/sail_latex/sailupdateIE.tex new file mode 100644 index 00000000..421e8744 --- /dev/null +++ b/cheri/sail_latex/sailupdateIE.tex @@ -0,0 +1 @@ +overload update_IE = {_update_StatusReg_IE}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateIM.tex b/cheri/sail_latex/sailupdateIM.tex new file mode 100644 index 00000000..6128559a --- /dev/null +++ b/cheri/sail_latex/sailupdateIM.tex @@ -0,0 +1 @@ +overload update_IM = {_update_StatusReg_IM}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateIP.tex b/cheri/sail_latex/sailupdateIP.tex new file mode 100644 index 00000000..1b855a0b --- /dev/null +++ b/cheri/sail_latex/sailupdateIP.tex @@ -0,0 +1 @@ +overload update_IP = {_update_CauseReg_IP}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateIV.tex b/cheri/sail_latex/sailupdateIV.tex new file mode 100644 index 00000000..7cfa3a60 --- /dev/null +++ b/cheri/sail_latex/sailupdateIV.tex @@ -0,0 +1 @@ +overload update_IV = {_update_CauseReg_IV}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateKSU.tex b/cheri/sail_latex/sailupdateKSU.tex new file mode 100644 index 00000000..b5688537 --- /dev/null +++ b/cheri/sail_latex/sailupdateKSU.tex @@ -0,0 +1 @@ +overload update_KSU = {_update_StatusReg_KSU}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateKX.tex b/cheri/sail_latex/sailupdateKX.tex new file mode 100644 index 00000000..ff23da68 --- /dev/null +++ b/cheri/sail_latex/sailupdateKX.tex @@ -0,0 +1 @@ +overload update_KX = {_update_StatusReg_KX}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdatePFN.tex b/cheri/sail_latex/sailupdatePFN.tex new file mode 100644 index 00000000..fa32c59b --- /dev/null +++ b/cheri/sail_latex/sailupdatePFN.tex @@ -0,0 +1 @@ +overload update_PFN = {_update_TLBEntryLoReg_PFN}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdatePTEBase.tex b/cheri/sail_latex/sailupdatePTEBase.tex new file mode 100644 index 00000000..8826eee7 --- /dev/null +++ b/cheri/sail_latex/sailupdatePTEBase.tex @@ -0,0 +1 @@ +overload update_PTEBase = {_update_ContextReg_PTEBase}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateRegNum.tex b/cheri/sail_latex/sailupdateRegNum.tex new file mode 100644 index 00000000..61c4abe6 --- /dev/null +++ b/cheri/sail_latex/sailupdateRegNum.tex @@ -0,0 +1 @@ +overload update_RegNum = {_update_CapCauseReg_RegNum}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateSX.tex b/cheri/sail_latex/sailupdateSX.tex new file mode 100644 index 00000000..4e416154 --- /dev/null +++ b/cheri/sail_latex/sailupdateSX.tex @@ -0,0 +1 @@ +overload update_SX = {_update_StatusReg_SX}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateStatusRegBEV.tex b/cheri/sail_latex/sailupdateStatusRegBEV.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateStatusRegBEV.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateStatusRegCU.tex b/cheri/sail_latex/sailupdateStatusRegCU.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateStatusRegCU.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateStatusRegERL.tex b/cheri/sail_latex/sailupdateStatusRegERL.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateStatusRegERL.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateStatusRegEXL.tex b/cheri/sail_latex/sailupdateStatusRegEXL.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateStatusRegEXL.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateStatusRegIE.tex b/cheri/sail_latex/sailupdateStatusRegIE.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateStatusRegIE.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateStatusRegIM.tex b/cheri/sail_latex/sailupdateStatusRegIM.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateStatusRegIM.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateStatusRegKSU.tex b/cheri/sail_latex/sailupdateStatusRegKSU.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateStatusRegKSU.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateStatusRegKX.tex b/cheri/sail_latex/sailupdateStatusRegKX.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateStatusRegKX.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateStatusRegSX.tex b/cheri/sail_latex/sailupdateStatusRegSX.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateStatusRegSX.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateStatusRegUX.tex b/cheri/sail_latex/sailupdateStatusRegUX.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateStatusRegUX.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateStatusRegbits.tex b/cheri/sail_latex/sailupdateStatusRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateStatusRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntryHiRegASID.tex b/cheri/sail_latex/sailupdateTLBEntryHiRegASID.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntryHiRegASID.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntryHiRegR.tex b/cheri/sail_latex/sailupdateTLBEntryHiRegR.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntryHiRegR.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntryHiRegVPNtwo.tex b/cheri/sail_latex/sailupdateTLBEntryHiRegVPNtwo.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntryHiRegVPNtwo.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntryHiRegbits.tex b/cheri/sail_latex/sailupdateTLBEntryHiRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntryHiRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntryLoRegC.tex b/cheri/sail_latex/sailupdateTLBEntryLoRegC.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntryLoRegC.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntryLoRegCapL.tex b/cheri/sail_latex/sailupdateTLBEntryLoRegCapL.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntryLoRegCapL.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntryLoRegCapS.tex b/cheri/sail_latex/sailupdateTLBEntryLoRegCapS.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntryLoRegCapS.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntryLoRegD.tex b/cheri/sail_latex/sailupdateTLBEntryLoRegD.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntryLoRegD.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntryLoRegG.tex b/cheri/sail_latex/sailupdateTLBEntryLoRegG.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntryLoRegG.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntryLoRegPFN.tex b/cheri/sail_latex/sailupdateTLBEntryLoRegPFN.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntryLoRegPFN.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntryLoRegV.tex b/cheri/sail_latex/sailupdateTLBEntryLoRegV.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntryLoRegV.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntryLoRegbits.tex b/cheri/sail_latex/sailupdateTLBEntryLoRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntryLoRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntryasid.tex b/cheri/sail_latex/sailupdateTLBEntryasid.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntryasid.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntrybits.tex b/cheri/sail_latex/sailupdateTLBEntrybits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntrybits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntrycaplone.tex b/cheri/sail_latex/sailupdateTLBEntrycaplone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntrycaplone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntrycaplzero.tex b/cheri/sail_latex/sailupdateTLBEntrycaplzero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntrycaplzero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntrycapsone.tex b/cheri/sail_latex/sailupdateTLBEntrycapsone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntrycapsone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntrycapszero.tex b/cheri/sail_latex/sailupdateTLBEntrycapszero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntrycapszero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntrycone.tex b/cheri/sail_latex/sailupdateTLBEntrycone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntrycone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntryczero.tex b/cheri/sail_latex/sailupdateTLBEntryczero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntryczero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntrydone.tex b/cheri/sail_latex/sailupdateTLBEntrydone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntrydone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntrydzero.tex b/cheri/sail_latex/sailupdateTLBEntrydzero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntrydzero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntryg.tex b/cheri/sail_latex/sailupdateTLBEntryg.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntryg.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntrypagemask.tex b/cheri/sail_latex/sailupdateTLBEntrypagemask.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntrypagemask.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntrypfnone.tex b/cheri/sail_latex/sailupdateTLBEntrypfnone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntrypfnone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntrypfnzero.tex b/cheri/sail_latex/sailupdateTLBEntrypfnzero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntrypfnzero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntryr.tex b/cheri/sail_latex/sailupdateTLBEntryr.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntryr.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntryvalid.tex b/cheri/sail_latex/sailupdateTLBEntryvalid.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntryvalid.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntryvone.tex b/cheri/sail_latex/sailupdateTLBEntryvone.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntryvone.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntryvpntwo.tex b/cheri/sail_latex/sailupdateTLBEntryvpntwo.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntryvpntwo.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateTLBEntryvzero.tex b/cheri/sail_latex/sailupdateTLBEntryvzero.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateTLBEntryvzero.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateUX.tex b/cheri/sail_latex/sailupdateUX.tex new file mode 100644 index 00000000..d0d2a663 --- /dev/null +++ b/cheri/sail_latex/sailupdateUX.tex @@ -0,0 +1 @@ +overload update_UX = {_update_StatusReg_UX}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateV.tex b/cheri/sail_latex/sailupdateV.tex new file mode 100644 index 00000000..336f76d5 --- /dev/null +++ b/cheri/sail_latex/sailupdateV.tex @@ -0,0 +1 @@ +overload update_V = {_update_TLBEntryLoReg_V}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateWP.tex b/cheri/sail_latex/sailupdateWP.tex new file mode 100644 index 00000000..d4528672 --- /dev/null +++ b/cheri/sail_latex/sailupdateWP.tex @@ -0,0 +1 @@ +overload update_WP = {_update_CauseReg_WP}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateXBadVPNtwo.tex b/cheri/sail_latex/sailupdateXBadVPNtwo.tex new file mode 100644 index 00000000..9bb69796 --- /dev/null +++ b/cheri/sail_latex/sailupdateXBadVPNtwo.tex @@ -0,0 +1 @@ +overload update_XBadVPN2 = {_update_XContextReg_XBadVPN2}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateXContextRegXBadVPNtwo.tex b/cheri/sail_latex/sailupdateXContextRegXBadVPNtwo.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateXContextRegXBadVPNtwo.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateXContextRegXPTEBase.tex b/cheri/sail_latex/sailupdateXContextRegXPTEBase.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateXContextRegXPTEBase.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateXContextRegXR.tex b/cheri/sail_latex/sailupdateXContextRegXR.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateXContextRegXR.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateXContextRegbits.tex b/cheri/sail_latex/sailupdateXContextRegbits.tex new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/cheri/sail_latex/sailupdateXContextRegbits.tex @@ -0,0 +1 @@ + diff --git a/cheri/sail_latex/sailupdateXPTEBase.tex b/cheri/sail_latex/sailupdateXPTEBase.tex new file mode 100644 index 00000000..8a203d30 --- /dev/null +++ b/cheri/sail_latex/sailupdateXPTEBase.tex @@ -0,0 +1 @@ +overload update_XPTEBase = {_update_XContextReg_XPTEBase}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateXR.tex b/cheri/sail_latex/sailupdateXR.tex new file mode 100644 index 00000000..1854ca65 --- /dev/null +++ b/cheri/sail_latex/sailupdateXR.tex @@ -0,0 +1 @@ +overload update_XR = {_update_XContextReg_XR}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateasid.tex b/cheri/sail_latex/sailupdateasid.tex new file mode 100644 index 00000000..8fa9f60a --- /dev/null +++ b/cheri/sail_latex/sailupdateasid.tex @@ -0,0 +1 @@ +overload update_asid = {_update_TLBEntry_asid}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdatebits.tex b/cheri/sail_latex/sailupdatebits.tex new file mode 100644 index 00000000..84c93c53 --- /dev/null +++ b/cheri/sail_latex/sailupdatebits.tex @@ -0,0 +1 @@ +overload update_bits = {_update_CapCauseReg_bits}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdatecaplone.tex b/cheri/sail_latex/sailupdatecaplone.tex new file mode 100644 index 00000000..a0ce007c --- /dev/null +++ b/cheri/sail_latex/sailupdatecaplone.tex @@ -0,0 +1 @@ +overload update_capl1 = {_update_TLBEntry_capl1}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdatecaplzero.tex b/cheri/sail_latex/sailupdatecaplzero.tex new file mode 100644 index 00000000..11747581 --- /dev/null +++ b/cheri/sail_latex/sailupdatecaplzero.tex @@ -0,0 +1 @@ +overload update_capl0 = {_update_TLBEntry_capl0}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdatecapsone.tex b/cheri/sail_latex/sailupdatecapsone.tex new file mode 100644 index 00000000..6449364e --- /dev/null +++ b/cheri/sail_latex/sailupdatecapsone.tex @@ -0,0 +1 @@ +overload update_caps1 = {_update_TLBEntry_caps1}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdatecapszero.tex b/cheri/sail_latex/sailupdatecapszero.tex new file mode 100644 index 00000000..1791d720 --- /dev/null +++ b/cheri/sail_latex/sailupdatecapszero.tex @@ -0,0 +1 @@ +overload update_caps0 = {_update_TLBEntry_caps0}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdatecone.tex b/cheri/sail_latex/sailupdatecone.tex new file mode 100644 index 00000000..f8e39aea --- /dev/null +++ b/cheri/sail_latex/sailupdatecone.tex @@ -0,0 +1 @@ +overload update_c1 = {_update_TLBEntry_c1}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateczero.tex b/cheri/sail_latex/sailupdateczero.tex new file mode 100644 index 00000000..ccb2da58 --- /dev/null +++ b/cheri/sail_latex/sailupdateczero.tex @@ -0,0 +1 @@ +overload update_c0 = {_update_TLBEntry_c0}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdatedone.tex b/cheri/sail_latex/sailupdatedone.tex new file mode 100644 index 00000000..ee303126 --- /dev/null +++ b/cheri/sail_latex/sailupdatedone.tex @@ -0,0 +1 @@ +overload update_d1 = {_update_TLBEntry_d1}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdatedzero.tex b/cheri/sail_latex/sailupdatedzero.tex new file mode 100644 index 00000000..799b9f2f --- /dev/null +++ b/cheri/sail_latex/sailupdatedzero.tex @@ -0,0 +1 @@ +overload update_d0 = {_update_TLBEntry_d0}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdateg.tex b/cheri/sail_latex/sailupdateg.tex new file mode 100644 index 00000000..988d87b6 --- /dev/null +++ b/cheri/sail_latex/sailupdateg.tex @@ -0,0 +1 @@ +overload update_g = {_update_TLBEntry_g}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdatepagemask.tex b/cheri/sail_latex/sailupdatepagemask.tex new file mode 100644 index 00000000..e57ea1df --- /dev/null +++ b/cheri/sail_latex/sailupdatepagemask.tex @@ -0,0 +1 @@ +overload update_pagemask = {_update_TLBEntry_pagemask}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdatepfnone.tex b/cheri/sail_latex/sailupdatepfnone.tex new file mode 100644 index 00000000..a6e7a80d --- /dev/null +++ b/cheri/sail_latex/sailupdatepfnone.tex @@ -0,0 +1 @@ +overload update_pfn1 = {_update_TLBEntry_pfn1}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdatepfnzero.tex b/cheri/sail_latex/sailupdatepfnzero.tex new file mode 100644 index 00000000..54244083 --- /dev/null +++ b/cheri/sail_latex/sailupdatepfnzero.tex @@ -0,0 +1 @@ +overload update_pfn0 = {_update_TLBEntry_pfn0}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdater.tex b/cheri/sail_latex/sailupdater.tex new file mode 100644 index 00000000..485fdf99 --- /dev/null +++ b/cheri/sail_latex/sailupdater.tex @@ -0,0 +1 @@ +overload update_r = {_update_TLBEntry_r}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdatevalid.tex b/cheri/sail_latex/sailupdatevalid.tex new file mode 100644 index 00000000..9c19b5b5 --- /dev/null +++ b/cheri/sail_latex/sailupdatevalid.tex @@ -0,0 +1 @@ +overload update_valid = {_update_TLBEntry_valid}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdatevone.tex b/cheri/sail_latex/sailupdatevone.tex new file mode 100644 index 00000000..5da0a4e9 --- /dev/null +++ b/cheri/sail_latex/sailupdatevone.tex @@ -0,0 +1 @@ +overload update_v1 = {_update_TLBEntry_v1}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdatevpntwo.tex b/cheri/sail_latex/sailupdatevpntwo.tex new file mode 100644 index 00000000..b4743a0c --- /dev/null +++ b/cheri/sail_latex/sailupdatevpntwo.tex @@ -0,0 +1 @@ +overload update_vpn2 = {_update_TLBEntry_vpn2}
\ No newline at end of file diff --git a/cheri/sail_latex/sailupdatevzero.tex b/cheri/sail_latex/sailupdatevzero.tex new file mode 100644 index 00000000..0405f0c0 --- /dev/null +++ b/cheri/sail_latex/sailupdatevzero.tex @@ -0,0 +1 @@ +overload update_v0 = {_update_TLBEntry_v0}
\ No newline at end of file diff --git a/cheri/sail_latex/sailvectoraccess.tex b/cheri/sail_latex/sailvectoraccess.tex new file mode 100644 index 00000000..a8e8074f --- /dev/null +++ b/cheri/sail_latex/sailvectoraccess.tex @@ -0,0 +1 @@ +overload vector_access = {bitvector_access, plain_vector_access}
\ No newline at end of file diff --git a/cheri/sail_latex/sailvectorlength.tex b/cheri/sail_latex/sailvectorlength.tex new file mode 100644 index 00000000..f41d5bfa --- /dev/null +++ b/cheri/sail_latex/sailvectorlength.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_latex/sailvectorsubrange.tex b/cheri/sail_latex/sailvectorsubrange.tex new file mode 100644 index 00000000..c069c7b6 --- /dev/null +++ b/cheri/sail_latex/sailvectorsubrange.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_latex/sailvectorupdate.tex b/cheri/sail_latex/sailvectorupdate.tex new file mode 100644 index 00000000..1ec4aaef --- /dev/null +++ b/cheri/sail_latex/sailvectorupdate.tex @@ -0,0 +1 @@ +overload vector_update = {bitvector_update, plain_vector_update}
\ No newline at end of file diff --git a/cheri/sail_latex/sailvectorupdatesubrange.tex b/cheri/sail_latex/sailvectorupdatesubrange.tex new file mode 100644 index 00000000..6ff4f9f6 --- /dev/null +++ b/cheri/sail_latex/sailvectorupdatesubrange.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_latex/sailwGPR.tex b/cheri/sail_latex/sailwGPR.tex new file mode 100644 index 00000000..bf78e005 --- /dev/null +++ b/cheri/sail_latex/sailwGPR.tex @@ -0,0 +1 @@ +val wGPR : (#\hyperref[zbits]{bits}#(5), #\hyperref[zbits]{bits}#(64)) -> unit effect {wreg} diff --git a/cheri/sail_latex/sailwordWidthBytes.tex b/cheri/sail_latex/sailwordWidthBytes.tex new file mode 100644 index 00000000..aa5bbe5f --- /dev/null +++ b/cheri/sail_latex/sailwordWidthBytes.tex @@ -0,0 +1 @@ +val wordWidthBytes : WordType -> range(1, 8) diff --git a/cheri/sail_latex/sailwriteCapReg.tex b/cheri/sail_latex/sailwriteCapReg.tex new file mode 100644 index 00000000..44b9d466 --- /dev/null +++ b/cheri/sail_latex/sailwriteCapReg.tex @@ -0,0 +1 @@ +val writeCapReg : (regno, CapStruct) -> unit effect {wreg} diff --git a/cheri/sail_latex/sailxorvec.tex b/cheri/sail_latex/sailxorvec.tex new file mode 100644 index 00000000..b3aa7372 --- /dev/null +++ b/cheri/sail_latex/sailxorvec.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_latex/sailzW.tex b/cheri/sail_latex/sailzW.tex new file mode 100644 index 00000000..a29ec93f --- /dev/null +++ b/cheri/sail_latex/sailzW.tex @@ -0,0 +1 @@ +overload ~ = {not_bool, not_vec}
\ No newline at end of file diff --git a/cheri/sail_latex/sailzeightoperatorzzerozAsznine.tex b/cheri/sail_latex/sailzeightoperatorzzerozAsznine.tex new file mode 100644 index 00000000..0b0a46e2 --- /dev/null +++ b/cheri/sail_latex/sailzeightoperatorzzerozAsznine.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_latex/sailzeightoperatorzzerozAuznine.tex b/cheri/sail_latex/sailzeightoperatorzzerozAuznine.tex new file mode 100644 index 00000000..5b762ba7 --- /dev/null +++ b/cheri/sail_latex/sailzeightoperatorzzerozAuznine.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_latex/sailzeightoperatorzzerozAznine.tex b/cheri/sail_latex/sailzeightoperatorzzerozAznine.tex new file mode 100644 index 00000000..2d188f63 --- /dev/null +++ b/cheri/sail_latex/sailzeightoperatorzzerozAznine.tex @@ -0,0 +1 @@ +overload (operator *) = {mult_int}
\ No newline at end of file diff --git a/cheri/sail_latex/sailzeightoperatorzzerozBznine.tex b/cheri/sail_latex/sailzeightoperatorzzerozBznine.tex new file mode 100644 index 00000000..432e85e5 --- /dev/null +++ b/cheri/sail_latex/sailzeightoperatorzzerozBznine.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_latex/sailzeightoperatorzzerozDznine.tex b/cheri/sail_latex/sailzeightoperatorzzerozDznine.tex new file mode 100644 index 00000000..d671e6b0 --- /dev/null +++ b/cheri/sail_latex/sailzeightoperatorzzerozDznine.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_latex/sailzeightoperatorzzerozFznine.tex b/cheri/sail_latex/sailzeightoperatorzzerozFznine.tex new file mode 100644 index 00000000..3c2e441c --- /dev/null +++ b/cheri/sail_latex/sailzeightoperatorzzerozFznine.tex @@ -0,0 +1 @@ +overload (operator /) = {quotient_nat, quotient}
\ No newline at end of file diff --git a/cheri/sail_latex/sailzeightoperatorzzerozIsznine.tex b/cheri/sail_latex/sailzeightoperatorzzerozIsznine.tex new file mode 100644 index 00000000..9b4ebe19 --- /dev/null +++ b/cheri/sail_latex/sailzeightoperatorzzerozIsznine.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_latex/sailzeightoperatorzzerozIuznine.tex b/cheri/sail_latex/sailzeightoperatorzzerozIuznine.tex new file mode 100644 index 00000000..5b54235e --- /dev/null +++ b/cheri/sail_latex/sailzeightoperatorzzerozIuznine.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_latex/sailzeightoperatorzzerozIzIznine.tex b/cheri/sail_latex/sailzeightoperatorzzerozIzIznine.tex new file mode 100644 index 00000000..51ff2b6c --- /dev/null +++ b/cheri/sail_latex/sailzeightoperatorzzerozIzIznine.tex @@ -0,0 +1 @@ +overload (operator <<) = {shift_bits_left, shiftl}
\ No newline at end of file diff --git a/cheri/sail_latex/sailzeightoperatorzzerozIzJznine.tex b/cheri/sail_latex/sailzeightoperatorzzerozIzJznine.tex new file mode 100644 index 00000000..d23f28dd --- /dev/null +++ b/cheri/sail_latex/sailzeightoperatorzzerozIzJznine.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_latex/sailzeightoperatorzzerozIznine.tex b/cheri/sail_latex/sailzeightoperatorzzerozIznine.tex new file mode 100644 index 00000000..8e5e3fe9 --- /dev/null +++ b/cheri/sail_latex/sailzeightoperatorzzerozIznine.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_latex/sailzeightoperatorzzerozJzJznine.tex b/cheri/sail_latex/sailzeightoperatorzzerozJzJznine.tex new file mode 100644 index 00000000..57ea823c --- /dev/null +++ b/cheri/sail_latex/sailzeightoperatorzzerozJzJznine.tex @@ -0,0 +1 @@ +overload (operator ==) = {eq_anything}
\ No newline at end of file diff --git a/cheri/sail_latex/sailzeightoperatorzzerozKzJsznine.tex b/cheri/sail_latex/sailzeightoperatorzzerozKzJsznine.tex new file mode 100644 index 00000000..032e8600 --- /dev/null +++ b/cheri/sail_latex/sailzeightoperatorzzerozKzJsznine.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_latex/sailzeightoperatorzzerozKzJuznine.tex b/cheri/sail_latex/sailzeightoperatorzzerozKzJuznine.tex new file mode 100644 index 00000000..eaa72e60 --- /dev/null +++ b/cheri/sail_latex/sailzeightoperatorzzerozKzJuznine.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_latex/sailzeightoperatorzzerozKzJznine.tex b/cheri/sail_latex/sailzeightoperatorzzerozKzJznine.tex new file mode 100644 index 00000000..5733b740 --- /dev/null +++ b/cheri/sail_latex/sailzeightoperatorzzerozKzJznine.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_latex/sailzeightoperatorzzerozKzKsznine.tex b/cheri/sail_latex/sailzeightoperatorzzerozKzKsznine.tex new file mode 100644 index 00000000..0f0793a6 --- /dev/null +++ b/cheri/sail_latex/sailzeightoperatorzzerozKzKsznine.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_latex/sailzeightoperatorzzerozKzKznine.tex b/cheri/sail_latex/sailzeightoperatorzzerozKzKznine.tex new file mode 100644 index 00000000..b129e9d2 --- /dev/null +++ b/cheri/sail_latex/sailzeightoperatorzzerozKzKznine.tex @@ -0,0 +1 @@ +overload (operator >>) = {shift_bits_right, shiftr}
\ No newline at end of file diff --git a/cheri/sail_latex/sailzeightoperatorzzerozKznine.tex b/cheri/sail_latex/sailzeightoperatorzzerozKznine.tex new file mode 100644 index 00000000..a8da7e48 --- /dev/null +++ b/cheri/sail_latex/sailzeightoperatorzzerozKznine.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_latex/sailzeightoperatorzzerozQzQznine.tex b/cheri/sail_latex/sailzeightoperatorzzerozQzQznine.tex new file mode 100644 index 00000000..185f501e --- /dev/null +++ b/cheri/sail_latex/sailzeightoperatorzzerozQzQznine.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_latex/sailzeightoperatorzzerozQznine.tex b/cheri/sail_latex/sailzeightoperatorzzerozQznine.tex new file mode 100644 index 00000000..106b6064 --- /dev/null +++ b/cheri/sail_latex/sailzeightoperatorzzerozQznine.tex @@ -0,0 +1 @@ +overload (operator ^) = {xor_vec, int_power}
\ No newline at end of file diff --git a/cheri/sail_latex/sailzeightoperatorzzerozUznine.tex b/cheri/sail_latex/sailzeightoperatorzzerozUznine.tex new file mode 100644 index 00000000..4de737e0 --- /dev/null +++ b/cheri/sail_latex/sailzeightoperatorzzerozUznine.tex @@ -0,0 +1 @@ +overload (operator |) = {or_bool, or_bits}
\ No newline at end of file diff --git a/cheri/sail_latex/sailzeightoperatorzzerozfiveznine.tex b/cheri/sail_latex/sailzeightoperatorzzerozfiveznine.tex new file mode 100644 index 00000000..8d6b54c3 --- /dev/null +++ b/cheri/sail_latex/sailzeightoperatorzzerozfiveznine.tex @@ -0,0 +1 @@ +overload (operator %) = {modulus}
\ No newline at end of file diff --git a/cheri/sail_latex/sailzeightoperatorzzerozonezJznine.tex b/cheri/sail_latex/sailzeightoperatorzzerozonezJznine.tex new file mode 100644 index 00000000..22052668 --- /dev/null +++ b/cheri/sail_latex/sailzeightoperatorzzerozonezJznine.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_latex/sailzeightoperatorzzerozsixznine.tex b/cheri/sail_latex/sailzeightoperatorzzerozsixznine.tex new file mode 100644 index 00000000..248fb15e --- /dev/null +++ b/cheri/sail_latex/sailzeightoperatorzzerozsixznine.tex @@ -0,0 +1 @@ +overload (operator &) = {and_bool, and_bits}
\ No newline at end of file diff --git a/cheri/sail_latex/sailzzeroextend.tex b/cheri/sail_latex/sailzzeroextend.tex new file mode 100644 index 00000000..0f754d44 --- /dev/null +++ b/cheri/sail_latex/sailzzeroextend.tex @@ -0,0 +1 @@ +overload zero_extend = {mips_zero_extend}
\ No newline at end of file diff --git a/cheri/sail_latex/sailzzeros.tex b/cheri/sail_latex/sailzzeros.tex new file mode 100644 index 00000000..1c251eda --- /dev/null +++ b/cheri/sail_latex/sailzzeros.tex @@ -0,0 +1 @@ +val zeros : forall 'n, 'n >= 0 . unit -> #\hyperref[zbits]{bits}#('n) |
