summaryrefslogtreecommitdiffstats
path: root/byterun/ints.c
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>2000-03-10 17:36:31 +0000
committerXavier Leroy <xavier.leroy@inria.fr>2000-03-10 17:36:31 +0000
commit484e2ce7784ec03eff8dd163b139f77993daefd0 (patch)
tree89bb4720353572fcdd73cdf23b12d366247f8c00 /byterun/ints.c
parent3410c072717be2fbc34c7e664b08bac3fa4d0783 (diff)
Probleme d'alignement des entiers 64 bits sur certaines architectures (MIPS/Irix en particulier)
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@2941 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'byterun/ints.c')
-rw-r--r--byterun/ints.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/byterun/ints.c b/byterun/ints.c
index cc06ca157..45cbfdc25 100644
--- a/byterun/ints.c
+++ b/byterun/ints.c
@@ -245,6 +245,28 @@ value int32_of_string(value s) /* ML */
#ifdef ARCH_INT64_TYPE
+#ifdef ARCH_ALIGN_INT64
+
+int64 Int64_val(value v)
+{
+ union { int32 i[2]; int64 j; } buffer;
+ buffer.i[0] = ((int32 *) Data_custom_val(v))[0];
+ buffer.i[1] = ((int32 *) Data_custom_val(v))[1];
+ return buffer.j;
+}
+
+void Store_int64_val(value v, int64 n)
+{
+ union { int32 i[2]; int64 j; } buffer;
+ buffer.j = n;
+ ((int32 *) Data_custom_val(v))[0] = buffer.i[0];
+ ((int32 *) Data_custom_val(v))[1] = buffer.i[1];
+}
+
+#endif
+
+#endif
+
static int int64_compare(value v1, value v2)
{
int64 i1 = Int64_val(v1);