Rewrite interpreter generically (#2323)

* Rewrite interpreter generically

This change re-implements the Cranelift interpreter to use generic values; this makes it possible to do abstract interpretation of Cranelift instructions. In doing so, the interpretation state is extracted from the `Interpreter` structure and is accessed via a `State` trait; this makes it possible to not only more clearly observe the interpreter's state but also to interpret using a dummy state (e.g. `ImmutableRegisterState`). This addition made it possible to implement more of the Cranelift instructions (~70%, ignoring the x86-specific instructions).

* Replace macros with closures
This commit is contained in:
Andrew Brown
2020-11-02 12:28:07 -08:00
committed by GitHub
parent 59a2ce4d34
commit 6d50099816
16 changed files with 1590 additions and 342 deletions

View File

@@ -11,10 +11,11 @@ readme = "README.md"
edition = "2018"
[dependencies]
cranelift-codegen = { path = "../codegen", version = "0.67.0", default-features = false }
cranelift-codegen = { path = "../codegen", version = "0.67.0", features = ["all-arch"] }
cranelift-entity = { path = "../entity", version = "0.67.0" }
cranelift-reader = { path = "../reader", version = "0.67.0" }
log = { version = "0.4.8", default-features = false }
smallvec = "1.4.2"
thiserror = "1.0.15"
[dev-dependencies]