To avoid conflicting stack.yaml files when crucible is used a
submodule in another repo with a top level stack.yaml.
Also, update the README to include creating a stack.yaml symlink
before building with stack the first time.
The code was updated to deal with the latest changes to crucible (the addition
of the floating point unit type parameter), but the submodules for this repo
were not.
In macaw core, the type of the arch-specific 'disassemble' function changed to
no longer take a Memory, and to pass the maximum offset as an Int instead of a
MemWord. It also removed the jump table entry size (which is no longer
required).
The removal of the Memory parameter required a bit of a change in how the
instruction parsers are structured, but it isn't a huge change (the "memory
contents after an address" can be computed from a MemSegmentOff, too).
The goal with these flags was to improve compile times by reducing the number of
times that the simplifier runs. It seems like that sometimes causes compiler
errors (e.g., the register allocator crash we hit sometimes) - presumably the
register allocator makes some assumptions about how much the simplifier is run.
Most instructions don't reference this variable, but it is in the signature of
every semantics function, leading to many unused variable warnings. This commit
adds an underscore prefix to the variable name to silence the warning.
The previous generator put all of the code for each matcher in a single large
case expression. While there were individual functions broken out for each case
body, they were all still in the same let expression, which created a huge term.
This refactoring lifts all of the semantics definition bodies to the top
level (with NOINLINE pragmas) to give the code generator less to chew on at a
time.
This improves compile times a little, but, more importantly, works around a bug
in the register allocator in GHC 8.4 that caused a crash in the PowerPC
semantics functions.