- 07 Mar, 2017 1 commit
-
-
Adam Nelson authored
Removed a special case in the parser for FuncRefV constants, which required every SSA variable to have a known type. This required BundleParser to be rearranged to parse everything else before function bodies, making functions available to functions defined above them (something the spec requires, so that's progress!) Also added support for COMMINST in the parser.
-
- 24 Feb, 2017 1 commit
-
-
Adam Nelson authored
The current version of the Mu specification does not use $-variables to pass return values from terminsts to the normal destination of an EXC clause, instead allowing terminsts to have normal SSA return values that may be referenced in the EXC clause. This commit updates the formalism to match. Several other refactorings are included, such as making exec_terminst only return modified stacks, using a simpler representation of common instructions, and defining prefix/infix operators for SSA variables and registers in HOL.
-
- 16 Feb, 2017 1 commit
-
-
Adam Nelson authored
-
- 07 Feb, 2017 1 commit
-
-
Adam Nelson authored
The NEWTHREAD instruction isn't parsed yet, but its associated memory message is now supported, and the scheduler has been modified to support multiple threads. thread_states are now generated on-demand when they are first executed, provided there is an associated DoNewThread memory action and its stack ID can be resolved. This required the 'tid' field of 'Message' to be changed to a 'thread_id option', as there must be an initial DoNewThread action that is not generated by any thread ID. The THROW instruction and EXC resume_values have also been updated to have only one argument, to match the spec.
-
- 19 Jan, 2017 1 commit
-
-
Adam Nelson authored
-
- 24 Nov, 2016 1 commit
-
-
Adam Nelson authored
Thread and memory semantics are being overhauled to use lazy symbolic values, making the system similar to the one described in the Nienhuis paper. Everything up to uvmThreadSemantics compiles; uvmScheduler is still incomplete. Tests currently don't work. Changes include: - The "symbolic" monad defines lazy computations. - Thread semantics execute an entire block at a time. - Thread semantics is greatly simplified, with fewer record types, queues, and edge cases. - Thread semantics does not know anything about the actual values of its registers. Branching instructions must receive a "guess" value from the scheduler; this value may be a real register value or a branch prediction. - There are now only two scheduler step types: Commit (commits a memory message) and Proceed (moves a thread to the next block, optionally with a branch prediction). - Pluggable memory models are gone; concurrency semantics will be handled by an extra layer on top of the scheduler. - DefineUtils has some shortcuts for defining monads and num wrapper types.
-
- 29 Sep, 2016 1 commit
-
-
Adam Nelson authored
-
- 21 Sep, 2016 2 commits
-
-
Adam R. Nelson authored
-
Adam R. Nelson authored
-