summaryrefslogtreecommitdiffhomepage
path: root/src/etc.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2021-08-26 12:36:10 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2021-08-26 16:06:02 +0900
commit4654de90741db13c2f2eb75afa45237ae4e0f072 (patch)
tree9251c2303d5f854956bf05a73d1395c5f8a5b51f /src/etc.c
parentba6e12153700f5fac1adccecbc8cc0cc852b47c5 (diff)
downloadmruby-4654de90741db13c2f2eb75afa45237ae4e0f072.tar.gz
mruby-4654de90741db13c2f2eb75afa45237ae4e0f072.zip
etc.c: keep full `float32` with `MRB_64BIT` and `MRB_USE_FLOAT32`.
Diffstat (limited to 'src/etc.c')
-rw-r--r--src/etc.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/etc.c b/src/etc.c
index 4e1e87836..d99a273ad 100644
--- a/src/etc.c
+++ b/src/etc.c
@@ -162,10 +162,11 @@ mrb_word_boxing_float_value(mrb_state *mrb, mrb_float f)
v.p = mrb_obj_alloc(mrb, MRB_TT_FLOAT, mrb->float_class);
v.fp->f = f;
MRB_SET_FROZEN_FLAG(v.bp);
-#else
-#if defined(MRB_64BIT) && defined(MRB_USE_FLOAT32)
+#elif defined(MRB_64BIT) && defined(MRB_USE_FLOAT32)
v.w = 0;
-#endif
+ v.f = f;
+ v.w = ((v.w<<2) & ~3) | 2;
+#else
v.f = f;
v.w = (v.w & ~3) | 2;
#endif
@@ -180,6 +181,9 @@ mrb_word_boxing_value_float(mrb_value v)
union mrb_value_ u;
u.value = v;
u.w = u.w & ~3;
+#if defined(MRB_64BIT) && defined(MRB_USE_FLOAT32)
+ u.w >>= 2;
+#endif
return u.f;
}
#endif