English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

Browse thread
more on nativeint interface
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2001-01-20 (15:33)
From: Norman Ramsey <nr@e...>
Subject: more on nativeint interface
It would be useful to have
  val width : int   (* number of bits in an integer of type nativeint *)
so that, for example, I could do sign extension by suitable shifting.

Meanwhile, I could play the following sorts of games:

  module N = Nativeint
  let width =
    if N.shift_right_logical N.minus_one 32 = N.zero then 32 else 64

  let sx k n = N.shift_right (N.shift_left n (width-k)) (width-k)
    (* sign-extend the least significant k bits of integer n *)

  let sx13 = sx 13

Unfortunately, the code that the ocamlopt produces for this function
(on x86) is pretty bad.

I can get significantly better code by using this source:

  let width=32
  let sx13b n = N.shift_right (N.shift_left n (width-13)) (width-13)

But of course this code isn't portable.

Is there anything I can do to get the compiler to do a better job with