[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ 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 = 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
nativeint?
Norman