diff options
author | Xavier Leroy <xavier.leroy@inria.fr> | 2000-03-10 17:36:31 +0000 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@inria.fr> | 2000-03-10 17:36:31 +0000 |
commit | 484e2ce7784ec03eff8dd163b139f77993daefd0 (patch) | |
tree | 89bb4720353572fcdd73cdf23b12d366247f8c00 /byterun/ints.c | |
parent | 3410c072717be2fbc34c7e664b08bac3fa4d0783 (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.c | 22 |
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); |