summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2018-06-04Fix an issue with riscv_platform involving flow typingAlasdair Armstrong
- Refactor the flow typing implementation in the type-checker. This should fix an issue involving riscv_platform. Specifically it should now work better when an if statement contains multiple conditions combined with and/or, only some of which imply constraints at the type level. This change also simplifies the implementation of flow typing, and removes some obscure features that were hardly used - specifically, flow typing could modify types, but this was fairly obscure and doesn't seem to affect any of our specifications. More testing is needed to ensure that this change hasn't inadvertantly broken anything, but it does pass all our tests and continue to typecheck arm, riscv and cheri. - Also adds a option for generating faster undefined functions for enum and variant types. Previously I tried to optimise away such functions in the C backend, because they could be slow and cause considerable uneccessary allocation, however this was error prone and it turns out a much simpler solution is to simply make the functions themselves much faster, at the cost of hard-coding certain decisions about what undefined means for these types at compile tile (which is fine for fast emulation). This almost doubles the performance of the generated C code. - Add a wrapper for right shift to avoid UB when shifting by 64 or more places.
2018-06-04Fix bug with function return types in C backendAlasdair Armstrong
2018-06-04Add mips.c target in Makefile. Currently triggers assertion failure in ↵Robert Norton
c_backend. still need to merge changes to prelude.sail.
2018-06-04switch to using a Map data structure for cheri tags in ocaml backend. This ↵Robert Norton
solves a problem where the Hashtbl module was encountering a stack overflow booting CheriBSD. There seems to be little or no performance impact.
2018-06-04cheri: print debug trace info to stderr to keep it separate from uart output.Robert Norton
2018-06-04Re-generate aarch64 spec, fixing an issue with ReplicateAlasdair Armstrong
2018-06-04Use Util.split_on_char in sail_lib.mlAlasdair Armstrong
2018-06-04Merge branch 'arichardson-patch-1' into sail2Robert Norton
2018-06-04add missing semi colon in arichardsons patch.Robert Norton
2018-06-04Merge branch 'patch-1' of https://github.com/arichardson/sail into ↵Robert Norton
arichardson-patch-1
2018-05-31Fix for Jenkins buildAlasdair Armstrong
Looks like Jenkins is still on OCaml 4.02.3. We should probably upgrade to 4.05 at some point.
2018-05-31Fixes to get ARM u-boot working in Sail.Alasdair Armstrong
Also fixes to C backend for compiling MIPS spec to C - Fix an issue with const correctness in internal_vector_update functions generated by C backend - Add builtins for MIPS to sail.h - Fix an issue where reg_deref didn't work when called on pointers to large bitvectors, i.e. vectors containing references to large bitfields as in the MIPS TLB code - Various bug fixes and changes for running U-boot on ARM model, including for interpreter and OCaml compilation. - Fix memory leak issues and incorrect shadowing for foreach loops - Update C header file. Fixes memory leak in memory read/write builtins. - Add aux constructor to ANF representation to hold environment information. - Fix undefined behavior caused by optimisation left shifting uint64_t vectors 64 or more times. Unfortunately there's more issues because the same happens for X >> 64 right shifts. It would make sense for this to be zero, because that would guarantee the property that ((X >> n) >> m) == (X >> (n + m)) but we probably need to do (X >> (n - 1) >> 1) in the optimisation to ensure that we don't cause UB. Shifting by 63 and then by 1 is well-defined, but shifting by 64 in one go isn't according to the C standard. This issue with right-shifts only occurs for zero-length vectors, so it's not a huge deal, but it's still annoying. - Add versions of print_bits and print_int that print to stderr. Follows OCaml convention of print/prerr. Should make things more explicit. Different backends had different ideas about where print should output to, not every backend needs to have this (e.g. theorem prover backends don't need to print) but having both stderr and stdout seperate and clear is useful for executable models (UART needs to be stdout, debug messages should be stderr).
2018-05-31Some tweaks to ocaml compilation and sail_lib for ARM with system registersAlasdair Armstrong
2018-05-31Add auxiliary script to HolmakefileRamana Kumar
2018-05-31Add some HOL4 termination proofs for state.lemRamana Kumar
2018-05-31Also dump the cap hwregs in dump_cp2_stateAlexander Richardson
Dump format is the same as for the cap GPRs with DEBUG CAP HWREG as the prefix
2018-05-30Fix typo in install instructionsAlasdair Armstrong
2018-05-30Update INSTALL.mdAlasdair Armstrong
Some tweaks to installation instructions for latest OCaml versions (4.05 and 4.06)
2018-05-28Coq: merge some implicit variables from axioms with argumentsBrian Campbell
(Similar to the proper translation for function definitions)
2018-05-28Coq: add back tests with undefined functionsBrian Campbell
2018-05-28Coq: prefer simple binders over patternsBrian Campbell
Otherwise it has occasional problems working out the return type
2018-05-28Coq: add option to produce axioms for unimplemented functionsBrian Campbell
Useful for partial test cases (e.g., some of the typechecking tests) Also a bonus warning for such functions in normal use
2018-05-28Coq: proper printing of nexpsBrian Campbell
2018-05-25Coq: fill in some built-insBrian Campbell
vector_access is a bit hacky at the moment - it expects a constraint to be shown between the index and the list size, but we don't track list sizes in general
2018-05-25Use paged memory storage for ocaml backend memory. This is slightly slower ↵Robert Norton
(<5% on a simple test) but dramatically reduces memory usage compared to having a hash table entry per byte!
2018-05-25allow loading multiple raw files in ocaml main backend to allow kernel and ↵Robert Norton
dtb to be mapped.
2018-05-24Revert "Allow instantiation of type or order type variables without kind ↵Brian Campbell
declaration" This reverts commit 895f868cd537277ba61dfc427fee0e288af7e226. These are actually treated as Ints (although you could pretend they weren't and it mostly worked).
2018-05-24Check kinds of type variables while checking well-formedness of typesBrian Campbell
Stops (e.g.) an Int being used as a Type, including when no kind was declared. The following commit will remove the test for the latter case.
2018-05-24Coq: need None special case here, tooBrian Campbell
2018-05-24Coq: solve more constraintsBrian Campbell
2018-05-24Help launch coqideBrian Campbell
2018-05-24Import (rather hacky) Coq Sail librariesBrian Campbell
2018-05-24Coq: record conditionals in the context for constraint solvingBrian Campbell
2018-05-23Fix incorrect channel in dtc i/o.Prashanth Mundkur
2018-05-23A couple of missing >= 0 constraints on vector handling functionsBrian Campbell
2018-05-23Coq: Implement the most basic merging of type- and term-level parametersBrian Campbell
2018-05-23Fix riscv build for older versions of ocamlbuild (e.g. 4.02.3) by copying ↵Robert Norton
platform ocaml files into _sbuild directory generated by sail and then running ocamlbuild there.
2018-05-22Fix one part of cast introduction, leave another for laterBrian Campbell
2018-05-22Re-enable the RISC-V lem build, and switch the test-suite to use the ↵Prashanth Mundkur
platform build.
2018-05-22Fix for E_cons not being compiled correctly into OCamlAlasdair Armstrong
2018-05-22Fix Lem build for RISC-VThomas Bauereiss
2018-05-21Fix a doc typo.Prashanth Mundkur
2018-05-21Add the missed _tags file, and fix a typo.Prashanth Mundkur
2018-05-21Start platform execution at the reset-vector in the rom.Prashanth Mundkur
2018-05-21Add in the platform files and update the ocaml build. Disable the isabelle ↵Prashanth Mundkur
build until we add suitable platform definitions/stubs. The platform bits are not yet hooked into the model, but only into the build, so are untested.
2018-05-21Add an -ocaml-nobuild option to avoid building the generated ocaml by ↵Prashanth Mundkur
default (off by default).
2018-05-21Move the top-level loop from main to riscv_step, but remove elf bits.Prashanth Mundkur
2018-05-21Move mem-op-result to _sys to be usable from _platform.Prashanth Mundkur
2018-05-21Get Aarch64 exported to HOL4Brian Campbell
Worked around problem with the model where it tries to use bound variables in patterns
2018-05-21cheri: fix a bug in cfromptr: should give null result when value of rt is ↵Robert Norton
zero not only when rt is the zero register (zr).