Skip to content

Better Floats and new Doubles

Compare
Choose a tag to compare
@TheThirdOne TheThirdOne released this 27 Nov 00:36
· 114 commits to master since this release

Major Improvements:

  • Complete bit accurate floating point support
    • Floating point operations are now performed with JSoftFloat rather than Java's native float. This allows setting the fflags CSR and obeying non-default rounding modes.
    • Some previously unknown bugs were also fixed
    • All floating point tests from riscv-tests now pass
  • Improved GCC and clang compatibility (#16)
    • Various directives for starting sections have been added (.sdata, .section, ...)
    • Undocumented psuedo-ops fgt.s, fge.s are now supported (66f1f42)
  • Support for double extension
    • With the two above changes, it made sense to also add the D extension as it helps with compatibility and is more relevant as detailed lessons about floating poitn can now be taught with RARS
    • This necessitated a change in UI for the floating point register window. With the hexadecimal setting, values last accessed as doubles will be 64 bit wide and values accessed as floats will be 32 bit wide.
  • CSRs are much better supported (#2, #49, #52, #61, #62)
    • time CSR has been added as a reference to system time
    • CSR instructions can now take the name of the register rather than number as an argument (c1cd1af)
    • Write protected read ignored bits (WPRI) in CSRs are actually write protected now. (12e0b96)
    • CSRs numbers larger than 0xFF can be assembled (c40643a)

Bugfixes:

  • Bitmap display tool now works with stores smaller than a word (#47). Credit to @PedroAugustoRamalhoDuarte for finding this
  • Settings properly persist over restarts again (#46). Credit to @ProfPierce for finding this
  • It is no longer possible to deadlock the UI by trying to connect a tool (#48). Credit to @PedroAugustoRamalhoDuarte for finding this
  • The instreth CSR now has the correct number (#49). Credit to @mvlamar for finding this
  • Any CSR number in range can be assembled (#52). Credit to @mvlamar for finding this
  • Fix bugs in the CLI, (0703e79)
  • Integer division operations no longer set divide by zero flag in fcsr (0ebea26).
  • Fix some floating pointer instruction bugs (dc83289).

Internal changes:

  • Code was refactored into a src directory
  • Tests that catch the some of the most common typos have been added.