copyright (c) Ben Selfridge, Galois Inc. 2018
This library consists primarily of a Haskell interface to John Hauser's SoftFloat library (http://www.jhauser.us/arithmetic/SoftFloat.html). It provides a pure interface to the functions in that library; while the C library is actually impure, reading and writing to global variables (rounding mode, exceptions), the Haskell functions have a pure interface, and those variables that were global in the original library are captured as input arguments and additional outputs of each function.
SoftFloat is not too complicated to install, but it is best to build a dynamic
library so that softfloat-hs
can be loaded into ghci (which does not support
statically linked C libraries). For convenience, we provide SoftFloat itself as a
submodule, as well as a Makefile to install it on Linux/OSX:
$ git submodule update --init --recursive
$ make
$ sudo make install
With stack:
stack build
With cabal new-build:
cabal new-build softfloat-hs
stack ghci
> let Result x flags = ui32ToF32 RoundNearEven 23
> :m +Numeric
> showHex x ""
"41b80000"
> flags
ExceptionFlags {inexact = False, underflow = False, overflow = False, infinite = False, invalid = False}
> let Result y flags = ui32ToF32 RoundNearEven 3
> showHex y ""
"40400000"
> let Result z flags = f32Div RoundNearEven x y
> showHex z ""
"40f55555"
> flags
ExceptionFlags {inexact = True, underflow = False, overflow = False, infinite = False, invalid = False}
The following are a list of mandatory and secondary requirements for softfloat-hs.
- Must provide a "pure" Haskell interface to all of the SoftFloat functions.
- Must make explicit ALL global variables involved.
- Support 80-bit and 128-bit operations.
The library is functional, although a few global variables are not yet captured (whether underflow is detected before or after rounding, for example).
Building softfloat on Darwin currently has some issues -- for whatever reason, some of the conversion functions to not work correctly in some of the corner cases (f32ToI32 in particular). We are investigating this currently.
- contact: [email protected]