summaryrefslogtreecommitdiff
path: root/runtime/ia32/i64_utod.S
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/ia32/i64_utod.S')
-rw-r--r--runtime/ia32/i64_utod.S6
1 files changed, 5 insertions, 1 deletions
diff --git a/runtime/ia32/i64_utod.S b/runtime/ia32/i64_utod.S
index 7754ef2..428a3b9 100644
--- a/runtime/ia32/i64_utod.S
+++ b/runtime/ia32/i64_utod.S
@@ -36,7 +36,7 @@
#include "sysdeps.h"
-// Conversion unsigned long -> float
+// Conversion unsigned long -> double-precision float
FUNCTION(__i64_utod)
fildll 4(%esp) // convert as if signed
@@ -44,6 +44,10 @@ FUNCTION(__i64_utod)
jns 1f
fadds LC1 // adjust by 2^64
1: ret
+ // The result is in extended precision (80 bits) and therefore
+ // exact (64 bits of mantissa). It will be rounded to double
+ // precision by the caller, when transferring the result
+ // to an XMM register or a 64-bit stack slot.
.p2align 2
LC1: .long 0x5f800000 // 2^64 in single precision