From: Jacob Lifshay Date: Fri, 27 Mar 2020 05:45:33 +0000 (-0700) Subject: wrap simple-soft-float section X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c1fd7660cdab05a1ca8302289b20ffdbf1a1ced2;p=crowdsupply.git wrap simple-soft-float section --- diff --git a/updates/023_2020mar26_decoder_emulator_started.mdwn b/updates/023_2020mar26_decoder_emulator_started.mdwn index 82f8257..e6aa032 100644 --- a/updates/023_2020mar26_decoder_emulator_started.mdwn +++ b/updates/023_2020mar26_decoder_emulator_started.mdwn @@ -76,23 +76,46 @@ TODO # simple-soft-float Library and POWER FP emulation -The [simple-soft-float](https://salsa.debian.org/Kazan-team/simple-soft-float) library is a floating-point library Jacob wrote with the intention of being a reference implementation of IEEE 754 for hardware testing purposes. It's specifically designed to be written to be easier to understand instead of having the code obscured in pursuit of speed: - - * Being easier to understand helps prevent bugs where the code does not match the IEEE spec. - * It uses the [algebraics](https://salsa.debian.org/Kazan-team/algebraics) library that Jacob wrote since that allows using numbers that behave like exact real numbers, making reasoning about the code simpler. - * It is written in Rust rather than highly-macro-ified C, since that helps with readability since operations aren't obscured, as well as safety, since Rust proves at compile time that the code won't seg-fault unless you specifically opt-out of those guarantees by using `unsafe`. - -It currently supports 16, 32, 64, 128-bit FP for RISC-V, along with having a `DynamicFloat` type which allows dynamically specifying all aspects of how a particular floating-point type behaves -- if one wanted, they could configure it as a 2048-bit floating-point type. - -It also has Python bindings, thanks to the awesome [PyO3](https://pyo3.rs/) library for writing Python bindings in Rust. - -We decided to write simple-soft-float instead of extending the industry-standard [Berkeley softfloat](http://www.jhauser.us/arithmetic/SoftFloat.html) library because of a range of issues, including not supporting Power FP, requiring recompilation to switch which ISA is being emulated, not supporting all the required operations, architectural issues such as depending on global variables, etc. We are still testing simple-soft-float against Berkeley softfloat where we can, however, since Berkeley softfloat is widely used and highly likely to be correct. - -simple-soft-float is [gaining support for Power FP](http://bugs.libre-riscv.org/show_bug.cgi?id=258), which requires rewriting a lot of the status-flag handling code since Power supports a much larger set of floating-point status flags and exceptions than most other ISAs. - -Thanks to RaptorCS for giving us remote access to a Power9 system, since that makes it much easier verifying that the test cases are correct. - -API Docs for stable releases of both [simple-soft-float](https://docs.rs/simple-soft-float) and [algebraics](https://docs.rs/algebraics) are available on docs.rs. +The [simple-soft-float](https://salsa.debian.org/Kazan-team/simple-soft-float) library is a floating-point library Jacob wrote with the intention +of being a reference implementation of IEEE 754 for hardware testing purposes. It's +specifically designed to be written to be easier to understand instead of having the +code obscured in pursuit of speed: + +* Being easier to understand helps prevent bugs where the code does not + match the IEEE spec. +* It uses the [algebraics](https://salsa.debian.org/Kazan-team/algebraics) library that Jacob wrote since that allows using numbers + that behave like exact real numbers, making reasoning about the code + simpler. +* It is written in Rust rather than highly-macro-ified C, since that helps with + readability since operations aren't obscured, as well as safety, since Rust + proves at compile time that the code won't seg-fault unless you specifically + opt-out of those guarantees by using `unsafe`. + +It currently supports 16, 32, 64, 128-bit FP for RISC-V, along with having a +`DynamicFloat` type which allows dynamically specifying all aspects of how a +particular floating-point type behaves -- if one wanted, they could configure it as a +2048-bit floating-point type. + +It also has Python bindings, thanks to the awesome [PyO3](https://pyo3.rs/) library for writing Python +bindings in Rust. + +We decided to write simple-soft-float instead of extending the industry-standard +[Berkeley softfloat](http://www.jhauser.us/arithmetic/SoftFloat.html) library because of a range of issues, including not supporting +Power FP, requiring recompilation to switch which ISA is being emulated, not +supporting all the required operations, architectural issues such as depending on +global variables, etc. We are still testing simple-soft-float against Berkeley softfloat +where we can, however, since Berkeley softfloat is widely used and highly likely to +be correct. + +simple-soft-float is [gaining support for Power FP](http://bugs.libre-riscv.org/show_bug.cgi?id=258), which requires rewriting a lot of +the status-flag handling code since Power supports a much larger set of +floating-point status flags and exceptions than most other ISAs. + +Thanks to RaptorCS for giving us remote access to a Power9 system, since that +makes it much easier verifying that the test cases are correct. + +API Docs for stable releases of both [simple-soft-float](https://docs.rs/simple-soft-float) and [algebraics](https://docs.rs/algebraics) are available +on docs.rs. # OpenPOWER Conference calls