1use crate::{CalyxResult, Error};
4
5pub fn parse(rep: u64, width: u64, fl: String) -> CalyxResult<u64> {
6 if rep != 0 {
7 return Err(Error::misc(format!(
8 "Unknown representation: {rep}. Support representations: 0 (IEEE754)"
9 )));
10 }
11
12 let bits: u64 = match width {
13 32 => {
14 let fl = fl.parse::<f32>().map_err(|e| {
15 Error::misc(format!(
16 "Expected valid floating point number: {e}"
17 ))
18 })?;
19 fl.to_bits() as u64
20 }
21 64 => {
22 let fl = fl.parse::<f64>().map_err(|e| {
23 Error::misc(format!(
24 "Expected valid floating point number: {e}"
25 ))
26 })?;
27 fl.to_bits()
28 }
29 r => {
30 return Err(Error::misc(format!(
31 "Unsupported floating point width: {r}. Supported values: 32, 64"
32 )));
33 }
34 };
35
36 Ok(bits)
37}
38
39pub fn emit(bits: u64, width: u64) -> CalyxResult<String> {
40 match width {
41 32 => {
42 let fl = f32::from_bits(bits as u32);
43 Ok(format!("{fl}"))
44 }
45 64 => {
46 let fl = f64::from_bits(bits);
47 Ok(format!("{fl}"))
48 }
49 r => Err(Error::misc(format!(
50 "Unsupported floating point width: {r}. Supported values: 32, 64"
51 ))),
52 }
53}