The Sail specification currently captures the following ISA features: - The RV32I and RV64I primary base ISAs. - The M (multiply/divide), A (atomic), and C (compressed) Standard Extensions. - The F (single-precision) and D (double-precision) Floating-Point Standard Extensions. This is only executable in the C emulator, which uses the SoftFloat C library. - The Zicsr Control and Status Register Standard Extension. - The N Standard Extension for User-Level Interrupts. - The Base Counters and Timers. - The Machine-Level and Supervisor-Level ISAs for RV32 and RV64. - Physical Memory Protection (PMP) For the RVWMO memory consistency model, this Sail ISA semantics is integrated with the RVWMO operational model in [the RMEM tool](https://github.com/rems-project/rmem). The Sail specification is parameterized over the following platform-specific options: - handling of misaligned data accesses with or without M-mode traps. - updating of the PTE dirty bit with or without architectural exceptions. - the contents of the `mtval` register on an illegal instruction exception. The following ISA features are specified in the prose RISC-V ISA specification but not currently in the Sail specification. - The RV32E and RV64E subsets of the primary base RV32I and RV64I integer ISAs. - The RV128 primary base ISA. - Specification and implementation of Endianness Control. - Support for changing XLEN or base ISA control using the {M,S,U}XL fields of `mstatus`. The model only supports `MXLEN`=`SXLEN`=`ULEN`. - A complete definition of all hardware performance counters. These are used to count platform-specific events, and hence platform-dependent. - A specification of the Physical Memory Attributes (PMAs) for the physical memory map. - The Hypervisor Extension.