Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

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: -- (:)
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 = 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