From 6f53ca8cdae1736eb6ff7002d0e31d481de13999 Mon Sep 17 00:00:00 2001 From: Russel Arbore <russel.jma@gmail.com> Date: Thu, 13 Feb 2025 14:34:14 -0600 Subject: [PATCH 1/4] . --- hercules_cg/src/cpu.rs | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/hercules_cg/src/cpu.rs b/hercules_cg/src/cpu.rs index ba78e8e2..9f97a132 100644 --- a/hercules_cg/src/cpu.rs +++ b/hercules_cg/src/cpu.rs @@ -1,6 +1,7 @@ use std::collections::BTreeMap; use std::fmt::{Error, Write}; use std::iter::zip; +use std::mem::transmute; use std::sync::atomic::{AtomicUsize, Ordering}; use hercules_ir::*; @@ -264,18 +265,14 @@ impl<'a> CPUContext<'a> { Constant::UnsignedInteger32(val) => write!(body, "i32 {} to i32\n", val)?, Constant::UnsignedInteger64(val) => write!(body, "i64 {} to i64\n", val)?, Constant::Float32(val) => { - if val.fract() == 0.0 { - write!(body, "float {}.0 to float\n", val)? - } else { - write!(body, "float {} to float\n", val)? - } + write!(body, "float 0x{:08x} to float\n", unsafe { + transmute::<f32, u32>(*val) + })?; } Constant::Float64(val) => { - if val.fract() == 0.0 { - write!(body, "double {}.0 to double\n", val)? - } else { - write!(body, "double {} to double\n", val)? - } + write!(body, "float 0x{:016x} to float\n", unsafe { + transmute::<f64, u64>(*val) + })?; } _ => unreachable!(), } -- GitLab From efedd34a6a2c4c7929ffbe8a8884aa6b22583291 Mon Sep 17 00:00:00 2001 From: Russel Arbore <russel.jma@gmail.com> Date: Thu, 13 Feb 2025 14:43:39 -0600 Subject: [PATCH 2/4] why --- hercules_cg/src/cpu.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hercules_cg/src/cpu.rs b/hercules_cg/src/cpu.rs index 9f97a132..eda21f3f 100644 --- a/hercules_cg/src/cpu.rs +++ b/hercules_cg/src/cpu.rs @@ -265,7 +265,7 @@ impl<'a> CPUContext<'a> { Constant::UnsignedInteger32(val) => write!(body, "i32 {} to i32\n", val)?, Constant::UnsignedInteger64(val) => write!(body, "i64 {} to i64\n", val)?, Constant::Float32(val) => { - write!(body, "float 0x{:08x} to float\n", unsafe { + write!(body, "float 0x{:016x} to float\n", unsafe { transmute::<f32, u32>(*val) })?; } -- GitLab From 682cbcacd97ab7863a85d3136594024d74cb4626 Mon Sep 17 00:00:00 2001 From: Russel Arbore <russel.jma@gmail.com> Date: Thu, 13 Feb 2025 15:07:47 -0600 Subject: [PATCH 3/4] :( --- hercules_cg/src/cpu.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hercules_cg/src/cpu.rs b/hercules_cg/src/cpu.rs index eda21f3f..d5bc730e 100644 --- a/hercules_cg/src/cpu.rs +++ b/hercules_cg/src/cpu.rs @@ -265,7 +265,7 @@ impl<'a> CPUContext<'a> { Constant::UnsignedInteger32(val) => write!(body, "i32 {} to i32\n", val)?, Constant::UnsignedInteger64(val) => write!(body, "i64 {} to i64\n", val)?, Constant::Float32(val) => { - write!(body, "float 0x{:016x} to float\n", unsafe { + write!(body, "float 0x{:08x}00000000 to float\n", unsafe { transmute::<f32, u32>(*val) })?; } -- GitLab From 42b9f3a7d83f0bf273fab709bee0a64f18bcec1b Mon Sep 17 00:00:00 2001 From: Russel Arbore <russel.jma@gmail.com> Date: Thu, 13 Feb 2025 15:15:25 -0600 Subject: [PATCH 4/4] ;( --- hercules_cg/src/cpu.rs | 4 ++-- juno_samples/casts_and_intrinsics/src/casts_and_intrinsics.jn | 2 +- juno_samples/casts_and_intrinsics/src/main.rs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/hercules_cg/src/cpu.rs b/hercules_cg/src/cpu.rs index d5bc730e..7d87170b 100644 --- a/hercules_cg/src/cpu.rs +++ b/hercules_cg/src/cpu.rs @@ -265,8 +265,8 @@ impl<'a> CPUContext<'a> { Constant::UnsignedInteger32(val) => write!(body, "i32 {} to i32\n", val)?, Constant::UnsignedInteger64(val) => write!(body, "i64 {} to i64\n", val)?, Constant::Float32(val) => { - write!(body, "float 0x{:08x}00000000 to float\n", unsafe { - transmute::<f32, u32>(*val) + write!(body, "float 0x{:016x} to float\n", unsafe { + transmute::<f64, u64>(*val as f64) })?; } Constant::Float64(val) => { diff --git a/juno_samples/casts_and_intrinsics/src/casts_and_intrinsics.jn b/juno_samples/casts_and_intrinsics/src/casts_and_intrinsics.jn index 52610633..06798f43 100644 --- a/juno_samples/casts_and_intrinsics/src/casts_and_intrinsics.jn +++ b/juno_samples/casts_and_intrinsics/src/casts_and_intrinsics.jn @@ -1,5 +1,5 @@ #[entry] fn casts_and_intrinsics(input : f32) -> i32 { - let sqrt = sqrt!::<f32>(input); + let sqrt = sqrt!::<f32>(input + 0.3); return sqrt as i32; } diff --git a/juno_samples/casts_and_intrinsics/src/main.rs b/juno_samples/casts_and_intrinsics/src/main.rs index 6b27c60c..d0f7c872 100644 --- a/juno_samples/casts_and_intrinsics/src/main.rs +++ b/juno_samples/casts_and_intrinsics/src/main.rs @@ -7,7 +7,7 @@ juno_build::juno!("casts_and_intrinsics"); fn main() { async_std::task::block_on(async { let mut r = runner!(casts_and_intrinsics); - let output = r.run(16.0).await; + let output = r.run(15.7).await; println!("{}", output); assert_eq!(output, 4); }); -- GitLab