summaryrefslogtreecommitdiff
path: root/aarch64
AgeCommit message (Collapse)Author
2018-09-24Coq: more constraint solutions for aarch64Brian Campbell
2018-09-19Coq: more fixes for AArch64Brian Campbell
- implement set_slice and set_slice_int - lemmas for more constraints - make real sqrt visible - unfolding list membership needs andb and orb to be handled first
2018-09-17Add diffs to sail files for Aarch64 Coq generationBrian Campbell
2018-09-17Coq: fix types in aarch64_extras undefined_vector and casts for argumentsBrian Campbell
2018-09-17Coq: solve some constraint/type errors with AArch64Brian Campbell
- hints for dotp - handle exists separately when trying eauto to keep search depth low - more uniform existential handling (i.e., we now handle all existentials in the way we used to only handle existentials around atoms)
2018-09-13Coq: real built-ins for AArch64Brian Campbell
2018-09-03Coq: rework generation of dependent pairs so that they are onlyBrian Campbell
constructed when a function call, cast, or binder demands them, removing some ambiguous corner cases. Also - Don't simplify nexps before printing (note that we usually end up needing a (8 * x) / 8 lemma as a result) - More extraction of properties in the goal - Splitting of conditionals/matches in goals (which can occur more often because of the new positions of build_ex in definitions) - Try simple solving first to improve speed / reduce proof sizes / help fill in metavariables (because manipulating the goal can interfere with instantiating them) - Update RISC-V patch
2018-08-28Adapt theory imports for Isabelle 2018Thomas Bauereiss
Requires a recent Lem version that supports generating session-qualified imports, e.g. revision rems-project/lem@d92b077f1781765a65082c815ff363ef79499860
2018-08-16Use Set rather than Hashtbl in graph.mlAlasdair Armstrong
Removes the need for the node type to have a valid Hash function
2018-08-02Fill in more Coq builtins for aarch64Brian Campbell
2018-07-31Add Coq names for more Aarch64 builtinsBrian Campbell
2018-07-23AArch64 patches: EL2 secure not implementedAlastair Reid
Several v8.4 tests were failing because they attempted to enter EL2 secure mode (which is supported on v8.4 but not on v8.3). This test detects an attempt to enter EL2 secure and reports an easily diagnosed error message.
2018-07-23Coq: make all pattern matches in the output exhaustiveBrian Campbell
Uses previous stage to deal with (e.g.) guards. New option -dcoq_warn_nonex tells you where all of the extra default cases were added.
2018-07-18Coq: constraint solving improvementsBrian Campbell
Use eauto so that user-added hints are more flexible, example with Replicate in aarch64, dropped zbool to prevent slow proof searches (and preprocessing deals with boolean comparisons now). Report failed constraints after preprocessing; Separate preprocessing tactic out.
2018-07-12update arm and mips models for new type of write_ram builtin. Also fix c and ↵Robert Norton
interpreter implementations of same.
2018-07-10Make HOL build properly again for all of the modelsBrian Campbell
2018-07-10Update HOL setupBrian Campbell
2018-07-10Another AArch64 patchThomas Bauereiss
Makes CheckAndUpdateDescriptor respect endianness
2018-07-10Aarch64 mono script updateBrian Campbell
2018-07-09Add no_devices.sail to be compatible with latest AArch64 prelude andAlasdair Armstrong
update aarch64 model
2018-07-09Remove awkward constraints on GetSlice_int for nowBrian Campbell
2018-07-09Patch some potential uses of uninitialised variables in AArch64Thomas Bauereiss
2018-07-09Simplify treating of undefined_bool in Lem libraryThomas Bauereiss
Use nondeterministic choice by default instead of a deterministic bitstream generator in the state, which is slightly awkward to reason about, because every use of undefined_boolS changes the state. The previous behaviour can be implemented as Sail code, if desired. Also add a default implementation of internal_pick that nondeterministically chooses an element from a list.
2018-07-09Bits for bits of aarch64 in coqBrian Campbell
2018-07-04AArch64 Prelude: Move cycle count primop to preludeAlastair Reid
2018-07-03Main: fix SEE handlingAlastair Reid
If a SEE exception is not caught within the decoder, it is an error in the Sail implementation or in the instruction set spec. This change ensures that we promptly detect and unambiguously report such errors.
2018-07-01RTS: Fail on AArch32 and ASIMDAlastair Reid
This change causes execution of AArch32 code or ASIMD code to fail with an easily diagnosed error message of the form UNIMPLEMENTED: xxx support where xxx is either AArch32 or ASIMD. Having a clear error message allows these to be detected by triaging scripts. To make the AArch32 detection part work, you also need to change HaveAnyAArch32 to read like this instead of just returning false. function HaveAnyAArch32 () = return ((CFG_ID_AA64PFR0_EL1_EL0 == 0x2) || (CFG_ID_AA64PFR0_EL1_EL1 == 0x2) || (CFG_ID_AA64PFR0_EL1_EL2 == 0x2) || (CFG_ID_AA64PFR0_EL1_EL3 == 0x2))
2018-06-30Main: trivial restructuring of print commands to make them easier to ↵Alastair Reid
read/maintain
2018-06-29Main: many small tweaks.Alastair Reid
While trying to track down some strange behaviour, I added a lot more try-catch blocks that I think will be useful in the future. Also dropped spurious escape effects on primops. Also, only advance PC if we executed an instruction.
2018-06-29Prelude: drop escape effect from sleep/verbosity primopsAlastair Reid
It appears that primops that have the escape effect are required to write to the have_exception flag so I am dropping the effect from primops that don't actually escape.
2018-06-28RTS: Add --verbosity flag to C modelAlastair Reid
This is interpreted as a set of bits that control various bits of output. Bit 0 is print the PC on every cycle. (It would probably be useful to standardise a few of these flags across all models. Other candidates are accesses to physical memory, throwing SAIL exceptions, current privilege level, ...)
2018-06-28Fix build of Aarch64_mono.thyThomas Bauereiss
2018-06-28Add patches to (monomorphised) AArch64Thomas Bauereiss
- Initialise fault typ field of result record to avoid an unitialised read that can lead to an early return with a fault. This looks like a bug in the ASL specification (the ASL tests probably assume that this field is initialised with Fault_None). - In ZeroExtend_slice_append (one of the helper functions for monomorphisation rewrites), use extzv instead of ZeroExtend. It allows not only extension, but also truncation, and in AArch64_TranslationTableWalk the ZeroExtend_slice_append function is used to construct a 52 bit physical address using parts of the 64 bit input address. - Use the Lem library function for reversing endianness
2018-06-28Main: exit if you hit IMPDEF behaviourAlastair Reid
If you don't exit immediately, the test will probably just jump off into the weeds and stay there until it times out. So better to exit early. But note that this is not all IMPDEF behaviour. Most IMPDEF such as 'Are SHA3 crypto instructions available?' are already being handled and either TRUE or FALSE is being returned. So this is just for the stuff where we don't have a good answer at all.
2018-06-27RTS/Main: tweaking cycle counter handlingAlastair Reid
2018-06-27Main: refactor fetch_and_executeAlastair Reid
No functional change
2018-06-27Main: fix PC advance after HINT and other EndOfInstructionAlastair Reid
2018-06-26Main: further refinement of execution cycleAlastair Reid
Mostly improving error messages
2018-06-26Prelude: as received from AlasdairAlastair Reid
2018-06-26Main: attempt to capture AArch64 execution cycleAlastair Reid
2018-06-26RTS: implement sleep primitivesAlastair Reid
Note that an alternative implementation choice is just to implement them as SAIL functions manipulating a global variable. Not sure which is better.
2018-06-25Support bitlist representation in Sail2_stringThomas Bauereiss
2018-06-11More efficient bitfield implementationAlasdair Armstrong
2018-06-07Add a constant folding optimization passAlasdair
2018-06-06Factor utility functions for IR into separate file and struct update ↵Alasdair Armstrong
optimizations. Move the utility functions for graph generation and pretty printing of intermediate representation instructions into a separate file, bytecode_util.ml, by analogy with ast_util.ml. Add an optimization pass that searches for specific patterns of struct updates and removes uncessary copying of the structs involved. With this optimisation pass the time taken for u-boot to run approx 57,000,000 instructions goes down from about 11-12 minutes to 8 minutes (about 120,000 IPS).
2018-06-06Some additional fixes to C backend. Re-enable primitive optimizations.Alasdair Armstrong
Also add an additional -Oz3 flag that uses z3 to optimize some additional types. This is currently very experimental and doesn't fully work yet.
2018-06-04Fix bug with function return types in C backendAlasdair Armstrong
2018-06-04Re-generate aarch64 spec, fixing an issue with ReplicateAlasdair Armstrong
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-18Clean up aarch64_extras.lemThomas Bauereiss