From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail4-relais-sop.national.inria.fr (mail4-relais-sop.national.inria.fr [192.134.164.105]) by yquem.inria.fr (Postfix) with ESMTP id 8ABF8BC57 for ; Mon, 13 Dec 2010 13:33:44 +0100 (CET) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ah8CAIehBU1RZ90vkWdsb2JhbACVVo4nFQEBAQEJCwoHEQMmwTSFSgSODQ X-IronPort-AV: E=Sophos;i="4.59,335,1288566000"; d="scan'208";a="82515298" Received: from mtaout01-winn.ispmail.ntl.com ([81.103.221.47]) by mail4-smtp-sop.national.inria.fr with ESMTP; 13 Dec 2010 13:33:44 +0100 Received: from aamtaout03-winn.ispmail.ntl.com ([81.103.221.35]) by mtaout01-winn.ispmail.ntl.com (InterMail vM.7.08.04.00 201-2186-134-20080326) with ESMTP id <20101213123343.BLEJ26766.mtaout01-winn.ispmail.ntl.com@aamtaout03-winn.ispmail.ntl.com> for ; Mon, 13 Dec 2010 12:33:43 +0000 Received: from [192.168.2.6] (really [86.9.119.233]) by aamtaout03-winn.ispmail.ntl.com (InterMail vG.3.00.04.00 201-2196-133-20080908) with ESMTP id <20101213123343.MUMU28282.aamtaout03-winn.ispmail.ntl.com@[192.168.2.6]> for ; Mon, 13 Dec 2010 12:33:43 +0000 Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Apple Message framework v1082) Subject: Re: optimize div to right shift (NOT!) From: Jonathan Kimmitt In-Reply-To: <20101212172643.3EF80BC5D@yquem.inria.fr> Date: Mon, 13 Dec 2010 12:33:33 +0000 Content-Transfer-Encoding: quoted-printable Message-Id: References: <20101212172643.3EF80BC5D@yquem.inria.fr> To: caml-list@yquem.inria.fr X-Mailer: Apple Mail (2.1082) X-Cloudmark-Analysis: v=1.1 cv=X0sWjjQ37bMP4yB/pNNinY3VxVB2n/hmdAjhihaCFGs= c=1 sm=0 a=mgGxeNDR6nQA:10 a=kj9zAlcOel0A:10 a=ZfNO7S8q3y1l2MFc_64A:9 a=osQ5z7o3Z2B0YLJ22Q4lKF7rY7UA:4 a=CjuIK1q_8ugA:10 a=HpAAvcLHHh0Zw7uRqdWCyQ==:117 X-Spam: no; 0.00; compiler:01 'int:01 integers:01 ocaml:01 int:01 int:01 unsigned:02 div:97 div:97 arguments:07 correct:08 optimisation:10 optimize:12 optimize:12 think:13 > A C compiler would optimize this to a right shift. Changing that to = 'Int64.shift_right n 1' speeds > up the code. Sorry to be a pedant, but this is not correct. The optimisation is only = possible when the arguments are unsigned integers which I don't think is specifiable when working in = OCAML # Int64.shift_right (-2L) 1;; - : int64 =3D -1L (So far, so good) # Int64.div (-1L) 2L;; - : int64 =3D 0L (Good) # Int64.shift_right (-1L) 1;; - : int64 =3D -1L (Duh)