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 mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by yquem.inria.fr (Postfix) with ESMTP id 3F937BC57 for ; Mon, 13 Dec 2010 14:03:29 +0100 (CET) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvUAABeoBU3RVdYtk2dsb2JhbACVV44fCBUBAQEBCQkTEQQlqAeMCAEFjUIBBIVK X-IronPort-AV: E=Sophos;i="4.59,335,1288566000"; d="scan'208";a="83673646" Received: from mail-bw0-f45.google.com ([209.85.214.45]) by mail2-smtp-roc.national.inria.fr with ESMTP; 13 Dec 2010 14:03:28 +0100 Received: by bwz16 with SMTP id 16so6735900bwz.18 for ; Mon, 13 Dec 2010 05:03:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=gamma; h=domainkey-signature:received:received:content-type:mime-version :subject:from:in-reply-to:date:content-transfer-encoding:message-id :references:to:x-mailer; bh=4gmwnEYs0Yh2qKJxuoALqtA3iKnsiXrbC3QtfyiwFRA=; b=mXWvJecIX42RuKJ7HO4aKIPklDqHBbmLnjtYpFiZEVy6Gs3S/7UVqNm2uQHU+edWfF ly8MWy+xX7auM22iLKn94o5u2v9+X3N0LBlASch6qy1iu3Pv7LYYrvIELrnbRuiM/k04 8uwZ1PJ1kqcSqrS1GMVwE6p3p024UC4kBTY0k= DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma; h=content-type:mime-version:subject:from:in-reply-to:date :content-transfer-encoding:message-id:references:to:x-mailer; b=Ce7PYI4CXcbCjQAibmdquoXlyGO6+jWOonKWjyFw7b/pbR94IYS/QYbOy2VXnDfIA+ I5DtyyG8xSmgh7ZK9a25yoVXZgVMM3BirMkbIqF99U0zbM6Zl8wYgF+txNGiLbLkjcN3 JAI0nHfRG2+KkMjWx05z9lKzaK1X1eJrMjmWQ= Received: by 10.204.61.74 with SMTP id s10mr3623835bkh.91.1292245407604; Mon, 13 Dec 2010 05:03:27 -0800 (PST) Received: from bespin.kosmos.all (ip-95-223-170-32.unitymediagroup.de [95.223.170.32]) by mx.google.com with ESMTPS id d27sm55719bkw.14.2010.12.13.05.03.25 (version=SSLv3 cipher=RC4-MD5); Mon, 13 Dec 2010 05:03:26 -0800 (PST) Content-Type: text/plain; charset=iso-8859-1 Mime-Version: 1.0 (Apple Message framework v1081) Subject: Re: [Caml-list] Re: optimize div to right shift (NOT!) From: Benedikt Meurer In-Reply-To: <20101213145806.7a6f9ac0@deb0> Date: Mon, 13 Dec 2010 14:03:24 +0100 Content-Transfer-Encoding: quoted-printable Message-Id: References: <20101212172643.3EF80BC5D@yquem.inria.fr> <20101213145806.7a6f9ac0@deb0> To: caml-list@yquem.inria.fr X-Mailer: Apple Mail (2.1081) X-Spam: no; 0.00; gcc:01 rax:01 rax:01 ocamlopt:01 integers:01 gcc:01 pointers:01 edwin:98 $3,:98 wrote:01 caml-list:01 unsigned:02 div:97 optimization:03 benedikt:03 On Dec 13, 2010, at 13:58 , T=F6r=F6k Edwin wrote: > It is still possible to avoid the division, gcc generates this: > movq %rdi, %rax > shrq $63, %rax > addq %rdi, %rax > sarq %rax >=20 > Or a better example with division by 8: > leaq 7(%rdi), %rax > testq %rdi, %rdi > cmovns %rdi, %rax > sarq $3, %rax ocamlopt does exactly this, atleast for x86-64. > And division by non-power of two integers can optimized by replacing = it > with multiplication with its inverse (which gcc and llvm don't do for > signed divisions, only for unsigned ones): > http://www.hackersdelight.org/HDcode/magic.c.txt > http://www.hackersdelight.org/HDcode/magicu.c.txt The AMD64 optimization guide gives additional pointers here, i.e. it = also lists replacement sequences for multiplication by constant. > Best regards, > --Edwin greets, Benedikt=